运维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
hbinz12307
zhangsan12380
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:规范剧本相关的目录.本质规定的几个专用的目录
    按照初级方式写剧本
  1. 剧本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

主机清单
模块
剧本

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

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

相关文章

C++--输入一个数字判断是否是素数

一.算法思路 要判断数字n是否是素数&#xff0c;那么用n除以一个2~根号n的数字i&#xff0c;若有一个被整除&#xff0c;说明n不是素数&#xff0c;否则是素数 二.完整代码 #include<cmath> #include<iostream> bool IsPrime(int n) {for (int i 2;i < sqrt(n…

【计算机网络:DHCP协议】

文章目录 前言一、DHCP是什么&#xff1f;二、DHCP的工作原理1.基本流程发现&#xff08;DISCOVER&#xff09;提供&#xff08;OFFER&#xff09;请求&#xff08;REQUEST&#xff09;确认&#xff08;ACKNOWLEDGEMENT&#xff09; 2.DHCP租约的概念3.DHCP续租过程 三、DHCP服…

【MATLAB GUI】 1. 普通按钮、静态文本和可编辑文本

看B站up主freexyn的freexyn编程实例视频教程系列36Matlab GUI的学习笔记 文章目录 初步认识普通按钮静态文本和可编辑文本设计一个简易计算机 初步认识普通按钮 任务要求&#xff1a;点击一次“100”按钮&#xff0c;按钮上的文字值就递增1&#xff1b;点击“close”按钮&…

Python语言例题集(006)

#!/usr/bin/python3 #建立一个含3个节点的链表&#xff0c;然后打印此链表。 class Node(): def init(self,dataNone): self.datadata self.nextNone n1Node(5) n2Node(15) n3Node(25) n1.nextn2 n2.nextn3 ptrn1 while ptr: print(ptr.data) ptrptr.next

[精通linux]-302- linux 高级命令

查看bash类型 $ echo $0 #输出位zsh或者bash查看命令类型 $ type ls # 输出 ls is an alias for ls -G重定向 学会使用 > 和 < 来重定向输出和输入,学会使用 | 来重定向管道。明白 > 会覆盖了输出文件而 >> 是在文件末添加。 任务管理器 熟悉 Bash 中的任…

UniApp中打开蓝牙所需哪些权限

Hello&#xff0c;各位同学们新年好呀&#xff0c;咱们又见面了&#xff01;我是咕噜铁蛋&#xff01;随着移动应用的普及&#xff0c;蓝牙技术正变得越来越重要。在UniApp中&#xff0c;打开蓝牙功能为我们提供了更多便利和创新的可能性。然而&#xff0c;很多人可能不清楚在U…

物联网土壤传感器简介

物联网土壤传感器简介 物联网土壤传感器的工作原理基于多种物理、化学和生物原理&#xff0c;通过感应器等组成部件将土壤中的特征数据转化为电信号&#xff0c;从而进行采集、处理和输出。这些传感器主要包括土壤湿度传感器、土壤温度传感器、土壤酸碱度传感器和土壤颗粒物传…

Sora是什么?Sora怎么使用?OpenAI最新文字转视频AI模型Sora,一句子生成60秒超逼画面

Sora 是 OpenAI 开发的AI视频生成模型&#xff0c;它能够根据用户的文本描述生成长达 60 秒、1080P 高质量视频&#xff0c;其中包含精细复杂的场景、生动的角色表情以及复杂的镜头运动。 Sora能够创造出包含多个角色、特定动作类型以及与主题和背景相符的详细场景。这款模型不…

【计算机网络】socket 网络套接字

网络套接字 一、端口号1. 认识端口号2. socket 二、认识TCP协议和UDP协议1. TCP协议2. UDP协议 三、网络字节序四、socket 编程1. socket 常见API2. sockaddr 结构3. 编写 UDP 服务器&#xff08;1&#xff09;socket()&#xff08;2&#xff09;bind()&#xff08;3&#xff0…

8080端口占用与解决

