文章目录
- 单role环境
- 项目结构图及其解析
- 项目结构图
- 项目结构解析
- roles 项目结构解析
- 角色目录结构及其作用
- 列表方法
- 变量写法
- 条件方法
- 标签方法
- 案例目录结构
- users.yaml
- config.yaml
- soft.yaml
- main.yaml
- pro_role.yaml
- 执行
- 优点
- 缺点
单role环境
使用 ansible-galaxy 命令来初始化
ansible-galaxy init test_role
查看效果
test_role/
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
生产环境中
role/ # 项目目录
├── all_roles.yaml # 项目playbook文件
└── roles # 专用角色目录,内部都是独立的角色
└── test_role # 子角色 1
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks # 任务目录
│ └── main.yml # 整合文件
├── templates # 模板目录
├── tests
│ ├── inventory
│ └── test.yml
└── vars # 变量目录
└── main.yml
galaxy 初始化的目录在生产环境中是个子目录,也就是子角色
项目结构图及其解析
项目结构图
项目结构解析
roles 项目结构解析
/path/to/projects 项目名称
ptoject.yaml 项目整体的playbook文件
roles 项目角色专用目录
roles 名称固定,不可随意更改
角色目录结构及其作用
role/ # 项目目录
├── all_roles.yaml # 项目playbook文件
└── roles # 专用角色目录,内部都是独立的角色
└── test_role # 子角色1 目录
├── defaults # 默认目录 - 一些基础的配置文件,比如默认按量、默认配置等内容,结构同上
│ └── main.yml
├── files # 文件目录 - 存放由 copy 或script等模块依赖的文件,结构如下
│ │── main.yml # 整合文件 - 通过include语句将本目录下所有剧本进行整合
│ └── xxx.yml # 任务剧本 - 实现拆分后子任务的playbook文件
├── handlers # 关联目录 - 存放各种触发器任务文件,结构同上
│ └── main.yml
├── meta # 数据目录 - 设定角色的特殊核定及其依赖关系,结构同上
│ └── main.yml
├── README.md
├── tasks # 任务目录 - role 的核心元素,由所有任务playbook文件组成,结构同上
│ └── main.yml # 整合文件
├── templates # 模板目录 - template 模块依赖的模块文件,结构同上
├── tests # 测试目录 - 结构同上
│ ├── inventory
│ └── test.yml
└── vars # 变量目录 - 变量目录 - 存放各种变量文件,结构同上
└── main.yml
列表方法
---
- host: web server
remote_user: root
roles:
- role: mysql # 标准写法
- redis # 精简写法
- nginx
变量写法
列表方法的升级版,在列表中直接写入变量
---
- host: web server
remote_user: root
roles:
- { role: mysql, port: 3307 }
- { role: redis, mem: 1024 }
- { role: nginx, port: 82 }
条件方法
---
- hosts:
remote_user: root
roles:
- { role: role_nginx, nginx_port: 10086, when: ansible_hostname == anbl5 }
标签方法
---
- hosts:
remote_user: root
roles:
- { role: role_nginx, nginx_port=200, tags: ['nginx', 'web'] }
- { role: role_xnigx, nginx_port=300, tags: ['xnigx', 'web'] }
# 指定 标签 执行 playbook
ansible-playbook -t xnign nginx_role.yaml -C
ansible-playbook -t xnign nginx_role.yaml
案例目录结构
pro_role/
├── pro_role.yaml
└── roles
└── nginx_role
├── tasks
│ ├── config.yaml
│ ├── main.yaml
│ ├── service.yaml
│ ├── softs.yaml
│ └── users.yaml
└── template
└── nginx.conf
users.yaml
---
- name: create new user
user: name=nginx-test system=yes uid=82 shell=/sbin/nologin
config.yaml
---
- name: create web root
file: name=/data/webserver/html state=directory
- name: create web root
shell: echo '<h1>welcom to ansible<h1>' > /data/webserver/html/index.html
- name: copy config
copy: src=../template/nginx.conf dest=/etc/nginx/nginx.conf
soft.yaml
---
- name: nginx service
service: name=nginx state=started enabled=yes
main.yaml
---
- include: user.yaml
- include: softs.yaml
- include: config.yaml
- include: service.yaml
pro_role.yaml
---
- hosts: web
remote_user: root
roles:
- role: nginx_role
执行
ansible-playbook pro_role.yaml
优点
- 模块设计
- 内容重用
- 规范标准
缺点
- 场景限制
- 维护成本
- 学习成本