playbook核心元素之 --> 角色role


角色:

以特定的层级目录结构进行组织的tasks、variables、handlers、templates、files等;

role_name/

    files/:存储由copy或script等模块调用的文件; 

    tasks/:此目录中至少应该有一个名为main.yml的文件,用于定义各task;

         其它的文件需要由main.yml进行"包含"调用;

    handlers/:此目录中至少应该有一个名为main.yml的文件,用于定义各handler;

       其它的文件需要由main.yml进行"包含"调用;

    vars/:此目录中至少应该有一个名为main.yml的文件,用于定义各variable;

         其它的文件需要由main.yml进行“包含”调用;

     templates/:存储由template模块调用的模板文本;

    meta/:此目录中至少应该有一个名为main.yml的文件,定义当前角色的特殊设定及其依赖关

         系;其它的文件需要由main.yml进行"包含"调用;

    default/:此目录中至少应该有一个名为main.yml的文件,用于设定默认变量;



实例

[root@ansible roles]# pwd
/etc/ansible/roles  --> 配置文件中定义的默认路径
[root@ansible roles]# mkdir nginx
[root@ansible roles]# tree nginx
nginx
├── default
├── files
├── handlers
│   └── main.yml
├── meta
├── tasks
│   └── main.yml
├── templates
│   └── nginx.conf.j2
└── vars
    └── main.yml


[root@ansible roles]# vim nginx/tasks/main.yml
- name: install nginx
  yum: name=nginx state=present
  tags: insngx
- name: install conf file
  template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
  tags: ngxconf
  notify: reload nginx service
- name: start nginx service
  service: name=nginx enabled=true state=started


[root@ansible roles]# vim nginx/templates/nginx.conf.j2 
//可以简单修改端口号测试
//在配置文件中引用一个变量


[root@ansible roles]# vim nginx/handlers/main.yml
- name: reload nginx service
  service: name=nginx state=restarted


[root@ansible roles]# vim nginx/vars/main.yml 
ngxport: "8090"  --> 修改nginx监听的端口测试



编写playbook调用角色


[root@ansible roles]# vim nginx.yml  
--> 配置文件中定义的位置(/etc/ansible/ansible.cfg )
- hosts: centos7
  remote_user: root
  roles:
   - nginx


测试

[root@ansible roles]# ansible-playbook nginx.yml

 

wKiom1g-YnuxJJEGAABT1PAGYr8167.png-wh_50