ruby fog vsphere输出列表proc对象

ruby fog vsphere输出列表proc对象,ruby,linux,gem,fog,vsphere,Ruby,Linux,Gem,Fog,Vsphere,我正在尝试ruby fog vsphere示例: #!/usr/bin/env ruby require 'rubygems' require 'pp' require 'fog' require 'highline/import' def get_password(prompt="Enter password:") ask(prompt) {|q| q.echo = false} end #user = gets.chomp pass = get_password() crede

我正在尝试ruby fog vsphere示例:

#!/usr/bin/env ruby

require 'rubygems'
require 'pp'
require 'fog'
require 'highline/import'

def get_password(prompt="Enter password:")
   ask(prompt) {|q| q.echo = false}
end

#user = gets.chomp
pass = get_password()

credentials = {
    :provider   => "vsphere",
    :vsphere_username   => "user.name",
    :vsphere_password   => pass,
    :vsphere_server => "my_vcserver",
    :vsphere_ssl    => true,
    :vsphere_expected_pubkey_hash   => "my_hash",
    :vsphere_rev    => "4.0"
}
connection = Fog::Compute.new(credentials)

# MUST BE Ruby v 1.9 to use this hash style
vms = connection.list_virtual_machines(datacenter: 'my_dc', folder: 'my_folder')
pp vms
它连接并报告数据,但有几个属性不显示正确的数据,而是显示类似于Proc对象的内容。我对mac_addresses属性感兴趣。如何从该对象中获取数据

{"id"=>"52e9592f-4da9-c5b4-a78e-92d39705d900",
  "name"=>"a41",
  "uuid"=>"784d4e21-e4a7-e059-cdef-4ff1453f093d",
  "template"=>false,
  "parent"=>Folder("group-v16163"),
  "hostname"=>nil,
  "operatingsystem"=>nil,
  "ipaddress"=>nil,
  "power_state"=>"poweredOn",
  "connection_state"=>"connected",
  "hypervisor"=>
   #<Proc:0x00000004922d50@/opt/rh/ruby193/root/usr/local/share/gems/gems/fog-1.22.0/lib/fog/vsphere/compute.rb:150>,
  "tools_state"=>"toolsNotInstalled",
  "tools_version"=>"guestToolsNotInstalled",
  "memory_mb"=>8192,
  "cpus"=>2,
  "corespersocket"=>2,
  "overall_status"=>"green",
  "guest_id"=>"centos64Guest",
  "mo_ref"=>"vm-16217",
  "datacenter"=>
   #<Proc:0x00000004922fa8@/opt/rh/ruby193/root/usr/local/share/gems/gems/fog-1.22.0/lib/fog/vsphere/compute.rb:148>,
  "cluster"=>
   #<Proc:0x00000004922e68@/opt/rh/ruby193/root/usr/local/share/gems/gems/fog-1.22.0/lib/fog/vsphere/compute.rb:149>,
  "resource_pool"=>
   #<Proc:0x00000004922c60@/opt/rh/ruby193/root/usr/local/share/gems/gems/fog-1.22.0/lib/fog/vsphere/compute.rb:151>,
  "mac_addresses"=>
   #<Proc:0x00000004922b48@/opt/rh/ruby193/root/usr/local/share/gems/gems/fog-1.22.0/lib/fog/vsphere/compute.rb:155>,
  "path"=>"/Datacenters/DEV/vm",
  "relative_path"=>"DEV"}
{“id”=>“52e9592f-4da9-c5b4-a78e-92d39705d900”,
“名称”=>“a41”,
“uuid”=>“784d4e21-e4a7-e059-cdef-4ff1453f093d”,
“模板”=>false,
“父项”=>文件夹(“组-v16163”),
“主机名”=>nil,
“操作系统”=>零,
“ipaddress”=>零,
“电源状态”=>“电源状态”,
“连接状态”=>“已连接”,
“虚拟机监控程序”=>
#,
“工具状态”=>“工具未安装”,
“工具\u版本”=>“访客工具未安装”,
“内存”=>8192,
“CPU”=>2,
“corespersocket”=>2,
“整体_状态”=>“绿色”,
“guest_id”=>“centos64Guest”,
“mo_ref”=>“vm-16217”,
“数据中心”=>
#,
“集群”=>
#,
“资源池”=>
#,
“mac_地址”=>
#,
“路径”=>“/Datacenters/DEV/vm”,
“相对路径”=>“开发”}

您只需调用proc即可检索数据:

my_data['mac_addresses'].()
如果fog此时能够收集数据,它将返回mac地址,否则将返回
nil
。Foq使用此技术延迟评估某些属性,这些属性在哈希编译时可能不可用,但需要额外调用vsphere hypervisor

请引用以下评论:

这里我们创建这个方法返回的哈希对象,但是首先我们需要 添加更多需要额外调用vSphere的属性 应用程序编程接口。虚拟机监控程序名称和mac_地址属性可能不可用 所以我们需要捕获在查找过程中抛出的任何异常,并将它们设置为nil