gpt4 book ai didi

vagrant - 如何在 Ansible 和 Vagrant 中调试 "ERROR! Unexpected Exception: Non-hexadecimal digit found"?

转载 作者:行者123 更新时间:2023-12-02 13:56:11 24 4
gpt4 key购买 nike

我在尝试使用 Ansible 运行 Vagrant 时遇到问题。以下是我尝试在 Windows 7 上的终端 (git bash) 中运行 vagrant upvagrant 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_pass 不是十六进制(它是一个字符串,无法更改)。在我同事的电脑上它可以正常工作,但在我的电脑上却不能。

.vault_pass 文件中的有问题的字符串看起来像 DBAKWeG3KOr3jKjBDbAz

我猜问题出在 Python 上,但我不确定,也不知道如何修复它。

当我尝试添加 -vvv 时,结果是:

ERROR! Unexpected Exception: Non-hexadecimal digit foundthe 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 foundAnsible failed to complete successfully. Any error output should bevisible above. Please fix these errors and try again.

最佳答案

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

例如:

加密字符串:

echo -n 'all that is gold does not glitter' | ansible-vault encrypt_string
Reading plaintext input from stdin. (ctrl-d to end input)
!vault |
$ANSIBLE_VAULT;1.1;AES256
61626566613637386434386364376236636636646263386561336463386132626335386335356463
3930303065646433346431383463653663356332306564310a653464313035383335633065666462
61303866343966613164623533323936383165623539623734316161373561383532326231623862
6439306562306433360a633038626233376262373561333630356662386462343566346565636364
64643961613064313964376266336330366566616435663130666135383739323962646563326336
3062636437636664363039383436306535303939323535353163

尝试解密:

echo '$ANSIBLE_VAULT;1.1;AES256
61626566613637386434386364376236636636646263386561336463386132626335386335356463
3930303065646433346431383463653663356332306564310a653464313035383335633065666462
61303866343966613164623533323936383165623539623734316161373561383532326231623862
6439306562306433360a633038626233376262373561333630356662386462343566346565636364
64643961613064313964376266336330366566616435663130666135383739323962646563326336
3062636437636664363039383436306535303939323535353163' | ansible-vault decrypt --vault-password-file ./vault-env
[WARNING]: There was a vault format error in -: Vault format unhexlify error:
Non-hexadecimal digit found
ERROR! Vault format unhexlify error: Non-hexadecimal digit found for -

要修复此问题,只需删除开头的 YAML 缩进空格即可:

echo '$ANSIBLE_VAULT;1.1;AES256
61626566613637386434386364376236636636646263386561336463386132626335386335356463
3930303065646433346431383463653663356332306564310a653464313035383335633065666462
61303866343966613164623533323936383165623539623734316161373561383532326231623862
6439306562306433360a633038626233376262373561333630356662386462343566346565636364
64643961613064313964376266336330366566616435663130666135383739323962646563326336
3062636437636664363039383436306535303939323535353163' | ansible-vault decrypt --vault-password-file ./vault-env
Decryption successful
all that is gold does not glitter%

关于vagrant - 如何在 Ansible 和 Vagrant 中调试 "ERROR! Unexpected Exception: Non-hexadecimal digit found"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37917385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com