写在前面,要返校了,定在7月6号。说实话现在没什么要紧的事情,但是还是感觉自己很焦急。不知道自己为什么这么焦急。。。
roles就是个大的playbook。
角色各个子目录的作用:
files/: 存放copy或script模块等调用的文件
templates/: template模块查找所需要模板文件的目录
tasks/: 定义task role 的基本元素,至少应该包含一个名为main.yml的文件,其它的文件需要在此文件中通过include进行包含
handlers/: 至少应该包含一个名为main.yml的文件,其他的文件需要在此文件中通过include进行包含
vars: 定义变量,至少应该包含一个名为main.yml的文件,其他的文件需要在此文件中的include进行包含
meta: 定义当前角色的特殊设定及其依赖关系,至少应该包含一个名为main.yml的文件,其他文件需在此文件中通过incude进行包含
default: 设定默认变量时使用此目录中的main.yml文件
下面是个角色的例子:
在这个sb文件夹操作。大改是这个文件结构
[root@iz2zeczv3xrnm2jx6aayhxz sb]# tree
.
├── roles
│ └── test
│ ├── files
│ │ └── log.conf
│ └── tasks
│ ├── copy.yml
│ ├── create.yml
│ └── main.yml
└── start.yml
start.yml和roles同级,它是这个角色的启动文件,它的内容如下:
- hosts: all
remote_user: root
roles:
- test # test是个角色名
#- 可以指定多个角色
然后就是role文件夹,它里面写角色。
test是个角色。
它里面的files放入要拷贝的文件,任务里直接写文件名就行了,但是实测不用非得把要拷贝的文件放入这个文件夹中,只要在任务里写对绝对路径就行了。
下面是task的内容:
copy.yml
- name: copy file
copy: src=log.conf dest=copy.yml
create.yml
- name: create file
file: name=rolestest state=touch
下面是最重要的main.yml, 它规定了任务里yml文件的启动顺序。
main.yml
- include: create.yml
- include: copy.yml
再如
├── roles
│ ├── nginx
│ │ ├── tasks
│ │ │ └── main.yml
│ │ └── templates
│ │ └── nginx.conf.j2
│ └── test
│ ├── files
│ │ └── log.conf
│ └── tasks
│ ├── copy.yml
│ ├── create.yml
│ └── main.yml
└── start.yml
跨角色调用,要在nginx角色调用test角色的任务。
这时候只要在角色nginx的main.yml里的include里写上test任务的相对路径就可以了,如下:
- include: xxx
- include: xxx
- include: roles/tests/tasks/copy.yml # 调用其他角色的任务。
也可以给角色加标签:
- hosts: all
remote_user: root
roles:
- { role:httpd,tags=['xx','xxx'] }
- { role:xx,tags=xxx }
执行时候:
ansible-playbook -t xx xx.yml # 可以指定执行某些角色
下面是比较杂的内容
/vars的写法
里面写个main.yml就好了。
username: xx
groupname: xx
/tasks的写法
模板直接用/vars/main.yml里的变量。
- name: copy conf
template: src=httpd.conf.j2 dest=/etc/httpd/xx/http.conf # src里的模板文件在/templates里
notify: restart service # notif检测配置变化,handler另外写在别的文件里
/handlers/main.yml 注意是写在main.yml文件里
- name: restart service
service: name=httpd state=restarted