ansible-角色role-11

roles可以结构化的组织playbook,
变量文件,tasks,handlers等分别放至不同的文件夹
使用roles需要在playbook中引用include指令即可
使用roles需要创建一个roles目录,目录存放地方自定义,默认是在/etc/ansible/roles,
palybook中需要引用roles,playbook需要和roles目录处于平级

创建几个自定义的角色,最好有实意,必须要创建在roles目录下

mkdir -p /etc/ansible/roles/{httpd,mysql,nginx}

roles各目录作用:这些目录需要创建在{httpd,mysql,nginx},目录下

创建顺序为:roles ==》 角色名 ==》 需要用到的目录及文件
files:存放需要copy模块或script模块调用的目录,
tempaltes:template模块块调用的目录,用来存放 .j2文件
tasks:定义task,role的基本元素,至少需要一个名为main.yml文件(必须有)
handlers:至少需要一个名为main.yml文件
vars:定义变量,至少需要一个名为main.yml文件
meta:定义当前角色的特殊设定及其依赖关系,至少需要一个名为main.yml文件
default:设定默认变量时使用此目录中的main.yml文件

示例
任务目标:用roles安装nginx

需要: 模块名
1.创建nginx组, group
2.创建nginx用户, user
3.安装nginx, yum
4.调用template模板*.conf.j2 template
5.启动nginx, service


双十二阿里云特价优惠链接


根据上述需求,我们需要在roles/nginx下创建目录:tasks,templates

mkdir -p /etc/ansible/roles/nginx/{tasks,templates}

分别将部署步骤写出来
因为roles是结构化,所以tasks目录下只需要写tasks即可

编写task语句

cat roles/nginx/tasks/group.yml   #创建组
- name: add group
  group: name=nginx gid=80
cat roles/nginx/tasks/user.yml     #创建系统用户
- name: add user
  user: name=nginx groups=nginx system=yes shell=/sbin/nologin uid=80
cat roles/nginx/tasks/install_package.yml    #开始安装包
- name: install package
  yum: name=nginx state=latest
cat roles/nginx/tasks/template.yml    #用template将配置文件复制过去
- name: copy configuration
  template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf backup=yes
  notify: change         #添加了handler,触发条件
cat roles/nginx/tasks/service.yml      #启动服务
  up service
  service: name=nginx state=restarted enabled=yes
cat roles/nginx/tasks/main.yml          #给前面写的文件进行排序
- include: group.yml                      #根据排版顺序执行task
- include: user.yml
- include: install_package.yml
- include: template.yml
- include: handler.yml
- include: service.yml

编写handlers触发条件

cat roles/nginx/handlers/main.yml       # 触发动作
- name: change        # 匹配notify
  service: name=nginx state=reloaded 

编写vars变量

cat roles/nginx/vars/main.yml
nginx_port: 80                 #自定义变量
mysql_port: 3306

写执行文件,要写在/etc/ansible/下,因为playbook要和roles目录处于同级

cat install_nginx.yml
- hosts: all
  remote_user: root
  roles: 
    - role: nginx           #nginx就是roles目录下的一个角色

执行roles,先测试 没问题再执行

ansible-playbook -C install_nginx.yml

如果想同时执行两个角色

cat install_nginx.yml
- hosts: all
  remote_user: root
  roles: 
    - role: nginx
    - role: httpd     #添加角色名,并按照顺序执行

如果角色A想调用角色B中的任务
在tasks目录下的main.yml文件中指定要调用的任务路径即可

cat roles/nginx/tasks/main.yml
- include: group.yml
- include: user.yml
- include: install_package.yml
- include: template.yml
- include: service.yml
- include: roles/httpd/tasks/xxx.yml  #roles目录下的任务路径

如何给role加tag
给role添加when判断

cat install_nginx.yml
- hosts: all
  remote_user: root
  roles: 
    - { role: nginx, tags: ['web','nginx'] }
    - { role: httpd, tags: ['web','httpd'],when: ansible_distribution_major_version == "7" } 
    - { role: app, tags:"app" }    #判断句 当系统等7时,执行此role

通过tag来执行role

ansible-playbook -t web install_nginx.yml

你可能感兴趣的:(ansible-角色role-11)