func (d *Driver) waitForInstance() error { if err := mcnutils.WaitForSpecificOrError(d.instanceIsRunning, 120, 3*time.Second); err != nil { return err } return nil }
func (d *Driver) Create() error { log.Debugf("Creating a new Instance for Stack: %s", d.MachineName) if d.SSHKeyPath != "" { log.Debugf("Copying Key to Machine Directory: %s", d.GetSSHKeyPath) if err := mcnutils.CopyFile(d.SSHPrivateKeyPath, d.GetSSHKeyPath()); err != nil { return err } } svc := cloudformation.New(session.New()) params := &cloudformation.CreateStackInput{ StackName: aws.String(d.MachineName), TemplateURL: aws.String(d.CloudFormationURL), Parameters: d.createParams(), Tags: d.createTags(), } _, err := svc.CreateStack(params) if err != nil { return err } if err := mcnutils.WaitForSpecificOrError(d.stackAvailable, 120, 3*time.Second); err != nil { return err } if err := d.getInstanceInfo(); err != nil { return err } if err := waitFor(sshAvailableFunc(d)); err != nil { return fmt.Errorf("Too many retries waiting for SSH to be available. Last error: %s", err) } log.Debugf("created instance ID %s, IP address %s, Private IP address %s", d.InstanceId, d.IPAddress, d.PrivateIPAddress, ) return nil }
func (c *GenericClient) WaitForInstanceStatus(d *Driver, status string) error { return mcnutils.WaitForSpecificOrError(func() (bool, error) { current, err := servers.Get(c.Compute, d.MachineId).Extract() if err != nil { return true, err } if current.Status == "ERROR" { return true, fmt.Errorf("Instance creation failed. Instance is in ERROR state") } if current.Status == status { return true, nil } return false, nil }, (d.ActiveTimeout / 4), 4*time.Second) }
// waitForInstanceStatus waits until instance reaches status. Copied from openstack Driver func (d *Driver) waitForInstanceStatus(status string) (instance *Instance, err error) { return instance, mcnutils.WaitForSpecificOrError(func() (bool, error) { instance, err = d.client.GetInstance(d.ProjectID, d.InstanceID) if err != nil { return true, err } log.WithField("MachineId", d.InstanceID).Debugf("Machine state: %s", instance.Status) if instance.Status == "ERROR" { return true, fmt.Errorf("Instance creation failed. Instance is in ERROR state") } if instance.Status == status { return true, nil } return false, nil }, (statusTimeout / 4), 4*time.Second) }
// waitForInstanceStatus waits until instance reaches status. Copied from openstack Driver func (d *Driver) waitForInstanceStatus(status string) (instance *Instance, err error) { return instance, mcnutils.WaitForSpecificOrError(func() (bool, error) { instance, err = d.client.GetInstance(d.ProjectID, d.InstanceID) if err != nil { return true, err } log.Debugf("Machine", map[string]interface{}{ "Name": d.KeyPairName, "State": instance.Status, }) if instance.Status == "ERROR" { return true, fmt.Errorf("Instance creation failed. Instance is in ERROR state") } if instance.Status == status { return true, nil } return false, nil }, (statusTimeout / 4), 4*time.Second) }
func (d *Driver) waitForJob(client *egoscale.Client, jobid string) error { log.Infof("Waiting for job to complete...") return mcnutils.WaitForSpecificOrError(func() (bool, error) { return d.jobIsDone(client, jobid) }, 60, 2*time.Second) }