运维SRE-18 自动化批量管理-ansible4
12.2handles
- handles触发器(条件),满足条件后再做什么事情
- 应用场景:想表示:配置文件变化,再重启服务
配置handlers之前,每次运行剧本都会重启nfs,无论配置文件是否变化。
[root@m01 /server/ans/playbook]# cat 17-handler-nfs-server.yml
---
- hosts: dbtasks:- name : 01.分发配置copy:src: ./exportsdest: /etc/exportsbackup: yes- name : 05 启动服务nfssystemd:name: nfsenabled: yesstate: restarted
不管exports配置有无修改,都会执行05启动nfs服务
配置了handerles,只有服务配置文件变化了再重启服务。
[root@m01 /server/ans/playbook]# cat 17-handler-nfs-server.yml
---
- hosts: dbtasks:- name : 01.分发配置copy:src: ./exportsdest: /etc/exportsbackup: yesnotify:- restart nfs #与下面handlers的name一样handlers:- name: restart nfssystemd:name: nfsenabled: yesstate: restarted
12.3 when(判断)
when是ansible中的判断语句(条件语句)
实现对于某个模块在满足或不满足xxxxx条件下再执行
给web服务器或lb服务器,配置nginx的yum源
when: ( ansible_distribution == 'Ubuntu') #如果系统的发行版本是Ubuntu则运行模块ansible_distribution的ansible-facts变量when: ( ansible_hostname is match("web|lb") ) #主机名包含web或lb,配置nginx源when: ( ansible_hostname is not match("web|lb") ) cat nginx.repo
[nginx]
baseurl = http://nginx.org/packages/centos/$releasever/$basearch/
enabled = 1
gpgcheck = 0
name = nginx stable repocat 18-when-fenfa-nginx-yum.yml
---
- hosts: alltasks:- name: 配置lb或者web的nginx yum源copy:src: ./nginx.repodest: /etc/yum.repos.d/nginx.repobackup: yeswhen: ( ansible_hostname is match("web|lb") )
12.4 循环
批量启动,重启服务
案例01-批量重启服务:crond,nfs,rpcbind
cat 19-item-restart-service.yml
---
- hosts: nfsgather_facts: notasks:- name: restart 多个服务systemd:name: "{{ item }}"state: restartedwith_items:- crond- rpcbind- nfs
案例02-循环添加用户并指定uid
- ansible中2个或多个变量的循环语句格式.
| 用户名 | uid |
|---|---|
| hbinz | 12307 |
| zhangsan | 12380 |
cat 20-item-duo-var-useradd.yml
---
- hosts: alltasks:- name: 批量添加用户user:name: "{{ item.name }}"uid: "{{ item.uid }}"state: presentwith_items:- { name: "hbinz" , uid: "12307" }- { name: "zhangsan" , uid: "12308" }
循环小结:
with_items:实现循环,变量名字item,多个变量循环了解即可
注:这里的with_items可以替换成loops
12.5 Jinja2模板
经常使用在配置文件中,让配置文件中包含变量
copy模块没有解析变量
template模块传输的时候解析配置文件变量(ansible),配置文件格式改为exports.j2
cat 21-jinja-fenfa-conf.yml
---
- hosts: nfstasks:- name: 分发nfs配置文件,加主机名template:src: ./exports.j2dest: /etc/exports
ansible-playbook -i hosts 21-jinja-fenfa-conf.ymlnfs01的exports:
[root@nfs01 ~]# cat /etc/exports
# nfs01 nfs配置文件
/data 172.16.1.0/24(rw,all_squash)
- 使用jinja2模板要求
- 配置文件必须要以.2结尾(ansible)
- 分发文件的时候,使用template模块,用法与copy一致

