【问题标题】:Softlayer API: How to get OS price list?Softlayer API:如何获取操作系统价目表?
【发布时间】:2018-03-23 05:26:50
【问题描述】:

我正在开发一个项目来使用 terraform 自动部署基础架构(vm 实例和其他)。

所以,我需要为 Terraform 找到“os_reference_code”。

理想情况下,我想显示与门户网站一样的操作系统列表,并且它可以用于在 terraform 中进行部署。 我发现another thread 可以得到确切的列表,但我在 getItemPrices() 中没有找到“操作系统代码”。

以下是我尝试从风味中获取操作系统代码列表:

import SoftLayer
client = SoftLayer.create_client_from_env(....)
flavors = client['Virtual_Guest'].getCreateObjectOptions()['operatingSystems']

os_list = []
for flavor in flavors:
    tmp_dict = {
        'description': flavor['itemPrice']['item']['description'],
        'recurringFee': flavor['itemPrice']['recurringFee'],
        'operatingSystemReferenceCode': flavor['template']['operatingSystemReferenceCode']
    }
    os_list.append(tmp_dict)
  1. “operatingSystemReferenceCode”是否可以用于 Terrafrom 中的“os_reference_code”,或者如何获取?

  2. flavor 中的操作系统列表与门户网站中的操作系统列表不同。有没有办法像门户网站一样获取操作系统列表,然后在 terraform 中部署该操作系统?

  3. 如果不同数据中心的操作系统价格不一样,如何获取它们。

  4. os的价格好像和vm cores不一样,怎么计算价格?

BR

