如何在Ansible Playbook中使用CLI传入的Vault密码?
如何在Ansible Playbook中引用CLI传入的Vault密码用于加密?
我想在Ansible Playbook里用CLI传入的Vault密码,对生成的明文密码进行加密。当前的Playbook代码如下:
# generate_password.yml --- - name: Generate and Encrypt Passwords hosts: "localhost" connection: local gather_facts: no tasks: - name: Generate Passwords set_fact: encrypted_password: "{{ plaintext_password | ansible.builtin.vault(ansible_vault_password) }}" vars: plaintext_password: "{{ lookup('community.general.random_words', min_length=5, numwords=4, delimiter='-', case='capitalize') }}"
我需要把密码传入ansible.builtin.vault(ansible_vault_password)过滤器中,目前只能通过环境变量或vars_prompt获取ansible_vault_password,请问能不能直接提取或引用通过以下CLI选项传入的Vault密码?
# 通过CLI选项传入Vault密码的方式 ansible-playbook generate_password.yml --ask-vault-pass # 或者使用密码文件 ansible-playbook generate_password.yml --vault-pass-file /path/to/vault-pass.txt
解答
Ansible默认不会将通过--ask-vault-pass或--vault-pass-file传入的Vault密码暴露为Playbook可直接引用的变量,所以没法直接在过滤器里使用这个密码。不过可以用以下几种替代方案实现需求:
方案一:借助环境变量传递密码
如果用--ask-vault-pass,可以先让用户输入密码并存入环境变量,再执行Playbook:read -s VAULT_PASSWORD && export VAULT_PASSWORD ansible-playbook generate_password.yml --vault-password-file <(echo $VAULT_PASSWORD)然后在Playbook里引用环境变量:
encrypted_password: "{{ plaintext_password | ansible.builtin.vault(lookup('env', 'VAULT_PASSWORD')) }}"方案二:直接读取密码文件内容
如果使用--vault-pass-file指定了密码文件,直接在Playbook里读取该文件的内容即可:vars: ansible_vault_password: "{{ lookup('file', '/path/to/vault-pass-file') }}"这样既保证了CLI传入密码文件的一致性,又能在过滤器中使用密码。
方案三:合并vars_prompt与Vault认证
用vars_prompt让用户输入一次密码,同时用--vault-id @prompt指定同一个密码源,避免重复输入:vars_prompt: - name: ansible_vault_password prompt: "Enter Vault password" private: yes执行Playbook时:
ansible-playbook generate_password.yml --vault-id @prompt
内容的提问来源于stack exchange,提问作者honeybeeham
相关产品推荐
相关产品推荐

