【问题标题】:Editing Ansible vault file from a playbook从剧本编辑 Ansible 保险库文件
【发布时间】:2020-11-06 05:49:17
【问题描述】:

我有 ansible 加密的保管库文件,并在其中存储了用户 ID 和密码。 我正在创建一个剧本来更改该文件中的密码。

我尝试使用 lineinfile,但在加密文本中添加了文本。

是否有可能通过剧本编辑保险库文件

Vault 文件可以通过 ansible-vault edit 进行编辑。不是通过 vi 文件名。 保管库文件内容。

  user1:"abc$123098"
  user2:"qwe$123098"

我想替换 Vault 文件中的 user2 行。

  ansible code
  - name: chainging vault file
    lineinfile:
      path: /path/testvault.yaml
      regexp: '^user1:'
      line: 'user1:lkjh$123098'

【问题讨论】:

    标签: ansible ansible-2.x


    【解决方案1】:

    正如您所发现的,您不能使用lineinfile 来编辑文件。该文件已加密,lineinfile 旨在处理纯文本文件。

    您唯一的选择是:

    1. 解密文件并将内容存储在变量(或临时文件)中
    2. 修改未加密的数据
    3. 重新加密数据并将其存储回文件中

    可能是这样的:

    - hosts: localhost
      gather_facts: false
      tasks:
        - name: read data from vaulted file
          command: >-
            ansible-vault view users.txt
          register: cleartext
    
        - name: update user1 password
          set_fact:
            newtext: >-
              {{ newtext + [item|regex_replace('user1:.*', 'user1:"newsecret"')] }}
          loop: "{{ cleartext.stdout_lines }}"
          vars:
            newtext: []
    
        - name: write data to file
          command: >-
            ansible-vault encrypt --output users.txt
          args:
            stdin: "{{ '\n'.join(newtext) }}"
    

    给定一个包含内容的加密输入文件:

    user1:"qwe$123098"
    user2:"qwe$123098"
    

    运行 playbook 后,文件将改为包含以下加密版本:

    user1:"newsecret"
    user2:"qwe$123098"
    

    这可能要求ansible-vault 能够以非交互方式确定保管库机密。

    我放了一个可运行的例子here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-24
      • 1970-01-01
      • 2020-08-17
      • 2020-05-08
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      相关资源
      最近更新 更多