我正在尝试编写一个脚本,该脚本将从使用XMLRPC的Red Hat Satellite / Spacewalk获取系统ID。我正在尝试使用使用系统名称的XMLRPC客户端时获取作为第一个值的ID。

我从Red Hat引用the documentation来使用以下方法:

#!/usr/bin/env ruby
require "xmlrpc/client"


@SATELLITE_URL = "satellite.rdu.salab.redhat.com"
@SATELLITE_API = "/rpc/api"
@SATELLITE_LOGIN = "********"
@SATELLITE_PASSWORD = "*******"

@client = XMLRPC::Client.new(@SATELLITE_URL, @SATELLITE_API)

@key = @client.call("auth.login", @SATELLITE_LOGIN, @SATELLITE_PASSWORD)

@getsystemid = @client.call("system.getId", @key, 'cfme038')

print "#{@getsystemid}"

@systemid = @getsystemid ['id']

getsystemid的输出如下所示:
[{"id"=>1000010466, "name"=>"cfme038", "last_checkin"=>#<XMLRPC::DateTime:0x007f9581042428 @year=2013, @month=12, @day=26, @hour=14, @min=31, @sec=28>}]

但是,当我尝试仅获取id时,出现此错误:
no implicit conversion of String into Integer (TypeError)

任何帮助表示赞赏

最佳答案

写为

@systemid = @getsystemid[0]['id']

您的@getsystemid不是Hash,它是ArrayHash@getsystemid[0]将为您提供预期的哈希{"id"=>1000010466, "name"=>"cfme038", "last_checkin"=>#}。现在,您可以使用 Hash#[] 方法通过其键访问哈希值。

10-07 19:04