首页 > 其他分享 >ansible权威指南笔记(四)—— roles的用法

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

时间:2023-04-18 13:39:20浏览次数:45  
标签:main roles 用法 nginx ansible role include yml


一、 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


标签:main,roles,用法,nginx,ansible,role,include,yml
From: https://blog.51cto.com/u_13631369/6203163

相关文章

  • 9.x - 13.0 postgresql 分区表新特性及简单用法
    一、分区表定义与意义1.分区表的定义把一个大的物理表分成若干个小物理表,并使得这些小物理表在逻辑上可以被当成一张表来使用。主表/父表/MasterTable主表是创建子表的模板,是一个正常的普通表,一般主表并不存任何数据。子表/分区表/ChlidTable/PartitionTable子表继承并属于一......
  • Promise基本用法
    Promise是ES6的新特性,是异步编程的一种解决方案从语法上说,Promise是一个对象,从它可以获取异步操作的消息,可以解决回调地狱(回调地狱嵌套回调函数)Promise的含义:本身不是异步,是封装异步操作容器,统一异步的标准Promise对象的特点:对象的状态不受外界影响,一旦状态改变,就不会......
  • MySQL导入导出 —— mysqldump 简介及常见用法
    一、导出导出用户需要有导出对象的权限,例如导出表要有select权限、导出视图要有showview权限、导出触发器要有trigger权限、需要锁表时要有locktables权限等。如果dump文件中包含了GTID信息,则无法导入到未启用GTID的数据库(低于5.6.9版本的数据库不支持GTID,因此也无法导入到这些......
  • vue常用组件之confirm用法及说明
    vue常用组件之confirm用法及说明原文链接:https://www.jb51.net/article/263587.htm+目录vue组件之confirmvue自定义confirm弹窗(全局组件)全局组件方式vue组件之confirm一些自带的方法,比如alert,confirm等,往往由于浏览器不同而展现出不同的样式,为了统一,我们可以自己实现简单封装,......
  • JS特殊用法
     --集合排序//排序//打印排序前集合console.log("排序前:"+data);for(vari=0;i<data[0].length;i++){ for(varj=0;j<data[0].length-1-i;j++){ //相邻元素两两对比,元素交换,大的元素交换到后面 if(data[1][j]+data[2][j]<data[1][j+1]+data[2][j+1]){// <为升序排列,降序请......
  • ansible的docker_container模块使用
    使用docker_container模块创建容器示例:----hosts:myserveripremote_user:root#执行用户gather_facts:false#屏蔽系统信息返回vars:ansible_python_interpreter:/usr/bin/python3#定义ansible使用python3的环境serial:"100%"#更新比列,可以......
  • keepalived+nginx ansible部署
    Linux9自动化部署Keepalived+Nginx高可用负载均衡器原创 魏文第 魏文第 2023-03-0619:00 发表于北京收录于合集#linux39个#ansible19个#自动化18个 通常使用负载均衡器(LB)为一组realserver(提供服务的服务器) 分配流量,以实现后端服务的高可......
  • 盘点Python内置函数sorted()高级用法实战
    今日鸡汤清川带长薄,车马去闲闲。大家好,我是Python进阶者。一、前言前几天在Python钻石交流群有个叫【emerson】的粉丝问了一个Python排序的问题,这里拿出来给大家分享下,一起学习下。其实这里【瑜亮老师】、【布达佩斯的永恒】等人讲了很多,只不过对于基础不太好的小伙伴们来说,还是有......
  • ansible使用教程
    目录一、介绍1.Ansible发展史2.特性3.架构4.ansible的作用以及工作结构5.ansible主要组成部分二、安装1.rpm包安装:EPEL源2.编译安装:3.Git方式:4.pip安装:pip是安装Python包的管理器,类似yum5.确认安装:三、相关文件1.配置文件2.程序3.主机清单详解4.配置文件详......
  • Oracle - DBMS_LOB函数和用法
    GETLENGTH返回指定LOB数据的长度的函数DBMS_LOB.GETLENGTH(lob_locINBLOB/CLOB/BFILE/NCLOB)RETURNINTEGER;OPEN打开LOB对象DBMS_LOB.OPEN(lob_locINOUTNOCOPYBLOB/CLOB/BFILE,open_modeINBINARY_INTEGER--只读:DBMS_LOB.LOB_RE......