diff --git a/builtin/provisioners/habitat/linux_provisioner.go b/builtin/provisioners/habitat/linux_provisioner.go index 259abd80ad..e5e82f6296 100644 --- a/builtin/provisioners/habitat/linux_provisioner.go +++ b/builtin/provisioners/habitat/linux_provisioner.go @@ -25,9 +25,6 @@ Environment="HAB_SUP_GATEWAY_AUTH_TOKEN={{ .GatewayAuthToken }}" {{ if .BuilderAuthToken -}} Environment="HAB_AUTH_TOKEN={{ .BuilderAuthToken }}" {{ end -}} -{{ if .License -}} -Environment="HAB_LICENSE={{ .License }}" -{{ end -}} [Install] WantedBy=default.target @@ -39,18 +36,33 @@ func (p *provisioner) linuxInstallHabitat(o terraform.UIOutput, comm communicato return err } - // Run the hab install script + // Run the install script var command string if p.Version == "" { - command = p.linuxGetCommand(fmt.Sprintf("bash ./install.sh ")) + command = fmt.Sprintf("bash ./install.sh ") } 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 } + // 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 if err := p.createHabUser(o, comm); err != nil { 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. func (p *provisioner) linuxStartHabitatUnmanaged(o terraform.UIOutput, comm communicator.Communicator, options string) error { var token string - var license string // 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 { @@ -178,15 +189,10 @@ func (p *provisioner) linuxStartHabitatUnmanaged(o terraform.UIOutput, comm comm // Set HAB_AUTH_TOKEN if provided 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 - 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))) + 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))) } 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 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 if p.BuilderAuthToken != "" { env += fmt.Sprintf(" HAB_AUTH_TOKEN=%s", p.BuilderAuthToken) diff --git a/builtin/provisioners/habitat/linux_provisioner_test.go b/builtin/provisioners/habitat/linux_provisioner_test.go index 803557437c..5ef5322d03 100644 --- a/builtin/provisioners/habitat/linux_provisioner_test.go +++ b/builtin/provisioners/habitat/linux_provisioner_test.go @@ -64,18 +64,19 @@ func TestLinuxProvisioner_linuxInstallHabitat(t *testing.T) { }, "Installation with Habitat license acceptance": { Config: map[string]interface{}{ - "version": "0.81.0", - "license": "accept-no-persist", - "auto_update": true, - "use_sudo": true, + "version": "0.81.0", + "accept_license": true, + "auto_update": true, + "use_sudo": true, }, 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 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 HAB_LICENSE=accept-no-persist 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 HAB_LICENSE=accept-no-persist sudo -E /bin/bash -c 'rm -f 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 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 'hab install core/busybox'": 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_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{ - "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 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 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 'hab install core/hab-sup/0.81.0'": 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 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{ diff --git a/builtin/provisioners/habitat/resource_provisioner.go b/builtin/provisioners/habitat/resource_provisioner.go index 59cbd3082a..87534a6f66 100644 --- a/builtin/provisioners/habitat/resource_provisioner.go +++ b/builtin/provisioners/habitat/resource_provisioner.go @@ -21,7 +21,6 @@ import ( type provisioner struct { Version string - License string AutoUpdate bool HttpDisable bool Services []Service @@ -47,13 +46,13 @@ type provisioner struct { SupOptions string AcceptLicense bool - installHabitat provisionFn - startHabitat provisionFn - uploadRingKey provisionFn - uploadCtlSecret provisionFn - startHabitatService provisionServiceFn + installHabitat provisionFn + startHabitat provisionFn + uploadRingKey provisionFn + uploadCtlSecret provisionFn + startHabitatService provisionServiceFn - osType string + osType string } type provisionFn func(terraform.UIOutput, communicator.Communicator) error @@ -66,10 +65,6 @@ func Provisioner() terraform.ResourceProvisioner { Type: schema.TypeString, Optional: true, }, - "license": &schema.Schema{ - Type: schema.TypeString, - Optional: true, - }, "auto_update": &schema.Schema{ Type: schema.TypeBool, Optional: true, @@ -434,7 +429,6 @@ func (b *Bind) toBindString() string { func decodeConfig(d *schema.ResourceData) (*provisioner, error) { p := &provisioner{ Version: d.Get("version").(string), - License: d.Get("license").(string), AutoUpdate: d.Get("auto_update").(bool), HttpDisable: d.Get("http_disable").(bool), Peer: d.Get("peer").(string), diff --git a/builtin/provisioners/habitat/resource_provisioner_test.go b/builtin/provisioners/habitat/resource_provisioner_test.go index f11eb14c61..054aa9c19d 100644 --- a/builtin/provisioners/habitat/resource_provisioner_test.go +++ b/builtin/provisioners/habitat/resource_provisioner_test.go @@ -19,10 +19,10 @@ func TestProvisioner(t *testing.T) { func TestResourceProvisioner_Validate_good(t *testing.T) { c := testConfig(t, map[string]interface{}{ - "peers": []interface{}{"1.2.3.4"}, - "version": "0.32.0", - "service_type": "systemd", - "accept_license": false, + "peers": []interface{}{"1.2.3.4"}, + "version": "0.32.0", + "service_type": "systemd", + "accept_license": false, }) warn, errs := Provisioner().Validate(c) @@ -68,7 +68,7 @@ func TestResourceProvisioner_Validate_bad_service_config(t *testing.T) { t.Fatalf("Warnings: %v", warn) } 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 { t.Fatalf("Warnings: %v", warn) } - if len(errs) != 2 { - t.Fatalf("Should have three errors, got %d", len(errs)) + if len(errs) != 3 { + t.Fatalf("Should have three errors, got %d", len(errs)) } } diff --git a/website/docs/provisioners/habitat.html.markdown b/website/docs/provisioners/habitat.html.markdown index 591b689028..2c2da61466 100644 --- a/website/docs/provisioners/habitat.html.markdown +++ b/website/docs/provisioners/habitat.html.markdown @@ -54,7 +54,6 @@ There are 2 configuration levels, `supervisor` and `service`. Configuration pla ### Supervisor Arguments * `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. -* `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`. * `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) @@ -90,7 +89,7 @@ bind { ``` * `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`) -* `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`) * `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)