You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

配置10G带宽裸金属服务器报错求助:无法找到对应端口速率价格

解决SoftLayer API下单10G带宽裸金属服务器报错的问题

这个问题我之前碰到过类似的情况,核心问题在于API下单时10G带宽的参数逻辑和UI不一样——UI后台会自动帮你匹配好对应的价格项,但API需要你明确指定正确的配置参数或者价格ID,直接设置10000(10G)时系统找不到对应价格,大概率是因为缺少了必要的关联属性。

可能的原因

  • UI会自动处理带宽价格项的关联匹配,但API需要显式指定正确的参数组合,比如端口类型、是否为冗余带宽,或者直接指定对应价格ID;
  • 部分裸金属服务器套餐的10G带宽属于额外收费项,无法通过单纯设置MaxSpeed来触发价格匹配,必须明确添加对应的价格条目。

解决方案

1. 先获取对应套餐的10G带宽价格ID

你可以先通过API查询当前使用的裸金属服务器套餐下的所有带宽相关价格项,找到10G对应的价格ID,之后下单时直接指定这个ID即可。Golang示例代码如下:

package main

import (
    "fmt"
    "strings"
    "github.com/softlayer/softlayer-go/services"
    "github.com/softlayer/softlayer-go/session"
    "github.com/softlayer/softlayer-go/datatypes"
)

func main() {
    // 初始化会话,替换为你的账号信息
    sess := session.New()
    sess.Username = "YOUR_SL_USERNAME"
    sess.APIKey = "YOUR_SL_API_KEY"

    // 裸金属服务器的默认套餐ID通常是200,可根据实际情况调整
    packageID := uint(200)
    packageService := services.GetProductPackageService(sess)
    
    // 获取套餐下所有可订购项
    items, err := packageService.Id(packageID).GetItems()
    if err != nil {
        fmt.Printf("查询套餐项失败: %s\n", err)
        return
    }

    // 筛选10G带宽相关的价格项
    for _, item := range items {
        if item.Description != nil && strings.Contains(*item.Description, "10 Gbps") {
            fmt.Printf("找到10G带宽价格ID: %d,描述: %s\n", *item.Id, *item.Description)
        }
    }
}

2. 修正下单代码的配置逻辑

拿到价格ID后,在你的下单代码中,需要将这个价格ID添加到Hardware结构体的Prices数组中,同时确保网络组件参数配置正确。示例代码片段:

// 替换成你查到的10G带宽价格ID
bandwidthPriceID := uint(XXXXXX)

vHardwareTemplate := datatypes.Hardware{
    Hostname:               sl.String("test"),
    Domain:                 sl.String("example.com"),
    ProcessorCoreAmount:    sl.Uint(2),
    MemoryCapacity:         sl.Uint(2),
    HourlyBillingFlag:      sl.Bool(true),
    PackageId:              sl.Uint(200), // 对应你的裸金属套餐ID
    // 配置网络组件的最大速率
    NetworkComponents: []datatypes.Network_Component{
        {
            MaxSpeed: sl.Uint(10000),
            // 如果需要冗余10G端口,添加下面的配置
            // RedundantNetworkComponent: &datatypes.Network_Component{MaxSpeed: sl.Uint(10000)},
        },
    },
    // 添加10G带宽的价格项
    Prices: []datatypes.Product_Item_Price{
        {Id: sl.Uint(bandwidthPriceID)},
    },
}

3. 验证服务器型号是否支持10G带宽

虽然UI能下单,但要确认你代码中选择的服务器配置(比如处理器、内存规格)是否真的支持10G带宽。部分低端裸金属服务器默认仅支持1G带宽,UI会自动升级到兼容型号,但API需要你显式选择支持10G的硬件配置。

额外调试技巧

如果还是报错,可以调用SoftLayer_Product_OrderverifyOrder方法先验证你的配置,它会返回更详细的错误信息,帮你精准定位参数问题。

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

火山引擎 最新活动