Ansible Playbook 实践

Ansible Playbook 实践

一、Playbook 基础规范

(一)YAML 格式要求

  • 文件标识:以 --- 开头,明确为 YAML 文件,结尾可加 ...(可选,用于标记文件结束)。
  • 注释规则:用 # 实现注释,可注释整行(如 # 安装 httpd 服务)或行内内容(如 name: httpd # 服务名),注释内容不会被 Ansible 解析。
  • 字符串与布尔值
    • 字符串:一般无需引号,但若包含特殊字符(如空格、:、{})或引用变量(如 "{{ ansible_hostname }}"),需用双引号包裹。
    • 布尔值:在模块参数中,支持 yes/on/1/true(表示 “是”)和 no/off/0/false(表示 “否”),Ansible 会自动解析为布尔类型。
  • 缩进规则:严格使用空格缩进(不支持 Tab),同一层级缩进量一致(推荐 2 个或 4 个空格),缩进错误会导致 Playbook 执行失败。

(二)Playbook 结构

每个 Play 包含 hosts(定义目标主机 / 组 )和 tasks(任务列表,按序执行 ),所有匹配 hosts 的主机都会收到任务指令,Ansible 筛选执行。

详细的字段:

字段​

作用​

示例​

name​

为 Play 命名,便于识别任务用途(非必填,但推荐添加,执行时会显示)​

name: 部署 httpd 服务​

hosts​

定义目标主机 / 主机组(从 Inventory 中匹配),支持多组(用逗号分隔)​

hosts: test01,web​

become​

是否切换为特权用户(如 root),默认 no,需提权时设为 yes​

become_user​

指定提权后的目标用户(默认 root),可按需改为其他特权用户​

tasks​

任务列表,按顺序执行,每个任务调用一个 Ansible 模块​

见下文实操场景示例​

vars​

定义当前 Play 的变量(局部变量,仅在当前 Play 生效)​

vars_files​

引入外部变量文件(如 YAML/JSON 格式),适合变量较多的场景​

handlers​

触发式任务(仅在被 notify 调用时执行),常用于服务重启、配置重载​

见下文 “Handlers 组件” 示例​

templates​

引入 Jinja2 模板文件,用于动态生成配置文件(如根据主机名生成不同配置)​

二、Playbook 执行与验证

  • 测试执行:用 ansible-playbook -C 剧本名.yml 测试,不实际执行任务 。
  • 实际执行:ansible-playbook 剧本名.yml ,执行后按需用命令(如 curl、df -Th 等 )验证结果 。

三、Playbook 实操场景

主机清单:
node1 属于 test01 主机组
node2 属于 test02 主机组
node3 和 node4 属于 web 主机组
node5 属于 test05 主机组
web 组属于 webtest 主机组

(一)Node1 部署 httpd 服务(httpd.yml)

任务说明:依次安装 httpd、创建 /www 链接、写入网页内容、重启服务并设自启、配置防火墙允许 http 访问 ,实现 curl http://node1 访问到指定内容。

cat httpd.yml---- name: wedhosts: node1tasks:- name: install httpdyum:name: httpdstate: present- name: create linkfile:src: /var/www/htmldest: /wwwstate: link- name: file indexcopy:content: "welcome to luoqi\n"dest: /var/www/html/index.htmlsetype: httpd_sys_content_t- name: restart httpdservice:name: httpdstate: restartedenabled: yes- name: httpd firewalldfirewalld:service: httppermanent: yesstate: enabledimmediate: yes

结果展示:

(二)Node2 分区与挂载(parted.yml)

任务说明:先创建 1000MiB 主分区,格式化为 ext4,建挂载点 /testdir 并挂载分区,用 ansible node2 -m shell -a 'df -Th' 验证挂载。

cat parted.yml---- name: cipanfenquhosts: node2tasks:- name: create partedparted:device: /dev/vdbnumber: 1part_type: primarypart_start: 10MiBpart_end: 1010MiBstate: present- name: filesystem partedfilesystem:dev: /dev/vdb1fstype: ext4- name: mount filefile:path: /testdirstate: directory- name: mount partedmount:path: /testdirsrc: /dev/vdb1fstype: ext4state: mounted

结果展示:

(三)Node3 LVM 配置与挂载(lv.yml)

任务说明:创建分区,装 LVM 工具,建卷组 datastorage、逻辑卷 database,格式化为 xfs 后挂载到 /lv,用 ansible node3 -m shell -a 'df -Th' 验证 。

