func (d *deployment) deleteStemcell(deleteStage biui.Stage, stemcell bistemcell.CloudStemcell) error { stepName := fmt.Sprintf("Deleting stemcell '%s'", stemcell.CID()) return deleteStage.Perform(stepName, func() error { err := stemcell.Delete() cloudErr, ok := err.(bicloud.Error) if ok && cloudErr.Type() == bicloud.StemcellNotFoundError { return biui.NewSkipStageError(cloudErr, "Stemcell not found") } return err }) }
func (m *manager) createAndRecordVm(agentID string, stemcell bistemcell.CloudStemcell, resourcePool bideplmanifest.ResourcePool, networkInterfaces map[string]biproperty.Map) (string, error) { cid, err := m.cloud.CreateVM(agentID, stemcell.CID(), resourcePool.CloudProperties, networkInterfaces, resourcePool.Env) if err != nil { return "", bosherr.WrapErrorf(err, "Creating vm with stemcell cid '%s'", stemcell.CID()) } // Record vm info immediately so we don't leak it err = m.vmRepo.UpdateCurrent(cid) if err != nil { return "", bosherr.WrapError(err, "Updating current vm record") } return cid, nil }
func (m *manager) Create( jobName string, id int, deploymentManifest bideplmanifest.Manifest, cloudStemcell bistemcell.CloudStemcell, registryConfig biinstallmanifest.Registry, eventLoggerStage biui.Stage, ) (Instance, []bidisk.Disk, error) { var vm bivm.VM stepName := fmt.Sprintf("Creating VM for instance '%s/%d' from stemcell '%s'", jobName, id, cloudStemcell.CID()) err := eventLoggerStage.Perform(stepName, func() error { var err error vm, err = m.vmManager.Create(cloudStemcell, deploymentManifest) if err != nil { return bosherr.WrapError(err, "Creating VM") } if err = cloudStemcell.PromoteAsCurrent(); err != nil { return bosherr.WrapErrorf(err, "Promoting stemcell as current '%s'", cloudStemcell.CID()) } return nil }) if err != nil { return nil, []bidisk.Disk{}, err } instance := m.instanceFactory.NewInstance(jobName, id, vm, m.vmManager, m.sshTunnelFactory, m.blobstore, m.logger) if err := instance.WaitUntilReady(registryConfig, eventLoggerStage); err != nil { return instance, []bidisk.Disk{}, bosherr.WrapError(err, "Waiting until instance is ready") } disks, err := instance.UpdateDisks(deploymentManifest, eventLoggerStage) if err != nil { return instance, disks, bosherr.WrapError(err, "Updating instance disks") } return instance, disks, err }