前言:
有时需要对yaml文件中的某些敏感字段进行加密,这时就需要‘ansible-vault encrypt_string ’加密字符串,在使用过程中发现报错:Vault format unhexlify error: Odd-length string fatal,使用ansible-lint工具进行调试排查错误,本文记录了在使用过程中报错及解决的详细过程。
环境说明:
主机名 操作系统版本 ip ansible version 备注 ansible Centos 7.6.1810 172.27.34.51 2.9.9 ansible管理服务器 test85 Centos 7.6.1810 172.27.34.85 / 被管服务器一、encrypt_string
1.原始yaml文件
--- - hosts: test85 gather_facts: false vars: test_user: "testuser" test_passwd: "test123" tasks: - name: echo user and passwd debug: msg: "user is {{ test_user }},passwd is {{ test_passwd }}"用户名为testuser,密码为test123
2.对test_passwd字段加密
[root@ansible yaml]# more encrypt_string.txt abc123 [root@ansible yaml]# ansible-vault encrypt_string --vault-id encrypt_test@encrypt_string.txt --name password test123 password: !vault | $ANSIBLE_VAULT;1.2;AES256;encrypt_test 32623436636338383062356661633433613439333566356263643065306463326130323035366630 3635643531303466356463383537373131383336666533370a386265616664616130613464343632 61623332303433396663346563316236666239303862646632393565626364626238343638396535 6134616331363463320a623538336336393232303039353261643261336337373366353838336165 3832 Encryption successful使用‘ansible-vault encrypt_string’对密码字段test123加密;‘--vault-id’指定加解密字符串test123的密码为文件‘encrypt_string.txt’即abc123,后面运行encrypt_string.yaml会用到;‘encrypt_test’为加密test123的提示符;‘--name password’指定密码变量名为password。
3.修改yaml并运行
[root@ansible yaml]# more encrypt_string.yaml --- - hosts: test85 gather_facts: false vars: test_user: "testuser" test_passwd: !vault | $ANSIBLE_VAULT;1.2;AES256;encrypt_test 32623436636338383062356661633433613439333566356263643065306463326130323035366630 3635643531303466356463383537373131383336666533370a386265616664616130613464343632 61623332303433396663346563316236666239303862646632393565626364626238343638396535 6134616331363463320a623538336336393232303039353261643261336337373366353838336165 3832 tasks: - name: echo user and passwd debug: msg: "user is {{ test_user }},passwd is {{ test_passwd }}"将生成的密文替换test123并运行
[root@ansible yaml]# ansible-playbook encrypt_string.yaml --vault-id encrypt_string.txt‘--vault-id’指定运行encrypt_string.yaml的密码文件为encrypt_string.txt。
运行后发现报错: FAILED! => {"msg": "Vault format unhexlify error: Odd-length string"}
二、ansible-lint
ansible-lint是用于检测playbook的命令行工具,可用于yaml文件和role的语法检查。
1.安装ansible-lint
[root@ansible ansible]# pip install ansible-lint2.检查yaml
[root@ansible yaml]# ansible-lint encrypt_string.yaml [201] Trailing whitespace encrypt_string.yaml:12 3832提示第12行字符3832后面有空格
3.修复yaml并重新运行
按提示发现字符3832后面确实存在空格,删除并重新运行。
[root@ansible yaml]# ansible-playbook encrypt_string.yaml --vault-id encrypt_string.txt修复后运行结果符合预期。
结论:FAILED! => {"msg": "Vault format unhexlify error: Odd-length string"}该报错由密码文件后面的空格引起,可以使用ansible-lint工具进行检查并及时修复。
更多请点击:ansible系列文章