用Puppet编码地狱

mmo*_*sen 11 ruby encoding puppet

我在用木偶编码地狱的文件.即使是最简单的尝试也行不通:

hiera-data/test.yaml:
---
test: Äñö

init.pp:
  $test = hiera('test')
  file { "/root/encoding.txt":
    ensure  => file,
    content => $test
  }
Run Code Online (Sandbox Code Playgroud)

在puppet服务器上一切都很好看:

puppet:~ # file -i /etc/puppetlabs/puppet/hiera-data/env/test.yaml
/etc/puppetlabs/puppet/hiera-data/env/test.yaml: text/plain charset=utf-8
puppet:~ # cat /etc/puppetlabs/puppet/hiera-data/env/test.yaml
---
test: Äñö
puppet:~ # locale
LANG=POSIX
LC_CTYPE=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

在傀儡代理人:

puppet-test:~ # locale
LANG=POSIX
LC_CTYPE=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

跑完后:

puppet-test:~ # file -i encoding.txt
encoding.txt: text/plain charset=utf-8
Run Code Online (Sandbox Code Playgroud)

但:

cat encoding.txt

更新:这里是约翰评论中提到的HEX数据(查看时vi :%!xxd):

0000000: efbf bdef bfbd efbf bdef bfbd efbf bdef  ................
0000010: bfbd 0a                                  ...
Run Code Online (Sandbox Code Playgroud)

更新:正如彼得的评论中所述,直接运行hiera并未提供任何进一步的见解.特别是,我只能在服务器上试用它,因为代理没有源. 在此输入图像描述

我的环境已经过时,但我不允许使用任何更新的版本(至少还没有,没有任何好的理由):

  • SuSE Enterprise Linux 11 Service Pack 3
  • Puppet Enterprise 3.8.6
  • PE-红宝石1.9.3.551-9.pe.sles11

我很感激任何洞察这个问题!

提前谢谢了

Sam*_*ods 0

拥有LANG=POSIX绝对会让事情变得混乱。 LANG决定控制台显示的编码。通常需要有LANGLC_TYPE匹配。

请参阅:“解释导出 LANG、LC_CTYPE、LC_ALL 的效果”。

有关详细信息,请LANG=POSIX参阅POSIX Locale

另外,在一个不相关的说明中,Puppet 3.8 在正确显示和/或保留 Unicode 字符方面肯定存在缺陷。最近的 Puppet 构建中已经完成了大量工作,以实现 Puppet 的完全国际化和本地化。