#Ansible
#Debian
Ansible password_hash Filter Error "Unexpected templating type error occurred on / expected string or bytes-like object, got 'AnsibleVaultEncryptedUnicode'"
Bei der Verwendung des Ansible password_hash Filters bin ich in der Kombination mit ansible-vault encrypt_string
auf einen Fehler gestoßen, der anscheinend ein Ansible Bug ist.
Der Fehler tritt nur auf, wenn man die Input Variablen für den password_hash Filter mit ansible-vault encrypt_string
im Variablen File verschlüsselt. Wenn die Variablen im Klartext gespeichert oder das ganze Variablen File mit ansible-vault encrypt
verschlüsselt ist, tritt der Fehler nicht auf.
Group Vars File mit ansible-vault encrypt_string Feldern und password_hash Fehler
encrypted_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
33613566396665383038343939376263633637646666336332623131343139323432323834343939
3337303834316135383738613032643330616463303333340a653230386233636161373633363531
62393035613861333462636564366633316366656336626237353930636536626534396566656231
6463323333303338350a336634636130363432363533393634353363306530616263623061306533
3163
encrypted_salt: !vault |
$ANSIBLE_VAULT;1.1;AES256
66343832623566393831333138323161376361353139646465393838626137623034613161656162
6231666638356132326263376161333133656433376636330a353138626139663434333434666138
62663462663032363239303733663534626363373838646239373463626230333966666661313733
6338373465303135310a323138653065316435613035613639616362393737663063646333636565
3861
Task der den Fehler erzeugt:
- name: encrypted password, encrypted salt
debug:
msg: "{{ encrypted_password | password_hash('sha512', encrypted_salt ) }}"
Fehlermeldung:
TASK [encrypted password, encrypted salt] ******************************************************************************
fatal: [localhost]: FAILED! => {"msg": "Unexpected templating type error occurred on ({{ encrypted_password | password_hash('sha512', encrypted_salt ) }}): secret must be unicode or bytes, not ansible.parsing.yaml.objects.AnsibleVaultEncryptedUnicode. secret must be unicode or bytes, not ansible.parsing.yaml.objects.AnsibleVaultEncryptedUnicode"}
Der Fehler tritt auch auf wenn, die python3-passlib
, wie von Ansible empfohlen, installiert ist. Sie wird bei Debian Bookworm nicht automatisch mit installiert wenn man Ansible installiert.
Workaround mit String Filter
Da Ansible sich anscheinend am Typ der übergebenen Werte stört, kann man diese in Strings umwandeln.
- name: workaround for encrypted password, encrypted salt with crypt module
debug:
msg: "{{ (encrypted_password | string) | password_hash('sha512', (encrypted_salt | string)) }}"
Damit wird der Fehler umgangen und das Playbook läuft durch.
TASK [workaround for encrypted password, encrypted salt with crypt module] *********************************************
ok: [localhost] => {
"msg": "$6$rounds=656000$salt12345$DFMarRCWSXSxndha2VBuDFGtPLyWjJlCl72HIY/ywi6nw/MhsiVjWcBcfjjEGz03DZzKBQj5ACvBc7uowD1LM/"
}