Ansible

Ansible-vault 內聯加密字元串拋出錯誤

  • June 22, 2021

我在使用 Ansible/Ansible-vault 中的內聯加密字元串時遇到問題。

我將 Ansible Vault 密碼儲存在一個文件中,並有一個聲明它的本地配置文件:

[defaults]
vault_password_file = ./my_vault_pass

由於我已經定義了一個 vault_password_file,我使用以下命令創建了我的加密變數:

ansible-vault encrypt_string --stdin-name 'username'

出現提示時,我輸入要加密的值,然後按兩次 CTRL-D 而不按輸入鍵。然後我獲取該命令的輸出並用它替換變數定義。

我的 tasks/main.yml 文件最終是這樣的

$$ redacted $$

---
- name: Clone the template
 vmware_guest:
   hostname: 1.2.3.4
   username: !vault |
         $ANSIBLE_VAULT;1.1;AES256
         63353665383934386565306639633734366666303465306364323761323938383433643133313933
         3939356663626465303465646265653731626463386261610a306361343436613030336639303533
         64613337326332353933313931303537653833623863343435623730316266643636373831363937
         6231643937376665620a326465343239643237366465353965376532336365346631653466623038
         35636135303233623733306632333833663535646230393335303261633535353636
   password: 'my_password'
   validate_certs: False
   name: testvm_2
   template: 'template-name'
   datacenter: DC1
   folder: /Test
   state: poweredon
   wait_for_ip_address: yes

但是,由於username:更改是唯一的更改,我現在收到一個錯誤:

PLAY [localhost] *************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************
ok: [localhost]

TASK [common : Clone the template] *******************************************************************************************
fatal: [localhost]: FAILED! => {"msg": "Unable to pass options to module, they must be JSON serializable: Object of type AnsibleVaultEncryptedUnicode is not JSON serializable"}

PLAY RECAP *******************************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   

我似乎找到了解決我自己問題的方法:

在 Ansible 中似乎不可能加密模組變數。一種解決方法是使用技巧和技巧中描述的 Jinja 語法將變數間接到 vars.yml 文件。

IE

任務.yml

   password: '{{ vault_password }}'

然後在 vars.yml 中(我使用了 vars/main.yml,因為我正在使用目錄佈局的最佳實踐

vault_password: !vault |
         $ANSIBLE_VAULT;1.1;AES256
         30373438353463646433363433616631616434616237636432653530353330636236666332363661
         6565323338643139623737646431333332383432613962640a636537306139646539303762646166
         61363435643137363738656235613330663131613333656538323035666261336334383138663965
         6365356130346537300a363961623261653030363433353737386666306131336631343633396262
         6565

引用自:https://serverfault.com/questions/1067351