2edbdfc8be
The e2e framework instantiates clients for Nomad/Consul but the provisioning of the actual Nomad cluster is left to Terraform. The Terraform provisioning process uses `remote-exec` to deploy specific versions of Nomad so that we don't have to bake an AMI every time we want to test a new version. But Terraform treats the resulting instances as immutable, so we can't use the same tooling to update the version of Nomad in-place. This is a prerequisite for upgrade testing. This changeset extends the e2e framework to provide the option of deploying Nomad (and, in the future, Consul/Vault) with specific versions to running infrastructure. This initial implementation is focused on deploying to a single cluster via `ssh` (because that's our current need), but provides interfaces to hook the test run at the start of the run, the start of each suite, or the start of a given test case. Terraform work includes: * provides Terraform output that written to JSON used by the framework to configure provisioning via `terraform output provisioning`. * provides Terraform output that can be used by test operators to configure their shell via `$(terraform output environment)` * drops `remote-exec` provisioning steps from Terraform * makes changes to the deployment scripts to ensure they can be run multiple times w/ different versions against the same host.
54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
package provisioning
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
)
|
|
|
|
// ProvisionerConfigVagrant targets a single-node Vagrant environment.
|
|
func ProvisionerConfigVagrant(config ProvisionerConfig) *ProvisioningTargets {
|
|
|
|
if config.NomadVersion == "" && config.NomadSha == "" && config.NomadLocalBinary == "" {
|
|
log.Fatal("cannot run vagrant provisioning without a '-nomad.*' flag set")
|
|
return nil
|
|
}
|
|
|
|
// TODO(tgross): need a better way to get the right root path, rather
|
|
// than relying on running at the root of the Nomad source directory.
|
|
keyPath := fmt.Sprintf(
|
|
"./.vagrant/machines/%s/virtualbox/private_key", config.VagrantBox)
|
|
|
|
return &ProvisioningTargets{
|
|
Servers: []*ProvisioningTarget{
|
|
{
|
|
Runner: map[string]interface{}{}, // unused
|
|
runner: &SSHRunner{
|
|
Key: keyPath,
|
|
User: "vagrant",
|
|
Host: "127.0.0.1",
|
|
Port: 2222,
|
|
},
|
|
Deployment: Deployment{
|
|
NomadLocalBinary: config.NomadLocalBinary,
|
|
NomadSha: config.NomadSha,
|
|
NomadVersion: config.NomadVersion,
|
|
RemoteBinaryPath: "/opt/gopath/bin/nomad",
|
|
Platform: "linux_amd64",
|
|
Bundles: []Bundle{
|
|
// TODO(tgross): we need a shared vagrant config
|
|
// and service file for this to work.
|
|
{
|
|
Source: "./config.hcl",
|
|
Destination: "/home/vagrant/config.hcl",
|
|
},
|
|
},
|
|
Steps: []string{
|
|
"sudo systemctl restart consul",
|
|
"sudo systemctl restart nomad",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
}
|