Я пытаюсь вызвать функцию Ansible password_hash
таким образом ...
{{ admin_password | password_hash('bcrypt') }}
и я попробовал дюжину способов сообщить Ansible, где находятся passlib и python 2.7, но несмотря ни на что, я постоянно получаю результат ...
"AnsibleFilterError: crypt.crypt does not support 'bcrypt' algorithm"
Из того, что я вижу, ansible раньше использовал только crypt
, но в более новых версиях (я в настоящее время на 2.7.9) использую passlib
, когда он есть, и passlib поддерживает bcrypt, насколько я понимаю (что ограничено). Я добавил следующее в мой файл hosts ...
ansible_python_interpreter = /usr/bin/python2.7
Я устанавливаю PIP и Passlib вот так ...
- name: Install PY stuff...
yum:
name: ['python2-pip','python2-passlib']
state: present
- name: Ensure bcrypt support is installed for python passlib
pip:
name: "passlib[bcrypt]"
executable: pip-2.7
Я бы ожидал, что вызов yum настроит passlib должным образом, но он не сработал, поэтому я попытался сделать это только через PIP, он тоже не сработал, поэтому я попробовал описанное выше, которое до сих пор не работает. за работой. Я не был уверен, включил ли passlib bcrypt при установке через yum, потому что при использовании только PIP этого не происходит, так что на всякий случай я сделал и то, и другое. Радости нет.
Я должен добавить, что я нахожусь в AWS на Amazon Linux 2, и я включил репозиторий epel и т. Д.
РЕДАКТИРОВАТЬ: я попробовал несколько предложений из комментариев (используя passlib 1.6, проверяя, работает ли bcrypt с python), и хотя я могу убедиться, что passlib работает при тестировании в python, но я продолжаю получать тот же ответ от Ansible AnsibleFilterError: crypt.crypt does not support 'bcrypt' algorithm
Единственное, что я нашел в связи с этим, здесь: https://github.com/ansible/ansible/issues/17266, но он описывает по умолчанию, что он ищет passlib и только откат на crypt.crypt, когда его нет. Так почему же Python видит passlib, когда я запускаю его вручную, а не из playbook?