我们在SoftLayer Ruby API中看到了与本文相同的问题:
CLI - Error when disk parameter is in use
此代码可以重现此问题:
#!/usr/bin/ruby
require 'softlayer_api'
def image_template_id(sl_client, image_template_name)
templates = sl_client['Account'].getBlockDeviceTemplateGroups
templates.each do | template |
if image_template_name == template['name']
return SoftLayer::ImageTemplate.template_with_id(template['id'], {:client => sl_client})
end
end
return nil
end
sl_username = "USER"
sl_apikey = "API-KEY"
sl_client = SoftLayer::Client.new(username: sl_username, api_key: sl_apikey)
server_order = SoftLayer::VirtualServerOrder.new(sl_client)
server_order.hostname = "test"
server_order.domain = "mycompany.com"
server_order.datacenter = SoftLayer::Datacenter.datacenter_named("par02", sl_client)
server_order.cores = 2
server_order.memory = 4
server_order.image_template = image_template_id(sl_client, "IMAGE NAME")
server_order.disks = [100, 100]
puts server_order.verify
导致此错误:
/usr/share/ruby/xmlrpc/client.rb:414:in `call': Invalid value provided for 'blockDevices'. Block devices may not be provided when using an image template. (XMLRPC::FaultException)
from /fs/home/richb/.gem/ruby/1.9.1/gems/softlayer_api-3.0.0/lib/softlayer/Service.rb:281:in `call_softlayer_api_with_params'
from /fs/home/richb/.gem/ruby/1.9.1/gems/softlayer_api-3.0.0/lib/softlayer/Service.rb:210:in `method_missing'
from /fs/home/richb/.gem/ruby/1.9.1/gems/softlayer_api-3.0.0/lib/softlayer/VirtualServerOrder.rb:122:in `verify'
from ./sltest:29:in `<main>'
据我所知,API不允许您指定磁盘,但您可以通过SoftLayer门户使用图像模板进行操作,那么有没有办法通过API执行此操作?
答案 0 :(得分:0)
您看到同样的错误,因为在这两种情况下您都使用createObject方法来创建VSI。
如果你看一下docuemntation,你会看到:
blockDevices
阻止计算的设备和磁盘映像设置 instance可选类型 - 数组 [SoftLayer_Virtual_Guest_Block_Device (类型)| SoftLayer_Virtual_Guest_Block_Device]
默认 - 最小的 将使用主磁盘的可用容量。如果是图像 指定模板将由磁盘提供的容量 模板
注意:“指定图像模板时,模板将提供磁盘容量”
门户网站使用另一种方法来创建允许更多选项的订单,但缺点是创建订单并不容易。您可以看到有关该方法here的更多信息,本文将向您展示使用placeOrder方法在softlayer中订购设备的基础知识。基本上在您的情况下,使用placeOrder方法,您只需指定所需磁盘的价格加上图像模板。
我希望它有所帮助 此致