エラーメッセージは以下のようなもの。
FATAL: Encoding::UndefinedConversionError: "\x8B" from ASCII-8BIT to UTF-8
確認してみたところ、json への変換部分でエラーになっている模様。
lib/chef/node.rb
# Serialize this object as a hash
def to_json(*a)
result = {
"name" => name,
"chef_environment" => chef_environment,
'json_class' => self.class.name,
"automatic" => automatic_attrs,
"normal" => normal_attrs,
"chef_type" => "node",
"default" => default_attrs,
"override" => override_attrs,
#Render correctly for run_list items so malformed json does not result
"run_list" => run_list.run_list.map { |item| item.to_s }
}
result["_rev"] = couchdb_rev if couchdb_rev
result.to_json(*a)
end
result の中身で "\x8B" が入っているところを探すと、userdata の部分にありました。{ ... "userdata"=>"\x1F\x8B ... }
どうやら、user-data を作成する際に圧縮をしていたため、userdata にバイナリのデータが入っていたことが原因のようです。
CloudInit のページを参考に、user-data を圧縮していたのですが、16KB のサイズ制限を超えているわけでもないので、圧縮しないことで回避することにしました。
user-data の内容は、Node の Attribute に含まれていて、chef-server で Attribute を表示するためなどの目的で、json へ変換しているのですね。
0 件のコメント:
コメントを投稿