Add docker-machine provision command
Signed-off-by: Nathan LeClaire <nathan.leclaire@gmail.com>
This commit is contained in:
@@ -192,3 +192,12 @@ func (h *Host) ConfigureAuth() error {
|
||||
// Call provision to re-provision the certs properly.
|
||||
return provisioner.Provision(swarm.Options{}, *h.HostOptions.AuthOptions, *h.HostOptions.EngineOptions)
|
||||
}
|
||||
|
||||
func (h *Host) Provision() error {
|
||||
provisioner, err := provision.DetectProvisioner(h.Driver)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return provisioner.Provision(*h.HostOptions.SwarmOptions, *h.HostOptions.AuthOptions, *h.HostOptions.EngineOptions)
|
||||
}
|
||||
|
||||
@@ -12,13 +12,26 @@ import (
|
||||
"github.com/docker/machine/libmachine/swarm"
|
||||
)
|
||||
|
||||
var provisioners = make(map[string]*RegisteredProvisioner)
|
||||
var (
|
||||
provisioners = make(map[string]*RegisteredProvisioner)
|
||||
detector Detector = &StandardDetector{}
|
||||
)
|
||||
|
||||
type SSHCommander interface {
|
||||
// Short-hand for accessing an SSH command from the driver.
|
||||
SSHCommand(args string) (string, error)
|
||||
}
|
||||
|
||||
type Detector interface {
|
||||
DetectProvisioner(d drivers.Driver) (Provisioner, error)
|
||||
}
|
||||
|
||||
type StandardDetector struct{}
|
||||
|
||||
func SetDetector(newDetector Detector) {
|
||||
detector = newDetector
|
||||
}
|
||||
|
||||
// Provisioner defines distribution specific actions
|
||||
type Provisioner interface {
|
||||
fmt.Stringer
|
||||
@@ -77,6 +90,10 @@ func Register(name string, p *RegisteredProvisioner) {
|
||||
}
|
||||
|
||||
func DetectProvisioner(d drivers.Driver) (Provisioner, error) {
|
||||
return detector.DetectProvisioner(d)
|
||||
}
|
||||
|
||||
func (detector StandardDetector) DetectProvisioner(d drivers.Driver) (Provisioner, error) {
|
||||
log.Info("Detecting the provisioner...")
|
||||
|
||||
osReleaseOut, err := drivers.RunSSHCommandFromDriver(d, "cat /etc/os-release")
|
||||
|
||||
79
libmachine/provision/provisiontest/fake_provisioner.go
Normal file
79
libmachine/provision/provisiontest/fake_provisioner.go
Normal file
@@ -0,0 +1,79 @@
|
||||
package provisiontest
|
||||
|
||||
import (
|
||||
"github.com/docker/machine/libmachine/auth"
|
||||
"github.com/docker/machine/libmachine/drivers"
|
||||
"github.com/docker/machine/libmachine/engine"
|
||||
"github.com/docker/machine/libmachine/provision"
|
||||
"github.com/docker/machine/libmachine/provision/pkgaction"
|
||||
"github.com/docker/machine/libmachine/provision/serviceaction"
|
||||
"github.com/docker/machine/libmachine/swarm"
|
||||
)
|
||||
|
||||
type FakeDetector struct {
|
||||
provision.Provisioner
|
||||
}
|
||||
|
||||
func (fd *FakeDetector) DetectProvisioner(d drivers.Driver) (provision.Provisioner, error) {
|
||||
return fd.Provisioner, nil
|
||||
}
|
||||
|
||||
type FakeProvisioner struct{}
|
||||
|
||||
func NewFakeProvisioner(d drivers.Driver) provision.Provisioner {
|
||||
return &FakeProvisioner{}
|
||||
}
|
||||
|
||||
func (fp *FakeProvisioner) SSHCommand(args string) (string, error) {
|
||||
return "", nil
|
||||
}
|
||||
|
||||
func (fp *FakeProvisioner) String() string {
|
||||
return "fakeprovisioner"
|
||||
}
|
||||
|
||||
func (fp *FakeProvisioner) GenerateDockerOptions(dockerPort int) (*provision.DockerOptions, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (fp *FakeProvisioner) GetDockerOptionsDir() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (fp *FakeProvisioner) GetAuthOptions() auth.Options {
|
||||
return auth.Options{}
|
||||
}
|
||||
|
||||
func (fp *FakeProvisioner) Package(name string, action pkgaction.PackageAction) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (fp *FakeProvisioner) Hostname() (string, error) {
|
||||
return "", nil
|
||||
}
|
||||
|
||||
func (fp *FakeProvisioner) SetHostname(hostname string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (fp *FakeProvisioner) CompatibleWithHost() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (fp *FakeProvisioner) Provision(swarmOptions swarm.Options, authOptions auth.Options, engineOptions engine.Options) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (fp *FakeProvisioner) Service(name string, action serviceaction.ServiceAction) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (fp *FakeProvisioner) GetDriver() drivers.Driver {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (fp *FakeProvisioner) SetOsReleaseInfo(info *provision.OsRelease) {}
|
||||
|
||||
func (fp *FakeProvisioner) GetOsReleaseInfo() (*provision.OsRelease, error) {
|
||||
return nil, nil
|
||||
}
|
||||
Reference in New Issue
Block a user