【问题标题】:How to fix encoding problems with Puppet如何解决 Puppet 的编码问题
【发布时间】:2017-10-03 15:33:46
【问题描述】:

我在 Puppet 的文件编码地狱中。 即使是最简单的尝试也不起作用:

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

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

在 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

关于傀儡代理:

puppet-test:~ # locale
LANG=POSIX
LC_CTYPE=en_US.UTF-8

运行后:

puppet-test:~ # file -i encoding.txt
encoding.txt: text/plain charset=utf-8

但是

这是要求的十六进制数据:

0000000: efbf bdef bfbd efbf bdef bfbd efbf bdef  ................
0000010: bfbd 0a                                  ...

直接运行 hiera 不会提供任何进一步的见解。特别是我只能在服务器上试用,因为代理没有源。

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

  • SuSE Enterprise Linux 11 Service Pack 3
  • 傀儡企业 3.8.6
  • pe-ruby-1.9.3.551-9.pe.sles11

我将不胜感激对此问题的任何见解。

【问题讨论】:

  • 你确定问题不是你的终端吗?在十六进制编辑器(或具有二进制/十六进制模式的文本编辑器)中打开 encoding.txt 并检查文件是否包含正确的字节。特别是,您提供的字符串的 UTF-8 编码将由以下六个字节组成:c3 84 c3 b1 c3 b6。如果它包含不同的内容,请将其添加到您的问题中。
  • 我用缺失的信息更新了问题,谢谢@JohnBollinger
  • 再看一遍,这似乎不是傀儡问题。这似乎是系统环境问题。
  • @MattSchuchard:可能是,但我可以检查什么才能更进一步?
  • 如果从命令行使用 hiera 会得到什么?例如:`# hiera -d test > test-encoding.txt`(您可能必须使用 -c 来查找正确的文件)

标签: ruby encoding puppet


【解决方案1】:

拥有LANG=POSIX 肯定会让事情变得棘手。 LANG 决定了控制台显示的编码。通常希望LANGLC_TYPE 匹配。

参见:“Explain the effects of export LANG, LC_CTYPE, LC_ALL”。

有关LANG=POSIX 的更多信息,请参阅POSIX Locale

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

【讨论】:

  • 嗨@Sam,对不起,但你的回答,也不是链接,给我任何胶水接下来要尝试什么......无论如何,我在使用LANG=de_DE.UTF-8的节点上得到了相同的结果。但仍然非常感谢您的回答...
猜你喜欢
  • 1970-01-01
  • 2020-02-27
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 2020-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多