Ansible:在服务完成以上主机上完成后,在下一个主机中开始服务



我有三个主机,我想以滚动方式启动服务。主机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

最新更新