Vagrant “如何调试”;错误!意外异常:找到非十六进制数字;流浪汉?

Vagrant “如何调试”;错误!意外异常:找到非十六进制数字;流浪汉?,vagrant,virtualbox,ansible,vagrant-windows,ansible-vault,Vagrant,Virtualbox,Ansible,Vagrant Windows,Ansible Vault,我正面临着一个问题,试图与Ansible一起流浪。以下是我在Windows 7上尝试在终端(git bash)中运行vagrant up或vagrant provision时遇到的错误: ERROR! Unexpected Exception: Non-hexadecimal digit found to see the full traceback, use -vvv Ansible failed to complete successfully. Any error output shoul

我正面临着一个问题,试图与Ansible一起流浪。以下是我在Windows 7上尝试在终端(git bash)中运行
vagrant up
vagrant provision
时遇到的错误:

ERROR! Unexpected Exception: Non-hexadecimal digit found
to see the full traceback, use -vvv
Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.
之所以发生这种情况,是因为
Ansible vault
文件
.vault\u pass
不是十六进制(它是一个字符串,不能更改)。在我学院的电脑上它工作正常,但在我的电脑上却不正常

.vault\u pass
文件中有问题的字符串看起来像
DBAKWeG3KOr3jKjBDbAz

我想这是Python的问题,但我不确定,也不知道如何解决它

当我尝试添加
-vvv
时,这是资源:

ERROR! Unexpected Exception: Non-hexadecimal digit found the full traceback was: Traceback (most recent call last): File "/usr/bin/ansible-playbook", line 92, in exit_code = cli.run() File "/usr/lib/python2.7/dist-packages/ansible/cli/playbook.py", line 132, in run inventory = Inventory(loader=loader, variable_manager=variable_manager, host_list=self.options.inventory) File "/usr/lib/python2.7/dist-packages/ansible/inventory/__init__.py", line 85, in __init__ self.parse_inventory(host_list) File "/usr/lib/python2.7/dist-packages/ansible/inventory/__init__.py", line 144, in parse_inventory group.vars = combine_vars(group.vars, self.get_group_variables(group.name)) File "/usr/lib/python2.7/dist-packages/ansible/inventory/__init__.py", line 509, in get_group_variables self._vars_per_group[groupname] = self._get_group_variables(groupname, vault_password=vault_password) File "/usr/lib/python2.7/dist-packages/ansible/inventory/__init__.py", line 527, in _get_group_variables vars = combine_vars(vars, self.get_group_vars(group)) File "/usr/lib/python2.7/dist-packages/ansible/inventory/__init__.py", line 707, in get_group_vars return self._get_hostgroup_vars(host=None, group=group, new_pb_basedir=new_pb_basedir) File "/usr/lib/python2.7/dist-packages/ansible/inventory/__init__.py", line 746, in _get_hostgroup_vars results = combine_vars(results, self._variable_manager.add_group_vars_file(base_path, self._loader)) File "/usr/lib/python2.7/dist-packages/ansible/vars/__init__.py", line 578, in add_group_vars_file (name, data) = self._load_inventory_file(path, loader) File "/usr/lib/python2.7/dist-packages/ansible/vars/__init__.py", line 535, in _load_inventory_file _found, results = self._load_inventory_file(path=p, loader=loader) File "/usr/lib/python2.7/dist-packages/ansible/vars/__init__.py", line 550, in _load_inventory_file data = loader.load_from_file(path) File "/usr/lib/python2.7/dist-packages/ansible/parsing/dataloader.py", line 113, in load_from_file (file_data, show_content) = self._get_file_contents(file_name) File "/usr/lib/python2.7/dist-packages/ansible/parsing/dataloader.py", line 172, in _get_file_contents data = self._vault.decrypt(data) File "/usr/lib/python2.7/dist-packages/ansible/parsing/vault/__init__.py", line 169, in decrypt b_data = this_cipher.decrypt(b_data, self.b_password) File "/usr/lib/python2.7/dist-packages/ansible/parsing/vault/__init__.py", line 674, in decrypt data = unhexlify(data) TypeError: Non-hexadecimal digit found Ansible failed to complete successfully. Any error output should be visible above. Please fix these errors and try again. 错误!意外异常:找到非十六进制数字 完整的回溯是: 回溯(最近一次呼叫最后一次): 文件“/usr/bin/ansible playbook”,第92行,在 退出\u code=cli.run() 文件“/usr/lib/python2.7/dist-packages/ansible/cli/playbook.py”,第132行,正在运行 库存=库存(加载器=加载器,变量管理器=变量管理器,主机列表=self.options.inventory) 文件“/usr/lib/python2.7/dist packages/ansible/inventory/_init__.py”,第85行,在_init中__ self.parse\u目录(主机\u列表) 文件“/usr/lib/python2.7/dist packages/ansible/inventory/_init__.py”,第144行,在parse_inventory中 group.vars=combine_vars(group.vars,self.get_group_变量(group.name)) 文件“/usr/lib/python2.7/dist packages/ansible/inventory/_init__.py”,第509行,在get_组变量中 self.\u vars\u per\u group[groupname]=self.\u获取组变量(groupname,vault\u password=vault\u password) 文件“/usr/lib/python2.7/dist packages/ansible/inventory/_init__.py”,第527行,在_get_group_变量中 变量=组合变量(变量,自。获取组变量(组)) 文件“/usr/lib/python2.7/dist packages/ansible/inventory/_init__.py”,第707行,在get_组变量中 返回self.\u获取\u主机组\u变量(主机=无,组=组,新的\u-pb\u-basedir=新的\u-pb\u-basedir) 文件“/usr/lib/python2.7/dist packages/ansible/inventory/_init__.py”,第746行,位于主机组变量中 结果=组合变量(结果、自变量、管理器。添加组变量、文件(基本路径、自加载程序)) 文件“/usr/lib/python2.7/dist packages/ansible/vars/________init__.py”,第578行,在add_group_vars_文件中 (名称、数据)=自身。\u加载\u清单\u文件(路径、加载程序) 文件“/usr/lib/python2.7/dist packages/ansible/vars/_init__.py”,第535行,在加载清单文件中 _找到,结果=self.\u加载\u清单\u文件(路径=p,加载程序=loader) 文件“/usr/lib/python2.7/dist packages/ansible/vars/_init__.py”,第550行,在加载清单文件中 data=loader.load\u from\u文件(路径) 文件“/usr/lib/python2.7/dist packages/ansible/parsing/dataloader.py”,第113行,从文件加载 (文件数据,显示内容)=self.\u获取文件内容(文件名) 文件“/usr/lib/python2.7/dist packages/ansible/parsing/dataloader.py”,第172行,在“获取文件”内容中 数据=自身。\u vault.decrypt(数据) 文件“/usr/lib/python2.7/dist-packages/ansible/parsing/vault/__-init__.py”,第169行,在decrypt中 b_data=此_密码.解密(b_数据,self.b_密码) 文件“/usr/lib/python2.7/dist packages/ansible/parsing/vault/_init__.py”,第674行,在decrypt中 数据=不精确(数据) TypeError:找到非十六进制数字 Ansible未能成功完成。任何错误输出都应该是
可见上面。请修复这些错误并重试。当编码文件包含回车(\r)符号时,可能会出现此问题


