回炉重造十一------ansible批量安装服务
1.playbook的核心组件
- Hosts 执行的远程主机列表
- Tasks 任务集,由多个task的元素组成的列表实现,每个task是一个字典,一个完整的代码块功能需最
少元素需包括 name 和 task,一个name只能包括一个task - Variables 内置变量或自定义变量在playbook中调用
- Templates 模板,可替换模板文件中的变量并实现一些简单逻辑的文件
- Handlers 和 notify 结合使用,由特定条件触发的操作,满足条件方才执行,否则不执行
- ags 标签 指定某条任务执行,用于选择运行playbook中的部分代码。ansible具有幂等性,因此
会自动跳过没有变化的部分,即便如此,有些代码为测试其确实没有发生变化的时间依然会非常地
长。此时,如果确信其没有变化,就可以通过tags跳过此些代码片断
1.1ansible命令执行过程
1. 加载自己的配置文件,默认/etc/ansible/ansible.cfg
2. 加载自己对应的模块文件,如:command
3. 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
4. 给文件+x执行
5. 执行并返回结果
6. 删除临时py文件,退出
1.2 ansible常用工具
ansible-vault
ansible-galaxy
ansible-vault [create|decrypt|edit|encrypt|rekey|view]
ansible-vault encrypt hello.yml #加密
ansible-vault decrypt hello.yml #解密
ansible-vault view hello.yml #查看
ansible-vault edit hello.yml #编辑加密文件
ansible-vault rekey hello.yml #修改口令
ansible-vault create new.yml #创建新文件
1.3host组件
1.3.1概念:
aybook中的每一个play的目的都是为了让特定主机以某个指定的用户身份执行任务。hosts用
于指定要执行指定任务的主机,须事先定义在主机清单中
1.3.2 host文件的书写
[servera] #组名
172.17.8.1
172.17.8.2
172.17.8.3[serverb]
172.17.8.1
172.17.8.4
172.17.8.5[serverc]
servera:serverb #取servera和serverb的并集
#相当于
172.17.8.1
172.17.8.2
172.17.8.3
172.17.8.4
172.17.8.5[serverd]
servera:&server #取servera和serverb组的交集
servera:!serverb #在serevra中但不在serverb中
1.2 task列表和action组件
1.2.1 概念
play的主体部分是task list,task list中有一个或多个task,各个task 按次序逐个在hosts中指定的所有主
机上执行,即在所有主机上完成第一个task后,再开始第二个task,task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量。模块执行是幂等的,这意味着多次执行是安全的,因为其结果均一致.每个task都应该有其name,用于playbook的执行结果输出,建议其内容能清晰地描述任务执行步骤。如果未提供name,则action的结果将用于输出。
1.2.2 task格式
tasks:- name: install httpdyum: name=httpd#或者
tasks:- name: install httpdyum: name: httpd
2.编写playbook文件
2.1playbook的命令
--syntax-check #语法检查,可缩写成--syntax, 相当于bash -n
-C --check #模拟执行,只检测可能会发生的改变,但不真正执行操作,dry run
--list-hosts #列出运行任务的主机
--list-tags #列出tag
--list-tasks #列出task
--limit 主机列表 #只针对主机列表中的特定主机执行
-i INVENTORY #指定主机清单文件,通常一个项对应一个主机清单文件
--start-at-task START_AT_TASK #从指定task开始执行,而非从头开始,START_AT_TASK为任务的
name
-v -vv -vvv #显示过程
2.2setup变量的调用
查看远程主机默认的setup变量
ansible 172.17.8.11 -m setup
#常用的setup变量
"ansible_facts": {"ansible_all_ipv4_addresses": ["172.17.8.11"],"ansible_default_ipv4": {"address": "172.17.8.11", "alias": "eth0", "broadcast": "172.17.8.255", "gateway": "172.17.8.2", "interface": "eth0", "macaddress": "00:0c:29:87:53:a2", "mtu": 1500, "netmask": "255.255.255.0", "network": "172.17.8.0", "type": "ether"#调用setup中的变量格式:{{ 变量名["变量名下的分支"] }}- hosts: hosttasks:- name: show host ipfile: path: /data/{{ ansible_default_ipv4["address"] }}_{{ ansible_date_time["date"] }}.log state: touch
2.3文件中定义变量
#调用文件中的变量
vim var1.yml
---
- hosts: hostvars: #定义变量user: weng #变量名:定义变量的值group: shiqiangtasks:- name: print debug debug:msg: my name is {{ user }} ,my group is {{ group }} #{{ $name }}引用变量 #文件中的变量相互调用
---- hosts: hostremote_user: rootvars:collect_info: "/data/test/{{ansible_default_ipv4['address']}}/"tasks:- name: create IP directoryfile: name="{{collect_info}}" state=directory#使用变量文件vim vars.yml
---
# variables file
package_name: mariadb-server
service_name: mariadb
vim var5.yml
---
#install package and start service
- hosts: dbsrvs
remote_user: root
vars_files:- vars.yml
tasks:- name: install packageyum: name={{ package_name }}tags: install- name: start serviceservice: name={{ service_name }} state=started enabled=yes
3、实战案例
3.1 基于角色安装mysql5.6
[root@dns-master ansible]# tree
.
├── mysql_role.yml
├── nginx
└── roles └── mysql├── files #存放数据库的配置文件和安装包│ ├── my.cnf #配置文件│ └── mysql-8.0.25-el7-x86_64.tar.gz #mysql的安装包├── tasks #任务列表│ ├── group.yml │ ├── init_data.yml│ ├── install.yml│ ├── linksoft.yml│ ├── main.yml #任务列表│ ├── mysql.conf.yml│ ├── path.yml│ ├── service.yml│ ├── start_file.yml│ ├── unarchive.yml│ └── user.yml└── vars└── main.yml #定义变量参数[root@dns-master tasks]# cat main.yml
- include: group.yml
- include: user.yml
- include: unarchive.yml
- include: linksoft.yml
- include: mysql.conf.yml
- include: init_data.yml
- include: path.yml
- include: start_file.yml
- include: service.yml[root@dns-master tasks]# cat group.yml
- name: create group mysqlgroup:name: mysqlgid: 306[root@dns-master tasks]# cat user.yml
- name: create mysql useruser:name: mysqluid: 306group: mysql[root@dns-master tasks]# cat unarchive.yml
- name: copy tar to remote host and file modeunarchive:src: /data/ansible/roles/mysql/files/{{ mysql_file }}dest: /usr/local/srcgroup: mysqlowner: mysql[root@dns-master tasks]# cat linksoft.yml
- name: create linkfile /usr/local/src/mysqlfile:src: /usr/local/src/mysql-8.0.25-el7-x86_64dest: /usr/local/src/mysqlstate: linkgroup: mysqlowner: mysql[root@dns-master tasks]# cat mysql.conf.yml
- name: create mysql configcopy:src: /data/ansible/roles/mysql/files/my.cnfdest: /etc/my.cnf[root@dns-master tasks]# cat init_data.yml
- name: data dirshell: /usr/local/src/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir=/app/mysql --basedir=/usr/local/src/mysql[root@dns-master tasks]# cat path.yml
- name: PATHcopy:content: 'PATH={{dest_file}}/mysql/bin:$PATH'dest: /etc/profile.d/mysql.sh[root@dns-master tasks]# cat start_file.yml
- name: create start mysql fileshell: /bin/cp {{dest_file}}/mysql/support-files/mysql.server /etc/init.d/mysqld;sed -Ei 's#^(basedir=)$#\1\/usr\/local\/src\/mysql#' /etc/init.d/mysqld;sed -Ei 's#^(datadir=)$#\1\/app\/mysql#' /etc/init.d/mysqld[root@dns-master tasks]# cat service.yml
- name: start mysqlshell: chkconfig --add mysqld;/etc/init.d/mysqld start
关于ansible常用的模块功能,之前做过总结这里就不做总结了,后面还会继续改进,有的案例和内容还没总结好。先凑合这看
相关文章:

回炉重造十一------ansible批量安装服务
1.playbook的核心组件 Hosts 执行的远程主机列表Tasks 任务集,由多个task的元素组成的列表实现,每个task是一个字典,一个完整的代码块功能需最 少元素需包括 name 和 task,一个name只能包括一个taskVariables 内置变量或自定义变量在playbook中调用Templates 模板,…...

系统集成项目管理工程师 笔记(第20章:知识产权管理、第21章:法律法规和标准规范)
文章目录 20.1.2 知识产权的特性 58420.2.1 著作权及邻接权 58520.2.2 专利权 58920.2.3 商标权 59221.3 诉讼时效 59921.6.3 标准分级与标准类型 60321.7.2 信息系统集成项目管理常用的技术标准 6061、基础标准2、开发标准3、文档标准4、管理标准 第20章 知识产权管理 584 20.…...

Channel-wise Knowledge Distillation for Dense Prediction(ICCV 2021)原理与代码解析
paper:Channel-wise Knowledge Distillation for Dense Prediction official implementation:https://github.com/irfanICMLL/TorchDistiller/tree/main/SemSeg-distill 摘要 之前大多数用于密集预测dense prediction任务的蒸馏方法在空间域spatial…...

No.052<软考>《(高项)备考大全》【冲刺6】《软考之 119个工具 (4)》
《软考之 119个工具 (4)》 61.人际交往:62.组织理论:63.预分派:64.谈判:65.招募:66.虚拟团队:67.多标准决策分析:68.人际关系技能:69.培训:70.团队建设活动:71.基本规则:72.集中办公:73.认可与奖励:74.人事评测工具:75.观察和交谈:76.项目绩效评估:77.冲…...

Go | 一分钟掌握Go | 9 - 通道
作者:Mars酱 声明:本文章由Mars酱编写,部分内容来源于网络,如有疑问请联系本人。 转载:欢迎转载,转载前先请联系我! 前言 在Java中,多线程之间的通信方式有哪些?记得吗&…...

【建议收藏】计算机视觉是什么?这几个计算机视觉的核心任务你真的了解吗?
文章目录 📚引言📖计算机视觉的核心任务📑图像分类和对象识别📑目标检测📑语义分割📑实例分割📑图像生成 📖计算机视觉的应用领域📑人脸识别📑自动驾驶&#…...

BatteryChargingSpecification1.2中文详解
1. Introduction 1.1 Scope 规范定义了设备通过USB端口充电的检测、控制和报告机制,这些机制是USB2.0规范的扩展,用于专用 充电器(DCP)、主机(SDP)、hub(SDP)和CDP(大电流充电端口)对设备的充电和power up。这些机制适用 于兼…...

基于Jenkins,docker实现自动化部署(持续交互)【转】
前言 随着业务的增长,需求也开始增多,每个需求的大小,开发周期,发布时间都不一致。基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的…...

漫谈大数据 - 数据湖认知篇
导语:数据湖是目前比较热的一个概念,许多企业都在构建或者准备构建自己的数据湖。但是在计划构建数据湖之前,搞清楚什么是数据湖,明确一个数据湖项目的基本组成,进而设计数据湖的基本架构,对于数据湖的构建…...

阿里云国际版ACE与国内版ACE区别
1.国际版ACE与国内版ACE有哪些不同 2.国际版ACP/ACE约考流程 2.1 登录VUE官方网站约考 https://www.pearsonvue.com.cn/Clients/Alibaba-Cloud-Certification.aspx 2.2 如果之前有注册过账户,那就直接登录,如果还没有账户,那就创建账户 2.…...

Mysql8.0 gis支持
GIS数据类型 MySQL的GIS功能遵守OGC的OpenGIS Geometry Model,支持其定义的空间数据类型的一个子集,包括以下空间数据类型: GEOMETRY:不可实例化的数据类型,但是可以作为一个列的类型,存储任何一种其他类型的数据POIN…...

汇编---Nasm
文章目录 比较流行的汇编语言有3种:不同风格的汇编语言在语法格式上会有不同: 实战代码:Intrinsic函数手写汇编(8086汇编)调用C的API库函数调用约定实际代码 C调用汇编函数进行计算纯C实现如下:CASM实现:纯ASM实现:ASM打印命令行参…...

NDK OpenGL渲染画面效果
NDK系列之OpenGL渲染画面效果技术实战,本节主要是通过OpenGL Java库(谷歌对OpenGL C库做了JIN封装,核心实现还是在Native层),实现页面渲染,自定义渲染特效。 实现效果: 实现逻辑: 1…...

常见的深度学习框架
框架优点缺点TensorFlow- 由Google开发和维护,社区庞大,学习资源丰富- 具备优秀的性能表现,支持大规模分布式计算- 支持多种编程语言接口,易于使用- 提供了可视化工具TensorBoard,可用于调试和可视化模型- 底层架构复杂…...

【设计模式】七大设计原则--------单一职责原则
文章目录 1.案例1.1 原始案例1.2 改进一:类上遵循单一职责原则1.3 改进二:方法上遵循单一职责原则 2.小结 1.案例 1.1 原始案例 package com.sdnu.principle.singleresponsibility; //客户端 public class singleResponsibility {public static void m…...

MySQL-中间件mycat(一)
目录 🍁mycat基础概念 🍁Mycat安装部署 🍃初始环境 🍃测试环境 🍃下载安装 🍃修改配置文件 🍃启动mycat 🍃测试连接 🦐博客主页:大虾好吃吗的博客 ǹ…...

ARM寄存器组织
ARM有37个32位长的寄存器: 1个用做PC(Program Counter); 1个用做CPSR(Current Program Status Register); 5个用做SPSR(Saved Program Status Registers); 30个通用寄存器。 AR…...

记录一次webdav协议磁盘挂载经验总结
记录一次磁盘挂载经验总结 文章目录 记录一次磁盘挂载经验总结适配环境服务器协议适配方案脚本与详细说明 适配环境 windows 11windows 10windows 7 x86 and x64linuxuos统信国产化linux系统 服务器协议 webdav 适配方案 一、通用 winfsprclone 已验证通过,版…...

安装Django
1. 在物理环境安装Django Python官方的PyPi仓库为我们提供了一个统一的代码托管仓库,所有的第三方库,甚至你自己写的开源模块,都可以发布到这里,让全世界的人分享下载 pip是最有名的Python包管理工具 。提供了对Python包的查找、…...

【前端面经】JS-如何使用 JavaScript 来判断用户设备类型?
在 Web 开发中,有时需要针对不同的设备类型进行不同的处理。例如,对于移动设备,我们可能需要采用不同的布局或者交互方式,以提供更好的用户体验。因此,如何判断用户设备类型成为了一个重要的问题。 1. 使用 navigator…...

压缩HTML引用字体
内容简介 有些网站为了凸显某部分字体,而引入自定义字体,但由于自定义字体相对都比较大(几M),导致页面加载缓慢;所以本文介绍三种压缩字体的方法,可根据项目情况自行选择。 压缩方法 1、利用Fontmin程序&a…...

大厂高频面试:底层的源码逻辑知多少?
你好,我是何辉。今天我们来聊一聊Dubbo的大厂高频面试题。 大厂面试,一般重点考察对技术理解的深度,和中小厂的区别在于,不仅要你精于实战,还要你深懂原理,勤于思考并针对功能进行合理的设计。 网上一直流…...

【学习笔记】CF607E Cross Sum
最后一道数据结构,不能再多了。 而且需要一点计算几何的知识,有点难搞。 分为两个部分求解。 首先考虑找到距离 ≤ r \le r ≤r的交点数量。发现这等价于圆上两段圆弧相交,因此将圆上的点离散化后排序,用一个主席树来求就做完了…...

Python 一元线性回归模型预测实验完整版
一元线性回归预测模型 实验目的 通过一元线性回归预测模型,掌握预测模型的建立和应用方法,了解线性回归模型的基本原理 实验内容 一元线性回归预测模型 实验步骤和过程 (1)第一步:学习一元线性回归预测模型相关知识。 线性回归模型属于…...

GStreamer第一阶段的简单总结
这里写目录标题 前言个人的总结v4l2src插件的简单使用 前言 因为涉及很多细节的GStreamer官方论坛有详细解链接: GStreamer官网,这里不做说明,以下只是涉及到个人的理解和认知,方便后续的查阅。 个人的总结 1)了解pipeline的使用࿰…...

【网络进阶】服务器模型Reactor与Proactor
文章目录 1. Reactor模型2. Proactor模型3. 同步IO模拟Proactor模型 在高并发编程和网络连接的消息处理中,通常可分为两个阶段:等待消息就绪和消息处理。当使用默认的阻塞套接字时(例如每个线程专门处理一个连接),这两…...

使用div替代<frameset><frame>的问题以及解决办法
首先是原版三层框架的html: <html> <head> <title>THPWP</title> </head> <!-- 切记frameset不能写在body里面,以下代表首页由三层模块组成,其中第一层我是用来放菜单高度占比14%,中间的用作主…...

Verilog中的`define与`if的使用
一部分代码可能有时候用,有时候不用,为了避免全部编译占用资源,可以使用条件编译语句。 语法 // Style #1: Only single ifdef ifdef <FLAG>// Statements endif// Style #2: ifdef with else part ifdef <FLAG>// Statements …...

沃尔玛、亚马逊影响listing的转化率4大因素,测评补单自养号解析
1、listing的相关性:前期我们在找词,收集词的时候,我们通过插件来协助我们去筛选词。我们把流量高,中,低的关键词都一一收集,然后我们再进行对收集得来的关键词进行分析,再进行挑词,…...

静态分析和动态分析
在开发早期,发现并修复bug在许多方面都有好处。它可以减少开发时间,降低成本,并且防止数据泄露或其他安全漏洞。特别是对于DevOps,尽早持续地将测试纳入SDLC软件开发生命周期是非常有帮助的。 这就是动态和静态分析测试的用武之地…...