尝试验证虚拟机订单时收到错误
Receiving error when attempting to verify a virtual machine order
当我 运行 下面的代码时,我得到错误 SoftLayer_Exception_InvalidValue: Invalid value provided for 'blockDevices.device'. A device number must be provided for all block devices. (HTTP 200)
我初始化块设备的方式有什么问题?
我看到字段 Id
和 Uuid
类型 Virtual_Disk_Image
,但没有数字。从描述来看,这些值听起来像是设置 post-creation。
https://github.com/softlayer/softlayer-go/blob/master/datatypes/virtual.go#L91
func verifyOrderTest(c Creds) (string, error) {
sess := session.New(*c.user, *c.key)
service := services.GetVirtualGuestService(sess)
guestTpl := getGuestTplTest()
guest, err := service.GenerateOrderTemplate(&guestTpl)
if err != nil {
return "", err
}
productOrderInstance := services.GetProductOrderService(sess)
_, err = productOrderInstance.VerifyOrder(guest)
if err != nil {
return "", err
}
return "success", nil
}
func getGuestTplTest() (datatypes.Virtual_Guest) {
blockDevices := make([]datatypes.Virtual_Guest_Block_Device, 2)
blockDevices[0] = datatypes.Virtual_Guest_Block_Device{
DiskImage: &datatypes.Virtual_Disk_Image{
Capacity: sl.Int(100),
LocalDiskFlag: sl.Bool(true),
},
}
blockDevices[1] = datatypes.Virtual_Guest_Block_Device{
DiskImage: &datatypes.Virtual_Disk_Image{
Capacity: sl.Int(100),
LocalDiskFlag: sl.Bool(true),
},
}
guestTpl := datatypes.Virtual_Guest{
BandwidthAllocation: sl.Float(10),
BlockDevices: blockDevices,
Datacenter: &datatypes.Location{Name: sl.String("dal13")},
DedicatedAccountHostOnlyFlag: sl.Bool(true),
Domain: sl.String("website.com"),
Hostname: sl.String("hostname"),
OperatingSystemReferenceCode: sl.String("UBUNTU_16_64"),
LocalDiskFlag: sl.Bool(true),
MaxMemory: sl.Int(32768),
StartCpus: sl.Int(16),
}
return guestTpl
}
您只需为每个 Virtual_Guest_Block_Device 对象添加属性“设备”,并且“LocalDiskFlag”属性必须添加一次,而不是为每个 Virtual_Guest_Block_Device。
与此示例相同:
blockDevices := make([]datatypes.Virtual_Guest_Block_Device, 2)
blockDevices[0] = datatypes.Virtual_Guest_Block_Device{
Device: sl.String("0"),
DiskImage: &datatypes.Virtual_Disk_Image{
Capacity: sl.Int(100),
},
}
blockDevices[1] = datatypes.Virtual_Guest_Block_Device{
Device: sl.String("2"),
DiskImage: &datatypes.Virtual_Disk_Image{
Capacity: sl.Int(100),
},
}
之后你必须在方法中的参数 ¨ guest ¨ 添加符号 ¨&¨
没有此代码的 VerifyOrder 将不会 运行。
result, err := productOrderInstance.VerifyOrder(&guest)
当我 运行 下面的代码时,我得到错误 SoftLayer_Exception_InvalidValue: Invalid value provided for 'blockDevices.device'. A device number must be provided for all block devices. (HTTP 200)
我初始化块设备的方式有什么问题?
我看到字段 Id
和 Uuid
类型 Virtual_Disk_Image
,但没有数字。从描述来看,这些值听起来像是设置 post-creation。
https://github.com/softlayer/softlayer-go/blob/master/datatypes/virtual.go#L91
func verifyOrderTest(c Creds) (string, error) {
sess := session.New(*c.user, *c.key)
service := services.GetVirtualGuestService(sess)
guestTpl := getGuestTplTest()
guest, err := service.GenerateOrderTemplate(&guestTpl)
if err != nil {
return "", err
}
productOrderInstance := services.GetProductOrderService(sess)
_, err = productOrderInstance.VerifyOrder(guest)
if err != nil {
return "", err
}
return "success", nil
}
func getGuestTplTest() (datatypes.Virtual_Guest) {
blockDevices := make([]datatypes.Virtual_Guest_Block_Device, 2)
blockDevices[0] = datatypes.Virtual_Guest_Block_Device{
DiskImage: &datatypes.Virtual_Disk_Image{
Capacity: sl.Int(100),
LocalDiskFlag: sl.Bool(true),
},
}
blockDevices[1] = datatypes.Virtual_Guest_Block_Device{
DiskImage: &datatypes.Virtual_Disk_Image{
Capacity: sl.Int(100),
LocalDiskFlag: sl.Bool(true),
},
}
guestTpl := datatypes.Virtual_Guest{
BandwidthAllocation: sl.Float(10),
BlockDevices: blockDevices,
Datacenter: &datatypes.Location{Name: sl.String("dal13")},
DedicatedAccountHostOnlyFlag: sl.Bool(true),
Domain: sl.String("website.com"),
Hostname: sl.String("hostname"),
OperatingSystemReferenceCode: sl.String("UBUNTU_16_64"),
LocalDiskFlag: sl.Bool(true),
MaxMemory: sl.Int(32768),
StartCpus: sl.Int(16),
}
return guestTpl
}
您只需为每个 Virtual_Guest_Block_Device 对象添加属性“设备”,并且“LocalDiskFlag”属性必须添加一次,而不是为每个 Virtual_Guest_Block_Device。
与此示例相同:
blockDevices := make([]datatypes.Virtual_Guest_Block_Device, 2)
blockDevices[0] = datatypes.Virtual_Guest_Block_Device{
Device: sl.String("0"),
DiskImage: &datatypes.Virtual_Disk_Image{
Capacity: sl.Int(100),
},
}
blockDevices[1] = datatypes.Virtual_Guest_Block_Device{
Device: sl.String("2"),
DiskImage: &datatypes.Virtual_Disk_Image{
Capacity: sl.Int(100),
},
}
之后你必须在方法中的参数 ¨ guest ¨ 添加符号 ¨&¨ 没有此代码的 VerifyOrder 将不会 运行。
result, err := productOrderInstance.VerifyOrder(&guest)