ansible-playbook 进阶 接上一章内容
1.异常中断
做法1:强制正常
2. 任务依赖
条件依赖:
一个任务是否执行取决于另一个任务的执行结果(成功或失败)。可以通过 when 语句结合任务执行结果的变量来实现。
数据依赖:
一个任务需要使用另一个任务的输出数据作为输入。通常通过 register 关键字将一个任务的输出注册到变量,然后在其他任务中引用该变量。
为了解决这个问题,我们需要有⼀种⽅式能解决我们这种存在依赖关系的任务场景。
注:由于notify涉及到的动作是由handlers创建的,在实践过程先写handlers,再在notify中调用
- hosts: webremote_user: roottasks:- name: create new useruser:name: nginx-testsystem: yesuid: 82shell: /sbin/nologin- name: test new usershell: getend passwd | grep nginx-testignore_errors: True- name: create web rootfile:name: /data/webserver/htmlowner: nginx-teststate: directory- name: touch web indexshell: echo '<h1>welcome to ansible</h1>' > /data/webserver/html/index.html- name: install packageapt:name: nginxstate: present- name: copy configcopy:src: nginx.confdest: /etc/nginx/nginx.conf- name: copy subconfigcopy:src: nginx-define.confdest: /etc/nginx/conf.dnotify: restart nginx- name: start serviceservice:name: nginxstate: startedenabled: yes # 为了掩饰效果,不要改成restarthandlers:- name: restart nginxservice:name: nginxstate: restarted
2. 触发多任务
文件名:05-nginx.yml

3. 标签
给任务添加标签



- hosts: webtags: host-tagsremote_user: roottasks:- name: create new useruser:name: nginx-testsystem: yesuid: 82shell: /sbin/nologintags: installtask- name: test new usershell: getend passwd | grep nginx-testignore_errors: Truetags: installtask- name: create web rootfile:name: /data/webserver/htmlowner: nginx-teststate: directorytags: installtask- name: touch web indexshell: echo '<h1>welcome to ansible</h1>' > /data/webserver/html/index.htmltags: installtask- name: install packageyum:name: nginxstate: presenttags: installtask- name: copy configcopy:src: nginx.confdest: /etc/nginx/nginx.conftags: installtask- name: copy subconfigcopy:src: nginx-define.confdest: /etc/nginx/conf.dnotify:- restart nginx- check nginxtags:- changetask- installtask- name: start serviceservice:name: nginxstate: startedenabled: yestags: installtaskhandlers:- name: restart nginxservice:name: nginxstate: restarted- name: check nginxshell: netstat -tnulp | grep nginx > /tmp/nginx.test


4 综合实践[T]
5. 变量进阶
ansible all -a "hostname" -o #查看主机名
ansible all -m hostname -a "name=xxx" #修改主机名
需求 想让三台主机的主机名不一样 用ansible如何来实现 例如
10.0.0.12 aaa
10.0.0.15 bbb
10.0.0.18 ccc
变量的多种设定方法
- hosts: allremote_user: roottasks:- name: create filefile:name: /var/log/var-{{ ansible_fqdn }}.logstate: touchowner: daemon

1. 主机列表变量
- hosts: webremote_user: roottasks:- name: set hostnamehostname:name: ansible-{{ name }}.example.com
主机清单下改成这个

实践: 文件名03-v.yml

- hosts: webremote_user: roottasks:- name: set hostnamehostname: name={{ qian }}-{{ name }}{{ hou }}
2. 命令行
3. playbook实践

4. playbook变量基础
- hosts: webremote_user: rootvars:- head: ni- hostid: hao- tail: .shuai.comtasks:- name: set hostnamehostname:name: "{{ qian }}-{{ name }}{{ hou }}"
出来的结果不是想要的结果 疑? 待解决
ansible-playbook 04-v.yml 执行
ansible web -m shell -a "hostname" -o #查看结果


- hosts: webremote_user: rootvars_files:- vars.yamlvars:- head: www- tail: .ansible.toptasks:- name: set hostnamehostname: name={{ qian }}-{{ name }}{{ hou }}