如果您是通过git获取文件的,那么应该正确配置git—将
core.eol=lf
设置为
.gitconfig

这与加密文件末尾的Windows行结尾有关。
只需将最后一行的结尾切换到Unix并保存文件

为了防止有人遇到同样的问题,我在尝试手动解密直接从YAML文件(或从
ansible vault encrypt_string
的输出)复制的变量时遇到了这个问题

例如:

加密字符串:

echo-n“黄金不闪烁”|易变保险库加密|
从标准输入读取明文输入。(按ctrl-d键结束输入)
!拱顶|
$ANSIBLE_保险库;1.1;AES256
61626566613637386434386364376236636636646263386561336463386132626335386335356463
3930303065646433346431383463636366332306564310A65346436431303538333563306566462
61303866343966613164623533323936383165623539623734316161373561383532326231623862
6439306562306433360A6330388626233376262373561333630566623864623435663465656364
64643961613064313964376266336330366566616435663130666135383739323962646563326336
3062636437636664363039383436306535303939323535353163
正在尝试解密:

echo'$ANSIBLE\u保险库;1.1;AES256
61626566613637386434386364376236636636646263386561336463386132626335386335356463
3930303065646433346431383463636366332306564310A65346436431303538333563306566462
61303866343966613164623533323936383165623539623734316161373561383532326231623862
6439306562306433360A6330388626233376262373561333630566623864623435663465656364
64643961613064313964376266336330366566616435663130666135383739323962646563326336
306263643763666436303938343630635353039323535353163'| ansible vault decrypt--vault密码文件。/vault env
[警告]:在-:vault format Unexlify错误中存在vault格式错误:
找到非十六进制数字
错误!Vault格式不精确错误:为找到非十六进制数字-
要解决此问题,只需删除开头的YAML缩进空格:

echo'$ANSIBLE\u保险库;1.1;AES256
61626566613637386434386364376236636636646263386561336463386132626335386335356463 
3930303065646433346431383463636366332306564310A65346436431303538333563306566462
6130386634396661316462353332393638316562353962373431616
   mysql_pw: !vault |
           $ANSIBLE_VAULT;1.1;AES256
           35336630636134383938626366353162326236363966353535356361373465616364383336366536
           6630373462316336333830643331376464633961643633380a623863373966323432646236306239
           36326465343239343766363936653631643761646562306530363262633262323966623530373664
           3239376534303565340a623262646132623033383964366438633964303633363430373463633033
           3164    < spaces here