cat lv.yml---- name: lvhosts: node3tasks:- name: create /dev/vdb1parted:device: /dev/vdbnumber: 1part_type: primarypart_start: 10MiBpart_end: 2010MiBstate: present- name: install lvm2yum:name: lvm2state: present- name: create datastoragelvg:vg: datastoragepvs: /dev/vdb1- name: create databaselvol:lv: databasesize: 800Mvg: datastorage- name: lv filesystemfilesystem:dev: /dev/datastorage/databasefstype: xfs- name: mount filefile:path: /lvstate: directory- name: mountmount:path: /lvsrc: /dev/datastorage/databasefstype: xfsstate: mounted

结果展示:

(四)多组软件包管理(tools.yml)

任务说明:分 Play 实现,先给 test01、test02、web 组装 php 和 tftp;

再给 test01 组装 RPM Development Tools 组;

最后升级 test01 组所有包到最新 。

cat tools.yml---- name: yum installhosts:- test01- test02- webtasks:- name: install php and tftpyum:name:- php- tftpstate: present- name: yum install grouphosts: test01tasks:- name: install groupyum:name: "@RPM Development Tools"state: present- name: yum latesthosts: test01tasks:- name: latestyum:name: '*'state: latest

(五)计划任务配置(jihua.yml)

任务说明:在 test02 组主机,为 student 用户设每 5 分钟执行 echo "hello tarena" 的计划任务 。

cat jihua.yml---- name: jihuahosts: test02tasks:- name: cron studentcron:name: aauser: studentminute: '*/5'job: echo "hello tarena"state: present

结果展示:

(六)Web 开发环境配置(webdev.yml)

任务说明:在 test01 组主机,建 webdev 组和 /webdev 目录(权限 2775 含 SetGID ),创建符号链接,写入网页文件,实现 http://node1/webdev/ 访问显示指定内容 。

cat webdev.yml---- name: webdevhosts: test01tasks:- name: create groupuser:name: webdevstate: present- name: mkdirfile:path: /webdevgroup: webdevmode: '2775'state: directory- name: linkfile:src: /webdevdest: /var/www/html/webdevstate: link- name: create filecopy:content: "It's works!\n"dest: /webdev/index.htmlsetype: httpd_sys_content_t

