Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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
puppetdb将哈希事实存储为我的一些节点的字符串_Puppet - Fatal编程技术网

puppetdb将哈希事实存储为我的一些节点的字符串

puppetdb将哈希事实存储为我的一些节点的字符串,puppet,Puppet,一些应该是散列的事实作为字符串存储在puppetdb中 例如: curl -X GET http://localhost:8080/v3/nodes/tcentos/facts/partitions [ { "value" : "sda1uuid1b97126a-beb2-4843-8c7b-4e6e12cbfbb7mount/bootsize1024000filesystemext4sda2size40916992filesystemLVM2_member", "name" : "pa

一些应该是散列的事实作为字符串存储在puppetdb中

例如:

curl -X GET http://localhost:8080/v3/nodes/tcentos/facts/partitions
[ {
  "value" : "sda1uuid1b97126a-beb2-4843-8c7b-4e6e12cbfbb7mount/bootsize1024000filesystemext4sda2size40916992filesystemLVM2_member",
  "name" : "partitions",
  "certname" : "tcentos"
} ]
而应该是这样的:

curl -X GET http://localhost:8080/v3/nodes/tfedora20/facts/partitions
[ {
  "value" : "{\"sda1\"=>{\"uuid\"=>\"8e6cda9b-54b7-4daa-a25c-1864a163f7a8\", \"size\"=>\"1024000\", \"mount\"=>\"/boot\", \"filesystem\"=>\"ext4\"}, \"sda2\"=>{\"size\"=>\"15751168\", \"filesystem\"=>\"LVM2_member\"}}",
  "name" : "partitions",
  "certname" : "tfedora20"
} ]
当我在tcentos节点上运行facter分区时,返回值是OK

[root@tcentos ~]# facter partitions
{"sda1"=>{"mount"=>"/boot", "filesystem"=>"ext4", "size"=>"1024000", "uuid"=>"1b97126a-beb2-4843-8c7b-4e6e12cbfbb7"}, "sda2"=>{"filesystem"=>"LVM2_member", "size"=>"40916992"}}
我的木偶环境:

Puppet Master : 3.7.5
Puppet Agent  : 3.7.5
PuppetDB      : 2.3.0
我所有节点上的puppet代理和facter都是完全相同的版本。有人有同样的问题吗

------------更新-----------

我是在@FelixFrank的帮助下从评论中得到原因的。这是关于

我们可以在所有代理和主机的puppet.conf主部分中设置stringify_facts=false,以禁用将事实值展平到字符串。根据,结构化事实支持默认从3.7及更高版本启用。但是我想开源Puppet的默认行为是不同的,所以我们必须明确地添加这个设置

curl -X GET http://localhost:8080/v3/nodes/tcentos/facts/partitions
[ {
  "value" : "{\"sda1\":{\"filesystem\":\"ext4\",\"mount\":\"/boot\",\"size\":\"1024000\",\"uuid\":\"1b97126a-beb2-4843-8c7b-4e6e12cbfbb7\"},\"sda2\":{\"filesystem\":\"LVM2_member\",\"size\":\"40916992\"}}",
  "name" : "partitions",
  "certname" : "tcentos"
} ]

虽然结果仍然是一个字符串而不是实际的JSON数据,但这比键值串联要好得多,而且我可以轻松解析它。

它们看起来都很有趣。第一种是通过键和值的串联实现的字符串化,另一种是包含JSON数据的字符串。您收到的JSON是否应该不包含实际的JSON哈希而不是任何一个字符串?@FelixFrank哦,您是对的,我甚至没有注意到这一点。第二个是不太正常的,因为奇怪的转义字符。所以实际上它们都存储为字符串或表示为字符串!但我在哪里能找到原因呢?这些一级键值表示为正常值,问题在于嵌套键值。键值对中的值必须是PuppetDB中的字符串?有什么想法吗?我模模糊糊地记得一些关于傀儡的事情,它仍然对每一次违约都严格规定事实,甚至是结构化的事实。我相信这是一个傀儡特工的安排。@FelixFrank你为我指明了正确的方向。是的,这有一个设置,即严格化事实。我在puppet.conf中添加了stringify_facts=false,它起了作用……至少不只是键和值的串联。非常感谢。FWIW,主配置可能在这方面没有发言权。