ansible自动化运维,(2)ansible-playbook
三种常见的数据格式:
XML:可扩展标记语言,用于数据交换和配置
JSON:对象标记法,主要用来数据交换或配置,不支持注释
YAML:不是一种标记语言,主要用来配置,大小写敏感,不支持tab
tomcat的语法格式就是xml格式,自动化脚本就是用的yaml格式。
一、特点:
playbook剧本是由一个或多个play组成的列表。
play的主要功能在于将定义的一组主机,装扮成事先通过ansible的task定义好的任务角色。task实际是调用ansilbe的一个module,将多个play组织在一个playbook中,即可以让它们联合起来,按事先编排的机制执行预定义的动作。
playbook文件采用yaml(yml)语言编写.
二、yaml语言
特性:
可读性好、和脚本语言的交互性好、使用实现语言的数据类型、有一个一致的信息模型、易于实现、可以基于流来处理、表达能力强扩展性好。
语法:
在编写时,在第一行用连续的三个"-"开始,最后用三个点...结尾。一般都省略三个点。使用#号注释。它有严格的缩进要求,不能空格和tab键混用。
三、核心组件
在一个playbook中有多个组件组成
hosts执行的远程主机列表
tasks任务集,有多个task的元素组成的列表,一个name只能包括一个task,也是组成完整代码块的最少元素。
templates模板,可替换模板文件中的变量并实现一些简单逻辑的文件。
handlers和notify结合使用,由特定条件触发的操作,满足条件执行,不满足不执行。
tags标签,指定某条任务执行,用于选择运行playbook中的部分代码。
文件以yaml后缀或yml后缀,习惯用yml。
四、playbook
可以通过yum安装的方式,需要epel源。
yum install -y epel-release.noarch
yum install -y ansible
配置文件在/etc/ansible/下。有三个文件:
[root@Node1 ansible]#:ls
ansible.cfg hosts rolesansible.cfg配置文件
hosts主机
roles文件夹,角色
详细解释参考上一篇文件:Ansible自动化运维,(1)模块
在hosts中加入[web]组,有两台主机:7-2和7-3,7-1作为ansible主控端
在ansible下创建一个test.yaml文件。ping web中的两台主机。
---
- hosts: web
remote_user: root #默认就是root用户登录,也可以不写
tasks: #任务- name: ping #name就是一个描述信息。下面跟着一个执行块,ping
ping:
检查语法:ansible-playbook --syntax-check test.yml,也可以ansible-playbook -C test.yml空跑不执行。


使用ansible-playbook执行一下测试。

格式:
格式:
- - -
hosts指定了在哪些机器上执行任务
remote_user 以谁的身份运行
tasks 任务列表,你要做哪些事情
gather_facts:no 表示不收集信息,但是使用变量时需要收集
例,创建用户:
vim add_user.yml
---
- hosts: web
gather_facts: no
tasks:- name: create user
user:
name: usr1
uid: 1111
system: yes #系统用户
还可以写一行:user: name=usr1 uid=1111 system=yes
执行该文件:ansible-playbook add_user.yml

去远端主机查看用户文件是否创建成功了:

还可以指定shell类型,是否允许登录:shell=/sbin/nologin。是否创建家目录:create_home=no
删除用户usr1:使用state: absent


安装httpd:
剧本编写:

service是服务,开启httpd服务
执行:

name是描述信息,执行到的哪一个剧本。
验证是否安装并开启httpd:

删除httpd:


验证:发现已经被删除了httpd服务。

yum安装nginx:先安装依赖包
在主控端准备一个主配置文件nginx.conf和主页面index.html。
主配置文件是在本地yum下的epel源和nginx,把本地的nginx.conf复制到/data/下。
主页面是自己写一个。
[root@Node1 ansible]#:cat /data/index.html
7-1
[root@Node1 ansible]#:vim install_nginx.yml
---
- hosts: webtasks:
- name: add repository
yum_repository: #epel源,变量
name: epel
description: epel yum repo
baseurl: https://download.fedoraproject.org/pub/epel/$releasever/$basearch/
gpgcheck: no- name: install nginx #安装nginx
yum: name=nginx state=present- name: config file #配置文件
copy: src=/data/nginx.conf dest=/etc/nginx/nginx.conf- name: web page #主页面
copy: src=/data/index.html dest=/usr/share/nginx/html/index.html- name: start nginx #开启nginx
service: name=nginx state=started enabled=yes
执行这个安装文件:
[root@Node1 ansible]#:ansible-playbook install_nginx.yml
PLAY [web] *****************************************************************************************
TASK [Gathering Facts] *****************************************************************************
ok: [192.168.114.20]
ok: [192.168.114.30]TASK [add repository] ******************************************************************************
ok: [192.168.114.30]
ok: [192.168.114.20]TASK [install nginx] *******************************************************************************
changed: [192.168.114.20]
changed: [192.168.114.30]TASK [config file] *********************************************************************************
changed: [192.168.114.20]
changed: [192.168.114.30]TASK [web page] ************************************************************************************
changed: [192.168.114.20]
changed: [192.168.114.30]TASK [start nginx] *********************************************************************************
changed: [192.168.114.30]
changed: [192.168.114.20]PLAY RECAP *****************************************************************************************
192.168.114.20 : ok=6 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.114.30 : ok=6 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
执行成功:发现已启动:

