Merge cleanup, remove `license` parameter in favor of bool `accept_license`, adjust how license acceptance is done, update hab provisioner doc.
This commit is contained in:
parent
e3d1876f44
commit
30895a6cf5
|
@ -25,9 +25,6 @@ Environment="HAB_SUP_GATEWAY_AUTH_TOKEN={{ .GatewayAuthToken }}"
|
||||||
{{ if .BuilderAuthToken -}}
|
{{ if .BuilderAuthToken -}}
|
||||||
Environment="HAB_AUTH_TOKEN={{ .BuilderAuthToken }}"
|
Environment="HAB_AUTH_TOKEN={{ .BuilderAuthToken }}"
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
{{ if .License -}}
|
|
||||||
Environment="HAB_LICENSE={{ .License }}"
|
|
||||||
{{ end -}}
|
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=default.target
|
WantedBy=default.target
|
||||||
|
@ -39,18 +36,33 @@ func (p *provisioner) linuxInstallHabitat(o terraform.UIOutput, comm communicato
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run the hab install script
|
// Run the install script
|
||||||
var command string
|
var command string
|
||||||
if p.Version == "" {
|
if p.Version == "" {
|
||||||
command = p.linuxGetCommand(fmt.Sprintf("bash ./install.sh "))
|
command = fmt.Sprintf("bash ./install.sh ")
|
||||||
} else {
|
} else {
|
||||||
command = p.linuxGetCommand(fmt.Sprintf("bash ./install.sh -v %s", p.Version))
|
command = fmt.Sprintf("bash ./install.sh -v %s", p.Version)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := p.runCommand(o, comm, command); err != nil {
|
if err := p.runCommand(o, comm, p.linuxGetCommand(command)); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Accept the license
|
||||||
|
if p.AcceptLicense {
|
||||||
|
var cmd string
|
||||||
|
|
||||||
|
if p.UseSudo == true {
|
||||||
|
cmd = "env HAB_LICENSE=accept sudo -E /bin/bash -c 'hab -V'"
|
||||||
|
} else {
|
||||||
|
cmd = "env HAB_LICENSE=accept /bin/bash -c 'hab -V'"
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := p.runCommand(o, comm, cmd); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Create the hab user
|
// Create the hab user
|
||||||
if err := p.createHabUser(o, comm); err != nil {
|
if err := p.createHabUser(o, comm); err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -165,11 +177,10 @@ func (p *provisioner) linuxStartHabitat(o terraform.UIOutput, comm communicator.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This func is a little different than the others since we need to expose HAB_AUTH_TOKEN and HAB_LICENSE to a shell
|
// This func is a little different than the others since we need to expose HAB_AUTH_TOKEN to a shell
|
||||||
// sub-process that's actually running the supervisor.
|
// sub-process that's actually running the supervisor.
|
||||||
func (p *provisioner) linuxStartHabitatUnmanaged(o terraform.UIOutput, comm communicator.Communicator, options string) error {
|
func (p *provisioner) linuxStartHabitatUnmanaged(o terraform.UIOutput, comm communicator.Communicator, options string) error {
|
||||||
var token string
|
var token string
|
||||||
var license string
|
|
||||||
|
|
||||||
// Create the sup directory for the log file
|
// Create the sup directory for the log file
|
||||||
if err := p.runCommand(o, comm, p.linuxGetCommand("mkdir -p /hab/sup/default && chmod o+w /hab/sup/default")); err != nil {
|
if err := p.runCommand(o, comm, p.linuxGetCommand("mkdir -p /hab/sup/default && chmod o+w /hab/sup/default")); err != nil {
|
||||||
|
@ -178,15 +189,10 @@ func (p *provisioner) linuxStartHabitatUnmanaged(o terraform.UIOutput, comm comm
|
||||||
|
|
||||||
// Set HAB_AUTH_TOKEN if provided
|
// Set HAB_AUTH_TOKEN if provided
|
||||||
if p.BuilderAuthToken != "" {
|
if p.BuilderAuthToken != "" {
|
||||||
token = fmt.Sprintf("HAB_AUTH_TOKEN=%s ", p.BuilderAuthToken)
|
token = fmt.Sprintf("env HAB_AUTH_TOKEN=%s ", p.BuilderAuthToken)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set HAB_LICENSE if provided
|
return p.runCommand(o, comm, p.linuxGetCommand(fmt.Sprintf("(%ssetsid hab sup run%s > /hab/sup/default/sup.log 2>&1 <&1 &) ; sleep 1", token, options)))
|
||||||
if p.License != "" {
|
|
||||||
license = fmt.Sprintf("HAB_LICENSE=%s ", p.License)
|
|
||||||
}
|
|
||||||
|
|
||||||
return p.runCommand(o, comm, p.linuxGetCommand(fmt.Sprintf("(env %s%s setsid hab sup run%s > /hab/sup/default/sup.log 2>&1 <&1 &) ; sleep 1", token, license, options)))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *provisioner) linuxStartHabitatSystemd(o terraform.UIOutput, comm communicator.Communicator, options string) error {
|
func (p *provisioner) linuxStartHabitatSystemd(o terraform.UIOutput, comm communicator.Communicator, options string) error {
|
||||||
|
@ -355,11 +361,6 @@ func (p *provisioner) linuxGetCommand(command string) string {
|
||||||
// Always set HAB_NONINTERACTIVE & HAB_NOCOLORING
|
// Always set HAB_NONINTERACTIVE & HAB_NOCOLORING
|
||||||
env := fmt.Sprintf("env HAB_NONINTERACTIVE=true HAB_NOCOLORING=true")
|
env := fmt.Sprintf("env HAB_NONINTERACTIVE=true HAB_NOCOLORING=true")
|
||||||
|
|
||||||
// Set license acceptance
|
|
||||||
if p.License != "" {
|
|
||||||
env += fmt.Sprintf(" HAB_LICENSE=%s", p.License)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set builder auth token
|
// Set builder auth token
|
||||||
if p.BuilderAuthToken != "" {
|
if p.BuilderAuthToken != "" {
|
||||||
env += fmt.Sprintf(" HAB_AUTH_TOKEN=%s", p.BuilderAuthToken)
|
env += fmt.Sprintf(" HAB_AUTH_TOKEN=%s", p.BuilderAuthToken)
|
||||||
|
|
|
@ -64,18 +64,19 @@ func TestLinuxProvisioner_linuxInstallHabitat(t *testing.T) {
|
||||||
},
|
},
|
||||||
"Installation with Habitat license acceptance": {
|
"Installation with Habitat license acceptance": {
|
||||||
Config: map[string]interface{}{
|
Config: map[string]interface{}{
|
||||||
"version": "0.81.0",
|
"version": "0.81.0",
|
||||||
"license": "accept-no-persist",
|
"accept_license": true,
|
||||||
"auto_update": true,
|
"auto_update": true,
|
||||||
"use_sudo": true,
|
"use_sudo": true,
|
||||||
},
|
},
|
||||||
|
|
||||||
Commands: map[string]bool{
|
Commands: map[string]bool{
|
||||||
"env HAB_NONINTERACTIVE=true HAB_NOCOLORING=true HAB_LICENSE=accept-no-persist sudo -E /bin/bash -c 'curl --silent -L0 https://raw.githubusercontent.com/habitat-sh/habitat/master/components/hab/install.sh > install.sh'": true,
|
"env HAB_NONINTERACTIVE=true HAB_NOCOLORING=true sudo -E /bin/bash -c 'curl --silent -L0 https://raw.githubusercontent.com/habitat-sh/habitat/master/components/hab/install.sh > install.sh'": true,
|
||||||
"env HAB_NONINTERACTIVE=true HAB_NOCOLORING=true HAB_LICENSE=accept-no-persist sudo -E /bin/bash -c 'bash ./install.sh -v 0.81.0'": true,
|
"env HAB_NONINTERACTIVE=true HAB_NOCOLORING=true sudo -E /bin/bash -c 'bash ./install.sh -v 0.81.0'": true,
|
||||||
"env HAB_NONINTERACTIVE=true HAB_NOCOLORING=true HAB_LICENSE=accept-no-persist sudo -E /bin/bash -c 'hab install core/busybox'": true,
|
"env HAB_NONINTERACTIVE=true HAB_NOCOLORING=true sudo -E /bin/bash -c 'hab install core/busybox'": true,
|
||||||
"env HAB_NONINTERACTIVE=true HAB_NOCOLORING=true HAB_LICENSE=accept-no-persist sudo -E /bin/bash -c 'hab pkg exec core/busybox adduser -D -g \"\" hab'": true,
|
"env HAB_NONINTERACTIVE=true HAB_NOCOLORING=true sudo -E /bin/bash -c 'hab pkg exec core/busybox adduser -D -g \"\" hab'": true,
|
||||||
"env HAB_NONINTERACTIVE=true HAB_NOCOLORING=true HAB_LICENSE=accept-no-persist sudo -E /bin/bash -c 'rm -f install.sh'": true,
|
"env HAB_LICENSE=accept sudo -E /bin/bash -c 'hab -V'": true,
|
||||||
|
"env HAB_NONINTERACTIVE=true HAB_NOCOLORING=true sudo -E /bin/bash -c 'rm -f install.sh'": true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -157,9 +158,9 @@ func TestLinuxProvisioner_linuxStartHabitat(t *testing.T) {
|
||||||
},
|
},
|
||||||
|
|
||||||
Commands: map[string]bool{
|
Commands: map[string]bool{
|
||||||
"env HAB_NONINTERACTIVE=true HAB_NOCOLORING=true HAB_LICENSE=accept-no-persist sudo -E /bin/bash -c 'hab install core/hab-sup/0.81.0'": true,
|
"env HAB_NONINTERACTIVE=true HAB_NOCOLORING=true sudo -E /bin/bash -c 'hab install core/hab-sup/0.81.0'": true,
|
||||||
"env HAB_NONINTERACTIVE=true HAB_NOCOLORING=true HAB_LICENSE=accept-no-persist sudo -E /bin/bash -c 'mkdir -p /hab/sup/default && chmod o+w /hab/sup/default'": true,
|
"env HAB_NONINTERACTIVE=true HAB_NOCOLORING=true sudo -E /bin/bash -c 'mkdir -p /hab/sup/default && chmod o+w /hab/sup/default'": true,
|
||||||
"env HAB_NONINTERACTIVE=true HAB_NOCOLORING=true HAB_LICENSE=accept-no-persist sudo -E /bin/bash -c '(env HAB_LICENSE=accept-no-persist setsid hab sup run --peer host1 --peer 1.2.3.4 --auto-update > /hab/sup/default/sup.log 2>&1 <&1 &) ; sleep 1'": true,
|
"env HAB_NONINTERACTIVE=true HAB_NOCOLORING=true sudo -E /bin/bash -c '(setsid hab sup run --peer host1 --peer 1.2.3.4 --auto-update > /hab/sup/default/sup.log 2>&1 <&1 &) ; sleep 1'": true,
|
||||||
},
|
},
|
||||||
|
|
||||||
Uploads: map[string]string{
|
Uploads: map[string]string{
|
||||||
|
|
|
@ -21,7 +21,6 @@ import (
|
||||||
|
|
||||||
type provisioner struct {
|
type provisioner struct {
|
||||||
Version string
|
Version string
|
||||||
License string
|
|
||||||
AutoUpdate bool
|
AutoUpdate bool
|
||||||
HttpDisable bool
|
HttpDisable bool
|
||||||
Services []Service
|
Services []Service
|
||||||
|
@ -47,13 +46,13 @@ type provisioner struct {
|
||||||
SupOptions string
|
SupOptions string
|
||||||
AcceptLicense bool
|
AcceptLicense bool
|
||||||
|
|
||||||
installHabitat provisionFn
|
installHabitat provisionFn
|
||||||
startHabitat provisionFn
|
startHabitat provisionFn
|
||||||
uploadRingKey provisionFn
|
uploadRingKey provisionFn
|
||||||
uploadCtlSecret provisionFn
|
uploadCtlSecret provisionFn
|
||||||
startHabitatService provisionServiceFn
|
startHabitatService provisionServiceFn
|
||||||
|
|
||||||
osType string
|
osType string
|
||||||
}
|
}
|
||||||
|
|
||||||
type provisionFn func(terraform.UIOutput, communicator.Communicator) error
|
type provisionFn func(terraform.UIOutput, communicator.Communicator) error
|
||||||
|
@ -66,10 +65,6 @@ func Provisioner() terraform.ResourceProvisioner {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
},
|
},
|
||||||
"license": &schema.Schema{
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Optional: true,
|
|
||||||
},
|
|
||||||
"auto_update": &schema.Schema{
|
"auto_update": &schema.Schema{
|
||||||
Type: schema.TypeBool,
|
Type: schema.TypeBool,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
|
@ -434,7 +429,6 @@ func (b *Bind) toBindString() string {
|
||||||
func decodeConfig(d *schema.ResourceData) (*provisioner, error) {
|
func decodeConfig(d *schema.ResourceData) (*provisioner, error) {
|
||||||
p := &provisioner{
|
p := &provisioner{
|
||||||
Version: d.Get("version").(string),
|
Version: d.Get("version").(string),
|
||||||
License: d.Get("license").(string),
|
|
||||||
AutoUpdate: d.Get("auto_update").(bool),
|
AutoUpdate: d.Get("auto_update").(bool),
|
||||||
HttpDisable: d.Get("http_disable").(bool),
|
HttpDisable: d.Get("http_disable").(bool),
|
||||||
Peer: d.Get("peer").(string),
|
Peer: d.Get("peer").(string),
|
||||||
|
|
|
@ -19,10 +19,10 @@ func TestProvisioner(t *testing.T) {
|
||||||
|
|
||||||
func TestResourceProvisioner_Validate_good(t *testing.T) {
|
func TestResourceProvisioner_Validate_good(t *testing.T) {
|
||||||
c := testConfig(t, map[string]interface{}{
|
c := testConfig(t, map[string]interface{}{
|
||||||
"peers": []interface{}{"1.2.3.4"},
|
"peers": []interface{}{"1.2.3.4"},
|
||||||
"version": "0.32.0",
|
"version": "0.32.0",
|
||||||
"service_type": "systemd",
|
"service_type": "systemd",
|
||||||
"accept_license": false,
|
"accept_license": false,
|
||||||
})
|
})
|
||||||
|
|
||||||
warn, errs := Provisioner().Validate(c)
|
warn, errs := Provisioner().Validate(c)
|
||||||
|
@ -68,7 +68,7 @@ func TestResourceProvisioner_Validate_bad_service_config(t *testing.T) {
|
||||||
t.Fatalf("Warnings: %v", warn)
|
t.Fatalf("Warnings: %v", warn)
|
||||||
}
|
}
|
||||||
if len(errs) != 3 {
|
if len(errs) != 3 {
|
||||||
t.Fatalf("Should have three errors, got %d", len(errs))
|
t.Fatalf("Should have three errors, got %d", len(errs))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,8 +81,8 @@ func TestResourceProvisioner_Validate_bad_service_definition(t *testing.T) {
|
||||||
if len(warn) > 0 {
|
if len(warn) > 0 {
|
||||||
t.Fatalf("Warnings: %v", warn)
|
t.Fatalf("Warnings: %v", warn)
|
||||||
}
|
}
|
||||||
if len(errs) != 2 {
|
if len(errs) != 3 {
|
||||||
t.Fatalf("Should have three errors, got %d", len(errs))
|
t.Fatalf("Should have three errors, got %d", len(errs))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,6 @@ There are 2 configuration levels, `supervisor` and `service`. Configuration pla
|
||||||
### Supervisor Arguments
|
### Supervisor Arguments
|
||||||
* `accept_license (bool)` - (Required) Set to true to accept [Habitat end user license agreement](https://www.chef.io/end-user-license-agreement/)
|
* `accept_license (bool)` - (Required) Set to true to accept [Habitat end user license agreement](https://www.chef.io/end-user-license-agreement/)
|
||||||
* `version (string)` - (Optional) The Habitat version to install on the remote machine. If not specified, the latest available version is used.
|
* `version (string)` - (Optional) The Habitat version to install on the remote machine. If not specified, the latest available version is used.
|
||||||
* `license (string)` - (Optional) Sets the acceptance of Chef licensing (one of `accept-no-persist` or `accept`): https://www.chef.io/end-user-license-agreement/
|
|
||||||
* `auto_update (bool)` - (Optional) If set to `true`, the supervisor will auto-update itself as soon as new releases are available on the specified `channel`.
|
* `auto_update (bool)` - (Optional) If set to `true`, the supervisor will auto-update itself as soon as new releases are available on the specified `channel`.
|
||||||
* `http_disable (bool)` - (Optional) If set to `true`, disables the supervisor HTTP listener entirely.
|
* `http_disable (bool)` - (Optional) If set to `true`, disables the supervisor HTTP listener entirely.
|
||||||
* `peer (string)` - (Optional, deprecated) IP addresses or FQDN's for other Habitat supervisors to peer with, like: `--peer 1.2.3.4 --peer 5.6.7.8`. (Defaults to none)
|
* `peer (string)` - (Optional, deprecated) IP addresses or FQDN's for other Habitat supervisors to peer with, like: `--peer 1.2.3.4 --peer 5.6.7.8`. (Defaults to none)
|
||||||
|
@ -90,7 +89,7 @@ bind {
|
||||||
```
|
```
|
||||||
* `topology (string)` - (Optional) Topology to start service in. Possible values `standalone` or `leader`. (Defaults to `standalone`)
|
* `topology (string)` - (Optional) Topology to start service in. Possible values `standalone` or `leader`. (Defaults to `standalone`)
|
||||||
* `strategy (string)` - (Optional) Update strategy to use. Possible values `at-once`, `rolling` or `none`. (Defaults to `none`)
|
* `strategy (string)` - (Optional) Update strategy to use. Possible values `at-once`, `rolling` or `none`. (Defaults to `none`)
|
||||||
* `user_toml (string)` - (Optional) TOML formatted user configuration for the service. Easiest to source from a file (eg `user_toml = "${file("conf/redis.toml")}")`. (Defaults to none)
|
* `user_toml (string)` - (Optional) TOML formatted user configuration for the service. Easiest to source from a file (eg `user_toml = "${file("conf/redis.toml")}"`). (Defaults to none)
|
||||||
* `channel (string)` - (Optional) The release channel in the Builder service to use. (Defaults to `stable`)
|
* `channel (string)` - (Optional) The release channel in the Builder service to use. (Defaults to `stable`)
|
||||||
* `group (string)` - (Optional) The service group to join. (Defaults to `default`)
|
* `group (string)` - (Optional) The service group to join. (Defaults to `default`)
|
||||||
* `url (string)` - (Optional) The URL of a Builder service to download packages and receive updates from. (Defaults to https://bldr.habitat.sh)
|
* `url (string)` - (Optional) The URL of a Builder service to download packages and receive updates from. (Defaults to https://bldr.habitat.sh)
|
||||||
|
|
Loading…
Reference in New Issue