ansible - 在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
解决方案
编辑:针对 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]"
推荐阅读
- python - pygame.event.get() 在线程内不返回任何事件
- javascript - 异步 mongoDB find() 方法的问题
- angular - Angular 反应式表单验证嵌套字段
- django - Django Vuejs - 使用 Axios - 重新处理数据中的问题
- angular - 使用代码从模板 ngFor 中生成的 DOM 中删除组件
- android - 使用 iOS Swift 发送 post html 请求不起作用
- amazon-web-services - 我可以使用 aws cli 获取 lambda 函数触发信息吗?
- android - Android Studio 中的导入包问题
- python - Matplotlib:直方图未显示在子图中
- javascript - 如何将 SlackEvents 数据传递到客户端?