Ibm cloud 使用SoftLayer Ruby API指定口味时出错

Ibm cloud 使用SoftLayer Ruby API指定口味时出错,ibm-cloud,ibm-cloud-infrastructure,Ibm Cloud,Ibm Cloud Infrastructure,我有一个工作的ruby脚本,我们已经使用了很长一段时间从SoftLayer订购VSI。该脚本为CPU指定了一个特定的价格项,一个用于内存,另一个用于磁盘。我试图修改脚本以适应口味,但我一直无法找出我做错了什么。基本上,我已经从产品订单中删除了CPU、内存和磁盘价格项目,并在补充的CreateObjectOptions中添加了一个flavorKeyName,如下所示: #!/usr/bin/ruby require 'softlayer_api' client = SoftLayer::Cli

我有一个工作的ruby脚本,我们已经使用了很长一段时间从SoftLayer订购VSI。该脚本为CPU指定了一个特定的价格项,一个用于内存,另一个用于磁盘。我试图修改脚本以适应口味,但我一直无法找出我做错了什么。基本上,我已经从产品订单中删除了CPU、内存和磁盘价格项目,并在补充的CreateObjectOptions中添加了一个flavorKeyName,如下所示:

#!/usr/bin/ruby

require 'softlayer_api'

client = SoftLayer::Client.new(username: 'XXXXX', api_key: 'XXXXX')

 productOrder = {
  'virtualGuests' => [{
     'hostname' => 'test',
     'domain'   => 'mycompany.com',
     'primaryNetworkComponent' => { 'networkVlan' => { 'id' => XXXXXX } },
     'primaryBackendNetworkComponent' => { 'networkVlan' => { 'id' => XXXXXX },
     'supplementalCreateObjectOptions' => { 'flavorKeyName' => 'B1_1X2X100' } }
  }],
  'location' => XXXXXX,
  'packageId' => 46,
  'imageTemplateId' => XXXXX,
  'useHourlyPricing' => true,
  'prices' => [
     {'id' => 34183 }, # 0 GB Bandwidth
     {'id' => 24713 }, # 1 Gbps Public & Private Network Uplinks
     {'id' => 34807 }, # 1 IP Address
     {'id' => 33483 }, # Unlimited SSL VPN Users & 1 PPTP VPN User per account
     {'id' => 34241 }, # Host Ping and TCP Service Monitoring
     {'id' => 32500 }, # Email and Ticket
     {'id' => 35310 }, # NESSUS_VULNERABILITY_ASSESSMENT_REPORTING
     {'id' => 23070 }, # REBOOT_REMOTE_CONSOLE
     {'id' => 32627 }  # AUTOMATED_NOTIFICATION
  ]
 }
 order = client['Product_Order'].verifyOrder(productOrder)
但这在以下方面失败:

/usr/lib64/ruby/2.1.0/xmlrpc/client.rb:271:in `call': Internal Error (XMLRPC::FaultException)
    from /usr/lib64/ruby/gems/2.1.0/gems/softlayer_api-3.2.2/lib/softlayer/Service.rb:269:in `call_softlayer_api_with_params'
    from /usr/lib64/ruby/gems/2.1.0/gems/softlayer_api-3.2.2/lib/softlayer/Service.rb:198:in `method_missing'
    from /tmp/yy2:34:in `<main>'
