Puppet:(服务器 8)使用存储在 hiera 中的二进制数据会导致“服务器上出现错误 500”

问题描述 投票:0回答:1

我们的网站正在从 puppet6 迁移到 puppet8,我们遇到了在 hiera 中存储二进制数据的问题。

原始(二进制)数据文件已使用 eyaml 加密:

$ eyaml encrypt -f binary.data > binary.data.eyaml

生成的 eyaml 文件包含在 Hiera yaml 文件中,如下所示:

test::func::data: >
    ENC[PKCS7,.....
    ...]

使用此代码时:

test::func{ 'hello':
     data    =>  lookup('binary::data')
}

与:

define test::func(
  Binary $data
) {
}

导致错误:

Test::Func[hello]: parameter 'data' expects a Binary value, got String

但是使用“String”类型(适用于 puppet6)

define test::func(
  String $data
) {
}

结果:

Error: Could not retrieve catalog from remote server: Error 500 on
SERVER: Server Error: Failed to serialize Puppet::Resource::Catalog
for 'puppetserver': Could not render to
Puppet::Network::Format[rich_data_json]: source sequence is
illegal/malformed utf-8

这是从 6 变为 8 的行为变化。

关于如何解决这个问题有什么建议吗?

puppet hiera
1个回答
0
投票

YAML hiera 后端仅支持基本类型。由于 Binary 不是这些类型之一,因此您需要显式配置 hiera 以返回这样的值。

使用lookup_options配置 hiera 以将特定值转换为所需类型

例如,根据您的用例,在“通用”control-repo hiera 文件中添加以下内容以确保查找值以二进制形式返回:

lookup_options:
  binary::data:
    convert_to: Binary
© www.soinside.com 2019 - 2024. All rights reserved.