在Ansible任务中包含使用vault加密的变量

51次阅读
没有评论

*

[WARNING]: There was a vault format error: Vault format unhexlify error: Odd-length string

fatal: [sherlock.server.com]: FAILED! => {“changed”: false, “msg”: “AnsibleVaultFormatError: Vault format unhexlify error: Odd-length string”}


用户已经确认不是换行符导致的问题,并且在网上查找了解决方法,但是仍然无法成功运行。

## 解决方案
> 请注意以下操作可能涉及版本差异,操作前请确保备份重要数据。

### 方案1: 使用加密文件
更稳妥且实际的解决方案是使用加密文件。以下是如何操作的示例:

1. 创建一个包含敏感信息的文件,例如`vault1.yml`,示例内容如下:

```yaml
my_email: admin@example.com
my_tag: tag123
  1. 使用ansible-vault encrypt命令加密文件:
ansible-vault encrypt vault1.yml
  1. 加密后的文件内容类似如下:
$ANSIBLE_VAULT;1.1;AES256333764313839303139653563643561363063383832383030323631656339626363666639393732373433383262306631643431346236653534316331643466660a326562663633346662656233353733633735616364326535356664376565373266356639356662616662373531363139393235353366653333666466656664610a633430313138393238653065623231393165383162656262646139353730636532313634656432376664656136316465393662626565373239323465303863643531323262343230623232393630396361333462343862323231323733376665
  1. 可以在不同位置使用加密后的文件。例如,可以在playbook中包含它:
- hosts: localhost
  tasks:
    - include_vars: vault1.yml
    - debug:
        msg: "email: {{ my_email }} tag: {{ my_tag }}"

方案2: 限制变量作用域

为了限制敏感变量的作用域,使解决方案更加安全,可以在任务中指定这些变量。以下是实现该目标的示例任务:

- debug:
    msg: "email: {{ my_vault.my_email }} tag: {{ my_vault.my_tag }}"
  vars:
    my_vault: "{{ lookup('file', 'vault1.yml')|from_yaml }}"

这将在任务中引入加密文件并使用其中的变量,实现与之前方案相同的结果。

请根据你的实际需求和安全要求选择适合的解决方案。

正文完