我有3个主机,我想在其中以滚动方式启动服务。主机2需要等待主机1上的服务完成,而主机3需要等待主机2上的服务。
主机1完成一条带有以下指令的行时启动服务:
开始监听CQL客户端
已写入文件。
当前一个主机上的服务将行写入该文件时,如何指示Ansible(最好是service
模块)启动下一个主机?
答案 0 :(得分:1)
例如,您可能需要对您的剧本进行细分
您的restart.yml内容:
- service:
name: foobar
state: restarted
- wait_for:
search_regex: "Starting listening for CQL clients"
path: /tmp/foo
,然后是您的main.yml内容:
- include_tasks: restart.yml
with_items:
- host1
- host2
- host3
https://docs.ansible.com/ansible/latest/modules/wait_for_module.html
答案 1 :(得分:1)
似乎无法在任务级别进行序列化。因此,我不得不构建另一本专门用于启动服务的剧本,并在剧本yaml中使用了serial: 1
。
我的文件现在看起来像这样:
角色/启动群集/任务/main.yaml
- name: Start Cassandra
become: yes
service:
name: cassandra
state: started
- name: Wait for node to join cluster
wait_for:
search_regex: "Starting listening for CQL clients"
path: /var/log/cassandra/system.log
start-cluster.yaml
- hosts: all
serial: 1
gather_facts: False
roles:
- start-cluster