实用指南:Ansible Playbook:自动化配置管理的利器

news/2025/10/2 14:40:18/文章来源:https://www.cnblogs.com/tlnshuju/p/19123593

实用指南:Ansible Playbook:自动化配置管理的利器

2025-10-02 14:33  tlnshuju  阅读(0)  评论(0)    收藏  举报

Ansible Playbook:自动化配置管理的利器

  • 前言
  • 一、 Playbook 的结构
  • 二、 Ansible Playbook 示例
  • 三、 命令行运行 Playbook
  • 四、 变量和引用
  • 五、 条件判断 `when`
  • 六、 迭代:使用 `with_items` 或 `loop`
  • 七、 Templates 模块
  • 八、 Tags 模块
  • 九、 Roles 模块
      • 9.1 Roles 概念
      • 9.2 roles 内各目录含义解释
      • 9.3 在一个 playbook 中使用 roles 的步骤
      • 9.4 案列
        • 9.4.1 创建项目目录
        • 9.4.2 编写httpd模块
        • 9.4.3 编写mysql模块
        • 9.4.4 编写php模块
        • 9.4.5 编写roles
  • 结语

前言

  在当今的IT运维领域,自动化工具的应用已经成为提升效率和减少人为错误的关键手段。Ansible,作为一款开源的自动化引擎,以其简洁的语法、强大的功能和易于上手的特点,受到了广大运维工程师和开发者的青睐。特别是在配置管理和应用部署方面,Ansible通过其独特的Playbook机制,实现了对多台服务器的高效管理。本文将深入探讨Ansible Playbook的编写技巧,旨在帮助读者掌握这一强大的自动化工具,提升运维效率。

一、 Playbook 的结构

  Ansible 的 Playbook 是一个包含多个 Play 的 YAML 文件,每个 Play 负责对指定的 主机组 执行一系列的任务。Playbook 通常由以下几部分组成:

二、 Ansible Playbook 示例

下面的示例展示了一个简单的 Playbook,演示了基本的任务执行流程和 Ansible 模块使用。

- name: install httpd
gather_facts: false
hosts: webservers
remote_user: root
tasks:
- name: test connection
ping:
- name: disable selinux
command: '/sbin/setenforce 0'
ignore_errors: True
- name: disable firewalld
service: name=firewalld state=stopped
- name: install httpd
yum: name=httpd state=latest
- name: install configuration file for httpd
copy: src=/opt/httpd.conf dest=/etc/httpd/conf/httpd.conf
notify: "restart httpd"
- name: start httpd service
service: enabled=true name=httpd state=started
handlers:
- name: restart httpd
service: name=httpd state=restarted

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、 命令行运行 Playbook

在运行 Playbook 时,可以使用一些常用参数来调整执行行为:

ansible-playbook test1.yaml  # 运行 playbook
ansible-playbook test1.yaml --syntax-check  # 检查语法
ansible-playbook test1.yaml --list-task  # 查看任务列表
ansible-playbook test1.yaml --list-hosts  # 查看影响的主机
ansible-playbook test1.yaml --start-at-task='install httpd'  # 从指定任务开始执行

如果要使用 SSH 密码sudo 密码,可以使用以下选项:

ansible-playbook test1.yaml -k  # 提示输入 SSH 密码
ansible-playbook test1.yaml -K  # 提示输入 sudo 密码

在这里插入图片描述

四、 变量和引用

变量在 Playbook 中非常有用,它们可以通过 vars 或命令行进行定义。

- name: second play
hosts: dbservers
remote_user: root
vars:
groupname: mysql
username: nginx
tasks:
- name: create group
group: name={{ groupname }} system=yes gid=306
- name: create user
user: name={{ username }} uid=306 group={{ groupname }}
- name: copy file
copy: content="{{ ansible_default_ipv4 }}" dest=/opt/vars.txt

在命令行中,变量也可以通过 -e 参数传递:

ansible-playbook test1.yaml -e "username=nginx"

在这里插入图片描述
在这里插入图片描述

五、 条件判断 when

when 用于根据条件执行任务。它的常见用法包括:

  • 根据主机的 IP 地址来执行任务:
- name: shutdown host
command: /sbin/shutdown -r now
when: ansible_default_ipv4.address == "192.168.10.14"

在这里插入图片描述

  • 或根据主机名来执行:
