ruby fog vsphere输出列表proc对象
我正在尝试ruby fog vsphere示例: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
#!/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