Ansible:在上一台主机上完成服务启动后,在下一台主机上启动服务
我有三台主机,希望以滚动方式启动服务。主机2需要等待主机1上的服务完成启动,主机3需要等待主机2上的服务。Ansible:在上一台主机上完成服务启动后,在下一台主机上启动服务,ansible,Ansible,我有三台主机,希望以滚动方式启动服务。主机2需要等待主机1上的服务完成启动,主机3需要等待主机2上的服务。 主机1已完成启动服务,当一行包含以下指令时: 开始侦听CQL客户端 写入文件 当前一台主机上的服务将行写入该文件时,我如何指示Ansible(服务模块更好)只启动以下主机?例如,您可能需要将您的剧本分解一下 您的restart.yml内容: - service: name: foobar state: restarted - wait_for: search_reg
主机1已完成启动服务,当一行包含以下指令时: 开始侦听CQL客户端 写入文件
当前一台主机上的服务将行写入该文件时,我如何指示Ansible(
服务
模块更好)只启动以下主机?例如,您可能需要将您的剧本分解一下
您的restart.yml内容:
- service:
name: foobar
state: restarted
- wait_for:
search_regex: "Starting listening for CQL clients"
path: /tmp/foo
- include_tasks: restart.yml
with_items:
- host1
- host2
- host3
然后是main.yml的内容:
- service:
name: foobar
state: restarted
- wait_for:
search_regex: "Starting listening for CQL clients"
path: /tmp/foo
- include_tasks: restart.yml
with_items:
- host1
- host2
- host3
例如,你可能需要把剧本分解一下 您的restart.yml内容:
- service:
name: foobar
state: restarted
- wait_for:
search_regex: "Starting listening for CQL clients"
path: /tmp/foo
- include_tasks: restart.yml
with_items:
- host1
- host2
- host3
然后是main.yml的内容:
- service:
name: foobar
state: restarted
- wait_for:
search_regex: "Starting listening for CQL clients"
path: /tmp/foo
- include_tasks: restart.yml
with_items:
- host1
- host2
- host3
似乎不可能在任务级别进行序列化。因此,我必须构建另一个特定于启动服务的剧本,并在剧本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
- hosts: all
serial: 1
gather_facts: False
roles:
- start-cluster
启动集群.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
- hosts: all
serial: 1
gather_facts: False
roles:
- start-cluster
似乎不可能在任务级别进行序列化。因此,我必须构建另一个特定于启动服务的剧本,并在剧本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
- hosts: all
serial: 1
gather_facts: False
roles:
- start-cluster
启动集群.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
- hosts: all
serial: 1
gather_facts: False
roles:
- start-cluster
为此,为了工作,我需要在
列表中使用\u items
对主机进行硬编码?我可以使用hosts
文件中的列表吗?这根本不起作用。不可能在任务级别进行序列化。所有主机都会同时调用restart.yaml。但是,wait\u for
有助于找到解决方案,所以这里还是有一个向上的投票:谢谢好东西,我完全忽略了它将并行运行所有主机的任务这一事实。也许这有助于在串行模式下执行任务?为此,我需要在中使用\u items
列表对主机进行硬编码?我可以使用hosts
文件中的列表吗?这根本不起作用。不可能在任务级别进行序列化。所有主机都会同时调用restart.yaml。但是,wait\u for
有助于找到解决方案,所以这里还是有一个向上的投票:谢谢好东西,我完全忽略了它将并行运行所有主机的任务这一事实。也许这有助于在串行模式下执行任务?你看过关于滚动升级的ansible文档吗?他们用英语谈论这件事。还有一些。这里的关键是在游戏级别使用serial
。你看过关于滚动升级的ansible文档了吗?他们用英语谈论这件事。还有一些。这里的关键是在播放级别使用serial
。