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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/15829.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构篇C++实现】- 图

友情链接&#xff1a;C/C系列系统学习目录 文章目录 &#x1f680;一、图的基本概念和术语1、有向图和无向图3、基本图和多重图4、完全图5、子图6、连通、连通图和连通分量7、强连通图、强连通分量8、生成树、生成森林9、顶点的度、入度和出度10、边的权和网11、稠密图、稀疏图…

Ubuntu Server版 之 共享文件 samba和NFS 两种方法

NFS 和 Samba NFS &#xff1a; linux之间资源共享 Samba&#xff1a; 是windows系统与Linux系统之间资源共享的 samba 安装samba 工具 sudo apt install samba 创建共享目录 sudo mkdir /home/shared sudo chmod 777 /home/shared 配置sambd sudo vim /etc/samba/smb.con…

大数据课程E5——Flume的Selector

文章作者邮箱&#xff1a;yugongshiyesina.cn 地址&#xff1a;广东惠州 ▲ 本章节目的 ⚪ 了解Selector的概念和配置属性&#xff1b; ⚪ 掌握Selector的使用方法&#xff1b; 一、简介 1. 概述 1. Selector本身是Source的子组件&#xff0c;决定了将数据分发…

mysql的整体架构

服务层-引擎层-硬盘层 一条语句执行的整体过程: 先建立连接&#xff08;mysql -h -p 密码&#xff09;–预处理-词法分析-语法分析-优化器选择用什么索引表如何连接等-执行器 到这里都是属于server层&#xff0c;大多数功能包括视图&#xff0c;存储过程&#xff0c;触发器都是…

机器学习笔记之优化算法(一)无约束优化概述

机器学习笔记之优化算法——无约束优化概述 引言回顾&#xff1a;关于支持向量机的凸二次优化问题无约束优化问题概述解析解与数值解数值解的单调性关于优化问题的策略线搜索方法信赖域方法 引言 从本节开始&#xff0c;将介绍优化算法 ( Optimization Algorithm ) (\text{Opt…

用DBeaver进行数据备份与恢复

一、数据备份 1、选择需要备份的数据库或数据表&#xff0c;鼠标右击。 2、选择“工具-转存数据库” 3、勾选需要导出备份的数据库和数据表 可自行设置&#xff0c;这里直接点击开始&#xff1b; 导出完成 二、数据恢复 1、选择需要恢复的数据库或数据表&#xff0c;鼠标右…

Ubuntu下安装Node.js;npm

Ubuntu下安装Node.js curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - sudo apt-get install -y nodejs Ubuntu下安装npm sudo apt-get install npm Ubuntu下指定版本升级npm sudo npm install npm8.15.0 -g Ubuntu下升级node 安装n模块&#xff1a;s…

台灯头灯手电筒UL153亚马逊美国站测试要求

在将台灯、头灯或手电筒上架到亚马逊美国站之前&#xff0c;UL153测试是必不可少的一项认证。UL153是美国安全实验室&#xff08;Underwriters Laboratories&#xff09;颁布的一项标准&#xff0c;旨在确保产品的安全性和可靠性。那么&#xff0c;我们应该如何办理UL153测试报…

锌离子荧光探针TSQ,109628-27-5,具有很好的选择性荧光探针

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ PART1----外观以及性质&#xff1a; 锌离子荧光探针TSQ&#xff08;CAS号&#xff1a;109628-27-5&#xff09;&#xff0c;锌离子荧光探针TSQ是用于检测锌离子的荧光探针。 TSQ与Zn离子结合后&#xff0c;吸收波长和发射波…

无显示器设置家庭服务器树莓派4B,开启SSH,VNC,WIFI,配置内网穿透

前言 没有显示器对树莓派配置稍微有些繁琐&#xff0c;写一篇博客记录。 配置网络 以下都是在烧录好的sd卡根目录操作 创建一个ssh名字的空文件创建Wi-Fi配置&#xff0c;文件名称&#xff1a;wpa_supplicant.conf&#xff0c;内容&#xff1a; countryCN ctrl_interfaceDI…

