Templates Ansible使用行号更新文件

Templates Ansible使用行号更新文件,templates,yaml,ansible,ansible-playbook,line-numbers,Templates,Yaml,Ansible,Ansible Playbook,Line Numbers,如何让Ansible使用文件更改更新第9行之后的所有行,而不使用前面的行 我使用Ansible在我的服务器上统一保存文件。我已经整理了一个方便的文件,可以将其部署到服务器上,以便快速设置我的设置和配置。此文件由多个用户使用,每个用户在文件中都有自己的唯一信息 目前,我将我的文件副本分发给每个人。然后,我使用lineinfile任务将我的信息替换为用户特定的信息。这意味着,我不仅要在文件中维护特定于用户的信息,还要在我的剧本中维护这些信息,这让我有些头疼 此外,如果有一种方法不覆盖特定于用户的信息

如何让Ansible使用文件更改更新第9行之后的所有行,而不使用前面的行

我使用Ansible在我的服务器上统一保存文件。我已经整理了一个方便的文件,可以将其部署到服务器上,以便快速设置我的设置和配置。此文件由多个用户使用,每个用户在文件中都有自己的唯一信息

目前,我将我的文件副本分发给每个人。然后,我使用lineinfile任务将我的信息替换为用户特定的信息。这意味着,我不仅要在文件中维护特定于用户的信息,还要在我的剧本中维护这些信息,这让我有些头疼

此外,如果有一种方法不覆盖特定于用户的信息,那么我可以创建一个bash函数,允许我指定要更新的用户

这是我目前的剧本:


所以我最后做的是: 首先通过fancy shell和Register命令注册信息

然后我使用模板复制新文件

最后,我使用lineinfle命令中的注册信息用注册信息替换特定的行


它不像我希望的那样优雅或简单,但它正在发挥作用。感谢Antonis和udondan的想法,他们帮助我从整体上思考了这个问题。

这个文件中可以有标记(注释)吗?然后,使用
lineinfle
也可以写出基本模板。我还没有试过,但Galaxy上有一个
blockinfle
模块:-如果你写了多行,它会加快你的游戏速度。你能给我们更多关于你真正想要实现什么的信息吗?那个文件是什么?您希望它变成什么样的示例是什么?可能有更简单的方法。@udondan是的,我可以将注释放入任何一个文件中。尽管blockinfile看起来像是在搜索字符串并替换它。我实际上在寻找相反的功能。我想找到一个字符串并保留它,同时更改其他所有内容。@Antonischri坚信这是一个帐户设置文件,其中包含大量脚本和信息,用于快速准确地创建帐户。每个用户都有各种独特的帐户信息,需要在更新期间保留这些信息。文件的其余部分是通用的,适用于所有用户。这有助于解释这种情况吗?所以前9行包含用户特定的配置,而其余的行总是包含相同的信息?最好将此文件分为两行—前9行是一个用户特定的配置文件,其余的是一个通用文件。这就像将程序与其配置分离一样。
---
- 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