使用主控端访问测试:

tags标签:
如果当某个name没有执行成功,可以在name下加入tags: page,在执行的时候可以单独执行这个name块。
例如,上面的yum安装nginx中,最后启动的那一步写错了,改回来之后,只需要执行那一个角色就好了,这时只要加入tags: page
....
- name: start nginx #开启nginx
tags: page
service: name=nginx state=started enabled=yes
在运行的时候指定page:ansible-playbook -t page install_nginx.yml
notify和handlers:
notify监控,handlers执行,notify监控任务,如果改变了,就执行handlers,handlers是与tasks同级别的,缩进相同。
拿上面nginx举例:我们拿复制主页那一步举例:在copy下添加一个notify
- name: web page #主页面
copy: src=/data/index.html dest=/usr/share/nginx/html/index.htmlnotify:
- restart nginx
handlers:- name: restart nginx
service: name=nginx state=restarted
解释:由于copy具有幂等性,如果copy发生改变,也就是index.html文件发生改变,就会执行notify,- restart nginx要与handlers中的 - name: restart nginx一样。
验证:
先修改两个远端服务器的一个端口:添加一个端口8080
vim /etc/nginx/nginx.conf

此时,如果主控端不修改index.hmtl文件。是不会执行notify的。再标注一个tags:用于执行特定的任务。如图:

如果copy有改变,就会被notify监控到,进而执行handlers。重启nginx服务,就会多了个8080端口。
我们先修改index.html文件:追加的方式:echo "7-11" >> /data/index.html

执行该文件,指定特定的任务加-t

可以发现,成功执行,执行的是page块,重启了nginx。
测试是否开启了8080端口:

