Cos*_*atu 8 ansible ansible-playbook
我想运行一个安装服务的ansible playbook,如果自上次运行以来发生了任何变化(或多或少是ansible处理程序的规范用例),则重新启动它.
但是我想要一个不同的并行安装而不是重新启动:我想一次安装在所有主机上但是,如果调用"service-restart"处理程序,我希望一次在X主机上运行.
我知道这对于具有不同serial值的不同游戏是可能的.但是,如果我走这条路,我无法看到如何利用处理程序.我不能拥有一个serial像这样的价值的单一剧本2,因为大多数时候该服务没有任何改变.
处理程序可以跨多个游戏吗?或者有没有其他方法可以做到这一点没有黑客?
Ansible 2.9.0 引入了throttle关键字,可以在任务、块或播放级别使用该关键字来限制允许的工作线程数量(最多为指定的分叉或串行设置)。
例如,这可以用于一一重启数据库集群中的节点:
- name: Restart MySQL
throttle: 1
service:
name: mysql
state: restarted
Run Code Online (Sandbox Code Playgroud)
如果需要,处理程序只是Ansible在游戏结束时运行的任务.鉴于它们被隐含地添加到你的游戏结束时,就像serialgo 等参数一样,它们将被视为与任何其他任务一样.不幸的是,这意味着如果没有功能请求,Ansible开发人员会接受您不太可能看到serial支持您尝试执行的操作的行为发生变化.
我知道你曾提到想要避免黑客攻击,但这将是你在这一点上做这样的事情的唯一方法.设置一个不是主要黑客的东西应该不会太难,比如创建一个临时文件来标记重启:
- hosts: some_hosts
name: install service
serial: 10
- handlers:
- name: schedule restart
command: touch /tmp/restart_flag
- tasks:
- name: install service
action: whatever...
notify: schedule restart
- hosts: some_hosts
name: restart service
serial: 2
- handlers:
- name: perform restart
service: name=foo state=restarted
- tasks:
- name: Delete /tmp/restart_flag. Restart service if file is deleted.
file: path=/tmp/restart_flag state=absent
notify: perform restart
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6178 次 |
| 最近记录: |