Add docker-machine provision command

Signed-off-by: Nathan LeClaire <nathan.leclaire@gmail.com>
This commit is contained in:
Nathan LeClaire
2015-10-29 10:42:10 -07:00
parent 248596da8a
commit 01c7556e3a
7 changed files with 224 additions and 1 deletions

View File

@@ -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)
}

View File

@@ -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")

View 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
}