Puppet:如何从代理加载文件 - 第 2 部分
Puppet : How to load file from agent - Part 2
我正在尝试加载 json 文件的内容并将它们分配给变量。
我的 json 文件如下所示:
{ "master":{ "key1":"value1", "key2":"value2", "key3":"value3" } }
在我的本地机器上,我能够使用以下清单来加载 json 文件并解析它;它工作得很好。
$master_hash=loadjson('some_file.json')
$key1=$master_hash['master']['key1']
$key2=$master_hash['master']['key2']
$key3=$master_hash['master']['key3']
但是,当我将它移动到 Puppet master 时,它失败了,因为它在 Puppet master 上寻找 json 文件!在我之前的请求 Puppet : How to load file from agent
中,我被告知要使用一个函数并且它在一个事实中工作得很好,但在这种情况下我需要根据 json 文件的内容生成一些函数.我怎样才能做到这一点?
类似loadjson()
的函数在编译目录的机器上执行。在大多数情况下,这意味着函数在 master 上执行。由于 some_file.json 在 master 上不存在,因此不会加载文件。
如果你想将信息从代理转移到主人,那么你需要使用一个事实来做到这一点。事实同步到代理机器并在 运行 开始时执行,它们的值被发送回主机。
你之前问题的答案是一个很好的基础,但我会在这里稍微扩展一下:
# module_name/lib/facter/master_hash.rb
require 'json'
Facter.add(:master_hash) do
setcode do
# return content of foo as a string
f = File.read('/path/to/some_file.json')
master_hash = JSON.parse(f)
master_hash
end
end
setcode 块的最后一行作为事实值返回。在这种情况下,它将公开一个 $::master_hash
事实,该事实将包含来自已解析的 json.
的哈希
我正在尝试加载 json 文件的内容并将它们分配给变量。 我的 json 文件如下所示:
{ "master":{ "key1":"value1", "key2":"value2", "key3":"value3" } }
在我的本地机器上,我能够使用以下清单来加载 json 文件并解析它;它工作得很好。
$master_hash=loadjson('some_file.json')
$key1=$master_hash['master']['key1']
$key2=$master_hash['master']['key2']
$key3=$master_hash['master']['key3']
但是,当我将它移动到 Puppet master 时,它失败了,因为它在 Puppet master 上寻找 json 文件!在我之前的请求 Puppet : How to load file from agent
中,我被告知要使用一个函数并且它在一个事实中工作得很好,但在这种情况下我需要根据 json 文件的内容生成一些函数.我怎样才能做到这一点?
类似loadjson()
的函数在编译目录的机器上执行。在大多数情况下,这意味着函数在 master 上执行。由于 some_file.json 在 master 上不存在,因此不会加载文件。
如果你想将信息从代理转移到主人,那么你需要使用一个事实来做到这一点。事实同步到代理机器并在 运行 开始时执行,它们的值被发送回主机。
你之前问题的答案是一个很好的基础,但我会在这里稍微扩展一下:
# module_name/lib/facter/master_hash.rb
require 'json'
Facter.add(:master_hash) do
setcode do
# return content of foo as a string
f = File.read('/path/to/some_file.json')
master_hash = JSON.parse(f)
master_hash
end
end
setcode 块的最后一行作为事实值返回。在这种情况下,它将公开一个 $::master_hash
事实,该事实将包含来自已解析的 json.