繁体   English   中英

木偶:如何从代理加载文件-第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主机时,这会失败,因为它会在Puppet主机上查找json文件! 在我先前的请求Puppet : How to load file from agent ,我被告知使用一个函数,该函数对于一个事实运行良好,但是在这种情况下,我需要根据json文件的内容生成许多函数。 我该如何实现?

诸如loadjson()类的函数在正在编译目录的计算机上执行。 在大多数情况下,这意味着功能在主机上执行。 由于master上不存在some_file.json,因此不会加载文件。

如果要将信息从代理传输到主服务器,则需要使用事实来进行传输。 事实将同步到代理计算机,并在运行开始时执行,并将其值发送回主服务器。

您上一个问题的答案是一个很好的基础,但在这里我将对其进行扩展:

# 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的哈希。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM