当前位置: 首页 > article >正文

Ansible YAML 基础语法与关键词 的详细指南

以下是 Ansible YAML 基础语法与关键词 的详细指南,帮助你快速掌握 Playbook 编写规范和核心概念:


目录

  • 一、Ansible Playbook 基础结构
    • 1. YAML 文件基础
  • 二、核心关键词
    • 1. Play 定义
    • 2. Task 定义
    • 3. Handler 定义
    • 4. 变量(Variables)
    • 5. 条件判断(Conditionals)
    • 6. 循环(Loops)
  • 三、常用模块
    • 1. 文件操作
    • 2. 软件包管理
    • 3. 服务管理
    • 4. 模板渲染
  • 四、高级语法
    • 1. Blocks(错误处理)
    • 2. Tags(选择性执行)
  • 五、完整 Playbook 示例
  • 六、运行 Playbook
  • 七、常见错误与调试
    • 1. 缩进错误
    • 2. 模块参数错误
    • 3. 调试模式


一、Ansible Playbook 基础结构

1. YAML 文件基础

---
# 最顶层的 --- 表示 YAML 文档开始
- name: Example Playbook     # Play 名称hosts: all                 # 目标主机(inventory 中定义)become: yes                # 是否提升权限(sudo)tasks:                     # 任务列表- name: Task 1           # 任务名称debug:                 # 模块名称msg: "Hello World"   # 模块参数

二、核心关键词

1. Play 定义

- name: Play Namehosts: web_servers        # 目标主机组(inventory 中定义)gather_facts: false       # 是否收集系统信息(如内核版本)vars:                     # Play 级变量app_port: 8080

2. Task 定义

tasks:- name: Install Nginxapt:                    # 模块名称name: nginx           # 参数:包名state: latest         # 参数:状态(latest/present/absent)notify:                 # 触发 Handler- restart nginx- name: Copy Config Filecopy:                   # 模块名称src: /local/path/nginx.conf  # 源文件dest: /etc/nginx/nginx.conf  # 目标路径

3. Handler 定义

handlers:- name: restart nginx     # Handler 名称service:                # 模块名称name: nginxstate: reloaded

4. 变量(Variables)

- name: Use Variableshosts: allvars:user: alice             # Play 级变量tasks:- name: Create Useruser:name: "{{ user }}"  # 使用变量state: present

5. 条件判断(Conditionals)

- name: Check OShosts: alltasks:- name: Install Apache on CentOSyum:name: httpdstate: latestwhen: ansible_os_family == "CentOS"  # 条件判断

6. 循环(Loops)

- name: Install Packageshosts: alltasks:- name: Add multiple packagesapt:name: "{{ item }}"state: presentloop:                   # 循环列表- vim- git- curl

三、常用模块

1. 文件操作

- name: Ensure directory existsfile:path: /tmp/mydirstate: directorymode: '0755'

2. 软件包管理

- name: Install package (Debian/Ubuntu)apt:name: nginxstate: latest- name: Install package (RedHat/CentOS)yum:name: httpdstate: latest

3. 服务管理

- name: Start serviceservice:name: nginxstate: startedenabled: yes  # 开机自启

4. 模板渲染

- name: Generate config filetemplate:src: nginx.conf.j2       # Jinja2 模板文件dest: /etc/nginx/nginx.conf

四、高级语法

1. Blocks(错误处理)

- name: Handle errorsblock:                     # 块内任务统一处理错误- name: Task that might failcommand: /bin/falserescue:                    # 失败时执行- name: Rollbackdebug:msg: "Task failed!"always:                    # 无论成功/失败都执行- name: Cleanupdebug:msg: "Cleanup done"

2. Tags(选择性执行)

- name: Tagged Taskshosts: alltasks:- name: Task with tagdebug:msg: "Only run with --tags debug"tags: debugansible-playbook playbook.yml --tags debug  # 仅执行带 debug 标签的任务

五、完整 Playbook 示例

---
- name: Deploy Web Applicationhosts: webserversbecome: yesvars:app_port: 8080tasks:- name: Update apt cacheapt:update_cache: yes- name: Install dependenciesapt:name:- git- python3state: latest- name: Clone repositorygit:repo: https://github.com/example/repo.gitdest: /var/www/app- name: Start applicationcommand: nohup python3 app.py --port {{ app_port }} &

六、运行 Playbook

ansible-playbook -i inventory.ini playbook.yml

-i inventory.ini:指定主机清单文件。
--limit:限制执行的主机范围(如 --limit web_servers)。
--check:模拟执行(dry-run)。
--tags:仅执行带特定标签的任务。


七、常见错误与调试

1. 缩进错误

• 错误提示:syntax error: unexpected end of file
• 解决:确保 YAML 缩进使用 2 空格(不可用 Tab)。

2. 模块参数错误

• 错误提示:missing required arguments: name
• 解决:检查模块参数是否完整(参考官方文档)。

3. 调试模式

ansible-playbook playbook.yml -vvv  # 增加详细输出(最多 3 个 v)

通过掌握这些基础语法和关键词,你可以快速编写 Ansible Playbook 实现自动化运维! 🚀
官方文档参考:Ansible Documentation


相关文章:

Ansible YAML 基础语法与关键词 的详细指南

以下是 Ansible YAML 基础语法与关键词 的详细指南,帮助你快速掌握 Playbook 编写规范和核心概念: 目录 一、Ansible Playbook 基础结构1. YAML 文件基础 二、核心关键词1. Play 定义2. Task 定义3. Handler 定义4. 变量(Variables&#xff0…...

NO.64十六届蓝桥杯备战|基础算法-简单贪心|货仓选址|最大子段和|纪念品分组|排座椅|矩阵消除(C++)

贪⼼算法是两极分化很严重的算法。简单的问题会让你觉得理所应当,难⼀点的问题会让你怀疑⼈⽣ 什么是贪⼼算法? 贪⼼算法,或者说是贪⼼策略:企图⽤局部最优找出全局最优。 把解决问题的过程分成若⼲步;解决每⼀步时…...

瑞萨RA4M2使用心得-KEIL5的第一次编译

目录 前言 环境: 开发板:RA-Eco-RA4M2-100PIN-V1.0 IDE:keil5.35 一、软件的下载 编辑瑞萨的芯片,除了keil5 外还需要一个软件:RASC 路径:Releases renesas/fsp (github.com) 向下找到: …...

java根据集合中对象的属性值大小生成排名

1&#xff1a;根据对象属性降序排列 public static <T extends Comparable<? super T>> LinkedHashMap<T, Integer> calculateRanking(List<ProductPerformanceInfoVO> dataList, Function<ProductPerformanceInfoVO, T> keyExtractor) {Linked…...

数据分析-Excel-学习笔记

Day1 复现报表聚合函数&#xff1a;日期联动快速定位区域SUMIF函数SUMIFS函数环比、同比计算IFERROR函数混合引用单元格格式总结汇报 拿到一个Excel表格&#xff0c;首先要看这个表格个构成&#xff08;包含了哪些数据&#xff09;&#xff0c;几行几列&#xff0c;每一列的名称…...

整车CAN网络和CANoe

车载网络中主要包含有Can网络,Lin网络,FlexRay,Most,以太网。 500kbps:500波特率,表示的数据传输的速度。表示的是最大的网速传输速度。也就是每秒 500kb BodyCan车身Can InfoCan娱乐信息Can 车身CAN主要连接的是ESB电动安全带 ADB自适应远光灯等 PTCan动力Can 底盘Can...

ChatGPT 的新图像生成器非常擅长伪造收据

本月&#xff0c;ChatGPT 推出了一种新的图像生成器&#xff0c;作为其 4o 模型的一部分&#xff0c;该模型在生成图像内的文本方面做得更好。 人们已经在利用它来生成假的餐厅收据&#xff0c;这可能会为欺诈者使用的已经很广泛的 AI 深度伪造工具包添加另一种工具。 多产的…...

JS页面尺寸事件

元素位置 在这里插入图片描述 父元素带有定位时输出相对于父亲元素的距离值...

SpringBoot的日志框架

目录 默认日志框架 日志配置 更换日志框架 排除默认Logback 引入目标日志框架 添加配置文件 logback.xml SpringBoot的核心设计宗旨是约定大于配置,很多框架功能都给你默认加载和配置完成供你使用,但这就要求使用者对框架有一定的理解和改造能力,比如这个日志框架,是其…...

网络协议之基础介绍

写在前面 本文看下网络协议相关基础内容。 1&#xff1a;为什么要有网络协议 为了实现世界各地的不同主机的互联互通。 2&#xff1a;协议的三要素 协议存在的目的就是立规矩&#xff0c;无规矩不成方圆嘛&#xff01;但是这个规矩也不是想怎么立就怎么立的&#xff0c;也…...

【学Rust写CAD】34 精确 Alpha 混合函数(argb.rs补充方法)

源码 #[inline]pub fn over_exact(self, dst: Argb) -> Argb {let a 255 - self.alpha32();let t dst.rb() * a 0x80_00_80;let mut rb (t ((t >> 8) & Argb::MASK)) >> 8;rb & Argb::MASK;rb self.rb();// saturaterb | 0x1000100 - ((rb >&…...

利用NumPy核心知识点优化TensorFlow模型训练过程

利用NumPy核心知识点优化TensorFlow模型训练过程 NumPy是Python科学计算的基础库&#xff0c;掌握它的高效操作可以显著提升TensorFlow模型的训练效率。本文详细探讨如何将NumPy的核心优势应用于TensorFlow模型训练的各个环节。 1. 数据预处理优化 高效向量化操作 NumPy的向…...

初识数据结构——Java集合框架解析:List与ArrayList的完美结合

&#x1f4da; Java集合框架解析&#xff1a;List与ArrayList的完美结合 &#x1f31f; 前言&#xff1a;为什么我们需要List和ArrayList&#xff1f; 在日常开发中&#xff0c;我们经常需要处理一组数据。想象一下&#xff0c;如果你要管理一个班级的学生名单&#xff0c;或…...

TDengine 从入门到精通(2万字长文)

目录 第一章:走进 TDengine 的世界 TDengine 是个啥? TDengine 的硬核特性 性能炸裂 分布式架构,天生可扩展 SQL 用起来贼顺手 写入方式花样多 内置缓存,省心又省力 TDengine 能干啥? 智能制造 能源管理 物联网平台 工业大数据 第二章:上手 TDengine:安装与…...

DevOps 与持续集成(CI/CD)

1. DevOps 概述 DevOps(Development + Operations)是一种软件开发方法,强调开发(Dev)与运维(Ops)协作,通过自动化工具提高软件交付效率。其目标是: ✅ 提高部署速度 —— 频繁发布新版本 ✅ 减少人为错误 —— 通过自动化降低运维风险 ✅ 增强可观测性 —— 监控和日…...

[特殊字符] 使用 Handsontable 构建一个支持 Excel 公式计算的动态表格

在 Web 应用中&#xff0c;处理表格数据并提供 Excel 级的功能&#xff08;如公式计算、数据导入导出&#xff09;一直是个挑战。今天&#xff0c;我将带你使用 React Handsontable 搭建一个强大的 Excel 风格表格&#xff0c;支持 公式计算、Excel 文件导入导出&#xff0c;并…...

uniapp微信小程序引入vant组件库

1、首先要有uniapp项目&#xff0c;根据vant官方文档使用yarn或npm安装依赖&#xff1a; 1、 yarn init 或 npm init2、 # 通过 npm 安装npm i vant/weapp -S --production# 通过 yarn 安装yarn add vant/weapp --production# 安装 0.x 版本npm i vant-weapp -S --production …...

贪心进阶学习笔记

反悔贪心 贪心是指直接选择局部最优解&#xff0c;不需要考虑之后的影响。 而反悔贪心是在贪心上面加了一个“反悔”的操作&#xff0c;于是又可以撤销之前的“鲁莽行动”&#xff0c;让整个的选择稍微变得“理智一些”。 于是&#xff0c;我个人理解&#xff0c;反悔贪心是…...

Java 大视界 -- Java 大数据在航天遥测数据分析中的技术突破与应用(177)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

架构师面试(二十七):单链表

问题 今天的问题对于架构师来说会相对容易许多。今天出一个【数据结构与算法】相关的题目&#xff0c;醒醒脑。 给一张【单链表】&#xff0c;该单链表有100个节点元素&#xff08;当然&#xff0c;事先我们是不知道100这个数目的&#xff09;&#xff0c;要获取倒数第8个元素…...

从扩展黎曼泽塔函数构造物质和时空的结构-15

回来考虑泽塔函数&#xff0c; 我们知道&#xff0c; 也就是在平面直角坐标系上反正切函数在x上的变化率&#xff0c;那么不难看出&#xff0c; 就是在s维空间上的“广义”反正切函数在单位p上的变化率&#xff0c;而泽塔函数&#xff0c;就是这些变化率的全乘积&#xff0c; 因…...

数据库访问工具 dbVisitor v6.0.0 发布

dbVisitor 是一款轻量小巧、功能完备的 Java 数据库 ORM 工具&#xff0c;它的前身是 HasorDB&#xff0c;历经 8 年迭代后正式更名为 dbVisitor 并开始独立发展4。以下是关于 dbVisitor v6.0.0 发布的相关信息&#xff1a; 发布说明 在 Maven Central 上可查询到 dbVisitor …...

01背包问题详解 具体样例模拟版

01背包 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 v i v_i vi​&#xff0c;价值是 w i w_i wi​。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入格式 …...

网络初识 - Java

网络发展史&#xff1a; 单机时代&#xff08;独立模式&#xff09; -> 局域网时代 -> 广域网时代 -> 移动互联网时代 网络互联&#xff1a;将多台计算机链接再一起&#xff0c;完成数据共享。 数据共享的本质是网络数据传输&#xff0c;即计算机之间通过网络来传输数…...

zk基础—5.Curator的使用与剖析一

大纲 1.基于Curator进行基本的zk数据操作 2.基于Curator实现集群元数据管理 3.基于Curator实现HA主备自动切换 4.基于Curator实现Leader选举 5.基于Curator实现分布式Barrier 6.基于Curator实现分布式计数器 7.基于Curator实现zk的节点和子节点监听机制 8.基于Curator创…...

大模型快速 ASGI 服务器uvicorn

基础概念类 1. 什么是 Uvicorn&#xff0c;它的作用是什么&#xff1f; 答案&#xff1a;Uvicorn 是一个基于 Python 的快速 ASGI&#xff08;异步服务器网关接口&#xff09;服务器。它的主要作用是作为 Web 应用程序的服务器&#xff0c;负责接收客户端的请求&#xff0c;并…...

每日一题(小白)回溯篇4

深度优先搜索题&#xff1a;找到最长的路径&#xff0c;计算这样的路径有多少条&#xff08;使用回溯&#xff09; 分析题意可以得知&#xff0c;每次向前后左右走一步&#xff0c;直至走完16步就算一条走通路径。要求条件是不能超出4*4的范围&#xff0c;不能重复之前的路径。…...

消息队列基础概念及选型,常见解决方案包括消息可靠性、消息有序、消息堆积、重复消费、事务消息

前言 是时候总结下消息队列相关知识点啦&#xff01;我搓搓搓搓 本文包括消息队列基础概念介绍&#xff0c;常见解决方案包括消息可靠性、消息有序、消息堆积、重复消费、事务消息 参考资料&#xff1a; Kafka常见问题总结 | JavaGuide RocketMQ常见问题总结 | JavaGuide …...

基于STM32与应变片的协作机械臂力反馈控制系统设计与实现---3.3 机械结构改装

3.3 机械臂结构改装设计与实施 一、改装需求分析 1.1 改装类型分级 改装级别涉及范围典型改动周期成本I级(小型)末端执行器工具快换装置1-3天$500-2000II级(中型)关节模块电机/减速器升级1-2周$2000-8000III级(大型)本体结构材质/拓扑优化1-3月$8000+1.2 关键参数变更评…...

k8s进阶之路:本地集群环境搭建

概述 文章将带领大家搭建一个 master 节点&#xff0c;两个 node 节点的 k8s 集群&#xff0c;容器基于 docker&#xff0c;k8s 版本 v1.32。 一、系统安装 安装之前请大家使用虚拟机将 ubuntu24.04 系统安装完毕&#xff0c;我是基于 mac m1 的系统进行安装的&#xff0c;所…...