案例02-jinja2循环
批量共享目录/data /backup /nfsdata
cat exports.j2
# {{ ansible_hostname}} nfs配置文件
{% for name in ["/data","/backup","/nfsdata"] %}
{{name}} 172.16.1.0/24(rw,all_squash)
{% endfor %}--------------------------------------------------
[root@nfs01 ~]# cat /etc/exports
# nfs01 nfs配置文件
/data 172.16.1.0/24(rw,all_squash)
/backup 172.16.1.0/24(rw,all_squash)
/nfsdata 172.16.1.0/24(rw,all_squash)
核心掌握:
- 配置文件xxxx.j2+template模块
- jinja2配置文件支持ans变量.
12.6 Roles
- roles:规范剧本相关的目录.本质规定的几个专用的目录
按照初级方式写剧本
- 剧本nfs服务端
---
- hosts: nfstasks:- name: 01.部署nfs服务端软件yum:name: nfs-utilsstate: installed- name: 02.修改配置文件template:src: ./exports.j2dest: /etc/exportsbackup: yesnotify: - 04.启动服务-rpcbind-nfs服务- name: 03.创建对应的目录和,权限file:path: /data/owner: nfsnobodygroup: nfsnobodystate: directoryhandlers:- name: 04.启动服务-rpcbind-nfs服务systemd:name: "{{ item }}"enabled: yesstate: restartedwith_items:- rpcbind- nfs
a)roles结构

