本文整理汇总了Golang中github.com/LunaNode/lobster.VirtualMachine.SetMetadata方法的典型用法代码示例。如果您正苦于以下问题:Golang VirtualMachine.SetMetadata方法的具体用法?Golang VirtualMachine.SetMetadata怎么用?Golang VirtualMachine.SetMetadata使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/LunaNode/lobster.VirtualMachine
的用法示例。
在下文中一共展示了VirtualMachine.SetMetadata方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: VmCreate
func (this *DigitalOcean) VmCreate(vm *lobster.VirtualMachine, options *lobster.VMIVmCreateOptions) (string, error) {
password := utils.Uid(16)
image, err := this.findImage(options.ImageIdentification)
if err != nil {
return "", err
}
plan := vm.Plan.Identification
if plan == "" {
plan = this.getPlanName(vm.Plan.Ram)
}
createRequest := &godo.DropletCreateRequest{
Name: vm.Name,
Region: this.region,
Size: plan,
Image: godo.DropletCreateImage{
ID: image.ID,
},
IPv6: true,
PrivateNetworking: true,
UserData: fmt.Sprintf("#cloud-config\nchpasswd:\n list: |\n root:%s\n expire: False\n", password),
}
droplet, _, err := this.client.Droplets.Create(createRequest)
if err != nil {
return "", err
} else {
vm.SetMetadata("password", password)
return fmt.Sprintf("%d", droplet.ID), nil
}
}
示例2: VmCreate
func (cloug *Cloug) VmCreate(vm *lobster.VirtualMachine, imageIdentification string) (string, error) {
instance, err := cloug.service.CreateInstance(&compute.Instance{
Name: vm.Name,
Region: cloug.config.Region,
NetworkID: cloug.config.NetworkID,
Image: compute.Image{ID: imageIdentification},
Flavor: compute.Flavor{
ID: vm.Plan.Identification,
NumCores: vm.Plan.Cpu,
DiskGB: vm.Plan.Storage,
MemoryMB: vm.Plan.Ram,
TransferGB: vm.Plan.Bandwidth,
},
})
if err != nil {
return "", err
}
if instance.Username != "" {
vm.SetMetadata("username", instance.Username)
}
if instance.Password != "" {
vm.SetMetadata("password", instance.Password)
}
return instance.ID, nil
}
示例3: VmCreate
func (this *SolusVM) VmCreate(vm *lobster.VirtualMachine, imageIdentification string) (string, error) {
name := vm.Name
if len(name) < 4 {
name += ".example.com"
}
vmId, password, err := this.Api.VmCreate(this.VirtType, this.NodeGroup, name, imageIdentification, vm.Plan.Ram, vm.Plan.Storage, vm.Plan.Cpu)
vm.SetMetadata("password", password)
return fmt.Sprintf("%d", vmId), err
}
示例4: saveAddresses
func (this *Fake) saveAddresses(vm *lobster.VirtualMachine, addresses []*lobster.IpAddress) {
str := ""
for _, address := range addresses {
if str != "" {
str += ","
}
str += address.Ip + ":" + address.Hostname
}
vm.SetMetadata("addresses", str)
}
示例5: VmCreate
func (cloug *Cloug) VmCreate(vm *lobster.VirtualMachine, options *lobster.VMIVmCreateOptions) (string, error) {
tmpl := compute.Instance{
Name: vm.Name,
Region: cloug.config.Region,
NetworkID: cloug.config.NetworkID,
Image: compute.Image{ID: options.ImageIdentification},
Flavor: compute.Flavor{
ID: vm.Plan.Identification,
NumCores: vm.Plan.Cpu,
DiskGB: vm.Plan.Storage,
MemoryMB: vm.Plan.Ram,
TransferGB: vm.Plan.Bandwidth,
},
}
if options.SSHKey.Key != "" {
tmpl.PublicKey = compute.PublicKey{
Key: []byte(options.SSHKey.Key),
}
}
tmpl.Details = make(map[string]string)
for k, v := range vm.Plan.Metadata {
tmpl.Details[k] = v
}
instance, err := cloug.service.CreateInstance(&tmpl)
if err != nil {
return "", err
}
if instance.Username != "" {
vm.SetMetadata("username", instance.Username)
}
if instance.Password != "" {
vm.SetMetadata("password", instance.Password)
}
return instance.ID, nil
}
示例6: VmCreate
func (cs *CloudStack) VmCreate(vm *lobster.VirtualMachine, imageIdentification string) (string, error) {
var serviceOfferingID, diskOfferingID string
var err error
if vm.Plan.Identification == "" {
serviceOfferingID, err = cs.findServiceOffering(vm.Plan.Cpu, vm.Plan.Ram)
if err != nil {
return "", err
}
diskOfferingID, err = cs.findDiskOffering(vm.Plan.Storage)
if err != nil {
return "", err
}
} else {
parts := strings.Split(vm.Plan.Identification, ":")
if len(parts) != 2 {
return "", errors.New("plan identification does not contain two colon-separated parts")
}
serviceOfferingID = parts[0]
diskOfferingID = parts[1]
}
id, jobid, err := cs.client.DeployVirtualMachine(serviceOfferingID, diskOfferingID, imageIdentification)
if err != nil {
return "", err
}
vm.SetMetadata("password", "pending")
go func() {
deadline := time.Now().Add(time.Minute)
for time.Now().Before(deadline) {
time.Sleep(5 * time.Second)
result, _ := cs.client.QueryDeployJob(jobid)
if result != nil {
vm.SetMetadata("password", result.Password)
return
}
}
// time limit exceeded
vm.SetMetadata("password", "unknown")
}()
return id, nil
}
示例7: VmCreate
func (this *OpenStack) VmCreate(vm *lobster.VirtualMachine, options *lobster.VMIVmCreateOptions) (string, error) {
flavorID := vm.Plan.Identification
if flavorID == "" {
flavorOpts := flavors.ListOpts{
MinDisk: vm.Plan.Storage,
MinRAM: vm.Plan.Ram,
}
flavorPager := flavors.ListDetail(this.ComputeClient, flavorOpts)
var matchFlavor *flavors.Flavor
err := flavorPager.EachPage(func(page pagination.Page) (bool, error) {
flavorList, err := flavors.ExtractFlavors(page)
if err != nil {
return false, err
}
for _, flavor := range flavorList {
if flavor.Disk == vm.Plan.Storage && flavor.RAM == vm.Plan.Ram && flavor.VCPUs == vm.Plan.Cpu {
matchFlavor = &flavor
return false, nil
}
}
return true, nil
})
if err != nil {
return "", err
} else if matchFlavor == nil {
return "", errors.New("plan not available in this region")
}
flavorID = matchFlavor.ID
}
password := utils.Uid(16)
opts := servers.CreateOpts{
Name: vm.Name,
ImageRef: options.ImageIdentification,
FlavorRef: flavorID,
Networks: []servers.Network{{UUID: this.networkId}},
AdminPass: password,
UserData: []byte("#cloud-config\npassword: " + password + "\nchpasswd: { expire: False }\nssh_pwauth: True\n"),
}
createResult := servers.Create(this.ComputeClient, opts)
server, err := createResult.Extract()
if err != nil {
return "", err
}
// try to associate floating IP with this VM
// do asynchronously since it might fail until network port is created
go func() {
for try := 0; try < 6; try++ {
time.Sleep(4 * time.Second)
// find a free floating IP
var freeFloatingIp *floatingip.FloatingIP
err := floatingip.List(this.ComputeClient).EachPage(func(page pagination.Page) (bool, error) {
floatingIps, err := floatingip.ExtractFloatingIPs(page)
if err != nil {
return false, err
}
for _, floatingIp := range floatingIps {
if floatingIp.InstanceID == "" {
freeFloatingIp = &floatingIp
return false, nil
}
}
return true, nil
})
if err != nil {
log.Printf("OpenStack: error while looking for free floating IP: %s", err.Error())
continue
} else if freeFloatingIp == nil {
log.Printf("OpenStack: Did not find free floating IP!")
continue
}
// associate it
err = floatingip.Associate(this.ComputeClient, server.ID, freeFloatingIp.IP).ExtractErr()
if err == nil {
break
} else {
log.Printf("OpenStack: error while associating floating IP: %s", err.Error())
}
}
}()
vm.SetMetadata("password", password)
return server.ID, nil
}
示例8: VmCreate
func (this *Linode) VmCreate(vm *lobster.VirtualMachine, imageIdentification string) (string, error) {
var planID int
if vm.Plan.Identification != "" {
planID, _ = strconv.Atoi(vm.Plan.Identification)
} else {
var err error
planID, err = this.findMatchingPlan(vm.Plan)
if err != nil {
return "", err
}
}
kernelID, err := this.findKernel()
if err != nil {
return "", err
}
password := utils.Uid(16)
// create linode
linodeID, err := this.client.CreateLinode(this.datacenterID, planID)
if err != nil {
return "", err
}
// create disks
totalDiskMB := vm.Plan.Storage * 1024
swapSize := vm.Plan.Ram / 2
diskSize := totalDiskMB - swapSize
var diskID int
imageParts := strings.SplitN(imageIdentification, ":", 2)
if len(imageParts) != 2 {
return "", errors.New("malformed image identification: missing colon")
}
if imageParts[0] == "distribution" {
distributionID, _ := strconv.Atoi(imageParts[1])
diskID, _, err = this.client.CreateDiskFromDistribution(linodeID, "lobster", distributionID, diskSize, password, "")
if err != nil {
this.client.DeleteLinode(linodeID, false)
return "", err
}
} else if imageParts[0] == "image" {
imageID, _ := strconv.Atoi(imageParts[1])
diskID, _, err = this.client.CreateDiskFromImage(linodeID, "lobster", imageID, diskSize, password, "")
if err != nil {
this.client.DeleteLinode(linodeID, false)
return "", err
}
} else {
return "", errors.New("invalid image type " + imageParts[0])
}
vm.SetMetadata("diskid", fmt.Sprintf("%d", diskID))
vm.SetMetadata("password", password)
swapID, _, err := this.client.CreateDisk(linodeID, "lobster-swap", "swap", swapSize, linode.CreateDiskOptions{})
if err != nil {
this.client.DeleteLinode(linodeID, false)
return "", err
}
configID, err := this.client.CreateConfig(linodeID, kernelID, fmt.Sprintf("lobster-%d", vm.Id), []int{diskID, swapID}, linode.CreateConfigOptions{})
if err != nil {
this.client.DeleteLinode(linodeID, false)
return "", err
} else {
vm.SetMetadata("configid", fmt.Sprintf("%d", configID))
this.client.BootLinode(linodeID)
return fmt.Sprintf("%d", linodeID), nil
}
}
示例9: VmCreate
func (this *Fake) VmCreate(vm *lobster.VirtualMachine, imageIdentification string) (string, error) {
this.CountCreate++
vm.SetMetadata("addresses", "127.0.0.1:")
return "fake", nil
}
示例10: VmCreate
func (this *Fake) VmCreate(vm *lobster.VirtualMachine, options *lobster.VMIVmCreateOptions) (string, error) {
this.CountCreate++
vm.SetMetadata("addresses", "127.0.0.1:")
return "fake", nil
}