func (s Fetcher) GetStemcell(deploymentManifest bideplmanifest.Manifest, stage biui.Stage) (ExtractedStemcell, error) { stemcell, err := deploymentManifest.Stemcell(deploymentManifest.JobName()) if err != nil { return nil, err } stemcellTarballPath, err := s.TarballProvider.Get(stemcell, stage) if err != nil { return nil, err } var extractedStemcell ExtractedStemcell err = stage.Perform("Validating stemcell", func() error { extractedStemcell, err = s.StemcellExtractor.Extract(stemcellTarballPath) if err != nil { return bosherr.WrapErrorf(err, "Extracting stemcell from '%s'", stemcellTarballPath) } return nil }) if err != nil { return nil, err } return extractedStemcell, nil }
func (m *manager) Create(stemcell bistemcell.CloudStemcell, deploymentManifest bideplmanifest.Manifest) (VM, error) { jobName := deploymentManifest.JobName() networkInterfaces, err := deploymentManifest.NetworkInterfaces(jobName) m.logger.Debug(m.logTag, "Creating VM with network interfaces: %#v", networkInterfaces) if err != nil { return nil, bosherr.WrapError(err, "Getting network spec") } resourcePool, err := deploymentManifest.ResourcePool(jobName) if err != nil { return nil, bosherr.WrapErrorf(err, "Getting resource pool for job '%s'", jobName) } agentID, err := m.uuidGenerator.Generate() if err != nil { return nil, bosherr.WrapError(err, "Generating agent ID") } cid, err := m.createAndRecordVm(agentID, stemcell, resourcePool, networkInterfaces) if err != nil { return nil, err } metadata := bicloud.VMMetadata{ Deployment: deploymentManifest.Name, Job: deploymentManifest.JobName(), Index: "0", Director: "bosh-init", } err = m.cloud.SetVMMetadata(cid, metadata) if err != nil { cloudErr, ok := err.(bicloud.Error) if ok && cloudErr.Type() == bicloud.NotImplementedError { //ignore it } else { return nil, bosherr.WrapErrorf(err, "Setting VM metadata to %s", metadata) } } vm := NewVM( cid, m.vmRepo, m.stemcellRepo, m.diskDeployer, m.agentClient, m.cloud, m.fs, m.logger, ) return vm, nil }
func (m *manager) Create(stemcell bistemcell.CloudStemcell, deploymentManifest bideplmanifest.Manifest) (VM, error) { jobName := deploymentManifest.JobName() networkInterfaces, err := deploymentManifest.NetworkInterfaces(jobName) m.logger.Debug(m.logTag, "Creating VM with network interfaces: %#v", networkInterfaces) if err != nil { return nil, bosherr.WrapError(err, "Getting network spec") } resourcePool, err := deploymentManifest.ResourcePool(jobName) if err != nil { return nil, bosherr.WrapErrorf(err, "Getting resource pool for job '%s'", jobName) } agentID, found, err := m.vmRepo.FindCurrentAgentId() if err != nil { return nil, bosherr.WrapError(err, "Finding currently agent id of deployed vm") } if !found { agentID, err = m.uuidGenerator.Generate() if err != nil { return nil, bosherr.WrapError(err, "Generating agent ID") } } currentIP, found, err := m.vmRepo.FindCurrentIP() if err != nil { return nil, bosherr.WrapError(err, "Finding currently IP address of deployed vm") } ifaceMap := map[string]biproperty.Map{} if found { for networkName, networkInterface := range networkInterfaces { networkInterface["ip"] = currentIP ifaceMap[networkName] = networkInterface } } else { ifaceMap = networkInterfaces } cid, err := m.createAndRecordVm(agentID, stemcell, resourcePool, ifaceMap) if err != nil { return nil, err } metadata := bicloud.VMMetadata{ Deployment: deploymentManifest.Name, Job: deploymentManifest.JobName(), Index: "0", Director: "bosh-init", } err = m.cloud.SetVMMetadata(cid, metadata) if err != nil { cloudErr, ok := err.(bicloud.Error) if ok && cloudErr.Type() == bicloud.NotImplementedError { //ignore it } else { return nil, bosherr.WrapErrorf(err, "Setting VM metadata to %s", metadata) } } vm := NewVM( cid, m.vmRepo, m.stemcellRepo, m.diskDeployer, m.agentClient, m.cloud, m.fs, m.logger, ) return vm, nil }