6. 模板
server {listen {{ nginx_port }};root /data/webserver/html;location / {}
}
4.改造playbook.yaml
- hosts: webremote_user: roottasks:- name: install packageyum:name: nginxstate: present- name: create web rootfile:name: /data/webserver/htmlstate: directory- name: touch web indexshell: echo '<h1>welcome to ansible</h1>' > /data/webserver/html/index.html- name: delete default nginx conffile:name: /etc/nginx/sites-enabled/defaultstate: absent- name: copy configtemplate:src: ./templates/nginx-define.conf.j2dest: /etc/nginx/conf.d/nginx-define.confnotify:- restart nginx- name: start serviceservice:name: nginxstate: startedenabled: yeshandlers:- name: restart nginxservice:name: nginxstate: restarted
实践后期出现这个报错,但是01-template.yml 格式是正确的 原因是nginx有残留
做法:在每台主机上都yum autoremove 一下 清理掉nginx残存的东西
得到下面的结果
1.条件管理
在ansible动态生成配置文件的场景中,when语句可以对变量facts的值进行条件判断,从而实现不同的效果。
- hosts: webremote_user: roottasks:- name: install packageapt: name=nginx state=presentwhen: ansible_os_family == "RedHat"
- hosts: webremote_user: roottasks:- name: ps_checkshell: ps -ef | grep nginx | grep -v grep | wc -lregister: nginx_numchanged_when: falseignore_errors: true- name: print debug messagedebug:msg: "System {{ inventory_hostname }} has nginx service."when: nginx_num.stdout != "0"- name: install packageyum:name: nginxstate: presentwhen: nginx_num.stdout == "0"- name: create web rootfile:name: /data/webserver/htmlstate: directory- name: touch web indexshell: echo '<h1>welcome to ansible</h1>' > /data/webserver/html/index.html- name: delete default nginx conffile:name: /etc/nginx/sites-enabled/defaultstate: absent- name: copy configtemplate:src: ./templates/nginx-define.conf.j2dest: /etc/nginx/conf.d/nginx-define.confnotify:- restart nginx- name: start serviceservice:name: nginxstate: startedenabled: yeshandlers:- name: restart nginxservice:name: nginxstate: restarted

2.迭代管理
- hosts: webremote_user: roottasks:- name: add usergroupgroup:name: webgroupstate: present- name: add several usersuser:name: "{{ item }}"state: presentgroups: webgroupwith_items:- testuser1- testuser2

- hosts: webremote_user: roottasks:- name: install packageyum:name: "{{ item }}"state: presentwith_items:- 'nginx'- 'redis'- 'mariadb-server'
- hosts: webremote_user: roottasks:- name: add some groupuser:name: "{{ item }}"state: presentwith_items:- group1- group2- group3- name: add some usersuser:name: "{{ item.name }}"group: "{{ item.group }}"state: presentwith_items:- { name: 'user1', group: 'group1' }- { name: 'user2', group: 'group2' }- { name: 'user3', group: 'group3' }

3.流程语法解析
相关文章:

ansible-playbook 进阶 接上一章内容
1.异常中断 做法1:强制正常 编写 nginx 的 playbook 文件 01-zuofa .yml - hosts : web remote_user : root tasks : - name : create new user user : name nginx-test system yes uid 82 shell / sbin / nologin - name : test new user shell : gete…...

趋势直线指标
趋势直线副图和主图指标,旨在通过技术分析工具帮助交易者识别市场趋势和潜在的买卖点。 副图指标:基于KDJ指标的交易策略 1. RSV值计算: - RSV(未成熟随机值)反映了当前收盘价在过去一段时间内的相对位置。通过计算当前…...

基线配置管理:为什么它对网络稳定性至关重要
什么是基线配置(Baseline Configuration) 基线配置(Baseline Configuration)是经过批准的标准化主设置,代表所有设备应遵循的安全、合规且运行稳定的配置基准,可作为评估变更、偏差或未授权修改的参考基准…...
AWS WebRTC:获取ICE服务地址(part 1)
建立WebRTC连接的第二步是获取ICE服务地址。 ICE全称:Interactive Connectivity Establishment,建立互动连接。 ICE 服务地址,主要是 TURN 和 STUN 服务器的地址,用于 WebRTC 在 NAT 网络环境中协商建立连接。 上代码ÿ…...

Nest全栈到失业(一):Nest基础知识扫盲
Nest 是什么? 问你一个问题,node是不是把js拉出来浏览器环境运行了?当然,他使用了v8引擎加上自己的底层模块从而实现了,在外部编辑处理文件等;然后它使用很多方式来发送请求是吧,你知道的什么http.request 或 https.request; 我们浏览器中,使用AJAX以及封装AJAX和http的Axios…...

