在ansible中的库存字符串之后在文件中追加一行?

在ansible中的库存字符串之后在文件中追加一行?,ansible,Ansible,这是我的清单: [servers1] ubuntu-vm1 ubuntu-vm2 ubuntu-vm3 [servers2] centos-vm1 centos-vm2 centos-vm3 我的playbook做的是检查服务器是否需要重新启动(我已经找到了那部分,所以我不会在这里发布,它是变量reboot\u stat的一部分)。现在,我希望它在本地主机上的文件中添加ansible\u hostname(资源清册中的服务器名称)行,以满足需要重新启动服务器的条件 现在的情况是这样的: -

这是我的清单:

[servers1]
ubuntu-vm1
ubuntu-vm2
ubuntu-vm3

[servers2]
centos-vm1
centos-vm2
centos-vm3
我的playbook做的是检查服务器是否需要重新启动(我已经找到了那部分,所以我不会在这里发布,它是变量
reboot\u stat
的一部分)。现在,我希望它在本地主机上的文件中添加
ansible\u hostname
(资源清册中的服务器名称)行,以满足需要重新启动服务器的条件

现在的情况是这样的:

- name: add to file what server needs a reboot
  lineinfile:
    path: /root/reboot-servers
    line: '{{ inventory_hostname }}'
  delegate_to: localhost 
  when: reboot_stat.stat.exists

假设
root/reboot服务器
文件如下所示:

[servers1]



[servers2]
[servers1]
ubuntu-vm1



[servers2]
centos-vm2
假设只有ubuntu-vm1和centos-vm2需要重新启动。我想要的是,当我运行playbook时,它会在其hostname变量下添加一行,以便文件如下所示:

[servers1]



[servers2]
[servers1]
ubuntu-vm1



[servers2]
centos-vm2

编辑:根据O.p.的评论进行修改

尝试在任务中添加
insertafter
选项,告诉
lineinfle
主机名的放置位置:

- name: add to file what server needs a reboot
  lineinfile:
    path: /root/reboot-servers
    line: '{{ inventory_hostname }}'
    # insertafter: "{{ 'servers1' if inventory_host in groups['servers1'] else 'servers2' }}"
    insertafter: "{{ primary_group_tag }}"
  delegate_to: localhost 
  when: reboot_stat.stat.exists
将以下内容添加到库存文件中,以设置每个组的变量:

[servers1:vars]
primary_group_tag="[servers1]"

[servers2:vars]
primary_group_tag="[servers2]"

我想为主机组创建一个变量,如{ansible_hostname}如果任务在ubuntu-vm1上运行,它将解析为“ubuntu-vm1”,这样,如果任务在服务器1主机组中的ubuntu-vm1上运行,则{ansible_hostgroup}将解析为“servers1”。假设有servers1到servers100,这将不可行。我使用了group\u NAME变量,但insertafter不起作用,因为如果组中有更多服务器,它将始终删除服务器之前添加的行,因此我将始终获得一行(最后一个清单\u主机名).实际情况是,如果一个groupd中有两台服务器需要重新启动,我必须运行playbook两次,这很奇怪。当playbook运行时,它会说它对这两个服务器都进行了更改,但文件中只追加了最后一个服务器,然后如果我再次运行,它将添加第一个服务器,之前的服务器将为绿色(ok)然后我会有一个完整的列表。我也尝试了primary_group_标记,但它会将每个服务器放在reboot servers文件中最后一个组下。有时它会把所有的服务器都放进去,有时只是一个,这很奇怪。试着运行
ansible all-m debug-a'var=primary\u group\u tag'
,以确保为每个主机正确设置。对我来说,似乎你想修改/重新创建你的资源清册。一个建议,不要这样做。尝试以您首先检查服务器是否需要重新启动的方式构建您的playbook。然后在需要重新启动的服务器上运行重新启动任务,并跳过其他服务器。还要记住,变量比组更灵活。除了修改清单,您还可以添加主机变量。谢谢您的建议,但这不是我想要做的。我永远不会用ansible运行重新启动任务。我正在做一个列表,这样我就可以手动重新启动它们。但我想让列表看起来好看。好吧,接下来就是插入。