when: inventory_hostname == "<主机名>"

六、 迭代:使用 with_itemsloop

  Ansible 支持使用 with_itemsloop 进行迭代。两者作用相同,loop 是较新的推荐用法。

- name: play1
hosts: dbservers
gather_facts: false
tasks:
- name: create directories
file:
path: "{{item}}"
state: directory
with_items:
- /tmp/test1
- /tmp/test2
- name: add users
user: name={{item.name}} state=present groups={{item.groups}}
with_items:
- name: test1
groups: wheel
- name: test2
groups: root

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

- name: loop
hosts: dbservers
gather_facts: false
tasks:
- name: create dir
file:
path: "{{item}}"
state: touch
loop:
- /opt/t1.txt
- /opt/t2.txt
- /opt/t3.txt

在这里插入图片描述

七、 Templates 模块

Jinja2 模板引擎在 Ansible 中用来动态生成文件。例如,在配置 Apache 时,可以使用模板文件来替换动态值。

  1. 创建 Jinja 模板文件 (.j2)
cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2
vim /opt/httpd.conf.j2
Listen {{http_port}}
ServerName {{server_name}}
DocumentRoot "{{root_dir}}"
  1. 定义变量并在主机清单中指定
[webservers]
192.168.10.40 http_port=80 server_name=www.accp.com root_dir=/etc/httpd/conf
  1. Playbook 示例
- hosts: all
remote_user: root
vars:
package: httpd
service: httpd
tasks:
- name: install httpd package
yum: name={{ package }} state=latest
- name: install configure file
template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
notify:
- restart httpd
- name: create root dir
file: path=/etc/httpd/htdocs state=directory
- name: start httpd server
service: name={{ service }} enabled=true state=started
handlers:
- name: restart httpd
service: name={{ service }} state=restarted

在这里插入图片描述

八、 Tags 模块

Tags 允许你指定只执行某些特定任务。通过命令行传入 --tags 参数来执行带有特定标签的任务。

- hosts: webservers
remote_user: root
tasks:
- name: Copy hosts file
copy: src=/etc/hosts dest=/opt/hosts
tags:
- only
- name: touch file
file: path=/opt/testhost state=touch
tags:
- always

在这里插入图片描述
执行时指定 --tags 参数:

ansible-playbook webhosts.yaml --tags="only"

九、 Roles 模块

9.1 Roles 概念

Roles 是将复杂的 Playbook 组织成独立的、更小的剧本和文件,提供了一种从外部文件加载任务、处理程序和变量的方法。Roles 可以编写成满足普通用途需求,并且能被重复利用。

9.2 roles 内各目录含义解释

  • files: 用来存放由 copy 模块或 script 模块调用的文件。
  • templates: 用来存放 jinjia2 模板,template 模块会自动在此目录中寻找 jinjia2 模板文件。
  • tasks: 此目录应当包含一个 main.yml 文件,用于定义此角色的任务列表。
  • handlers: 此目录应当包含一个 main.yml 文件,用于定义此角色中触发条件时执行的动作。
  • vars: 此目录应当包含一个 main.yml 文件,用于定义此角色用到的变量。
  • defaults: 此目录应当包含一个 main.yml 文件,用于为当前角色设定默认变量。
  • meta: 此目录应当包含一个 main.yml 文件,用于定义此角色的特殊设定及其依赖关系。

9.3 在一个 playbook 中使用 roles 的步骤

  1. 创建以 roles 命名的目录。
  2. 创建全局变量目录(可选)。
  3. 在 roles 目录中分别创建以各角色名称命令的目录。
  4. 在每个角色命令的目录中分别创建files、handlers、tasks、templates、meta、defaults和vars目录。
  5. 在每个角色的 handlers、tasks、meta、defaults、vars 目录下创建 main.yml 文件。
  6. 修改 site.yml 文件,针对不同主机去调用不同的角色。
  7. 运行 ansible-playbook。

9.4 案列

9.4.1 创建项目目录
mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta} -p
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} -p
mkdir /etc/ansible/roles/php/{files,templates,tasks,handlers,vars,defaults,meta} -p
touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/php/{defaults,vars,tasks,meta,handlers}/main.yml

在这里插入图片描述