【问题讨论】:

    标签: api ibm-cloud ibm-cloud-infrastructure infrastructure


    【解决方案1】:
    1. operatingSystemReferenceCode 是需要作为操作系统传递给SoftLayer_Virtual_Guest::createObject 的字符串。我认为这就是 terraform 所做的,但我知道的还不够确切。

    2. 我不确定有什么不同。 createObjectOptions 中的操作系统列表应该包含门户中的所有操作系统。

    3. 据我所知,createObjectOptions 仅显示“默认”价格。要获取特定位置的定价,您需要使用SoftLayer_Product_Package::getItems,然后将 locationGroupId 与您要订购的 locationGroup 匹配

    4. 同样,为此使用SoftLayer_Product_Package::getItems,但您需要指定对象掩码来选择价格的capacityRestrictionMaximum 和容量限制最小值

    包 id=835 是公共虚拟服务器

    slcli --format=json call-api SoftLayer_Product_Package getItems --id=835 --mask="mask[prices[capacityRestrictionMaximum]]"
    

    【讨论】:

      【解决方案2】:

      你不能通过 terraform 获取 vm 数据,因为 terraform 只允许我们创建、更新和删除。

      您可以查看以下文档:

      https://github.com/softlayer/terraform-provider-softlayer/blob/master/docs/resources/softlayer_virtual_guest.md
      
      1. 您可以在“os_reference_code”terraform中使用“operatingSystemReferenceCode”的数据,但必须将变量“os_reference_code”更改为“image”。

      这是一个通过 terraform 创建 VM 的模板示例。

          provider "softlayer" {
                       username = "set me"
                        api_key  = "set me"
                  }
      
              # Create a new virtual guest
          resource "softlayer_virtual_guest" "twc_terraform_sample" {
              name  = "my_server_1"
              domain = "bar.example.com"
              image = "UBUNTU_LATEST"
              region = "ams01"
              public_network_speed = 10
              hourly_billing = true
              private_network_only = false
              cpu = 1
              ram = 1024
              disks = [25, 10, 20]
              dedicated_acct_host_only = true
              local_disk = false
      }
      
      1. 要获取操作系统列表,您必须使用以下 python 代码:

      """

      Get Item Prices
      
      Retrieve a collection of SoftLayer_Product_Item_Prices that are valid for   this package.
      
      Important manual pages:
      http://sldn.softlayer.com/reference/services/SoftLayer_Product_Package/getItemPrices
      http://sldn.softlayer.com/reference/datatypes/SoftLayer_Product_Item_Price
      http://sldn.softlayer.com/reference/datatypes/SoftLayer_Product_Item
      
      License: http://sldn.softlayer.com/article/License
      
      Author: SoftLayer Technologies, Inc. <sldn@softlayer.com>
      
      """
      
      import SoftLayer
      import json
      
      USERNAME = set me'
      API_KEY = 'set me'
      
      object_mask = 'mask[item[id,softwareDescription]]'
      
      client = SoftLayer.Client(username=USERNAME, api_key=API_KEY)
      
      result = client['SoftLayer_Product_Package'].getItemPrices(id=835, mask = object_mask)
      
      print(json.dumps(result))
      

      您从方法 getCreateObjectOptions() 获得的“operatingSystemReferenceCode” 服务“'Virtual_Guest”的名称与您将在此代码示例中找到的“referenceCode”相同,您将获得操作系统价格。

      例如"operatingSystemReferenceCode" = ‘WIN_2012-STD_64’

      您必须根据所需的“recurringFee”选择操作系统。 操作系统 priceId 将为“id”:175797。

      {
              "id": 175797,
              "recurringFee": "17",
              "item": {
                  "id": 4233,
                  "softwareDescription": {
                      "controlPanel": 0,
                      "id": 1076,
                      "licenseTermValue": null,
                      "longDescription": "Microsoft Windows 2012 FULL STD 64 bit 2012 FULL STD x64",
                      "manufacturer": "Microsoft",
                      "name": "Windows 2012 FULL STD 64 bit",
                      "operatingSystem": 1,
                      "referenceCode": "WIN_2012-STD_64",
                      "upgradeSoftwareDescriptionId": null,
                      "upgradeSwDescId": null,
                      "version": "2012 FULL STD x64",
                      "virtualLicense": 0,
                      "virtualizationPlatform": 0,
                      "requiredUser": "Administrator"
                  }
              }
          },
      

      在商品价格中没有最新版本的操作系统,因为当您发送请求时,服务器将采用该操作系统的最新版本。

      例如 UBUNTU_ LATEST、WIN_ LATEST 等

      1. 操作系统价格取决于您将选择的 Flavor,而 Flavor 将根据将要选择的数据中心而变化。

      2. 是的,操作系统价格与 vm 内核不同,要获得价格,您必须在示例代码的结果中看到以下属性:

      "capacityRestrictionMaximum": "32",

      "capacityRestrictionMinimum": "17",

      “容量限制类型”:“核心”,

      在这种情况下,操作系统价格将取决于 CORE 的“capacityRestrictionMinimum”和“capacityRestrictionMaximum”:

      例如对于此示例,容量为 17 到 32 个 CORE,操作系统价格将为 "recurringFee": "68" 用于 "referenceCode": "WIN_2012-STD_64" 操作系统。

      {
              "currentPriceFlag": null,
              "hourlyRecurringFee": ".098",
              "id": 175801,
              "itemId": 4233,
              "laborFee": "0",
              "locationGroupId": null,
              "onSaleFlag": null,
              "oneTimeFee": "0",
              "quantity": null,
              "recurringFee": "68",
              "setupFee": "0",
              "sort": 16,
              "tierMinimumThreshold": null,
              "capacityRestrictionMaximum": "32",
              "capacityRestrictionMinimum": "17",
              "capacityRestrictionType": "CORE",
              "item": {
                  "id": 4233,
                  "softwareDescription": {
                      "controlPanel": 0,
                      "id": 1076,
                      "licenseTermValue": null,
                      "longDescription": "Microsoft Windows 2012 FULL STD 64 bit 2012 FULL STD x64",
                      "manufacturer": "Microsoft",
                      "name": "Windows 2012 FULL STD 64 bit",
                      "operatingSystem": 1,
                      "referenceCode": "WIN_2012-STD_64",
                      "upgradeSoftwareDescriptionId": null,
                      "upgradeSwDescId": null,
                      "version": "2012 FULL STD x64",
                      "virtualLicense": 0,
                      "virtualizationPlatform": 0,
                      "requiredUser": "Administrator"
                  }
              }
      

      【讨论】:

      • 感谢回复,但我对价格仍有一些疑问,据我所知,如果商品的价格与不同的数据中心不同,它会处理“locationGroupId”字段中的信息,但似乎都是item_price 对象中的 null ,也许和我想的一样。
      • 另外,例如 "operatingSystemReferenceCode": "REDHAT_LATEST_64" in flavor 在 item_price 对象中不存在。还有另一个来自 terraform 的文档的 rest api 可以得到另一个 os 列表。我仍然对此感到有些困惑..
      • 我还发现了一些奇怪的东西,即 item_price 中的 'referenceCode': 'UBUNTU_14_64' 但它可能代表 'Ubuntu 14.04-64 Minimal for VSI' 或 'Ubuntu 14.04-64 LAMP for VSI'?跨度>
      • 风味的价格因数据中心而异,但操作系统不会,这就是为什么它在属性“locationGroupId”中显示为空的原因,因为所有数据中心的操作系统都是相同的。跨度>
      • 无法通过terraform获取数据,因为它只允许我们创建、更新和删除,您可以查看以下文档:github.com/softlayer/terraform-provider-softlayer/blob/master/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-11
      • 2020-07-16
      • 2010-10-08
      • 2021-05-15
      • 2012-04-18
      相关资源
      最近更新 更多