如何让Ansible在我的文件更改后更新第9行之后的所有行,只留下以前的行?
我正在使用Ansible来保持服务器上的文件统一。我已经整理了一个方便的文件,我可以将其部署到服务器以快速获取我的设置和配置。该文件由多个用户使用,每个用户在文件中都有自己的唯一信息。
目前,我将该文件的副本分发给所有人。然后我使用lineinfile任务将我的信息替换为用户特定信息。但是,这意味着我必须不仅在文件中而且在我的剧本中维护用户特定信息,并且一直引起一些麻烦。
此外,如果有办法不覆盖用户特定信息,那么我可以创建一个bash函数,允许我指定要更新的用户。
这是我目前的剧本:
---
- hosts: dmz
vars:
curUser: "{{ ansible_ssh_user }}"
allUsers:
- { name: johnDoe, gecos: "John D, XXXX S Sad Ln" }
- { name: janeFrank, gecos: "Jane F, XXXX W Happy Dr" }
tasks:
## =============== Updates the user's /foo/bar/user/FILE with the /foo/bar/FILE
- name: distribute_File
sudo: yes
template: src=/home/{{ curUser }}/FILE dest=/home/{{ item.name }}/FILE owner={{ item.name }} backup=yes
with_items: allUsers
ignore_errors: true
## ===================================== Update user specific information
- name: updateName
sudo: yes
lineinfile: dest=/home/{{ item.name }}/FILE regexp="^username=" line="username={{ item.name }}"
with_items: allUsers
- name: updateGecos
sudo: yes
lineinfile: dest=/home/{{ item.name }}/FILE regexp="^usergecos=" line="usergecos=\"{{ item.gecos }}\""
with_items: allUsers
答案 0 :(得分:0)
所以我最终做的是: 首先通过花哨的shell和注册命令注册信息。
然后我用模板复制新文件。
最后,我使用lineinfile命令中的注册信息将特定行替换为注册信息。
它并不像我希望的那样优雅或简单,但它起作用。感谢Antonis和udondan的想法,他们帮助我思考整个问题。