import_playbook
import_playbook 顾名思义,直接导入整个playbook,用法很简单,直接把已经有的playbook包含进去即可,形成一个总的playbook,执行总的playbook即会按照顺序执行单个playbook
cat import_playbook.yml
- import_playbook: 1_base.yaml
- import_playbook: 2_backup_rsync.yaml
- import_playbook: 3_nfs_share.yaml
- import_playbook: 4_nfs_lsyncd.yaml
- import_playbook: 5_1_mysql_master.yaml
- import_playbook: 5_2_mysql_slave.yaml
- import_playbook: 6_webservers_nginx_php_webapps.yaml
- import_playbook: 7_webservers_tomcat_jpress.yaml
直接复用整个playbook,可以一定程度的节省我们的工作量,如准备一个base.yml
,做一些配置网络、配置主机名等操作,给它包含组合到想要的playbook里去,当然粒度还是比较粗糙,后面我们介绍任务(task)级别的复用
参考示例:https://gitee.com/as4k/ysansible/blob/master/reuse/import_playbook/import_playbook.yml
import_tasks
cat import_tasks.yml
---
- hosts: all
become: yes
vars_files:
- vars.yml
pre_tasks:
- name: Update apt cache if needed.
apt: update_cache=yes cache_valid_time=3600
handlers:
- import_tasks: handlers/handlers.yml
tasks:
- import_tasks: tasks/common.yml
- import_tasks: tasks/apache.yml
- import_tasks: tasks/php.yml
- import_tasks: tasks/mysql.yml
- import_tasks: tasks/composer.yml
- import_tasks: tasks/drush.yml
- import_tasks: tasks/drupal.yml
- name: hello2
debug:
msg: "hello2"
可以看到这样的粒度比较细,方便控制,这样我们在书写playbook的时候,如果发现某些task反复出现在很多playbook里面,即可考虑抽出来放到一个单独的文件里,以方便维护、复用
参考示例:https://gitee.com/as4k/ysansible/tree/master/reuse/import_tasks
include_tasks
include_tasks 跟 import_tasks 类似,但是可以实现一些"动态包含"的功能,如下
- include_tasks: setup-RedHat.yml
when:
- not php_install_from_source
- ansible_os_family == 'RedHat'
- include_tasks: setup-Debian.yml
when:
- not php_install_from_source
- ansible_os_family == 'Debian'
import_tasks 和 include_tasks 的区别
简单来说import_tasks是静态包含,这种包含就相当于直接把相关内容写到playbook里一样,include_tasks是动态包含,在执行时才去加载,一般使用import_tasks比较多,关于这两者的详细区别,如果感兴趣,可参考下面的官方文档
https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse.html
当然复用或者说组织大批playbook的最佳方案是我们马上要讲到的 Roles 角色