ansible剧本中的角色

1 roles角色

1.1 roles角色的作用?

可以把playbook剧本里的各个play看作为一个角色,将各个角色打的tasks任务、vars变量、template模版和copy、script模块使用的相关文件等内容放置在指定角色的目录里统一管理,在需要的时候可在playbook中使用roles角色直接调用即可。

1.2 roles的目录格式

roles/                         #角色总目录,其每个子目录就是一个角色目录nginx/                         #相当于playbook中的每一个play主题,目录名就是角色名files/                         #存放copy、script模块调用的文件templates/                     #存放template模块调用的 XXX.j2 模板文件tasks/main.yml                 #定义此角色的tasks普通任务列表handlers/main.yml              #定义此角色通过notify触发时执行的handlers处理器任务列表vars/main.yml                  #定义此角色用的自定义变量defaults/main.yml              #定义此角色用的默认变量(一般不用)meta/main.yml                  #定义此角色的元数据信息和依赖关系mysql/.... php/....

1.3 调用roles

vim XXX.yaml
- name:hosts:remote_user:roles:- nginx- mysql- php
​
ansible-playbook XXX.yaml

2 playbook调用roles分布式安装LNMP

2.1 管理端安装ansible并配置主机清单,与远程主机建立免交互

管理端安装 ansible
yum install -y epel-release         //先安装 epel 源
yum install -y ansible

配置主机清单
cd /etc/ansible
vim hosts       
[webservers]            #配置组名
192.168.111.22          #组里包含的被管理的主机IP地址或主机名(主机名需要先修改/etc/hosts文件)
[dbservers]
192.168.111.33
[ccservers]
192.168.111.44

配置密钥对验证
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
​
yum install -y sshpass
sshpass -p '123' ssh-copy-id -o StrictHostKeyChecking=no root@192.168.111.22
sshpass -p '123' ssh-copy-id -o StrictHostKeyChecking=no root@192.168.111.33 
sshpass -p '123' ssh-copy-id -o StrictHostKeyChecking=no root@192.168.111.44

2.2 部署nginx主机配置

创建nginx主机目录和yml文件
在命名的目录中分别创建files、handlers、tasks、templates、meta、defaults和vars目录,用不到的目录可以创建为空目录,也可以不创建
mkdir /opt/ansible/roles/nginx/{files,templates,tasks,handlers,vars,defaults,meta}
在角色的 handlers、tasks、meta、defaults、vars 目录下创建 main.yml 文件,千万不能自定义文件名
touch /opt/ansible/roles/nginx/{defaults,vars,tasks,meta,handlers}/main.yml

配置tasks文件
vim /opt/ansible/roles/nginx/tasks/main.yml 
​
- name: disable firewalldservice: name=firewalld state=stopped enabled=no
- name: disable selinuxcommand: '/usr/sbin/setenforce 0'ignore_errors: true
- name: copy nginx repocopy: src=nginx.repo dest=/etc/yum.repos.d/
- name: install nginxyum: name={{pkg}} state=present
- name: create root dirfile: path={{root_dir}} state=directory
- name: prepare nginx config filetemplate: src=nginx.conf.j2 dest=/etc/nginx/nginx.confnotify: "reload nginx"
- name: start nginxservice: name={{svc}} state=started enabled=yes
~                                                

配置vars文件
vim /opt/ansible/roles/nginx/vars/main.yml 
​
nginx_addr: 192.168.111.22
nginx_port: 80
server_name: www.ky33.com
root_dir: /var/www/html
php_addr: 192.168.111.22
php_port: 9000
pkg: nginx
svc: nginx

配置templates模版中nginx用于支持php服务的配置文件
vim /opt/ansible/roles/nginx/templates/nginx.conf.j2 
​
worker_processes  auto;
events {use epoll;worker_connections  1024;
}
http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       {{nginx_addr}}:{{nginx_port}};server_name  {{server_name}};charset utf-8;location / {root   {{root_dir}};index  index.php index.html;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}location ~ \.php$ {root           {{root_dir}};fastcgi_pass   {{php_addr}}:{{php_port}};fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;include        fastcgi_params;}}

安装rpcbind和nfs并配置用于php挂载
yum -y install rpcbind nfs
​
vim /etc/exports
​
/usr/share/nginx/html   192.168.111.0/24(rw)
showmount -e
Export list for localhost.localdomain:
/usr/share/nginx/html 192.168.111.0/24
systemctl restart rpcbind nfs

