我有一个可用的加密保管库文件,并且其中存储了用户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'
答案 0 :(得分:2)
您已经发现,您不能使用lineinfile
来编辑文件。该文件已加密,并且lineinfile
设计为可用于纯文本文件。
您唯一的选择是:
也许是这样的:
- 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。