---end---
相关文章:
ansible自动化运维,(2)ansible-playbook
三种常见的数据格式: XML:可扩展标记语言,用于数据交换和配置 JSON:对象标记法,主要用来数据交换或配置,不支持注释 YAML:不是一种标记语言,主要用来配置,大小写敏感&…...
一分钟学习数据安全—自主管理身份SSI分布式标识DID介绍
SSI标准化的两大支柱,一个是VC,之前简单介绍过,另一个就是DID。基本层次上,DID就是一种新型的全局唯一标识符,跟浏览器的URL没有什么不同。深层次上,DID是互联网分布式数字身份和PKI新层级的原子构件。 一…...
[单master节点k8s部署]11.服务service
service service是一个固定接入层,客户端 可以访问service的ip和端口,访问到service关联的后端pod,这个service工作依赖于dns服务(coredns) 每一个k8s节点上都有一个组件叫做kube-proxy,始终监视着apiser…...
ES6面试题——箭头函数和普通函数有什么区别
1. this指向问题 <script> let obj {a: function () {console.log(this); // 打印出:{a: ƒ, b: ƒ}},b: () > {console.log(this); // 打印出Window {window: Window, self: Window,...}}, }; obj.a(); obj.b(); </script> 箭头函数中的this是在箭…...
WordPress中文网址导航栏主题风格模版HaoWa
模板介绍 WordPress响应式网站中文网址导航栏主题风格模版HaoWa1.3.1源码 HaoWA主题风格除行为主体导航栏目录外,对主题风格需要的小控制模块都开展了敞开式的HTML在线编辑器方式的作用配备,另外预埋出默认设置的编码构造,便捷大伙儿在目前…...
ThreadPoolExecutor基于ctl变量的声明周期管理
个人博客 ThreadPoolExecutor基于ctl变量的声明周期管理 | iwts’s blog 总集 想要完整了解下ThreadPoolExecutor?可以参考: 基于源码详解ThreadPoolExecutor实现原理 | iwts’s blog ctl字段的应用 线程池内部使用一个变量ctl维护两个值ÿ…...
运维锅总详解Prometheus
本文尝试从Prometheus简介、架构、各重要组件详解、relable_configs最佳实践、性能能优化及常见高可用解决方案等方面对Prometheus进行详细阐述。希望对您有所帮助! 一、Prometheus简介 Prometheus 是一个开源的系统监控和报警工具,最初由 SoundCloud …...
深入解析Tomcat:Java Web服务器(上)
深入解析Tomcat:Java Web服务器(上) Apache Tomcat是一个开源的Java Web服务器和Servlet容器,用于运行Java Servlets和JavaServer Pages (JSP)。Tomcat在Java Web应用开发中扮演着重要角色。本文将详细介绍Tomcat的基本概念、安装…...
【第9章】MyBatis-Plus持久层接口之SimpleQuery
文章目录 前言一、使用步骤1.引入 SimpleQuery 工具类2.使用 SimpleQuery 进行查询 二、使用提示三、功能详解1. keyMap1.1 方法签名1.2 参数说明1.3 使用示例1.4 使用提示 2. map2.1 方法签名2.2 参数说明2.3 使用示例2.4 使用提示 3. group3.1 方法签名3.2 参数说明3.3 使用示…...
一文带你了解乐观锁和悲观锁的本质区别!
文章目录 悲观锁是什么?乐观锁是什么?如何实现乐观锁?什么是CAS应用局限性ABA问题是什么? 悲观锁是什么? 悲观锁它总是假设最坏的情况,它会认为共享资源在每次被访问的时候就会出现线程安全问题࿰…...
Android Studio环境搭建(4.03)和报错解决记录
1.本地SDK包导入 安装好IDE以及下好SDK包后,先不要管IDE的引导配置,直接新建一个新工程,进到开发界面。 SDK路径配置:File---->>Other Settings---->>Default Project Structure 拷贝你SDK解压的路径来这,…...
基于协同过滤的电影推荐与大数据分析的可视化系统
基于协同过滤的电影推荐与大数据分析的可视化系统 在大数据时代,数据分析和可视化是从大量数据中提取有价值信息的关键步骤。本文将介绍如何使用Python进行数据爬取,Hive进行数据分析,ECharts进行数据可视化,以及基于协同过滤算法…...
修复vcruntime140.dll方法分享
修复vcruntime140.dll方法分享 最近在破解typora的时候出现了缺失vcruntime140.dll文件的报错导致软件启动失败。所以找了一番资料发现都不是很方便的处理,甚至有的dll处理工具还需要花钱????,我本来就是为…...
PostgreSQL的系统视图pg_stat_wal_receiver
PostgreSQL的系统视图pg_stat_wal_receiver 在 PostgreSQL 中,pg_stat_wal_receiver 视图提供了关于 WAL(Write-Ahead Logging)接收进程的统计信息。WAL 接收器是 PostgreSQL 集群中流复制的一部分,它在从节点中工作,…...
Qt之Pdb生成及Dump崩溃文件生成与调试(含注释和源码)
文章目录 一、Pdb生成及Dump文件使用示例图1.Pdb文件生成2.Dump文件调试3.参数不全Pdb生成的Dump文件调试 二、个人理解1.生成Pdb文件的方式2.Dump文件不生产的情况 三、源码Pro文件mian.cppMainWindowUi文件 总结 一、Pdb生成及Dump文件使用示例图 1.Pdb文件生成 下图先通过…...
视频号视频怎么保存到手机,视频号视频怎么保存到手机相册里,苹果手机电脑都可以用
随着数字媒体的蓬勃发展,视频已成为我们日常生活中不可或缺的一部分。视频号作为众多视频分享平台中的一员,吸引了大量用户上传和分享各类精彩视频。然而,有时我们可能希望将视频号上的视频下载下来,以下将详细介绍如何将视频号的视频。 方法…...
Softmax函数的作用
Softmax 函数主要用于多类别分类问题,它将输入的数值转换为概率分布。 具体来说,对于给定的输入向量 x [x_1, x_2,..., x_n] ,Softmax 函数的输出为 y [y_1, y_2,..., y_n] ,其中: 这样,Softmax 函数的输…...
cesium 添加 Echarts 图层(空气质量点图)
cesium 添加 Echarts 图层(下面附有源码) 1、实现思路 1、在scene上面新增一个canvas画布 2、通坐标转换,将经纬度坐标转为屏幕坐标来实现 3、将ecarts 中每个series数组中元素都加 coordinateSystem: ‘cesiumEcharts’ 2、示例代码 <!DOCTYPE html> <html lan…...
Python技术笔记汇总(含语法、工具库、数科、爬虫等)
对Python学习方法及入门、语法、数据处理、数据可视化、空间地理信息、爬虫、自动化办公和数据科学的相关内容可以归纳如下: 一、Python学习方法 分解自己的学习目标:可以将学习目标分基础知识,进阶知识,高级应用,实…...
Nacos-注册中心
一、注册中心的交互流程 注册中心通常有两个角色: 服务提供者(生产者):对外提供服务的微服务应用。它会把自身的服务地址注册到注册中心,以供消费者发现和调用。服务调用者(消费者):调用其他微服务的应用程序。它会向注册中心订阅自己需要的服…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

