跳到主要内容

ansible任务控制-包含include

include的使用场景比较简单,就是多个playbook需要执行相同的操作,例如有5个playbook,这5个playbook都是安装不同的服务,但是都会安装nginx,同时也都会重启nginx,这个时候就可以使用include

首先编辑一个没有play的yml,其他的yml中使用include来包含这个yml

cat > task_include_tem.yml <<EOF
- name: restart nginx
service:
name: nginx
state: restarted
EOF

编辑a.yml

这里我们仅仅使用shell模块echo一句话,然后重启nginx

cat > a.yml << EOF
- hosts: all
tasks:
- name: print test a
shell: echo 'test a'
- name: restat nginx
include: ./task_include_tem.yml
EOF

执行a.yml

$ ansible-playbook a.yml 

PLAY [all] *********************************************************************************************************************************************

TASK [Gathering Facts] *********************************************************************************************************************************
ok: [devops03]
ok: [devops02]
ok: [devops01]

TASK [print test a] ************************************************************************************************************************************
changed: [devops03]
changed: [devops02]
changed: [devops01]

TASK [restart nginx] ***********************************************************************************************************************************
changed: [devops02]
changed: [devops03]
changed: [devops01]

PLAY RECAP *********************************************************************************************************************************************
devops01 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
devops02 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
devops03 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

编辑b.yml

cat > b.yml << EOF
- hosts: all
tasks:
- name: print test b
shell: echo 'test b'
- name: restat nginx
include: ./task_include_tem.yml
EOF

执行b.yml

$ ansible-playbook b.yml 

PLAY [all] *********************************************************************************************************************************************

TASK [Gathering Facts] *********************************************************************************************************************************
ok: [devops02]
ok: [devops03]
ok: [devops01]

TASK [print test b] ************************************************************************************************************************************
changed: [devops03]
changed: [devops02]
changed: [devops01]

TASK [restart nginx] ***********************************************************************************************************************************
changed: [devops03]
changed: [devops02]
changed: [devops01]

PLAY RECAP *********************************************************************************************************************************************
devops01 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
devops02 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
devops03 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

yml文件中的 include 还可以写成 include_tasks

cat > b.yml << EOF
- hosts: all
tasks:
- name: print test b
shell: echo 'test b'
- name: restat nginx
include_tasks: ./task_include_tem.yml
EOF

执行的时候会多了一个 included: /root/yml/task_include_tem.yml for devops01, devops02, devops03 提示

$ ansible-playbook b.yml 

PLAY [all] *********************************************************************************************************************************************

TASK [Gathering Facts] *********************************************************************************************************************************
ok: [devops03]
ok: [devops02]
ok: [devops01]

TASK [print test b] ************************************************************************************************************************************
changed: [devops02]
changed: [devops03]
changed: [devops01]

TASK [restat nginx] ************************************************************************************************************************************
included: /root/yml/task_include_tem.yml for devops01, devops02, devops03

TASK [restart nginx] ***********************************************************************************************************************************
changed: [devops03]
changed: [devops02]
changed: [devops01]

PLAY RECAP *********************************************************************************************************************************************
devops01 : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
devops02 : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
devops03 : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0