9.4.2 编写httpd模块
vim /etc/ansible/roles/httpd/tasks/main.yml
- name: install apache
yum: name={{pkg}} state=latest
- name: start apache
service: enabled=true name={{svc}} state=started
vim /etc/ansible/roles/httpd/vars/main.yml
pkg: httpd
svc: httpd
9.4.3 编写mysql模块
vim /etc/ansible/roles/mysql/tasks/main.yml
- name: install mysql
yum: name={{pkg}} state=latest
- name: start mysql
service: enabled=true name={{svc}} state=started
vim /etc/ansible/roles/mysql/vars/main.yml
pkg:
- mariadb
- mariadb-server
svc: mariadb
9.4.4 编写php模块
vim /etc/ansible/roles/php/tasks/main.yml
- name: install php
yum: name={{pkg}} state=latest
- name: start php-fpm
service: enabled=true name={{svc}} state=started
vim /etc/ansible/roles/php/vars/main.yml
pkg:
- php
- php-fpm
svc: php-fpm
9.4.5 编写roles
vim /etc/ansible/site.yml
---
- hosts: webservers
remote_user: root
roles:
- httpd
- mysql
- php
cd /etc/ansible
ansible-playbook site.yml

在这里插入图片描述

结语

  通过对Ansible Playbook编写技巧的全面介绍,我们可以看到,Ansible不仅能够简化复杂的运维任务,还能通过模块化的设计,提高脚本的复用性和可维护性。从基础的结构和示例,到变量、条件判断、迭代、模板、标签和角色等高级功能,Ansible Playbook提供了一套完整的解决方案,以满足各种自动化需求。希望本文的介绍能够帮助读者更好地理解和应用Ansible,从而在自动化运维的道路上走得更远。

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

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

相关文章

灵芝产品网站建设方案旅行社的网站建设

归并思想 先拆分后合并 也就是分治&#xff1b; 拆分合并思想具体讲解可以参考以下链接&#xff1a; b站链接&#xff1a; 点这里&#xff1a;b站归并思想具体讲解 看代码 代码中的例子参考上图和下图 public class MergeSort {//一、拆分部分public static void split(i…

网站建设相对路径电话网站域名到期

前言 在授权码模式的前后端分离的那篇文章中使用了Redis来保存用户的认证信息&#xff0c;在Redis的配置文件中配置的值序列化器是默认的Jdk序列化器&#xff0c;虽然这样也可以使用&#xff0c;但是在Redis客户端中查看时是乱码的(看起来是)&#xff0c;如果切换为Jackson提供…

英语_阅读_Always-on world_待读

In todays always-on world, work doesnt end when you leave the office.在当今这个永不停歇的世界里,工作并不会在你离开办公室时就结束。 Instead, emails, texts and notifications often follow us home, demand…

网站子站建设合同样本外贸电商平台都有哪些

原文网址&#xff1a;http://www.cnblogs.com/hanhuibing/articles/5680616.html 基于Solr的空间搜索 如果需要对带经纬度的数据进行检索&#xff0c;比如查找当前所在位置附近1000米的酒店&#xff0c;一种简单的方法就是&#xff1a;获取数据库中的所有酒店数据&#xff0c;…

2025冷水机定制厂家 TOP 企业品牌推荐排行榜,工业,防爆,低温,水冷,螺杆,超低温,满液式,降膜,气悬浮,变频冷水机厂家推荐这十家公司

在工业生产与商业运营中,冷水机的作用愈发关键,而不同行业、不同场景对冷水机的需求存在显著差异。化工行业可能需要耐腐蚀性强的定制冷水机,电子行业则对温控精度有极高要求,食品行业又注重冷水机的卫生标准。然而…

大型网站 div软文推广怎么做

近年来&#xff0c;随着体育设施建设的推进和政策支持&#xff0c;越来越多的体育从业者将目光聚焦到了楼顶&#xff0c;希望通过在楼顶加盖气膜馆来充分利用有限的土地资源。那么&#xff0c;为什么气膜建筑能够建在楼顶呢&#xff1f;轻空间将从气膜建筑的结构特点、安全性、…

详细介绍:AI 动画视频创作:技巧升级与行业未来趋势

详细介绍:AI 动画视频创作:技巧升级与行业未来趋势pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&quo…

华为手机鸿蒙系统 4.2 / 4.3 安装谷歌框架的详细教程 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实用指南:第四届云计算、大数据应用与软件工程国际学术会议(CBASE 2025)

