首页 > 解决方案 > 在ansible中的库存字符串之后在文件中附加一行?

问题描述

这是我的库存:

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

[servers2]
centos-vm1
centos-vm2
centos-vm3

我的剧本所做的是检查服务器是否需要重新启动(我已经弄清楚了那部分,所以我不会在这里发布它,它是变量的一部分reboot_stat)。ansible_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-servers文件如下所示:

[servers1]



[servers2]

假设只有 ubuntu-vm1 和 centos-vm2 需要重启。我想要的是当我运行剧本时,它会在其主机名变量下附加该行,以便文件如下所示:

[servers1]
ubuntu-vm1



[servers2]
centos-vm2

标签: ansible

解决方案


编辑:针对 OP 的评论进行了修改。

尝试insertafter在任务中添加选项以告知lineinfile将主机名放在何处:

- 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]"

推荐阅读