Ошибки 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 каждый раз.