Ошибка получения при попытке проверить заказ виртуальной машины

Когда я запускаю приведенный ниже код, я получаю сообщение об ошибке 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, но без номера. Судя по описанию, эти значения устанавливаются после создания. 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
}
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
2
0
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам просто нужно добавить атрибут «Устройство» для каждого объекта 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)

Другие вопросы по теме