实用指南:第四届云计算、大数据应用与软件工程国际学术会议(CBASE 2025)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-famil…

2025黄金回收公司权威推荐榜:专业估价与诚信服务口碑之选

在当今经济环境下,黄金作为重要的避险资产和投资工具,其回收市场日益活跃。随着黄金价格的持续波动,越来越多的企业和个人开始关注黄金回收这一领域。黄金回收不仅涉及资产变现,更关系到资源循环利用和经济效益最大…

网站建设公司 未来今天最新生猪价格

sub sup <p>这个文本包含 <sub>111</sub>文本。</p> <p>这个文本包含 <sup>上标</sup> 文本。</p>下标文本将会显示在当前文本流中字符高度的一半为基准线的下方&#xff0c;但是与当前文本流中文字的字体和字号都是一样的。…

建设银行网站一直打不开wordpress 附件密码保护

我们传统的23种设置模式如下 创建型模式:用于创建对象 工厂方法(Factory Method) 模式抽象工厂(Abstract Factory) 模式原型(Protptype) 模式单例(Singleton) 模式构建器模式结构型模式:建立更大的结构 适配器(Adapter)模式桥接(Bridge)模式组合(Composite)模式装饰(D…

PWN手成长之路-06-watevr_2019_voting_machine_1-栈溢出+劫持

远程连接,看一下交互。发现是一个投票系统,让用户在0-10之间选择一个数字并输入。file 查看文件。64 位 ELF 可执行文件。checksec 查看文件安全属性。开启了 NX 保护,栈上无执行权限。IDA 打开文件。查看 main 函数…

做html5视频网站武威网站怎么做seo

1 &#xff1a;维护数据库的完整性、一致性、你喜欢用触发器还是自写业务逻辑&#xff1f;为什么 答&#xff1a;尽可能用约束&#xff08;包括CHECK、主键、唯一键、外键、非空字段&#xff09;实现&#xff0c;这种方式的效率最好&#xff1b;其次用触发器&#xff0c;这种方…

hmcl

hmcl java本文来自博客园,作者:[GuiHua],转载请注明原文链接:https://www.cnblogs.com/pcworld/p/-/hmcl

平台商城网站开发惠州市惠城区建设局网站

注意力机制在深度学习领域中是一种重要的技术&#xff0c;特别是在序列模型和自然语言处理&#xff08;NLP&#xff09;任务中。注意力机制的核心思想是在模型的输入上模拟人类的注意力过程&#xff0c;即模型能够自动决定在处理特定任务时应该“关注”输入数据的哪些部分。通过…

PWN手成长之路-06-watevr_2019_voting_machine_1

远程连接,看一下交互。发现是一个投票系统,让用户在0-10之间选择一个数字并输入。file 查看文件。64 位 ELF 可执行文件。checksec 查看文件安全属性。开启了 NX 保护,栈上无执行权限。IDA 打开文件。查看 main 函数…

pythone网站开发文明网站建设工作进度表

文章目录一、入门试炼1. 创建挂载目录2. 赋予目录权限3. 临时容器4. 拷贝文件5. 删除临时容器6. 自定义配置启动7. 安全策略组二、 企业内部使用2.1. nacos 集群2.2. 多个域名公用80端口是实现反向代理和负载均衡一、入门试炼 1. 创建挂载目录 mkdir /app/nginx/conf/ /app/n…

没内容的网站怎么优化外贸公司用的采购储运财务软件

前一段时间&#xff0c;我是房地美&#xff0c;房地美&#xff0c;Foreclosure.com和HUD等公司在房地产市场上进行一些大型部署的技术负责人。 我们运行的是您可能熟悉的传统企业Java堆栈-Spring &#xff0c; Hibernate &#xff0c;Solr等。花了几年时间&#xff0c;但我们建…

2025喷雾干燥厂家TOP企业品牌推荐排行榜,无锡,常州喷雾干燥,低温,压力,气流,离心式,压力式喷雾干燥,喷雾干燥塔,设备,装置公司推荐!

在当前的工业生产领域,喷雾干燥技术作为物料干燥处理的关键环节,其应用范围已广泛覆盖新能源材料、精密陶瓷、化工等多个重要行业。然而,随着市场需求的不断升级,行业内逐渐显现出诸多问题。一方面,部分喷雾干燥品…