配置php服务文件用于测试
cd /usr/share/nginx/html/
vim index.php 
​
<?php
phpinfo;
?>

2.3 部署mysql主机配置

创建mysql主机目录和yml文件
在命名的目录中分别创建files、handlers、tasks、templates、meta、defaults和vars目录,用不到的目录可以创建为空目录,也可以不创建
mkdir /opt/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta}
在角色的 handlers、tasks、meta、defaults、vars 目录下创建 main.yml 文件,千万不能自定义文件名
touch /opt/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml

配置tasks文件
vim /opt/ansible/roles/mysql/tasks/main.yml 
​
- include: "init.yml"
- name: remove mariadbyum: name=mariadb* state=absent
- name: copy mysql repocopy: src=mysql-community.repo dest=/etc/yum.repos.d/
- name: modify mysql reporeplace: path=/etc/yum.repos.d/mysql-community.repo regexp="gpgcheck=1" replace="gpgcheck=0"
- name: install mysqlyum: name={{pkg}} state=present
- name: start mysqlservice: name={{svc}} state=started enabled=yes
- name: init mysqlshell: passd=$(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;"ignore_errors: true
​

配置防火墙文件
vim /opt/ansible/roles/mysql/tasks/init.yml 
​
- name: disable firewalldservice: name=firewalld state=stopped enabled=no
- name: disable selinuxcommand: '/usr/sbin/setenforce 0'ignore_errors: true

配置vars文件
vim /opt/ansible/roles/mysql/vars/main.yml 
​
pkg: mysql-server
svc: mysqld

2.4 部署php主机配置

创建php主机目录和yml文件
在命名的目录中分别创建files、handlers、tasks、templates、meta、defaults和vars目录,用不到的目录可以创建为空目录,也可以不创建
mkdir /opt/ansible/roles/php/{files,templates,tasks,handlers,vars,defaults,meta}
在角色的 handlers、tasks、meta、defaults、vars 目录下创建 main.yml 文件,千万不能自定义文件名
touch /opt/ansible/roles/php/{defaults,vars,tasks,meta,handlers}/main.yml

配置tasks文件
vim /opt/ansible/roles/php/tasks/main.yml 
​
- name: install phpyum: name=php72w,php72w-cli,php72w-common,php72w-devel,php72w-embedded,php72w-gd,php72w-mbstring,php72w-pdo,php72w-xml,php72w-fpm,php72w-mysqlnd,php72w-opcache state=present
- name: create php useruser: name={{user_name}} shell=/sbin/nologin create_home=no
- name: modify php config filereplace: path=/etc/php.ini regexp=";date.timezone =" replace="date.timezone = Asia/Shanghai"notify: "reload php-fpm"
- name: modify user and group in www.confreplace: path=/etc/php-fpm.d/www.conf regexp="apache" replace="{{user_name}}"notify: "reload php-fpm"
- name: modify listen addr in www.confreplace: path=/etc/php-fpm.d/www.conf regexp="127.0.0.1:9000" replace="{{php_addr}}"notify: "reload php-fpm"
- name: modify allowed_clients in www.confreplace: path=/etc/php-fpm.d/www.conf regexp="127.0.0.1" replace="{{nginx_addr}}"notify: "reload php-fpm"
- name: start php-fpmservice: name={{svc}} state=started enabled=yes
- name: create php root dirfile: path=/var/www/html state=directory
- name: mount nfsmount: src="192.168.111.22:/usr/share/nginx/html" path=/var/www/html fstype=nfs state=mounted opts="defaults,_netdev"

配置vars文件
vim /opt/ansible/roles/php/vars/main.yml 
​
user_name: php
php_addr: 192.168.111.44:9000
nginx_addr: 192.168.111.22
svc: php-fpm

2.5 配置lnmp启动剧本

vim site.yml 
​
- hosts: webserversremote_user: rootroles:- nginx
- hosts: dbserversremote_user: rootroles:- mysql
- hosts: ccserversremote_user: rootroles:- php

执行脚本

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

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

相关文章

删除挖矿木马yaya病毒

文章目录 挖矿木马&#xff08;yaya&#xff09; 挖矿木马&#xff08;yaya&#xff09; 参考文档&#xff1a;解决挖矿 将隐藏内核模块可见 kill -63 0 查看隐藏的内核模块nonono cat /proc/modules |head -n 10 删除内核模块 rmmod nonono 结束挖矿进程 使用top命令查…

浅谈js事件机制

事件是什么&#xff1f;事件模型&#xff1f; 原始事件模型&#xff08;DOM0级&#xff09; HTML代码中指定属性值&#xff1a;在js代码中指定属性值&#xff1a;优点&#xff1a;缺点&#xff1a; IE 事件模型DOM2事件模型 对事件循环的理解 宏任务&#xff08;Macrotasks&…

PWM功能介绍 和配置

泰山派默认提供了3组PWM的GPIO &#xff0c; 为了检测PWM的输出&#xff0c;我们可以配合逻辑分析仪来查看效果&#xff0c;或者搭配STC8的LED灯 PWM 测试 列举所有的PWM设备&#xff1a; # 查找所有有pwm名称的文件 find / -name "pwm" # pwm4: pwmfe6e0000 edp屏幕…

短剧弯道超车拿下2024开年第一爆,谁在打造新的暴富神话?

2024开年第一爆竟然被一部土味小短剧拿下了。 春节期间,无论是刷抖音还是微博,都能看到《我在八零年代当后妈》这部微短剧,女大学生穿越到八十年代当后妈,集狗血、土味、爽点于一体,让人相当上头。 春节档长视频平台爱、优、腾都拿出了当家大戏抢夺剧集市场,没想到被短…

人机工程学和人机交互理论:智能座舱设计

hello家人们...本人熟悉PS、Xd、Ai、Sketch、Figma、墨刀、即时设计、mastergo、Pixso等行业设计软件以及前端开发等技能&#xff0c;拥有10年的UI经验&#xff0c;我们可以通过关注评论私信交流以帮助到您解决UI工作中的烦恼&#xff01;谢谢 人机工程学与人机交互理论&#x…

Gin框架: HTML模板渲染之配置与语法详解

Gin的HTML模板配置 1 &#xff09;单一目录的配置 配置模板目录&#xff0c;在与main.go同级下, 新建目录&#xff0c;下面二选一&#xff0c;仅作举例, 这里选择 tpls templatestpls 在 tpls 目录下新建 news.html <!-- 最简单的 --> <h1>News Page</h1>&l…

matplotlib图例使用案例1.1:在不同行或列的图例上添加title

我们将图例进行行显示或者列显示后&#xff0c;只能想继续赋予不同行或者列不同的title来进行分类。比较简单的方式&#xff0c;就是通过ax.annotate方法添加标签&#xff0c;这样方法复用率比较低&#xff0c;每次使用都要微调ax.annotate的显示位置。比较方便的方法是在案例1…

Python Flask高级编程之RESTFul API前后端分离(学习笔记)

Flask-RESTful是一个强大的Python库&#xff0c;用于构建RESTful APIs。它建立在Flask框架之上&#xff0c;提供了一套简单易用的工具&#xff0c;可以帮助你快速地创建API接口。Flask-RESTful遵循REST原则&#xff0c;支持常见的HTTP请求方法&#xff0c;如GET、POST、PUT和DE…

C# CAD2016 多边形顶点按方向重新排序

多边形顶点按方向重新排序 初始化多边形顶点集合 outerPoints 创建一个名为 outerPoints 的 List<Point2d>&#xff0c;用于存储多边形的所有顶点坐标。 计算多边形顶点集合的边界框&#xff08;BoundingBox&#xff09; 使用LINQ的Aggregate方法遍历整个outerPoints列表…

金融云行业研究:预计2029年将达到626亿美元

金融云是指金融机构利用云计算模型构成原理&#xff0c;将自身数据、客户、流程及价值通过数据中心、客户端等技术手段分散到“云”中&#xff0c;以提高金融机构迅速发现并解决问题的能力&#xff0c;提升整体工作效率&#xff0c;改善流程&#xff0c;降低运营成本&#xff0…

代码随想录算法训练营29期|day54 任务以及具体安排

第九章 动态规划part11 123.买卖股票的最佳时机III // 版本一 class Solution {public int maxProfit(int[] prices) {int len prices.length;// 边界判断, 题目中 length > 1, 所以可省去if (prices.length 0) return 0;/** 定义 5 种状态:* 0: 没有操作, 1: 第一次买入…

VUE3 中导入Visio 图形

微软的Visio是一个功能强大的图形设计工具&#xff0c;它能够绘制流程图&#xff0c;P&ID&#xff0c;UML 类图等工程设计中常用的图形。它要比其它图形设计软件要简单许多。以后我的博文中将更多地使用VISO 来绘制图形。之前我一直使用的是corelDraw。 Visio 已经在工程设…