Ansible剧本-并行执行

时间:2018-07-12 02:25:03

标签: ansible

我在剧本中有3个任务,我的要求是完成第一个任务,然后第二个和第三个任务应并行进行。默认情况下,这三个任务将依次执行,一旦第一个任务完成,是否有办法并行执行第二个和第三个任务?

  • 主机:conv4 remote_user:用户名

    任务:

    • 名称:启动服务 脚本:app-stop.sh 注册:控制台
  • 主机:patchapp

    远程用户:用户名 成为用户:用户名 成为方法:su

    任务:

    • 名称:停止APP服务 脚本:stopapp.sh 注册:控制台

    • 调试:var = console.stdout_lines

  • 主机:patchdb

    远程用户:用户名 成为用户:用户名 成为方法:su

    任务:

    • 名称:停止数据库服务 脚本:stopdb.sh 注册:控制台

    • 调试:var = console.stdout_lines

我需要先运行“启动服务”任务,然后完成它,然后并行运行“停止APP服务”和“停止数据库服务”任务。

1 个答案:

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