一. roles作用
- 主要作用是复用playbook,例如我们无论安装什么软件都会安装时间同步服务,那么每个playbook都要编写ntp task。我们可以将ntp task写好,等到用的时候再调用就行了。ansible中将其组织成role,他有着固定的组织格式。以便playbook调用
二、relos介绍
- 以特定的层级目录结构进行组织的tasks、variables、handlers、templates、files等;相当于函数的调用把各个功能切割成片段来执行
- 层级目录结构
- role_name/:我们定义的role的名字
- file/:用于存放copy或script等模块调用的函数
- tasks/:用于定义各种任务列表,此目录一定要有main.yml
- handlers/:用于定义各种handlers,此目录一定要有main.yml;
- vars/:用于定义变量,此目录一定要有main.yml;
- templates/:存储由template模块调用的模板文本;
- default/:此目录中至少应该有一个名为main.yml的文件,用于设定默认变量;
- 在playbook中调用role
- role存放的路径在配置文件/etc/ansible/ansible.cfg中定义
- roles_path = /etc/ansible/roles
- 第一种:
- hosts: HOSTS
- remote_user: root
- roles:
- ROLE_NAME1
- ROLE_NAME2
- 第二种:除了字典第一个元素指明调用的role,后面是传递给role的变量
- hosts: HOSTS
- remote_user: root
- roles:
-
- 命令行-e定义
- 在主机清单中定义
- 在playbook中定义
- 在roles中定义
- register获取执行结果变量
-
四、ansiable变量优先级
ansible-playbook命令中的变量,ansible-playbook -e var=value
- task变量
- block变量
- role中定义的变量和include变量
- set_fact
- registered变量
- vars_files
- var_prompt
- play变量
- host facts
- playbook中设置的host_vars
- playbook中设置的group_vars
- inventory中设置的host_vars
- inventory中设置的group_vars
- inventory变量
-
五、示例
以远程安装httpd为例,使用role示例:
- 目录结构:
- [root@bogon ~]# tree /etc/ansible/roles/
- httpd是playbook调用时role的名称
- http.conf.c6.j2是httpd配置文件
- 变量
- tasks文件
- 此处不用写task,执行时是在tasks目录下role组件能够自动识别
- handlers文件
- 模板文件
- 使用httpd_port变量设置httpd_port端口号,此变量来自vars目录下申明的变量
- playbook文件
- 测试playbook文件
- [root@bogon ~]# ansible-playbook —check httpd_role.yml
- [root@bogon ~]# ansible-playbook httpd_role.yml
- [root@bogon ~]# ansible all -m shell -a “ss -tnlp|grep :80”
- 可以看到httpd监听的端口为8088
- roles中定义变量的方法
- roles文件中定义变量
- hosts: haiwan_init
- vars:
- project: haiwan
- roles:
- role: system_init
- role: nginx
- vars:
- nginx_version: 1.18.0
- nginx_install_path: /usr/local/webserver
- nginx_log_path: /var/log/httpd
- role: jdk
- vars:
- jdk_version: 8u71
- jdk_install_path: /usr/local
- javacode_path: /var/webapps/javacode
- role: log_upload
- 创建group_vars文件夹,下面按主机组创建文件,存放变量。文件夹与playbook同级
- https://github.com/ansible/ansible-examples/tree/master/lamp_simple