ansible基础概念
- inventory 主机源
- playbooks 一组运行任务的命令集合
- roles 角色
- tasks 运行任务列表
- handlers 运行任务后的触发动作
- variables 定义的变量
ansible目录结构
使用Role组织任务,可以将复杂的Playbook剧本进行拆分,达到缩小文件,任务重用的作用。如下图目录结构可供参考。
Inventory
ansible可管理的主机源。
inventory目录包含:
- hosts 主机及主机组列表
- host_vars 主机变量,目录里包含以组名命名的yaml文件
- group_vars 主机组变量,目录里包含以组名命名的yaml文件
- inventory.py 动态主机列表脚本
如下图: host_vars
# cat /etc/ansible/inventory/hosts_vars/127.0.0.1
---
myname: wangpeng
address: beijing
若多个环境有不同的inventory源,可创建多个目录来区分,目录结构一致。比如将测试环境、生产环境区分开来。
Playbooks
执行playbook的统一入口。
在入口文件里指定目标主机、对应角色。
# cat /etc/ansible/playbooks/epel.yaml
---
- hosts: host1 # 定义主机组
gather_facts: false
roles: # 使用角色
- epel
Roles
定义的角色。角色目录中通常存放着tasks,handler,vars,templates,meta子目录,这些子目录并不是必须的,如果没用到某个目录(比如没有用到模板templates),可以为空目录,或者不创建。基于这样的目录结构,role会自动加载到目录内的tasks,vars及handlers。
在Role里编写具体的tasks、handlers、变量。
Tasks
play中运行的任务命令,也就是执行的哪些ansible模块,如command,shell,service,yum等。
# cat /etc/ansible/roles/epel/tasks/main.yaml
---
- name: install epel-release repo
remote_user: root
yum: name=epel-release state=installed
notify: make yum cache
目录下要有一个main.yaml文件,其他文件用Include引用到main中
Handlers
任务执行改变后触发的动作。handler也是task,但只task notify通知后才会触发,且多个task同时调用handler,只会触发一次。
# cat /etc/ansible/roles/epel/handlers/main.yaml
---
- name: make yum cache
shell: yum clean all && yum makecache
目录下要有一个main.yaml文件,其他文件用Include引用到main中
Vars
定义的主机变量和主机组变量。若group_vars,host_vars,role/vars目录中定义了相同变量名,优先级group_vars < host_vars < vars。
# cat /etc/ansible/roles/epel/vars/main.yaml
---
myname: wangpeng
address: beijing
目录下要有一个main.yaml文件,其他文件用Include引用到main中
Templates
使用template模板渲染功能时,所需的模块文件存放在这个目录。