You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何列出VSI的Flavor?SoftLayer查询掩码使用问题求助

正确获取VSI Flavor的方法详解

哦,我明白你的问题了——你想用API获取已存在VSI对应的flavorKeyName,但用mask查询supplementalCreateObjectOptions字段一直拿不到结果对吧?其实这里有个关键的误解,我来给你捋清楚:

为什么你的mask查询无效?

supplementalCreateObjectOptions这个字段不是已存在VSI的持久属性,它只是在调用SoftLayer_Virtual_Guest/createObject创建VSI时,用来传递额外配置(比如指定flavor)的输入参数。所以你查询已有的VSI实例时,这个字段根本不会返回,自然拿不到flavorKeyName。

那该怎么正确获取已存在VSI对应的flavor呢?下面给你两种可行的方法:

方法一:通过硬件配置匹配对应Flavor

每个VSI flavor都对应固定的CPU、内存、磁盘等硬件配置组合,我们可以先获取所有可用的flavor配置,再和目标VSI的硬件参数做匹配:

  1. 获取所有可用的VSI Flavor配置
    调用SoftLayer_Product_Package/getItems接口,指定packageId为46(这是VSI对应的产品包ID),过滤出CPU、内存、磁盘相关的配置项:

    import SoftLayer
    
    client = SoftLayer.create_client_from_env()
    package_id = 46  # VSI产品包固定ID
    
    # 获取CPU、内存、磁盘的配置项
    flavor_items = client['SoftLayer_Product_Package'].getItems(
        id=package_id,
        filter={
            "items": {
                "itemCategory": {
                    "categoryCode": {
                        "in": ["guest_core", "ram", "disk0"]
                    }
                }
            }
        }
    )
    
  2. 获取目标VSI的硬件参数
    调用SoftLayer_Virtual_Guest/getObject获取VSI的CPU、内存、磁盘等信息:

    vsi_id = 1234567  # 替换成你的VSI ID
    vsi_details = client['SoftLayer_Virtual_Guest'].getObject(
        id=vsi_id,
        mask="maxCpu, maxMemory, localDiskFlag, blockDevices[diskImage[capacity]]"
    )
    
  3. 匹配对应的Flavor
    根据VSI的硬件参数,和flavor配置项做匹配,最终得到对应的flavorKeyName(比如B1_2X4代表2核4G的基础型实例)。实际场景中可以根据需要补充磁盘类型、带宽等更精确的匹配逻辑。

方法二:通过升级选项反向推断当前Flavor

如果你只是想快速确认当前VSI的flavor范围,可以调用SoftLayer_Virtual_Guest/getUpgradeItemPrices接口,获取该实例可升级的所有flavor选项,反向推断当前的基础配置对应的flavor。不过这种方法不如直接匹配硬件配置准确。

额外补充:创建VSI前获取可用Flavors

如果你的需求是创建VSI前获取所有可用的flavorKeyName,可以直接调用SoftLayer_Product_Package/getItemPrices,过滤出包含flavorKeyName属性的价格项:

flavor_prices = client['SoftLayer_Product_Package'].getItemPrices(
    id=package_id,
    filter={
        "itemPrices": {
            "attributes": {
                "name": {
                    "operation": "flavorKeyName"
                }
            }
        }
    }
)

# 提取所有flavorKeyName
for price in flavor_prices:
    for attr in price['attributes']:
        if attr['name'] == 'flavorKeyName':
            print(f"可用Flavor: {attr['value']}")

内容的提问来源于stack exchange,提问作者AlexDevC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:07:53