2014-05-02 24 views
1

我试图红宝石雾的vSphere例如:红宝石雾的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:[email protected]/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:[email protected]/opt/rh/ruby193/root/usr/local/share/gems/gems/fog-1.22.0/lib/fog/vsphere/compute.rb:148>, 
    "cluster"=> 
    #<Proc:[email protected]/opt/rh/ruby193/root/usr/local/share/gems/gems/fog-1.22.0/lib/fog/vsphere/compute.rb:149>, 
    "resource_pool"=> 
    #<Proc:[email protected]/opt/rh/ruby193/root/usr/local/share/gems/gems/fog-1.22.0/lib/fog/vsphere/compute.rb:151>, 
    "mac_addresses"=> 
    #<Proc:[email protected]/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"} 

回答

1

您可以直接拨打PROC检索数据:

my_data['mac_addresses'].() 

如果雾是能够在这一点上收集数据,它将返回的MAC地址,否则将返回nil。 Foq使用这种技术来懒散地评估一些散列编译时可能无法使用的属性,但这需要对vSphere虚拟机监控程序进行额外的调用。

要从respective source file引用注释:

这里我们创建哈希对象,这种方法回报,但首先我们需要 添加需要到vSphere API额外调用了更多的属性。管理程序名称和mac_addresses属性可能不可用 因此,我们需要捕获在查找过程中抛出的任何异常,并将它们设置为零。