Softlayer - 如何通过镜像名称查找硬件服务器的镜像参考代码

Softlayer - How to find the hardware server's image reference code by its image name

如何通过镜像名称找到硬件服务器的镜像参考码? 我尝试搜索图像 Vyatta Subscription Edition for Bare metal 6.7.9VMware VSphere 6.5.0u1 here 但没有找到图像。使用 ruby gem 通过以下代码

找出图像
SoftLayer::ImageTemplate.find_public_templates(:name => name, client: client).first

但是找不到它。

我在我的帐户上进行了搜索,但没有看到 SoftLayer 提供的名称为 Vyatta Subscription Edition for Bare metal 6.7.9VMware VSphere 6.5.0u1.

的任何 public 图像模板

图像模板只能从虚拟客人创建,因此如果您创建并制作它们 public 那么它们应该列在这里 https://control.softlayer.com/devices/images, the portal page makes api calls to retrieve that list, the getPublicImages retrieves the public images and getPrivateBlockDeviceTemplateGroups 私人的

我可以建议你使用对象过滤器来搜索名称以 "Vyatta" 开头的图像,过滤器是这样的:

filter = SoftLayer::ObjectFilter.new do |img_filter|
    img_filter.accept('name').when_it begins_with('Vyatta')
end

那么您的代码应该如下所示:

SoftLayer::ImageTemplate.find_public_templates(:object_filter => filter)

使用 object_filter 检索数据时 find_public_templates 似乎需要很长时间,所以我也可以向您推荐我自己的脚本,我觉得它检索数据的速度稍快一些:

require 'rubygems'
require 'softlayer_api'    
require 'pp'

username = 'set me'
api_key = 'set me'

image_service = SoftLayer::Service.new('SoftLayer_Virtual_Guest_Block_Device_Template_Group',
                                         username: username, api_key: api_key)

filter = SoftLayer::ObjectFilter.new do |img_filter|
    img_filter.accept('name').when_it begins_with('Vyatta')
end

# Another way to set filters: 
# filter = SoftLayer::ObjectFilter.new
# filter.set_criteria_for_key_path("name", "operation"=>"^= Vyatta")

begin
  images = image_service.object_filter(filter).getPublicImages
  pp images
rescue StandardError => e
  puts "Error when executing the script... #{e}" 
end