b)环境准备及部署流程
- 1.先书写或拆分剧本中tasks的内容
- 2.根据剧本,分类存放配置文件,模板文件(j2)
- 3.根据剧本,配置handlers的main.yaml文件
- 4.书写剧本入口.与nfs-server目录同级
mkdir -p roles
cd roles
mkdir -p nfs-server/{files,templates,tasks,handlers}
[root@m01 /server/ans/playbook/roles]# tree -F
.
└── nfs-server/├── files/├── handlers/├── tasks/└── templates/
c)先书写拆分或拆分剧本中tasks的内容.
[root@m01 /server/ans/playbook/roles]# cat nfs-server/tasks/main.yml
- name: 01.部署nfs服务端软件yum:name: nfs-utilsstate: installed- name: 02.修改配置文件template:src: ./exports.j2dest: /etc/exportsbackup: yesnotify: - 04.启动服务-rpcbind-nfs服务- name: 03.创建对应的目录和,权限file:path: /data/owner: nfsnobodygroup: nfsnobodystate: directory
d)根据剧本,分类存放配置文件,模板文件(j2)
[root@m01 /server/ans/playbook/roles]# cat nfs-server/templates/exports.j2
# {{ ansible_hostname}} nfs配置文件
/data/ 172.16.1.0/24(rw,all_squash)
[root@m01 /server/ans/playbook/roles]# tree -F
.
└── nfs-server/├── files/├── handlers/├── tasks/│ └── main.yml└── templates/└── exports.j25 directories, 2 files
e)根据剧本,配置handlers的main.yml文件
[root@m01 /server/ans/playbook/roles]# cat nfs-server/handlers/main.yml
- name: 04.启动服务-rpcbind-nfs服务systemd:name: "{{ item }}"enabled: yesstate: restartedwith_items:- rpcbind- nfs
[root@m01 /server/ans/playbook/roles]# tree -F
.
└── nfs-server/├── files/├── handlers/│ └── main.yml├── tasks/│ └── main.yml└── templates/└── exports.j2
f)书写入口剧本,与nfs-server目录同级
[root@m01 /server/ans/playbook/roles]# cat top.yml
---
- hosts: nfsroles:- role: nfs-server #与目录名字一致,ans才能找到下个入口
[root@m01 /server/ans/playbook/roles]# tree -F
.
├── nfs-server/
│ ├── files/
│ ├── handlers/
│ │ └── main.yml
│ ├── tasks/
│ │ └── main.yml
│ └── templates/
│ └── exports.j2
└── top.yml
g)roles执行流程
- 1.ansible-playbook -i host top.yml
- 2.读取top.yml内容获取roles信息
- 3.根据顺序先执行第1个role—>nfs-server
- 4.执行nfs-server,找nfs-server对应的目录
- 5.执行里面的tasks下面的main.yml
- 6.执行mian.yml的时候,遇到copy/template模块则找对应的目录copy(files),template(templates),找对应的文件
- 7.执行main.yml的时候,遇到notify,则会找handlers下面的main.yml的内容,进行匹配和执行。
12.7 Galaxy-了解
官方roles集合
ansible-galaxy install geerlingguy.nginx
12.8 ansible-vault-了解
加密文件
ansible-vault encrypt hosts #加密配置文件,设置密码
ansible --ask-vault-pass -i hosts all -m ping #使用ansible命令或ansible-playbook命令需要加上 --ask-vault-pass
13.Ansible-进阶-优化
/etc/ansible/ansible.cfginventory = /etc/ansible/hosts #指定的默认的主机清单. 未来可以修改为 ./hosts 就可以不用加上-i
forks = 50 #并发数量. 可以增加这个数量获取更快批量管理效率.
sudo_user = root #配置下被管理端具有sudo权限的用户,并且修改/etc/sudoers 注释掉requiretty
host_key_checking = False #默认是True 连接新的主机要进行验证. 建议关闭,加速.
log_path = /var/log/ansible.log #默认没有开启.
ssh_args = -C -o ControlMaster=auto -o
ControlPersist=6d #连接的保持时间. 6d 10d
pipelining = True #加速,加速连接合并不必要的连接. 要求:不能使用sudo,如果使用则不能开启.
14.总结Ansblie
主机清单
模块
剧本
相关文章:
运维SRE-18 自动化批量管理-ansible4
12.2handles handles触发器(条件),满足条件后再做什么事情应用场景:想表示:配置文件变化,再重启服务 配置handlers之前,每次运行剧本都会重启nfs,无论配置文件是否变化。 [rootm01 /server/ans/playbook]…...
编程笔记 Golang基础 008 基本语法规则
编程笔记 Golang基础 008 基本语法规则 Go语言的基本语法规则. Go语言的基本语法规则包括但不限于以下要点: 标识符: 标识符用于命名变量、常量、类型、函数、包等。标识符由字母(a-z,A-Z)、数字(0-9&#…...
android input命令支持多指触摸成果展示-千里马framework实战开发
hi input命令扩展提示部分 generic_x86_64:/ # input -h Error: Unknown command: -h Usage: input [<source>] <command> [<arg>...]The source…...
Stable Diffusion 模型分享:Indigo Furry mix(人类与野兽的混合)
本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十...
OpenAI Sora引领AI跳舞视频新浪潮:字节跳动发布创新舞蹈视频生成框架
OpenAI的Sora已经引起广泛关注,预计今年AI跳舞视频将在抖音平台上大放异彩。下面将为您详细介绍一款字节跳动发布的AI视频动画框架。 技术定位:这款框架采用先进的diffusion技术,专注于生成人类舞蹈视频。它不仅能够实现人体动作和表情的迁移…...
[深度学习] 卷积神经网络“卷“在哪里?
🌈 博客个人主页:Chris在Coding 🎥 本文所属专栏:[深度学习] ❤️ 热门学习专栏:[Linux学习] ⏰ 我们仍在旅途 目录 1.卷积的定义 2.卷积的"卷"在哪里 3.什么又是卷积神…...
企业网络安全自查:总结报告与改进指南
按照网络和数据安全监督检查工作的要求, 现将网络信息安全自查阶段有关情况总结如下: 一、自查工作的组织开展情况 我单位始终高度重视网络与信息安全自查工作, 成立专项管理组织机构,深入学习贯彻相关文件精神,严格…...
怎么理解ping?这是我听过最好的回答
晚上好,我是老杨。 Ping这几个字母,已经深入网工人的骨髓了吧? 把Ping用到工作里,肯定不少人在用,但对Ping的了解和理解是不是足够深,取决了你能在工作里用到什么程度,能让它帮你到什么地步。…...
用户请求到响应可能存在的五级缓存
用户请求到响应可能存在的五级缓存 当用户在浏览器中输入URL进行访问时,请求并不是直接达到服务器,而是会经历多级缓存,以提高网络效率。本文将详细介绍用户请求到响应可能会经历的五个缓存级别:浏览器缓存,代理缓存&…...
云图极速版限时免费活动
产品介绍 云图极速版是针对拥有攻击面管理需求的用户打造的 SaaS 应用,致力于协助用户发现并管理互联网资产攻击面。 实战数据 (2023.11.6 - 2024.2.23) 云图极速版上线 3 个月以来,接入用户 3,563 家,扫描主体 19,961 个,累计发…...
vue3 vuex
目录 Vuex 是什么 什么是“状态管理模式”? 什么情况下我应该使用 Vuex? 使用方法: 提交载荷(Payload) 对象风格的提交方式 使用常量替代 Mutation 事件类型 Mutation 必须是同步函数 在组件中提交 Mutation …...
Java架构师之路三、网络通信:TCP/IP协议、HTTP协议、RESTful API、WebSocket、RPC等。
目录 TCP/IP协议: HTTP协议: RESTful API: WebSocket: RPC: UDP: HTTPS: 上篇:Java架构师之路二、数据库:SQL语言、关系型数据库、非关系型数据库、数据一致性、事…...
【C++】笔试训练(九)
目录 一、选择题二、编程题1、另类加法2、走方格的方案数 一、选择题 1、某函数申明如下 void Func(int& nVal1);有int a,下面使用正确的为() A Func(a) B Func(&a) C Func(*a) D Func(&(*a)) 答案:A 2、C语言中,类…...
模板注入 [BJDCTF2020]Cookie is so stable1
打开题目 有flag页面,有Hint页面 这里题目有提示,突破口是在cookie上面 经过测试发现有ssti注入: 抓包 判断模板注入类型的办法 输入 {{7*‘7’}} 回显49 输入{{7*‘7’}},返回49表示是 Twig 模块 输入{{7*‘7’}}࿰…...
2-18算法习题总结
二分查找问题 [COCI 2011/2012 #5] EKO / 砍树 题目描述 伐木工人 Mirko 需要砍 M M M 米长的木材。对 Mirko 来说这是很简单的工作,因为他有一个漂亮的新伐木机,可以如野火一般砍伐森林。不过,Mirko 只被允许砍伐一排树。 Mirko 的伐木…...
【软考高项】【英语知识】-- 单词积累
目录 一、常见计算机技术词汇 二、项目管理词汇 2.1 十大知识域 2.2 五大过程组 2.3 49个子过程 2.4 工具和技术汇总 2.5 输入和输出汇总 一、常见计算机技术词汇 序号中文英文1云计算Cloud computing2云存储Cloud storage3云服务Cloud service4软件即服务SaaS5平台即服…...
外包干了3个月,技术退步明显
先说一下自己的情况,本科生,19年通过校招进入广州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…...
【ArcGIS微课1000例】0105:三维模型转体模型(导入sketchup转多面体为例)
文章目录 一、实验概述二、三维模型转多面体三、加载多面体数据四、注意事项一、实验概述 ArcGIS可以借助【导入3D文件】工具支持主流的三维模型导入。支持 3D Studio Max (.3ds)、VRML and GeoVRML 2.0 (.wrl)、SketchUp 6.0 (.skp)、OpenFlight 15.8 (.flt)、Collaborative …...
创建型设计模式 - 原型设计模式 - JAVA
原型设计模式 一 .简介二. 案例三. 补充知识 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 一 .简介 原型模式提供了一种机制,可以将原始对象复制到新对象࿰…...
Squid代理:APT、PyPI和Docker的内网穿透解决方案
如果你是在内网环境,并且你知道一台服务器可以链接外网,可以通过Squid代理的方式更新apt、pypi、docker源。 你可以通过在服务器A(172.16.16.122,可上外网)上设置代理服务器来实现服务器B通过服务器A访问外部APT源的需…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
