如何在ansible中实现关于修改文件的条件逻辑?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在ansible中实现关于修改文件的条件逻辑?相关的知识,希望对你有一定的参考价值。
在ansible中,我想仅在配置更改时重新启动服务。
这是一个例子:
- hosts: workers
tasks:
- lineinfile: 'dest=/etc/default/autofs regexp=^OPTIONS= line="OPTIONS="-O soft"" backup=yes'
- shell: service autofs reload
正如您所看到的,即使配置文件未更新,此代码也将始终重新启动autofs
。
如何改进,以便仅在配置文件更改时重新启动?
注意:这是一个非特定于autofs的通用问题,它可以应用于我想要执行某些内容的任何服务,如果配置文件已更改,可能是通过lineinfile
或ini_file
核心模块。
首先,您应该在用完时使用service module来控制运行服务。一般来说,如果有一个适当的模块用于某些东西并且它可以满足您的需要,那么您应该这样做,并且只需要对边缘情况进行外壳处理。
此外,当一个Ansible任务运行它returns a series of facts,你可以注册,以便能够直接使用。这几乎总是包含一个changed
属性,这是一个布尔说法是否Ansible认为它改变了某些东西(它不能总是知道。如果一个shell
任务在stdout中返回一些东西,那么除非你用changed_when
直接覆盖它,否则它会假设一些变化)。
所以你可以用这样的东西:
- hosts: workers
tasks:
- name: Set autofs options
lineinfile: 'dest=/etc/default/autofs regexp=^OPTIONS= line="OPTIONS="-O soft"" backup=yes'
register: result
- name: reload autofs is autofs options are changed
service: name=autofs state=reloaded
when: result.changed
如果您要在剧本中创建角色而不是使用松散任务,则可以使用handlers。另见Best practices: Task And Handler Organization For A Role。
角色的任务文件:
- name: Change autofs config
lineinfile: dest=/etc/default/autofs
regexp=^OPTIONS=
line="OPTIONS="-O soft""
backup=yes
notify:
- Restart autfs
然后在相同角色的处理程序文件中:
- name: Restart autfs
service: name=autfs
state=restarted
只要配置任务的状态发生变化,处理程序就会收到通知。
PS:我使用service module来管理服务。如果没有可用于您的任务的特定模块,则只应使用shell模块
但是你肯定想要做的一件事是使用“角色”组织功能,它被记录为主要剧本页面的一部分。见Playbook Roles and Include Statements。你绝对应该使用角色。角色很棒。使用角色。角色!我们说够了吗?角色很棒。
我知道这已经过时了,但是我对此感到满意,觉得还有更多可以补充其他人已经回答的内容。您应该使用处理程序,但不需要谨慎使用处理程序。以下是直接在剧本中使用的处理程序示例。
---
- hosts: workers
tasks:
- lineinfile: 'dest=/etc/default/autofs regexp=^OPTIONS= line="OPTIONS="-O soft"" backup=yes'
notify: reload autofs
handlers:
- name: reload autofs
service: name=autofs state=reloaded
有一点需要注意......处理程序在比赛结束时开始。因此,如果您有多个任务,并且您希望处理程序在通知它的任务之后触发,那么您可能会遇到困难。如果你需要处理程序按照你的任务顺序启动,你可以对flush_handlers执行'meta'任务,或者你可以像ydaetskcoR提供的那样使用寄存器/条件方式。在你的游戏中,只需一个任务,这并不重要。
以上是关于如何在ansible中实现关于修改文件的条件逻辑?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Justhost 中实现 Cronjob? [关闭]