func saveHost(store persist.Store, h *host.Host) error { if err := store.Save(h); err != nil { return fmt.Errorf("Error attempting to save host to store: %s", err) } return nil }
func getInfoForScpArg(hostAndPath string, store persist.Store) (*host.Host, string, []string, error) { // TODO: What to do about colon in filepath? splitInfo := strings.Split(hostAndPath, ":") // Host path. e.g. "/tmp/foo" if len(splitInfo) == 1 { return nil, splitInfo[0], nil, nil } // Remote path. e.g. "machinename:/usr/bin/cmatrix" if len(splitInfo) == 2 { path := splitInfo[1] host, err := store.Load(splitInfo[0]) if err != nil { return nil, "", nil, fmt.Errorf("Error loading host: %s", err) } args := []string{ "-i", host.Driver.GetSSHKeyPath(), } return host, path, args, nil } return nil, "", nil, ErrMalformedInput }
// Create is the wrapper method which covers all of the boilerplate around // actually creating, provisioning, and persisting an instance in the store. func create(store persist.Store, h *host.Host, callback func(*host.Host)) error { if err := cert.BootstrapCertificates(h.HostOptions.AuthOptions); err != nil { return fmt.Errorf("Error generating certificates: %s", err) } log.Info("Running pre-create checks...") if err := h.Driver.PreCreateCheck(); err != nil { return fmt.Errorf("Error with pre-create check: %s", err) } if err := store.Save(h); err != nil { return fmt.Errorf("Error saving host to store before attempting creation: %s", err) } log.Info("Creating machine...") if err := h.Driver.Create(); err != nil { return fmt.Errorf("Error in driver during machine creation: %s", err) } if err := store.Save(h); err != nil { return fmt.Errorf("Error saving host to store after attempting creation: %s", err) } // TODO: Not really a fan of just checking "none" here. if h.Driver.DriverName() != "none" { log.Info("Waiting for machine to be running, this may take a few minutes...") if err := mcnutils.WaitFor(drivers.MachineInState(h.Driver, state.Running)); err != nil { return fmt.Errorf("Error waiting for machine to be running: %s", err) } log.Info("Machine is running, waiting for SSH to be available...") if err := drivers.WaitForSSH(h.Driver); err != nil { return fmt.Errorf("Error waiting for SSH: %s", err) } log.Info("Detecting operating system of created instance...") provisioner, err := provision.DetectProvisioner(h.Driver) if err != nil { return fmt.Errorf("Error detecting OS: %s", err) } callback(h) log.Info("Provisioning created instance...") if err := provisioner.Provision(*h.HostOptions.SwarmOptions, *h.HostOptions.AuthOptions, *h.HostOptions.EngineOptions); err != nil { return fmt.Errorf("Error running provisioning: %s", err) } } log.Debug("Reticulating splines...") return nil }
func loadHost(store persist.Store, hostName string) (*host.Host, error) { h, err := store.Load(hostName) if err != nil { return nil, fmt.Errorf("Loading host from store failed: %s", err) } d, err := newPluginDriver(h.DriverName, h.RawDriver) if err != nil { return nil, fmt.Errorf("Error attempting to invoke binary for plugin: %s", err) } h.Driver = d return h, nil }
func listHosts(store persist.Store, storePath string) ([]*host.Host, error) { cliHosts := []*host.Host{} hosts, err := store.List() if err != nil { return nil, fmt.Errorf("Error attempting to list hosts from store: %s", err) } for _, h := range hosts { h, err = loadHost(store, h.Name, storePath) if err != nil { return nil, err } cliHosts = append(cliHosts, h) } return cliHosts, nil }
func loadHost(store persist.Store, hostName string, storePath string) (*host.Host, error) { h, err := store.Load(hostName) if err != nil { return nil, fmt.Errorf("Loading host from store failed: %s", err) } d, err := driverfactory.NewDriver(h.DriverName, h.Name, storePath) if err != nil { return nil, err } err = json.Unmarshal(h.RawDriver, &d) if err != nil { return nil, err } h.Driver = d return h, nil }
func getActiveHost(store persist.Store) (*host.Host, error) { hosts, err := store.List() if err != nil { return nil, err } hostListItems := getHostListItems(hosts) for _, item := range hostListItems { if item.Active { h, err := store.Load(item.Name) if err != nil { return nil, err } return h, nil } } return nil, errors.New("Active host not found") }
func listHosts(store persist.Store) ([]*host.Host, error) { cliHosts := []*host.Host{} hosts, err := store.List() if err != nil { return nil, fmt.Errorf("Error attempting to list hosts from store: %s", err) } for _, h := range hosts { d, err := newPluginDriver(h.DriverName, h.RawDriver) if err != nil { return nil, fmt.Errorf("Error attempting to invoke binary for plugin '%s': %s", h.DriverName, err) } h.Driver = d cliHosts = append(cliHosts, h) } return cliHosts, nil }