更新Opscode Chef中的自动属性(serialized_object)

时间:2013-12-19 19:01:10

标签: json postgresql attributes chef

我的厨师服务器中有几个节点在引导时遇到问题而错过了FQDN和域自动属性,因为它们没有被SOLR索引而不能用刀搜索。我无法重新启动这些机器,但想解决这个问题,我花了一段时间才这样做。因此,我发布这个希望它会节省其他时间。

1 个答案:

答案 0 :(得分:2)

自动属性由Chef存储在数据库中,不能用刀编辑(请参阅Chef Attributes Overview)。它们作为一个名为serialized_object的列存储在chef的数据库中,位于十六进制的节点表中,实际上是一个gzip压缩的JSON字符串。

获取JSON字符串:

  • 使用PostgreSQL客户端连接到厨师PostgreSQL(您可以在/etc/chef-server/chef-server-secrets.json中找到厨师服务器上的凭据)
  • 将serialized_object的内容保存到文件说serialized_object.hex(它应该看起来像'\ x1f8b08000 ......')
  • 运行:xxd -p -r serialized_object.hex> serialized_object.gz
  • 运行:gunzip serialized_object.gz

现在文件serialized_object包含您可以编辑的JSON格式的属性。编辑完成后,您可以按照以下步骤将其内容存回厨师服务器:

  • 运行:gzip serialized_object
  • 运行:xxd -p serialized_object.gz> serialized_object.hex
  • 现在您需要使用PostgreSQL客户端并使用以下查询插入Hex数据(确保从十六进制字符串中删除前缀反斜杠和x):

    更新节点设置serialized_object = decode('1f8b08000 ...','hex')其中name =''

希望这有助于某人:)