Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Puppet:如何从代理加载文件-第2部分_Puppet - Fatal编程技术网

Puppet:如何从代理加载文件-第2部分

Puppet:如何从代理加载文件-第2部分,puppet,Puppet,我试图加载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']['k

我试图加载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()
的函数。在大多数情况下,这意味着函数在主机上执行。由于主机上不存在某个_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中的一个hash。

我想仔细检查两个输入错误:“当我将其移动到Puppet master时”,您的意思是将其移动到我假定的节点;或者在其他一些情况下,json不会被移动到主服务器,因为这样会起作用。“我被告知使用一个函数”你实际上使用了一个自定义事实。无论如何,您最好的选择是一个外部事实:。看看那个医生,然后决定你要怎么做。不,我是说大师+我赞成这个建议。我现在需要读一下ruby!