Ошибки Ansible-vault с " строкой нечетной длины"

Я Ansible 1.8.2. У меня есть сводчатый файл, созданный в другой системе. На этой системе он работает без каких-либо проблем. Однако, когда я запускаю его в своей локальной системе, я получаю следующую ошибку:

$» 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

Я пытался вручную ввести пароль или скопировать его, но ошибка все равно происходит.

что здесь происходит и как исправить эту ошибку?

4 ответов


оказывается, эта ошибка из-за того, что с Ansible 1.8.2 она требует очень специфической кодировки конца строки для сводчатых файлов.

когда у меня был этот тип файла, он потерпел бы неудачу:

$» file vaulted_vars.yml
vaulted_vars.yml: ASCII text, with CRLF line terminators

однако, как только я изменил его на это, он начал работать:

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

вся эта проблема возникла из-за того, что мой клиент git менял символы ввода строк. См. эту статью для деталей: https://help.github.com/articles/dealing-with-line-endings/


даже со всеми этими решениями редактирование файлов Ansible vault не работало для меня, пока я не установил переменную среды редактора (по какой-либо причине она не была установлена в моем дистрибутиве Linux):

export EDITOR="/usr/bin/vi"

один из способов выяснить, относится ли это к вам, - попытаться view хранилище файлов (с ) и если view работает нормально, но edit нет, тогда вам нужно установить редактор переменная env для вашего любимого редактора.


некоторые разработчики, использующие Windows, столкнулись с той же проблемой. т. е. возникновение ERROR: Odd-length string при работе ansible. Оказалось, что файлы, содержащие переменные ASCII text, with CRLF line terminators:

user@host ~/path/to/ansible $ file *_vars/*/*
group_vars/groupname/vars: ASCII text, with CRLF line terminators
host_vars/hostname/vars:   ASCII text, with CRLF line terminators

после sed -i 's/\r//' *_vars/*/* на crlf было изъято:

user@host ~/path/to/ansible $ file *_vars/*/*
group_vars/groupname/vars: ASCII text
host_vars/hostname/vars:   ASCII text

и запуск ansible удался.


Как уже было связано выше @Mxx (Thx!) Я разбавил необходимые изменения для того, чтобы иметь на LF-линии окончания на машине Windows:

(при условии, что у вас нет незафиксированных изменений и нет .gitattributes файл пока)

# 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

Это сделало работу для меня. Я смог получить доступ к хранилищу без необходимости запускать sed каждый раз.