ansible权威指南笔记(四)—— roles的用法

一、 roles简介

自1.2版本引入的新特性,用于层次性、结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等,只需要在playbook中使用include指令即可。

简单来讲,roles就是通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并通过include调用它们的一种机制,类似于其他开发语言中的项目。

二、roles目录结构

每个角色,以特定的层级目录结构进行组织

Roles各目录作用

  • roles/project/:项目名称,有以下子目录
  •     files/ :存放由copy或script模块等调用的文件
  •     templates/:template模块查找所需要模板文件的目录
  •     tasks/:定义task,role的基本元素,至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含
  •     handlers/:定义handlers,至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含
  •     vars/:定义变量,至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含
  •     meta/:定义当前角色的特殊设定及其依赖关系,至少应该包含一个名为main.yml的文件;其它文件需在此文件中通过include进行包含
  •     default/:设定默认变量时使用此目录中的main.yml文件
     

三、 创建role

1. 创建步骤

  • 创建以roles命名的目录
  • 在roles目录中分别创建以各角色名称命名的目录,如webservers等
  • 在每个角色命名的目录中分别创建files、handlers、meta、tasks、templates和vars目录;用不到的目录可以创建为空目录,也可以不创建
  • 在playbook文件中,调用各角色
     

2. 实验:创建nginx roles

示例:建立nginx roles,在多台主机上部署nginx

  • 创建nginx角色目录
cd /app/ansible/role
mkdir nginx{tesks,templates,hanslers} -pv
  • 创建任务目录
cd tasks/
touch insatll.yml config.yml service.yml file.yml user.yml
  • 创建main.yml文件,定义任务执行顺序

vim main.yml

- include: user.yml
- include: insatll.yml
- include: config.yml
- include: file.yml
- include: service.yml
  • 准备配置文件(centos7,8)
ll /app/ansible/role/nginx/templates/
nginx7.conf.j2
nginx8.conf.j2
  • 定义任务

vim tasks/install.yml

- name: install
  yum: name=nginx

vim tasks/config.yml

- name: config file
  template: src=nginx7.conf.j2 dest=/etc/nginx/nginx.conf
  when: ansible_distribution_major_version=="7"
  notify: restrat

- name: config file
  template: src=nginx8.conf.j2 dest=/etc/nginx/nginx.conf
  when: ansible_distribution_major_version=="8"
  notify: restrat

vim tasks/file.yml

- name: file.html
  copy: src=roles/httpd/files/index.html dest=/usr/share/nginx/html/

vim tasks/service.yml

- name: start service
  service: name=nginx state=started enabled=yes


vim handlers/main.yml

- name: restrat
  service: name=nginx state=restarted

vim roles/role_nginx.yml

---
#test role
- hosts: appsrvs

  roles:
  - role: nginx
  • 测试安装
ansible-playbook role_nginx.yml

四、 playbook调用角色

1. 方法1

vim main.yml

---
- hosts: websrvs
  remote_user: root

  roles:
  - mysql
  - memcached
  - nginx

2. 方法2

传递变量给角色

vim main.yml

---
- hosts:
  remote_user:
  roles:
  - mysql
  - { role: nginx, username: nginx }   
  # 不同的角色调用不同的变量,键role用于指定角色名称,后续的k/v用于传递变量给角色

例2

---
- hosts: webservers
  roles:
    - common
    - { role: foo_app_instance, dir: '/web/htdocs/a.com', port: 8080 }

3. 方法3

还可基于条件测试实现角色调用

roles:
 - { role: nginx, username: nginx, when: ansible_distribution_major_version == '7' }

参考:

《ansible权威指南》

https://www.bilibili.com/video/BV1HZ4y1p7Bf?from=search&seid=13215158654353304589&spm_id_from=333.337.0.0

有道云笔记

你可能感兴趣的:(脚本&命令,shell,ansible,自动化)