diff --git a/libmachine/provision/arch.go b/libmachine/provision/arch.go index 86dc90cd74af3891cac264ba6d10b2ff39f16add..d9e216bbbbdc3ea252fc617d19a3da3f558a13b5 100644 --- a/libmachine/provision/arch.go +++ b/libmachine/provision/arch.go @@ -133,7 +133,9 @@ func (provisioner *ArchProvisioner) Provision(swarmOptions swarm.Options, authOp return err } - provisioner.AuthOptions = setRemoteAuthOptions(provisioner) + if err := setupRemoteAuthOptions(provisioner); err != nil { + return err + } log.Debug("Configuring auth") if err := ConfigureAuth(provisioner); err != nil { diff --git a/libmachine/provision/boot2docker.go b/libmachine/provision/boot2docker.go index ebe3b523ada36a4cec3848e0fbd78dfc7d0079ce..cba61c5852b3cd5bd064e5c7a424d9f3e4dee194 100644 --- a/libmachine/provision/boot2docker.go +++ b/libmachine/provision/boot2docker.go @@ -128,6 +128,10 @@ func (provisioner *Boot2DockerProvisioner) GetAuthOptions() auth.Options { return provisioner.AuthOptions } +func (provisioner *Boot2DockerProvisioner) SetAuthOptions(opts auth.Options) { + provisioner.AuthOptions = opts +} + func (provisioner *Boot2DockerProvisioner) GetSwarmOptions() swarm.Options { return provisioner.SwarmOptions } @@ -245,12 +249,10 @@ func (provisioner *Boot2DockerProvisioner) Provision(swarmOptions swarm.Options, return err } - if err = makeDockerOptionsDir(provisioner); err != nil { + if err := setupRemoteAuthOptions(provisioner); err != nil { return err } - provisioner.AuthOptions = setRemoteAuthOptions(provisioner) - if err = ConfigureAuth(provisioner); err != nil { return err } diff --git a/libmachine/provision/coreos.go b/libmachine/provision/coreos.go index dd1f0eb06013a8443b2ef4387acceade65400902..efa7e198d1b5f6c6a67d9b7936ae00b4a4e86125 100644 --- a/libmachine/provision/coreos.go +++ b/libmachine/provision/coreos.go @@ -118,13 +118,10 @@ func (provisioner *CoreOSProvisioner) Provision(swarmOptions swarm.Options, auth return err } - if err := makeDockerOptionsDir(provisioner); err != nil { + if err := setupRemoteAuthOptions(provisioner); err != nil { return err } - log.Debugf("Preparing certificates") - provisioner.AuthOptions = setRemoteAuthOptions(provisioner) - log.Debugf("Setting up certificates") if err := ConfigureAuth(provisioner); err != nil { return err diff --git a/libmachine/provision/debian.go b/libmachine/provision/debian.go index ce8bcc5e17635115493e8755e4daf48b7197e658..daa6cb62271899334b3637a665e5de9be353e581 100644 --- a/libmachine/provision/debian.go +++ b/libmachine/provision/debian.go @@ -120,7 +120,9 @@ func (provisioner *DebianProvisioner) Provision(swarmOptions swarm.Options, auth return err } - provisioner.AuthOptions = setRemoteAuthOptions(provisioner) + if err := setupRemoteAuthOptions(provisioner); err != nil { + return err + } log.Debug("configuring auth") if err := ConfigureAuth(provisioner); err != nil { diff --git a/libmachine/provision/fake_provisioner.go b/libmachine/provision/fake_provisioner.go index 7d4caaed9a43369eb3e70c7e4cb34d5cdf4a689f..1db64629fd6a422a73903e1f702cb767ccd061d3 100644 --- a/libmachine/provision/fake_provisioner.go +++ b/libmachine/provision/fake_provisioner.go @@ -43,6 +43,8 @@ func (fp *FakeProvisioner) GetAuthOptions() auth.Options { return auth.Options{} } +func (fp *FakeProvisioner) SetAuthOptions(opts auth.Options) {} + func (fp *FakeProvisioner) GetSwarmOptions() swarm.Options { return swarm.Options{} } diff --git a/libmachine/provision/generic.go b/libmachine/provision/generic.go index 24ad1b559991dd32d346a5f18d503cd1af87fef2..a060a143179dcf9ffe69f18be595f0eedaf18f8f 100644 --- a/libmachine/provision/generic.go +++ b/libmachine/provision/generic.go @@ -64,6 +64,10 @@ func (provisioner *GenericProvisioner) SetHostname(hostname string) error { return nil } +func (provisioner *GenericProvisioner) SetAuthOptions(opts auth.Options) { + provisioner.AuthOptions = opts +} + func (provisioner *GenericProvisioner) GetDockerOptionsDir() string { return provisioner.DockerOptionsDir } diff --git a/libmachine/provision/google_cos.go b/libmachine/provision/google_cos.go index f0620f8886937ee84c235806595a00d46701a202..8cfbfabe5371c27e3c90fdbb0e91c739f3eaaace 100644 --- a/libmachine/provision/google_cos.go +++ b/libmachine/provision/google_cos.go @@ -89,8 +89,9 @@ func (p *GoogleCOSProvisioner) Provision(swarmOptions swarm.Options, authOptions return err } - log.Debugf("Preparing remote auth options") - p.AuthOptions = setRemoteAuthOptions(p) + if err := setupRemoteAuthOptions(p); err != nil { + return err + } log.Debug("Configuring auth") err = ConfigureAuth(p) diff --git a/libmachine/provision/provisioner.go b/libmachine/provision/provisioner.go index 81fc1ebedfb410471b173a9526df1b1d47f23f6c..a416e8515921d981c15ca1596ce4859993c1898c 100644 --- a/libmachine/provision/provisioner.go +++ b/libmachine/provision/provisioner.go @@ -50,6 +50,9 @@ type Provisioner interface { // Return the auth options used to configure remote connection for the daemon. GetAuthOptions() auth.Options + // Set auth options used to configure remote connection for the daemon. + SetAuthOptions(opts auth.Options) + // Get the swarm options associated with this host. GetSwarmOptions() swarm.Options diff --git a/libmachine/provision/rancheros.go b/libmachine/provision/rancheros.go index a980b2bb79a74f0e65a81c78c71317b9bc556e92..2bc6bef5e34fc7e599e96d77e0ed26d7c60ff0a5 100644 --- a/libmachine/provision/rancheros.go +++ b/libmachine/provision/rancheros.go @@ -127,8 +127,9 @@ func (provisioner *RancherProvisioner) Provision(swarmOptions swarm.Options, aut } } - log.Debugf("Preparing certificates") - provisioner.AuthOptions = setRemoteAuthOptions(provisioner) + if err := setupRemoteAuthOptions(provisioner); err != nil { + return err + } log.Debugf("Setting up certificates") if err := ConfigureAuth(provisioner); err != nil { diff --git a/libmachine/provision/redhat.go b/libmachine/provision/redhat.go index 385bfde4f16d90288378ec4ede7f1f667e554eca..768165fd877731d238b11dda01bcf8cde113438d 100644 --- a/libmachine/provision/redhat.go +++ b/libmachine/provision/redhat.go @@ -165,12 +165,10 @@ func (provisioner *RedHatProvisioner) Provision(swarmOptions swarm.Options, auth return err } - if err := makeDockerOptionsDir(provisioner); err != nil { + if err := setupRemoteAuthOptions(provisioner); err != nil { return err } - provisioner.AuthOptions = setRemoteAuthOptions(provisioner) - if err := ConfigureAuth(provisioner); err != nil { return err } diff --git a/libmachine/provision/suse.go b/libmachine/provision/suse.go index 647a4e04947892e04f9c618d28f9a8719370363a..6586c6ddfa652a6f383fe89c1bdedf9e45f358f2 100644 --- a/libmachine/provision/suse.go +++ b/libmachine/provision/suse.go @@ -176,7 +176,9 @@ func (provisioner *SUSEProvisioner) Provision(swarmOptions swarm.Options, authOp return err } - provisioner.AuthOptions = setRemoteAuthOptions(provisioner) + if err := setupRemoteAuthOptions(provisioner); err != nil { + return err + } log.Debug("Configuring auth") if err := ConfigureAuth(provisioner); err != nil { diff --git a/libmachine/provision/ubuntu_systemd.go b/libmachine/provision/ubuntu_systemd.go index 21afa94998a12631f4ace9c5416786c39d8f23e5..900b9c0731aa569ac8b580611789bd29452c3ef3 100644 --- a/libmachine/provision/ubuntu_systemd.go +++ b/libmachine/provision/ubuntu_systemd.go @@ -130,7 +130,9 @@ func (provisioner *UbuntuSystemdProvisioner) Provision(swarmOptions swarm.Option return err } - provisioner.AuthOptions = setRemoteAuthOptions(provisioner) + if err := setupRemoteAuthOptions(provisioner); err != nil { + return err + } log.Debug("configuring auth") if err := ConfigureAuth(provisioner); err != nil { diff --git a/libmachine/provision/ubuntu_upstart.go b/libmachine/provision/ubuntu_upstart.go index 7f62ab2328640615c5ab19b3ee78d4b33acdf945..bea41d4d3b7c5d354b3f880a3d7f53c3da9cd766 100644 --- a/libmachine/provision/ubuntu_upstart.go +++ b/libmachine/provision/ubuntu_upstart.go @@ -143,12 +143,10 @@ func (provisioner *UbuntuProvisioner) Provision(swarmOptions swarm.Options, auth return err } - if err := makeDockerOptionsDir(provisioner); err != nil { + if err := setupRemoteAuthOptions(provisioner); err != nil { return err } - provisioner.AuthOptions = setRemoteAuthOptions(provisioner) - if err := ConfigureAuth(provisioner); err != nil { return err } diff --git a/libmachine/provision/utils.go b/libmachine/provision/utils.go index 0e211b8f07fe08780dc3ed5c325ebba8978c4c7c..f40820430ef2a64173ad37fa4d7d643f84e11212 100644 --- a/libmachine/provision/utils.go +++ b/libmachine/provision/utils.go @@ -34,7 +34,20 @@ func installDockerGeneric(p Provisioner, baseURL string) error { return nil } +func setupRemoteAuthOptions(p Provisioner) error { + err := makeDockerOptionsDir(p) + if err != nil { + return fmt.Errorf("(re)creating /etc/docker directory: %v", err) + } + + p.SetAuthOptions(setRemoteAuthOptions(p)) + + return nil +} + func makeDockerOptionsDir(p Provisioner) error { + log.Debugf("(Re)creating /etc/docker if needed") + dockerDir := p.GetDockerOptionsDir() if _, err := p.SSHCommand(fmt.Sprintf("sudo mkdir -p %s", dockerDir)); err != nil { return err @@ -44,6 +57,8 @@ func makeDockerOptionsDir(p Provisioner) error { } func setRemoteAuthOptions(p Provisioner) auth.Options { + log.Debugf("Preparing certificates") + dockerDir := p.GetDockerOptionsDir() authOptions := p.GetAuthOptions()