我有三个主机,我想以滚动方式启动服务。主机2需要等待服务从主机1开始完成,而主机3需要等待主机2上的服务。
当一条具有以下指示的行时,主机1已经完成了服务:
开始收听CQL客户端
写入文件。
当上一个主机上的服务将行写入该文件时,我如何指示Ansible(最好是service
模块(才能启动以下主机?
似乎不可能在任务级别序列化。因此,我必须构建另一本剧本以启动该服务并在playbook yaml中使用serial: 1
。
我的文件现在看起来像这样:
角色/start-Cluster/tasks/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
您可能需要将剧本分解一点,例如
您的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