2013-12-19 21 views
1

我的厨师服务器中有几个节点在引导过程中遇到问题,并且错过了FQDN和域自动属性,因此它们不是由SOLR索引的,也不是由刀子搜索的。我无法重新启动这些机器,但想要解决这个问题,并且花了我一段时间。因此,我发布这个希望它可以节省一些时间的人。更新Opscode Chef(serialized_object)中的自动属性

回答

2

厨师在数据库中存储自动属性,不能用刀子编辑(请参阅厨师属性概述)。它们以十六进制格式存储在厨师的数据库中,名为serialized_object,位于节点表中,实际上是一个经过gzip压缩的JSON字符串。

要获得JSON字符串:

  • 使用PostgreSQL的客户端连接到厨师的PostgreSQL(你可以找到在/ etc /厨师服务器/厨师服务器秘密厨师服务器上的凭据。 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客户端并使用以下查询插入十六进制数据(确保从十六进制字符串中删除前缀反斜杠和x):

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

希望这可以帮助别人:)

+0

因为PostgreSQL自动压缩列值,所以它们将它存储为gzip JSON是很搞笑的。 –