Ansible:服务在上一个主机上完成启动后,在下一个主机上启动服务

时间:2019-07-27 13:13:21

标签: ansible

我有3个主机,我想在其中以滚动方式启动服务。主机2需要等待主机1上的服务完成,而主机3需要等待主机2上的服务。
主机1完成一条带有以下指令的行时启动服务:

  

开始监听CQL客户端

已写入文件。

当前一个主机上的服务将行写入该文件时,如何指示Ansible(最好是service模块)启动下一个主机?

2 个答案:

答案 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