剧本中 VAULT_PASSWORD 的使用

问题描述 投票:0回答:1

考虑以下测试手册

vault.yaml
,其中包含一个 Ansible Vault 加密变量:

---
- name: Ansible Vault
  hosts: localhost
  connection: local
  gather_facts: false
  vars_prompt:
    - name: playbook_action
      prompt: "Select an action to perform:\n
        1) List encrypted variables\n
        2) Update global password\n"
      private: false
  tasks:
    - name: Encrypted Variables
      when: playbook_action in ['1', '1)']
      block:
        - name: Set encrypted variables fact
          ansible.builtin.set_fact:
            encrypted_variables:
              - ansible_password: '{{ ansible_password }}'
          no_log: true

        - name: List encrypted variables
          ansible.builtin.debug:
            var: encrypted_variables

    - name: Global Password
      when: playbook_action in ['2', '2)']
      block:
        - name: Set new global password
          ansible.builtin.pause:
            prompt: Password
            echo: false
          register: password

        - name: Update global password
          ansible.builtin.command:
            cmd: ansible-vault encrypt_string {{ item | quote }}  -n {{ item | quote }}
          environment:
            VAULT_PASSWORD: '{{ password.user_input }}'
          loop:
            - ansible_password
          register: encrypted_variables
          changed_when: true
          no_log: true

        - name: List encrypted variables
          ansible.builtin.debug:
            var: encrypted_variables.results | map(attribute = 'stdout')

跑步时:

ansible-playbook --ask-vault-pass vault.yaml
Vault password:
Select an action to perform:
 1) List encrypted variables
 2) Update global password
: 2

我希望剧本能够使用定义的环境

VAULT_PASSWORD
变量。相反,系统会提示我为要加密的每个变量输入新的 Vault 密码。目标是定义一次新的 Vault 密码并将其隐式地用于循环。

编辑:我解决这个问题的唯一方法是创建一个临时的

password
文件:

        - name: Create password file
          ansible.builtin.lineinfile:
            line: '{{ password.user_input }}'
            path: ./password
            mode: '0644'
            create: true

        - name: Update global password
          ansible.builtin.command:
            cmd: ansible-vault encrypt_string {{ item | quote }}  -n {{ item | quote }} --vault-pass-file ./password
          loop:
            - ansible_password
          register: encrypted_variables
          changed_when: true
          no_log: true

        - name: Delete password file
          ansible.builtin.file:
            path: ./password
            state: absent

我仍然更喜欢使用定义到任务中的

VAULT_PASSWORD
环境变量。

ansible
1个回答
0
投票

我希望剧本能够使用定义的环境 VAULT_PASSWORD 变量。

在设计上是不可能的:Ansible 不使用这个变量,所以我不确定你的期望是基于什么。一般来说,您必须在提示时使用

--ask-vault-password
提供密码,或者像第二个示例中那样定义密码文件的位置(或根据上面的文档链接使用
ANSIBLE_VAULT_PASSWORD_FILE
环境变量)。

© www.soinside.com 2019 - 2024. All rights reserved.