/usr/lib64/ruby/2.1.0/xmlrpc/client.rb:271:in'call':内部错误(xmlrpc::FaultException)
from/usr/lib64/ruby/gems/2.1.0/gems/softlayer_api-3.2.2/lib/softlayer/Service.rb:269:in'call_softlayer_api_with_params'
from/usr/lib64/ruby/gems/2.1.0/gems/softlayer_api-3.2.2/lib/softlayer/Service.rb:198:in'method_missing'
from/tmp/yy2:34:in`'
该错误对于我可能指定错误或缺少的内容没有太大帮助

有人对我可能做错的地方有什么建议吗?

使用或需要使用835软件包时,设置presetId参数以指定要订购的口味配置

使用该方法时指定了supplementalCreateObjectOptions参数

以下是订购具有风味配置的虚拟来宾设备的两种方法

PlaceOrder

要获取软件包835的可用预设ID列表,您需要使用以下方法

检查键名值以了解哪些是平衡的、内存等,它们应该从以下内容开始:

B1表示“平衡”

BL1用于“平衡本地存储”

BL2用于“平衡本地存储-SSD”

C1表示“计算”

M1表示“内存”

这些字符后面是VSI配置的简短说明,如下所示:

C1_2X2X100用于具有“2 x 2.0 GHz内核、2 GB RAM、100 GB磁盘”的计算VSI

B1_8X16X25用于“8 x 2.0 GHz内核、16 GB RAM、25 GB磁盘”的平衡VSI

如果我没有弄错的话,预设ID333是针对B1_1X2X100的,这是您想要的口味配置

需要“rubygems”
需要“softlayer\u api”
需要“json”
#您的SoftLayer API用户名和API密钥。
用户名='设置我'
API_KEY='设置我'
#将在其中配置服务器的位置。
位置='AMSTERDAM03'
#SoftLayer_产品_包的id,使用835 for VSI系列。
包裹id=835
#以下是用于完成此示例的预设id。
预设#u id=333#B1_1xx100(1 x 2.0 GHz内核、2 GB RAM和25 GB主磁盘)
#您希望在此配置中订购的服务器数。
数量=1
#构建一个骨架软层\虚拟\来宾对象。如果将数量设置为大于1
#然后,您需要为希望订购的每台服务器定义一个主机名/域。
虚拟客户=[
{
“主机名”=>“测试vsi”,
'domain'=>'mycompany.com',
'primaryNetworkComponent'=>{'networkVlan'=>{'id'=>11111},
'primaryBackendNetworkComponent'=>{'networkVlan'=>{'id'=>22222}
}
]
#指定项目价格。请注意,您不需要为项目指定项目价格
#CPU、ram和主磁盘,并考虑“平衡本地存储”
#而“平衡本地存储-SSD”需要第二个磁盘,系统将选择一个
#如果您没有指定它。
价格=[
{'id'=>34183},#0 GB带宽
{'id'=>24713},#1 Gbps公共和私人网络上行链路
{'id'=>34807},#1 IP地址
{'id'=>33483},#每个帐户有无限的SSL VPN用户和1个PPTP VPN用户
{'id'=>34241},#主机Ping和TCP服务监视
{'id'=>32500},#电子邮件和机票
{'id'=>35310},#NESSUS#u脆弱性(评估)报告
{'id'=>23070},重新启动远程控制台
{'id'=>32627}#自动通知
]
#构建包含订单的骨架SoftLayer\u容器\u产品\u订单对象
#你想要一个地方。
订单模板={
“数量”=>数量,
“位置”=>位置,
“packageId”=>包的id,
“预设id”=>预设id,
'imageTemplateId'=>1111111,
“useHourlyPricing”=>true,
“价格”=>价格,
“虚拟客户”=>虚拟客户
}
#声明API客户端以使用SoftLayer\u Product\u Order API服务
client=SoftLayer::client.new(用户名:用户名,api\U密钥:api\U密钥)
product\u order\u service=client.service\u named('SoftLayer\u product\u order'))
开始
#verifyOrder()将检查您的订单是否有错误。将此替换为placeOrder()
#当你准备点菜的时候。
收据=产品、订单和服务。验证订单(订单模板)
放置JSON.pretty_生成(收据)
rescue StandardError=>异常
放置“您的订单中有错误:#{exception}”
结束
CreateObject

请注意,createObject方法是订购虚拟来宾设备的一种简化方法,因此您可能无法设置IPV6、辅助IP地址等项。请查看以了解可以设置哪些属性

下面的示例是订购具有风味配置B1_1X2X100的vsi系列,在这种情况下,需要设置参数supplementalCreateObjectOptions

需要“rubygems”
需要“softlayer\u api”
需要“json”
#您的SoftLayer API用户名和API密钥。
用户名='设置我'
API_KEY='设置我'
#构建SoftLayer\u虚拟\u来宾对象的框架。
虚拟客户模板={
“主机名”=>“测试vsi”,
'domain'=>'mycompany.com',
'primaryNetworkComponent'=>{'networkVlan'=>{'id'=>11111},
'primaryBackendNetworkComponent'=>{'networkVlan'=>{'id'=>22222}},
“数据中心”=>
https://api.softlayer.com/rest/v3/SoftLayer_Product_Package/835/getActivePresets