ansible——roles 角色
一、概述
1.roles角色简介
roles用于层次性、结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令引入即可。
简单来讲,roles就是通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并可以便捷的include它们的一种机制。roles一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中。主要使用场景代码复用度较高的情况下。
2.roles 角色的作用
把playbook剧本里的各个play看作为角色,将各个角色的tasks任务、vars变量、templates模板、files
3.roles内各目录含义解释
- files:用来存放由 copy 模块或 script 模块调用的文件。
- templates:用来存放 jinjia2 模板,template 模块会自动在此目录中寻找 jinjia2 模板文件。
- tasks:此目录应当包含一个 main.yml 文件,用于定义此角色的任务列表,此文件可以使用 include 包含其它的位于此目录的 task 文件。
- handlers:此目录应当包含一个 main.yml 文件,用于定义此角色中触发条件时执行的动作。
- vars:此目录应当包含一个 main.yml 文件,用于定义此角色用到的变量。
- defaults:此目录应当包含一个 main.yml 文件,用于为当前角色设定默认变量。 这些变量具有所有可用变量中最低的优先级,并且可以很容易地被任何其他变量覆盖。所以生产中我们一般不在这里定义变量
- meta:此目录应当包含一个 main.yml 文件,用于定义此角色的元数据信息及其依赖关系。
二、 在playbook中使用roles创建lnmp
1.准备工作
1.1创建以roles命名的目录
mkdir /etc/ansible/roles/ -p #yum装完默认就有
1.2在 roles 目录中分别创建以各角色名称命名的目录
mkdir /etc/ansible/roles/nginx
mkdir /etc/ansible/roles/mysql
mkdir /etc/ansible/roles/php
1.3在每个角色命名的目录中分别创建files、handlers、tasks、templates、meta、defaults和vars目录,用不到的目录可以创建为空目录,也可以不创建
mkdir /etc/ansible/roles/nginx/{files,templates,tasks,handlers,vars,defaults,meta}
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta}
mkdir /etc/ansible/roles/php/{files,templates,tasks,handlers,vars,defaults,meta}
1.4在每个角色的 handlers、tasks、meta、defaults、vars 目录下创建 main.yml 文件,千万不能自定义文件名
touch /etc/ansible/roles/nginx/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/php/{defaults,vars,tasks,meta,handlers}/main.yml
2.利用roles创建nginx
2.1编辑nginx任务
cd /etc/ansible/roles/nginx/tasks
vim main.yml
#引用该目录下的init.yml
- include: init.yml- name: nginx.repocopy: src=nginx.repo dest=/etc/yum.repos.d/- name: install nginxyum: name={{pkg}} state=latest- name: nginx congrustion filetemplate: src=default.conf.j2 dest=/etc/nginx/conf.d/default.confnotify: "reload nginx" #以上操作后为changed的状态时,会通过notify指定的名称触发对应名称的handlers操作- name: index.phpcopy: src=index.php dest={{root_dir}}- name: start nginxservice: name={{svc}} state=started enabled=yes#编写关闭防火墙任务
vim init.yml
- name: disable firewalldservice: name=firewalld state=started enabled=no- name: stop selinuxshell: "/usr/sbin/setenforce 0"ignore_errors: true
2.2定义触发条件时执行的动作
#handlers目录用于定义此角色中触发条件时执行的动作。
cd /etc/ansible/roles/nginx/handlers
vim main.yml
- name: reload nginxservice: name={{svc}} state=reloaded
2.3编辑nginx模板文件
准备default.conf文件
cp default.conf /etc/ansible/roles/nginx/templates/default.conf.j2
cd /etc/ansible/roles/nginx/templates
vim default.conf.j2
--2行--
listen {{nginxip_port}};
--8行--
root {{root_dir}};
--29行--location ~ \.php$ {root {{root_dir}};fastcgi_pass {{passip_port}};fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME {{root_dir}}$fastcgi_script_name;include fastcgi_params;}
2.4定义变量
#变量放在vars目录下
cd /etc/ansible/roles/nginx/vars
vim main.yml
pkg: nginx
svc: nginx
nginxip_port: 192.168.88.20:80
nginx_servername: www.web.com
root_dir: /usr/share/nginx/html
passip_port: 192.168.88.30:9000
2.5准备复制文件
#files目录存放由 copy 模块或 script 模块调用的文件
cd /etc/ansible/roles/nginx/files
vim index.php
<?php
phpinfo();
?>vim nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
3.利用roles创建php
3.1编辑php任务
cd /etc/ansible/roles/php/tasks
vim main.yml
- name: rpm -Uvh phpshell: rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm && rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm- name: install phpyum: name={{pkg}} state=latest- name: create useruser: name=php shell=/sbin/nologin create_home=no- name: create directoryfile: name=/usr/share/nginx/html state=directory- name: copy index.phpcopy: src=index.php dest=/usr/share/nginx/html- name: php.inireplace: path=/etc/php.ini regexp=";date.timezone =" replace="date.timezone = Asia/Shanghai"notify: "reload php"- name: user groupreplace: path=/etc/php-fpm.d/www.conf regexp="apache" replace="php"notify: "reload php"- name: listenreplace: path=/etc/php-fpm.d/www.conf regexp="listen = 127.0.0.1:9000" replace="listen = 192.168.88.30:9000"notify: "reload php"- name: allow_clientsreplace: path=/etc/php-fpm.d/www.conf regexp="listen.allowed_clients = 127.0.0.1" replace="listen.allowed_clients = 192.168.88.20"notify: "reload php"- name: start php-fpmservice: name=php-fpm state=started enabled=yes
3.2定义触发条件时执行的动作
vim /etc/ansible/roles/php/handlers/main.yml
- name: reload phpservice: name=php-fpm state=reloaded
4.利用roles创建mysql
4.1编辑mysql剧本
vim /etc/ansible/roles/mysql/tasks/main.yml
- name: remove mariadb*yum: name=mariadb* state=absent- name: rpm -ivh mysqlshell: rpm -ivh https://repo.mysql.com/mysql57-community-release-el7-11.noarch.rpmignore_errors: true- name: mysql.reposhell: sed -i 's/gpgcheck=1/gpgcheck=0/' /etc/yum.repos.d/mysql-community.repo- name: install mysqlyum: name=mysql-server- name: start mysqlservice: name=mysqld.service state=started enabled=yes- name: password.shscript: password.sh- name: remove mysql57yum: name=mysql57-community-release-el7-10.noarch state=absent
4.2编辑脚本
vim /etc/ansible/roles/mysql/files/password.shpassd=$(grep "password" /var/log/mysqld.log | awk '{print $NF}')
mysql -uroot -p"$passd" --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'Admin@123';"
mysql -uroot -pAdmin@123 -e "grant all privileges on *.* to root@'%' identified by 'Admin@123' with grant option;"chmod +x roles/mysql/files/password.sh
5.修改hosts文件
vim /etc/ansible/hosts
[webservers]
192.168.88.20[dbservers]
192.168.88.30[mysql]
192.168.88.40
6.编辑lnmp的playbook并执行
cd /etc/ansible
vim lnmp2.yml
- name: nginxhosts: webserversroles:- nginx- name: phphosts: dbserversroles:- php- name: mysqlhosts: mysqlroles:- mysqlansible-playbook lnmp2.yml
相关文章:
ansible——roles 角色
一、概述 1.roles角色简介 roles用于层次性、结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令引入即可。 简单来讲,roles就是通过分别将变量、文件、任务、模板及处理器放置…...
GitHub上删除项目后,IDEA分享项目到GitHub提示Remote is already on GitHub
文章目录 一、错误信息二、解决方法1.删除GitHub上的项目2.找到项目里的.git隐藏文件3.找到config文件4.打开config文件,删除[remote "git-test"]及下面两行内容5.继续使用IDEA分享项目到GitHub即可 一、错误信息 二、解决方法 1.删除GitHub上的项目 2.…...
【机器学习 | 决策树】利用数据的潜力:用决策树解锁洞察力
🤵♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…...
postgis mvt矢量切片 django drf mapboxgl
postgis mvt矢量切片 django drf mapboxgl 目录 0.前提 1.sql代码 2.django drf后端服务代码 3.具体的应用(整体代码) 4.参考 0.前提 [1] 静态的矢量切片可以采用 tippecanoe 生成,nginx代理,这种数据是不更新的;…...
C语言编程工具软件推荐!
1、VS(Visual Studio) [VS是目前最受欢迎的适用于Windows平台应用程序的综合开发环境,由于大多数同学使用的都是Windows操作系统,因此VS非常适合大家。在日常课堂和考试中,我们使用的VS2010支持多种不同的编程语言,VS2010最初支持…...
单体架构和微服务架构的区别
文章目录 一、单体架构的定义1. 单体架构的优点:2. 单体架构的缺点: 二、微服务架构的定义1. 微服务架构的优点:2. 微服务架构的缺点: 三、单体架构VS微服务架构1. 区别:1.1 架构规模:1.2 依赖关系…...
python--local对象、flask上下文源码分析
一、local对象 背景: 多线成并发操作一个变量,会导致数据错乱,可以使用互斥锁加锁处理数据不安全的情况 (临界区) 解决: 使用local对象处理,多个线程操作的变量是local对象,就不会…...
类文件一些内容
1、类加载 将类的字节码加载到JVM中,并转换为可以被JVM运行的数据结构的过程 类文件结构...
28 Java练习——实现两个集合的交集和并集
求并集的思路:假设传入的是一个ArrayList对象,求并集的时候直接调用其中一个List集合的addAll方法将另一个集合合并过来,而List的特性是有序,重复的。因此,使用Set接口的无序不可重复的特性,把Collection对…...
ES6学习-Promise
Promise 简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。 语法上: Promise 是一个对象,从它可以获取异步操作的消息。 特点 对象的状态不受外界影响。Promise 对象戴白哦一个异步操…...
《Web安全基础》03. SQL 注入
web 1:简要 SQL 注入2:MySQL 注入2.1:信息获取2.2:跨库攻击2.3:文件读写2.4:常见防护 3:注入方法3.1:类型方法明确3.2:盲注3.3:编码3.4:二次注入3…...
算法与数据结构(二十一)二叉树(纲领篇)
备注:本文旨在通过 labuladong 的二叉树(纲领篇)理解框架思维,用于个人笔记及交流学习,版权归原作者 labuladong 所有; 我刷了这么多年题,浓缩出二叉树算法的一个总纲放在这里,也许…...
visio,word添加缺少字体,仿宋_GB2312、楷体_GB2312、方正小标宋简体等字体下载
一. 内容简介 visio,word添加缺少字体,仿宋_GB2312、楷体_GB2312、方正小标宋简体等字体下载 二. 软件环境 2.1 visio 三.主要流程 3.1 下载字体 http://www.downza.cn/ 微软官方给的链接好多字体没有,其他好多字体网站,就是给你看个样式ÿ…...
Java爬虫
什么是爬虫? 通过请求,从而去获取互联网上的各种数据与资源,如文字,图片,视频。 本质上原理都一样,都是通过api请求,然后服务器就会发给你信息,然后你再根据这些信息去提取你想要的…...
海外应用商店优化实用指南之关键词
和SEO一样,关键词是ASO中的一个重要因素。就像应用程序标题一样,在Apple App Store和Google Play中处理应用程序关键字的方式也有所不同。 关键词研究。 对于Apple,我们的所有关键词只能获得100个字符,Google Play没有特定的关键…...
element+vue 之动态form
1.页面部分 <div v-for"(item,index) in formList" :key"index"><el-col :span"6" v-if"item.inputType0"><el-form-item :label"item.conditionName" :prop"item.conditionCode":rules"{req…...
winform学习(3)-----Windows窗体应用和Windows窗体应用(.Net Framework)有啥区别?
1.模板选择 在学习winform的时候总是会对这两个应用不知道选择哪个?而且在学习的时候也没有具体的说明 首先说一下我是在添加控件的时候出现了以下问题 对于使用了Windows窗体应用这个模板的文件在工具箱中死活不见控件。 在转换使用了Windows窗体应用(.NET Fram…...
虚拟化中的中断机制:X86与PIC 8259A探索(上)
本系列深入探讨虚拟化中断技术,从X86架构和PIC 8259A的基础,到IOAPIC和MSI的编程,再到MSIX技术与Broiler设备的实战应用,全面剖析中断虚拟化的前沿进展。 X86 中断机制 在计算机架构中,CPU 运行的速度远远大于外设…...
软件外包开发语言排行榜
软件开发语言的排行榜是一个动态的话题,而在未来的几年中,新的技术和语言可能会不断涌现,影响排名。然而以下是一些在过去几年中一直受欢迎并有前途的软件开发语言,如果是新入门软件开发行业在学习语言做选择,希望下面…...
BI技巧丨利用OFFSET计算同环比
微软最近更新了很多开窗函数,其内部参数对比以往的DAX函数来说,多了很多,这就导致学习的时间成本直线上升。 而且对于新增函数的应用场景,很多小伙伴也是一知半解的,本期我们就来聊一聊关于最近新增的开窗函数——OFF…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...
