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

ansible权威指南笔记(四)—— roles的用法一 roles 简介 自 1 2 版本引入的新特性 用于层次性 结构化地组织 playbook roles 能够根据层次型结构自动装载变量文件 tasks 以及 handlers 等 只需要在 playbook 中使用 include 指令即可 简单来讲 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


讯享网

- 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=&spm_id_from=333.337.0.0

有道云笔记

小讯
上一篇 2025-02-18 19:01
下一篇 2025-03-09 18:37

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/70567.html