我在剧本中有3个任务,我的要求是完成第一个任务,然后第二个和第三个任务应并行进行。默认情况下,这三个任务将依次执行,一旦第一个任务完成,是否有办法并行执行第二个和第三个任务?
主机:conv4 remote_user:用户名
任务:
主机:patchapp
远程用户:用户名 成为用户:用户名 成为方法:su
任务:
名称:停止APP服务 脚本:stopapp.sh 注册:控制台
调试:var = console.stdout_lines
主机:patchdb
远程用户:用户名 成为用户:用户名 成为方法:su
任务:
名称:停止数据库服务 脚本:stopdb.sh 注册:控制台
调试:var = console.stdout_lines
我需要先运行“启动服务”任务,然后完成它,然后并行运行“停止APP服务”和“停止数据库服务”任务。
答案 0 :(得分:0)
1。导入剧本可以正常工作。
play.yml
- import_playbook: play1.yml
- import_playbook: play2.yml
play1.yml
- hosts: localhost
tasks:
- debug:
msg: 'play1: {{ ansible_host }}'
play2.yml
- hosts:
- vm2
- vm3
tasks:
- debug:
msg: 'play2: {{ ansible_host }}'
2。绕过include_tasks和proxy_to 是一个小问题。
一种选择是在任务内部遍历include_tasks和proxy_to(请参见下文)。但是有一个未解决的错误delegate_to with remote_user on ansible 2.0。
Workflows在Ansible Tower中需要许可证。
工作流程仅适用于具有企业级许可证的人员。
play.yml
- name: 'Test loop delegate_to'
hosts: localhost
gather_facts: no
vars:
my_servers:
- vm2
- vm3
tasks:
- name: "task 1"
debug:
msg: 'Task1: Running at {{ ansible_host }}'
- include_tasks: task2.yml
loop: "{{ my_servers }}"
task2.yml
- debug:
msg: 'Task2: Running at {{ ansible_host }}'
delegate_to: "{{ item }}"
ansible-playbook play.yml
PLAY [Test loop delegate_to]
TASK [task 1]
ok: [localhost] =>
msg: 'Task1: Running at 127.0.0.1'
TASK [include_tasks]
included: ansible-examples/examples/example-014/task2.yml for localhost
included: ansible-examples/examples/example-014/task2.yml for localhost
TASK [debug]
ok: [localhost -> vm2] =>
msg: 'Task2: Running at vm2'
TASK [debug]
ok: [localhost -> vm3] =>
msg: 'Task2: Running at vm3'
PLAY RECAP
localhost : ok=5 changed=0 unreachable=0 failed=0