摩尔线程S4000国产信创计算卡性能实战——Pytorch转译,多卡P2P通信与MUSA编程
简介 MTT S4000 是基于摩尔线程曲院 GPU 架构打造的全功能元计算卡,为千亿规模大语言模型的训练、微调和推理进行了定制优化,结合先进的图形渲染能力、视频编解码能力和超高清 8K HDR 显示能力,助力人工智能、图形渲染、多媒体、科学计算与物…...

Tesseract OCR 安装与中文+英文识别实现
一、下载 https://digi.bib.uni-mannheim.de/tesseract/ 下载,尽量选择时间靠前的(识别更好些)。符合你的运行机(我的是windows64) 持续点击下一步安装,安装你认可的路径即可,没必要配置环境变…...

Cypress + React + TypeScript
🧪 Cypress + React + TypeScript 组件测试全流程实战:从入门到自动化集成 在现代前端开发中,组件测试 是保障 UI 行为可靠性的重要手段。本文将通过一个 React 项目示例,实战演示如何结合 Cypress + React + TypeScript 实现从零配置到自动化集成的完整测试链路。 一、项…...
每个路由器接口,都必须分配所属网络内的 IP 地址,用于转发数据包
在IP网络中,主机(Host)和路由器接口(Router Interface)都需要分配网络地址(IP地址)。 1. 主机(Host)的IP地址分配 (1) 作用 主机的IP地址用于唯一标识该设备࿰…...
c++第四课(基础c)——布尔变量
1.前言 好,今天我们来学布尔变量(bool),开搞! 2.正文 2.1布尔数据的定义值 布尔数据的定义值,是只有真和假 顺便提一句0是假,非0的数字都是真 不过为了简便 我们一般都用0和1 2.2布尔数…...

第2期:APM32微控制器键盘PCB设计实战教程
第2期:APM32微控制器键盘PCB设计实战教程 一、APM32小系统介绍 使用apm32键盘小系统开源工程操作 APM32是一款与STM32兼容的微控制器,可以直接替代STM32进行使用。本教程基于之前开源的APM32小系统,链接将放在录播评论区中供大家参考。 1…...

Docker-搭建MySQL主从复制与双主双从
Docker -- 搭建MySQL主从复制与双主双从 一、MySQL主从复制1.1 准备工作从 Harbor 私有仓库拉取镜像直接拉取镜像运行容器 1.2 配置主、从服务器1.3 创建主、从服务器1.4 启动主库,创建同步用户1.5 配置启动从库1.6 主从复制测试 二、MySQL双主双从2.1 创建网络2.2 …...
LeetCode - 203. 移除链表元素
目录 题目 解题思路 读者可能出现的错误写法 正确的写法 题目 203. 移除链表元素 - 力扣(LeetCode) 解题思路 使用哨兵节点: 创建一个哨兵节点(dummy),将其next指向原链表头节点 哨兵节点的作用是统一处理所有情况&#x…...

canvas 实现全屏倾斜重复水印
参考: html、js、canvas实现水印_html页面使用canvas绘制重复水印-CSDN博客 效果 不求水印显示完全。 实现代码 <template><div class"watermark" ref"waterMark"></div></template><script lang&q…...

vue3项目 前端文件下载的两种工具函数
1、Blob 流下载 Blob 表示不可变的原始数据的类文件对象,通常用于处理文件或大块二进制数据。 注意:js中还有一个二进制数据类型ArrayBuffer,它们的区别如下 Blob 可以位于磁盘、高速缓存内存和其他不可用的位置;ArrayBuffer 是存…...
SpringAI系列 - 升级1.0.0
目录 一、调整pom二、MessageChatMemoryAdvisor调整三、ChatMemory get方法删除lastN参数四、QuestionAnswerAdvisor调整Spring AI发布1.0.0正式版了😅 ,搞起… 一、调整pom <properties><java.version>17</java.version><spring-ai.version>...

