cat ns.yml
---
- hosts: web
gather_facts: no
remote_user: root
vars: #定义变量
- work_dir: /usr/local
- nginx_version: 1.16
tasks:
- name: "创建目录"
shell: mkdir "{
{
work_dir}}/nginx{
{
nginx_version}}" #引用变量
名称 | 执行方法 | 特点 |
---|---|---|
import | import*(静态):在Playbook解析时预先导入 | .不能与循环一起使用,将变量用于目标文件或者角色名称时 ,不能使用inventory(主机/主机组等) |
include | include* (动态):在运行时导入 | --list-tags, --list-tasks不会显示到输出。 不能使用notify触发来自include*内部处理程序名称(handlers) |
由一个主文件加多个分解任务组成,运行主文件,自动去读取不同任务文件,如图所示
cat lnmp.yml
---
#主配置文件
- import_playbook: nginx.yml
- import_playbook: php.yml
- import_playbook: mysql.yml
cat nginx.yml
---
#安装nginx
- hosts: web
gather_facts: no
tasks:
- name: "安装nginx"
debug: msg="install nginx"
cat mysql.yml
---
#安装mysql
- hosts: web
gather_facts: no
tasks:
- name: "安装mysql"
debug: msg="install mysql"
cat php.yml
---
#安装php
- hosts: web
gather_facts: no
tasks:
- name: "安装php"
debug: msg="install php"
#上面的yml文件只是为了测试,具体使用方法参考上一章文件
ansible-playbook lnmp.yml
说明分解任务成功,执行主配置文件会去找相应的子配置文件执行,
cat main.yml
---
#主配置文件
- hosts: web
gather_facts: no
tasks:
- include_tasks: task1.yml #任务一
- include_tasks: task2.yml #任务二
任务一
cat task1.yml
---
- name: "任务 task1"
debug: msg="task1"
任务二
cat task2.yml
---
- name: "任务 task2"
debug: msg="task2"
ansible-playbook main.yml
如图所示,执行主配置文件,分别去执行两个子任务。至此 include测试ok
site.yml #主配置文件
hosts #主机清单
roles/
common/
files/ #角色部署时用到的文件,例如安装包
templates/ #角色部署时用到的模板
tasks/ #包含校色要执行的主要任务列表
handlers/ #包含校色使用的处理程序
vars/ #校色其他的变量
defaults/ #校色默认的变量
meta/ #角色定义的一些元数据
定义主配置文件
cat site.yml
- hosts: web
gather_facts: no
roles:
- common
- nginx
- php
定义清单配置文件
cat hosts
[web]
192.168.1.21
192.168.1.22
mkdir -p roles/{
common,nginx,php}/{
files,templates,tasks,handlers}
ansible-playbook site.yml