将SoftLayer Ruby API用于具有虚拟服务器的特定其他磁盘时出错

时间:2016-05-10 02:05:57

标签: ibm-cloud-infrastructure

我们在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执行此操作?

1 个答案:

答案 0 :(得分:0)

您看到同样的错误,因为在这两种情况下您都使用createObject方法来创建VSI。

如果你看一下docuemntation,你会看到:

  

blockDevices

     

阻止计算的设备和磁盘映像设置   instance可选类型 - 数组   [SoftLayer_Virtual_Guest_Block_Device   (类型)| SoftLayer_Virtual_Guest_Block_Device]

     

默认 - 最小的   将使用主磁盘的可用容量。如果是图像   指定模板将由磁盘提供的容量   模板

注意:“指定图像模板时,模板将提供磁盘容量”

门户网站使用另一种方法来创建允许更多选项的订单,但缺点是创建订单并不容易。您可以看到有关该方法here的更多信息,本文将向您展示使用placeOrder方法在softlayer中订购设备的基础知识。基本上在您的情况下,使用placeOrder方法,您只需指定所需磁盘的价格加上图像模板。

我希望它有所帮助 此致