5.31 day33
知识点回顾: PyTorch和cuda的安装 查看显卡信息的命令行命令(cmd中使用) cuda的检查 简单神经网络的流程 数据预处理(归一化、转换成张量) 模型的定义 继承nn.Module类 定义每一个层 定义前向传播流程 定义损失函数和优…...
Vue3 + VTable 高性能表格组件完全指南,一个基于 Canvas 的高性能表格组件
Vue3 + VTable 高性能表格组件完全指南 前言 VTable 是一个高性能的多维表格组件,专为处理大数据量场景而设计。它支持数十万条数据的快速渲染,提供了丰富的表格功能和良好的用户体验。本文将详细介绍如何在 Vue3 项目中使用 VTable,并解决常见的配置问题。 什么是 VTabl…...
【七. Java字符串操作与StringBuilder高效拼接技巧】
7. java字符串 7.1 API 介绍:应用程序编程接口。在 Java 中,API 指的是 JDK 提供的各种功能类,这些类把底层实现封装好了,我们不用关心内部怎么写的,直接用就行 用 API 帮助文档步骤:以查Random类为例 打…...
题解:洛谷 P12672 「LAOI-8」近期我们注意到有网站混淆视听
设 LGR 存在数量为 x x x,CSP 存在数量为 y y y。 很明显,我们只需要将其中数量较小的一方改没就行了(一个巴掌拍不响)。 每两个字符串可同意进行一次更改,答案为: ⌈ min ( x , y ) 2 ⌉ \left\lce…...

HTML 计算网页的PPI
HTML 计算网页的PPI vscode上安装live server插件,可以实时看网页预览 有个疑问: 鸿蒙density是按照类别写死的吗,手机520dpi 折叠屏426dpi 平板360dpi <html lang"en" data - overlayscrollbars - initialize><header&…...
WIN11+eclipse搭建java开发环境
环境搭建(WIN11ECLIPSE) 安装JAVA JDK https://www.oracle.com/cn/java/technologies/downloads/#jdk24安装eclipse https://www.eclipse.org/downloads/ 注意:eclipse下载时指定aliyun的软件源,后面安装会快一些。默认是jp汉化e…...
Linux 环境下C、C++、Go语言编译环境搭建秘籍
引言 在当今多元化的编程世界里,C、C 和 Go 语言凭借各自独特的优势,在不同的领域发光发热。C 语言作为一门古老而强大的编程语言,以其高效、贴近硬件的特性,在操作系统、嵌入式系统等底层开发中占据着重要地位;C 作为…...

MMR-Mamba:基于 Mamba 和空间频率信息融合的多模态 MRI 重建|文献速递-深度学习医疗AI最新文献
Title 题目 MMR-Mamba: Multi-modal MRI reconstruction with Mamba and spatial-frequency information fusion MMR-Mamba:基于 Mamba 和空间频率信息融合的多模态 MRI 重建 01 文献速递介绍 磁共振成像(MRI)因其无创、无辐射特性以及…...

2.5/Q2,Charls最新文章解读
文章题目:Trajectories of depressive symptoms and risk of chronic liver disease: evidence from CHARLS DOI:10.1186/s12876-025-03943-7 中文标题:抑郁症状的轨迹和慢性肝病风险:来自 CHARLS 的证据 发表杂志:BM…...

Unity QFramework 简介
目录 什么是MVC模式? QFramework 架构提供了 Model 的概念 QFramework 架构引入 Command 的方式 QFramework 架构引入 Event事件机制 四个层:表现层、系统层、数据层、工具层 委托和回调函数的关系 命令和事件的区别 工具篇 QFramework整体基于M…...

C++ 日志系统实战第五步:日志器的设计
全是通俗易懂的讲解,如果你本节之前的知识都掌握清楚,那就速速来看我的项目笔记吧~ 本文项目代码编写收尾! 日志器类 (Logger) 设计(建造者模式) 日志器主要用于和前端交互。当我们需要使用日志系统打印 log 时&…...
@Docker Compose部署Alertmanager
文章目录 Docker Compose部署Alertmanager1. 准备工作1.1 系统要求1.2 目录结构准备 2. 配置文件准备2.1 创建docker-compose.yml文件2.2 创建Alertmanager配置文件 3. 部署Alertmanager3.1 启动服务3.2 验证服务状态3.3 检查日志 4. 服务验证4.1 访问Web UI 4.2 API健康检查5.…...
前端面试准备-3
1.let、const、var的区别 ①:let和const为块级作用域,var为全局作用域 ②:let和var可以重新赋值定义,而const不可以 ③:var会提升到作用域顶部,但不会初始化;let和const也会提升到作用不顶部…...

性能测试-jmeter实战1
课程:B站大学 记录软件测试-性能测试学习历程、掌握前端性能测试、后端性能测试、服务端性能测试的你才是一个专业的软件测试工程师 性能测试-jmeter实战1 为什么需要性能测试呢?性能测试的作用?性能测试体系性能测试基础性能测试工具性能监控…...