【家庭公网IPv6】

家庭公网IPv6 这里有两个网站&#xff1a; 1、 IPV6版、多地Tcping、禁Ping版、tcp协议、tcping、端口延迟测试&#xff0c;在本机搭建好服务器后&#xff0c;可以用这个测试外网是否可以访问本机&#xff1b; 2、 IP查询ipw.cn&#xff0c;这个可以查询本机的网络是否IPv6访问…

QT--day2(信号与槽,多界面跳转)

第一个界面头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QIcon> //图标头文件 #include <QPushButton> //按钮类头文件QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public…

ChatGPT爆火的时代,人工智能和网络安全选哪个好?

我觉得网络安全会更好点 其实看了很多说法&#xff0c;感觉都是不成熟或者夹带私货的&#xff0c;我自己本科信息安全&#xff0c;目前在一家甲方做企业红军。 你如果选择人工智能&#xff0c;敢问你的学历怎么样&#xff1f;本科是否是985/211&#xff1f;自己是否有读研的打…

Flutter系列文章-Flutter进阶

在前两篇文章中&#xff0c;我们已经了解了Flutter的基础知识&#xff0c;包括Flutter的设计理念、框架结构、Widget系统、基础Widgets以及布局。在本文中&#xff0c;我们将进一步探讨Flutter的高级主题&#xff0c;包括处理用户交互、创建动画、访问网络数据等等。为了更好地…

【HarmonyOS】ArkTS 组件内转场动画,动画播放时颜色异常问题

【关键字】 HarmonyOS、ArkTS、组件内转场动画、颜色异常 【问题描述】 根据组件内转场动画文档中示例编写代码&#xff0c;使用动画转场组件button&#xff0c;并给button设置背景色让button透明度为0&#xff0c;实现动画转场时&#xff0c;会先出现默认蓝色button&#xf…

字节8年经验之谈 —— 如何从0开始做自动化测试?

自动化测试是使用软件工具在应用程序上自动运行测试的过程&#xff0c;无需任何人为干预。这可以通过减少手动测试的需要来保存时间并提高软件开发过程的效率。由于人为错误或不一致性&#xff0c;手动测试可能容易出错&#xff0c;这可能导致错误未被检测到。自动化测试通过提…

本土机器视觉创业企业涌现,深眸科技携手AI+3D视觉勇闯小场景赛道

随着工业自动化技术向智能化方向发展&#xff0c;人工智能实现快速落地&#xff0c;机器视觉应用产品在算力、算法和技术等方面得到持续升级&#xff0c;助力中国机器视觉行业进入高质量发展阶段。 在制造业转型升级、新兴产业发展的过程中&#xff0c;中国作为全球制造中心之…

Git分布式版本控制工具和GitHub(一)--简介

一.Git概述 1.Git简介 【1】什么是Git? Git就是代码版本管理工具。 【2】为什么要使用Git &#xff08;1&#xff09;版本控制 写代码就是不断写BUG的过程&#xff08;当然我们是不会这么说的&#xff09;&#xff0c;很多时候你写了100行代码之后&#xff0c;突然醒悟&…

ShareSDK 国内平台登陆返回参数

第三方登陆平台/返回参数用户信息 user.rawData授权信息 [user.credential rawData]微信cityaccess_tokencountryexpires_inheadimgurlopenidlanguagerefresh_tokennicknamescopeopenidunionidprivilegeprovincesexunionidQQcityaccess_tokenconstellationexpires_infigureurl…

SQL-每日一题【627. 变更性别】

题目 Salary 表&#xff1a; 请你编写一个 SQL 查询来交换所有的 f 和 m &#xff08;即&#xff0c;将所有 f 变为 m &#xff0c;反之亦然&#xff09;&#xff0c;仅使用 单个 update 语句 &#xff0c;且不产生中间临时表。 注意&#xff0c;你必须仅使用一条 update 语句…