mirror of https://github.com/docker/docs.git
94 lines
1.8 KiB
Go
94 lines
1.8 KiB
Go
package libmachine
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/docker/machine/drivers"
|
|
"github.com/docker/machine/utils"
|
|
)
|
|
|
|
type Provider struct {
|
|
store Store
|
|
}
|
|
|
|
func New(store Store) (*Provider, error) {
|
|
return &Provider{
|
|
store: store,
|
|
}, nil
|
|
}
|
|
|
|
func (provider *Provider) Create(name string, driverName string, hostOptions *HostOptions, driverConfig drivers.DriverOptions) (*Host, error) {
|
|
validName := ValidateHostName(name)
|
|
if !validName {
|
|
return nil, ErrInvalidHostname
|
|
}
|
|
exists, err := provider.store.Exists(name)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if exists {
|
|
return nil, fmt.Errorf("Machine %s already exists", name)
|
|
}
|
|
|
|
hostPath := filepath.Join(utils.GetMachineDir(), name)
|
|
|
|
host, err := NewHost(name, driverName, hostOptions)
|
|
if err != nil {
|
|
return host, err
|
|
}
|
|
if driverConfig != nil {
|
|
if err := host.Driver.SetConfigFromFlags(driverConfig); err != nil {
|
|
return host, err
|
|
}
|
|
}
|
|
|
|
if err := host.Driver.PreCreateCheck(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err := os.MkdirAll(hostPath, 0700); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err := host.SaveConfig(); err != nil {
|
|
return host, err
|
|
}
|
|
|
|
if err := host.Create(name); err != nil {
|
|
return host, err
|
|
}
|
|
|
|
return host, nil
|
|
}
|
|
|
|
func (provider *Provider) Exists(name string) (bool, error) {
|
|
return provider.store.Exists(name)
|
|
}
|
|
|
|
func (provider *Provider) GetActive() (*Host, error) {
|
|
return provider.store.GetActive()
|
|
}
|
|
|
|
func (provider *Provider) List() ([]*Host, error) {
|
|
return provider.store.List()
|
|
}
|
|
|
|
func (provider *Provider) Get(name string) (*Host, error) {
|
|
return provider.store.Get(name)
|
|
}
|
|
|
|
func (provider *Provider) Remove(name string, force bool) error {
|
|
host, err := provider.store.Get(name)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if err := host.Remove(force); err != nil {
|
|
if !force {
|
|
return err
|
|
}
|
|
}
|
|
return provider.store.Remove(name, force)
|
|
}
|