Ansible vault错误,带“;奇数长度字符串“;

Ansible vault错误,带“;奇数长度字符串“;,ansible,Ansible,我正在运行Ansible 1.8.2。 我在另一个系统上创建了一个Vault文件。在那个系统上,它工作没有任何问题。 但是,当我在本地系统上运行它时,会出现以下错误: $» ansible-vault --debug view vars/vaulted_vars.yml Vault password: Traceback (most recent call last): File "/usr/bin/ansible-vault", line 225, in main fn(args,

我正在运行
Ansible 1.8.2
。 我在另一个系统上创建了一个Vault文件。在那个系统上,它工作没有任何问题。 但是,当我在本地系统上运行它时,会出现以下错误:

$» ansible-vault --debug view vars/vaulted_vars.yml
Vault password:
Traceback (most recent call last):
  File "/usr/bin/ansible-vault", line 225, in main
    fn(args, options, parser)
  File "/usr/bin/ansible-vault", line 172, in execute_view
    this_editor.view_file()
  File "/usr/lib/python2.7/site-packages/ansible/utils/vault.py", line 280, in view_file
    dec_data = this_vault.decrypt(tmpdata)
  File "/usr/lib/python2.7/site-packages/ansible/utils/vault.py", line 136, in decrypt
    data = this_cipher.decrypt(data, self.password)
  File "/usr/lib/python2.7/site-packages/ansible/utils/vault.py", line 545, in decrypt
    data = unhexlify(data)
TypeError: Odd-length string

ERROR: Odd-length string
我试图手动输入密码或复制粘贴密码,但错误仍然发生


这里发生了什么以及如何修复此错误?

发现此错误是因为从Ansible 1.8.2开始,它需要对Vault文件进行非常特定的行尾编码

当我有这种类型的文件时,它会失败:

$» file vaulted_vars.yml
vaulted_vars.yml: ASCII text, with CRLF line terminators
但是,一旦我将其更改为此,它就开始工作:

$» file vaulted_vars.yml
vaulted_vars.yml: ASCII text

整个问题之所以发生,是因为我的git客户端正在更改换行符。有关详细信息,请参阅本文:

正如上面@Mxx(Thx!)所链接的那样,我已经稀释了在Windows计算机上使用LF行结尾所需的更改:

(假设您没有任何未限制的更改,也没有.gittributes文件)


这对我来说很管用。我可以访问vault,而不必每次都运行sed。

即使使用所有这些解决方案,编辑ansible vault文件对我也不起作用,直到我设置了EDITOR环境变量(无论出于何种原因,Linux发行版上没有设置):


确定这是否适用于您的一种方法是尝试
查看
vault文件(使用
ansible vault view
命令),以及
查看
是否工作正常,但
编辑
不工作,然后您需要将编辑器env变量设置为您最喜欢的编辑器。

在我的例子中,我从ansible vault encrypt的mobaxterm输出中复制了vault变量。这也包括结尾的空白。删除空白为我解决了问题。

有没有办法隔离有问题的文件?或者你是通过试错和/或猜测找到你的答案的?我也遇到了同样的问题,但我希望避免在我正在配置的3个角色中的每一个中检查所有5个文件。对每个文件运行
file
命令,它会告诉您。和/或确保您的git客户端配置为上面链接的I。对于
ansible 2.2.0.0
仍然有效。请从链接复制相关代码,以避免它在链接被弃用时消失。如果
ansible vault view
工作正常,则此问题不适用于您。从技术上讲,您是正确的,因为在用上述答案修复了“奇数长度字符串”错误之后,我最终遇到了编辑器env var问题,它抛出了一个不同的错误(“权限被拒绝”)。我可以删除我的答案,如果它不属于这里或没有提供任何额外的价值。
# create the .gitattributes file to set the line endings only for this repo
C:\projects\lfonly>copy con .gitattributes
* text eol=lf
^Z   (thats F6 + Enter)
1 file(s) copied.

# delete all cached local file! Warning any uncommited changes will be lost
git rm --cached -r .
git reset --hard
export EDITOR="/usr/bin/vi"