我是ruby的新手,我正在尝试重新构建我的脚本,为zabbix monitor等添加了一些服务器。我面临的问题如下:
zbx = ZabbixApi.connect(
:url => 'http://zabbixserver.net/zabbix/api_jsonrpc.php',
:user => 'admin',
:password => 'admin'
)
def createtemplate
zbx.templates.create(
:host => "RealDoc MS Template",
:groups => [:groupid => zbx.hostgroups.get_id(:name => "RealDoc")]
) ..../will create Items, graphs etc...
end
if templateid.empty?
createtemplate
else
puts "Template Exists"
end
当访问createtemplate方法时,它抛出以下错误:未定义的局部变量或方法`zbx'for main:Object(NameError)
答案 0 :(得分:3)
好zbx
不在范围内,因为它不是全球性的。你有几个选择。
将其传递给方法
def createtemplate(zbx)
zbx.templates.create(
:host => "RealDoc MS Template",
:groups => [:groupid => zbx.hostgroups.get_id(:name => "RealDoc")]
) ..../will create Items, graphs etc...
end
if templateid.empty?
createtemplate zbx
else
puts "Template Exists"
en
或者您可以使用$
将其设为全局。
$zbx = ZabbixApi.connect(
:url => 'http://zabbixserver.net/zabbix/api_jsonrpc.php',
:user => 'admin',
:password => 'admin'
)
def createtemplate
$zbx.templates.create(
:host => "RealDoc MS Template",
:groups => [:groupid => zbx.hostgroups.get_id(:name => "RealDoc")]
) ..../will create Items, graphs etc...
end
if templateid.empty?
createtemplate
else
puts "Template Exists"
end
我会做第一个选择,因为全局变量应该谨慎使用,但在如此短的脚本中它可能并不重要......
答案 1 :(得分:0)
它正在将变量添加到我们的方法def createtemplate(zbx) ,当你调用methood时,你会用zbx变量调用它。