从剧本编辑Ansible保管库文件

时间:2020-11-05 21:10:19

标签: ansible ansible-2.x

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

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

是否可以通过剧本来编辑Vault文件

可以通过ansible-vault编辑来编辑Vault文件。不能通过vi文件名。 保险柜文件内容。

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

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

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

1 个答案:

答案 0 :(得分:2)

您已经发现,您不能使用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"

运行剧本后,该文件将包含以下内容的加密版本:

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

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

我提供了一个可运行的示例here