记录一下 j​​​​​​​http://t.csdnimg.cn/Pslch

【Unity编辑器扩展】Unity编辑器主题颜色设置工具

可以用来应用和自定义你的Unity编辑器。14个主题可供选择。轻松创建自己的主题。 主题展示:

明御运维审计与风险控制系统漏洞复现

简介 明御运维审计与风险控制系统是安恒信息在多年运维安全管理的理论和实践经验积累的基础上,采用B/S架构,集“身份认证、账户管理、控制权限、日志审计”于一体,支持多种字符终端协议、文件传输协议、图形终端协议、远程应用协议的安全监控与历史查询,具备全方位运维风险…

ChatGPT丨“成像光谱遥感技术中的AI革命:ChatGPT应用指南“

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境&#xff0c;是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型&#xff0c;在理解和生成人类语言方面表现出了非凡的能力。本文重点介绍ChatGPT在遥感中的应用&#xff0c;人工智能…

CSS :has() 能解决什么问题?

CSS:has()伪类选择器能够解决的问题主要包括以下几点&#xff1a; 父级选择器的应用&#xff1a;:has()选择器允许开发者根据一个元素的后代或任何后续元素来确定其样式&#xff0c;从而实现了父级样式的选择。这对于需要根据元素的后代元素来调整父元素样式的场景非常有用。 …

雪花算法生成分布式主键ID

直接上代码&#xff0c;复制即可使用 public class SnowflakeIdGenerator {private static final long START_TIMESTAMP 1624000000000L; // 设置起始时间戳&#xff0c;2021-06-18 00:00:00private static final long DATA_CENTER_ID_BITS 5L;private static final long WO…

【医学大模型】临床推理 + 大模型,推理感知型诊断框架

临床推理 大模型&#xff0c;推理感知型诊断框架 提出背景Module II-1: 少数样本CoT推理Module II-2: 单模态学生蒸馏Module II-3: 多模态学生蒸馏 提出背景 论文&#xff1a;https://arxiv.org/pdf/2312.07399.pdf 这篇文章提出了一种新的诊断框架&#xff0c;专注于利用大型…

Android T 远程动画显示流程其二——动画的添加流程(更新中)

前言 接着上篇文章分析 Android T 远程动画显示流程其一 切入点——处理应用的显示过渡 下面&#xff0c;我们以从桌面点击一个应用启动的场景来分析远程动画的流程&#xff0c;窗口添加的流程见Android T WMS窗口相关流程 这里我们从AppTransitionController.handleAppTran…

HAL STM32 HW I2C DMA + SSD1306/SH1106驱动示例

HAL STM32 HW I2C DMA SSD1306/SH1106驱动示例 &#x1f4cd;硬件I2C DMA驱动参考&#xff1a;https://blog.csdn.net/weixin_45065888/article/details/118225993 &#x1f4cc;github上的相关项目&#xff1a;https://github.com/taburyak/STM32_OLED_SSD1306_HAL_DMA &am…

C++知识点总结(19):高级贪心算法

高级贪心算法 一、P1803 活动安排1. 审题2. 思路2.1 最优区间挑选方法2.2 分配时间方法2.3 排序方法 3. 参考答案 二、P1094 纪念品分组1. 审题2. 思路2.1 每组多少个方法2.2 搭配的方法 3. 参考答案 三、村民打水1. 审题2. 思路3. 参考答案 四、习题1. 服务等待1.1 审题1.2 参…

五种多目标优化算法(MOGWO、MOJS、NSWOA、MOPSO、MOAHA)性能对比,包含6种评价指标,9个测试函数(提供MATLAB代码)

一、5种多目标优化算法简介 1.1MOGWO 1.2MOJS 1.3NSWOA 1.4MOPSO 1.5MOAHA 二、5种多目标优化算法性能对比 为了测试5种算法的性能将其求解9个多目标测试函数&#xff08;zdt1、zdt2 、zdt3、 zdt4、 zdt6 、Schaffer、 Kursawe 、Viennet2、 Viennet3&#xff09;&#xff0…