结果展示:

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

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

    相关文章

    基于 Vue + Interact.js 实现可拖拽缩放柜子设计器

    实现可视化设计工具已成为前端开发的重要挑战之一。本文将介绍如何使用 Vue.js 配合 Interact.js 库创建一个功能完整的橱柜设计器,兼容PC和移动终端。核心功能网格系统:基于 CSS 网格实现精准定位拖拽功能:实现单元格的自由移动缩放控制&…

    今日科技速递 | 智能芯片突围、AI+行动深化、服贸会科技成果亮相

    今日科技速递 | 智能芯片突围、AI行动深化、服贸会科技成果亮相 一、乐鑫科技涨停:Wi-Fi 6/7 与 AIoT 芯片双路径创新驱动 新闻回顾 2025 年 8 月 27 日,科创板公司 乐鑫科技(688018) 盘中一度涨停,股价达到 225 元&am…

    PDF压缩如何平衡质量与体积?

    在日常工作或者生活中,我们常常要处理PDF文档,很多人可能会遇到这样的困扰?使用WPS处理PDF时,部分功能需要付费,这给我们带来了许多不便。 它的使用方式十分简单,你只要双击图标,它就能启动&am…

    Flask 之上下文详解:从原理到实战

    一、引言:为什么 Flask 需要“上下文”?在 Web 开发中,我们经常需要访问当前请求的信息(如 URL、表单数据)、当前应用实例(如配置、数据库连接)或用户会话状态。传统做法是使用全局变量&#xf…

    深入探索Vue:前端开发的强大框架

    在当今的前端开发领域,Vue作为一款备受瞩目的JavaScript框架,以其简洁易用、高效灵活等特性,赢得了众多开发者的青睐。无论是构建小型的交互页面,还是开发大型的单页应用,Vue都能展现出卓越的性能和出色的表现。本文将…

    B树与B+树的原理区别应用

    在磁盘存储和内存有序的数据管理中,B 树与 B 树是核心的数据结构,二者均通过 “多路平衡” 特性减少 IO 次数,但在数据存储方式、查询逻辑上存在本质差异。一、B 树(Balance Tree):多路平衡搜索树B 树是 “…

    从零到一:使用anisble自动化搭建kubernetes集群

    在我们云原生俱乐部的暑期学习中,我们了解并学习了需要关于云原生的技术,其中在应用层面上最重要的就是shell编程和ansible,而想要掌握这两项技术离不开的就是实践,而kubernetes是我们云原生技术栈的核心技术,在生产实…

    【LangGraph】langgraph.prebuilt.create_react_agent() 函数:快速创建基于 ReAct(Reasoning + Acting)架构的智能代理

    本文是对 langgraph.prebuilt.create_react_agent 函数的详细且全面的介绍,涵盖其定义、功能、设计理念、参数、返回值、使用场景、实现原理、示例代码、高级用法、注意事项、与其他方法的对比,以及学习建议。 1. 概述 langgraph.prebuilt.create_react…

    北斗导航 | RAIM算法改进方案及性能对比分析报告

    github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 文章目录RAIM算法改进方案及性能对比分析报告一、RAIM算法改进技术框架1.1 多假设分组算法(MHSS)1.2 动态噪声估计算法1.3 多源信息融合技术二、…

    数据结构第8章 排序(竟成)

    第 8 章 排序【考纲内容】1.排序的基本概念;2. 直接插入排序;3. 折半插入排序;4. 起泡排序(Bubble Sort);5.简单选择排序;6. 希尔排序(Shell Sort);7. 快速排…

    【学Python自动化】 5. Python 数据结构学习笔记

    一、 列表详解 1 列表方法总结方法描述等价操作rust Vec类似操作list.append(x)末尾添加元素a[len(a):] [x]vec.push(x);list.extend(iterable)扩展列表a[len(a):] iterablevec.extend([4, 5, 6]); 或者更高效:vec.extend_from_slice(&[4, 5, 6]);list.inser…

    Python爬虫实战:研究Radar chart,构建多维度数据采集和分析系统

    1. 引言 1.1 研究背景与意义 在信息爆炸的时代,互联网蕴含的海量数据已成为企业决策、学术研究和产品评估的重要依据。这些数据往往包含多个维度的特征,如电商平台的商品信息涵盖价格、销量、评价、性能参数等,社交媒体的用户数据涉及活跃度、互动量、内容偏好等。传统的单…

    [灵动微电子 MM32BIN560CN MM32SPIN0280]读懂电机MCU之串口DMA

    在 MM32SPIN560C 微控制器中,串口(UART)的 DMA 传输可大幅减轻 CPU 负担,实现数据的“自动收发”。结合《MM32SPIN560C 用户手册(中文版)》中 UART 和 DMA 相关章节,以下从“原理匹配”“配置步…

    【机器学习】-torch相关知识01

    学习代码时遇到的问题,GPT给的答案,如有错误请指出。 问题1 torch.empty nn.init.xavier 问题2 nn.Parameter 是什么? 问题3 self.add_module 问题4 torch.matmul torch.mm 文章目录问题1 torch.empty nn.init.xavier问题2 nn.Parameter 是什…

    Hutool DsFactory多数据源切换

    一、简单上手&#xff1a;从配置到使用全流程 DsFactory 的核心优势是零侵入配置&#xff0c;支持多种配置方式&#xff0c;不管是 properties 文件还是代码里直接定义&#xff0c;都能快速初始化数据源。先引依赖&#xff08;Maven&#xff09;&#xff1a; <dependency>…

    Mysql中事务隔离级别有哪些?

    Mysql中事务隔离级别有哪些&#xff1f; 读未提交&#xff1a; 一个事务可以看到另一个事务尚未提交的数据。可能导致脏读。 读已提交&#xff1a; 一个事务只能看到其他事务提交后的数据。避免了脏读&#xff0c;仍可能引发不可重复读。 可重复读&#xff1a; 可以确保一个事务…

    el-carousel在新增或者删除el-carousel-item时默认跳到第一页的原因和解决

    现象 使用走马灯效果时 当el-carousel-item增加或者减少时&#xff0c;页会跳到第一页 体验很不友好。 原因 当新增或这删除el-carousel-item时&#xff0c;会触发setActiveIndex&#xff08;props.initialindex&#xff09;, setActiveIndex的行为是小于0或者大于最大页会有一…

    人工智能学习:机器学习相关面试题(二)

    7、有监督学习和无监督学习的区别 有监督学习&#xff1a; 对具有概念标记&#xff08;分类&#xff09;的训练样本进行 学习&#xff0c;以尽可能对训练样本集外的数据进行 标记&#xff08;分类&#xff09;预测。 这里 &#xff0c;所有的标记&#xff08;分类&#xff09…

    python如何下载svg图片

    # 生成博客文章框架代码 import datetimeblog_content f"""# Python如何下载SVG图片## 引言 SVG&#xff08;可缩放矢量图形&#xff09;作为一种基于XML的矢量图形格式&#xff0c;在Web开发中广泛应用。本文将介绍如何使用Python从网络下载SVG图片&#xff0…

    Linux(一) | 初识Linux与目录管理基础命令掌握

    个人主页-爱因斯晨 文章专栏-Linux 最近学习人工智能时遇到一个好用的网站分享给大家&#xff1a; 人工智能学习 文章目录个人主页-爱因斯晨文章专栏-Linux一、前言1.为什么学习Linux2.操作系统概述&#xff1a;3.常见的操作系统&#xff1a;二、初识Linux1.诞生2.什么是Linux…