Ansible---Playbook剧本

文章目录

  • Playbook
    • 案例1 Playbook剧本基本用法
    • 案例2 Playbook剧本定义、引用变量
    • 案例3.when条件判断
    • 迭代
    • 剧本Roles 模块

Playbook

  1. Tasks:任务是 Playbooks 的核心,它们是 Playbook 中的一项指令,告诉 Ansible 在远程主机上执行什么操作。每个任务都调用一个 Ansible 模块,并传递参数来执行特定的动作,例如安装软件包、复制文件、启动服务或设置文件权限。
  2. Variables:变量允许您在 Playbook 中创建可重用的值,这些值可以在多个任务中使用,从而使您的 Playbook 更加灵活和可维护。变量可以是从简单字符串到复杂数据结构的任何内容,它们可以在 Playbook 中直接定义,也可以从外部文件或命令行参数中加载。
  3. Templates:模板是带有变量替换功能的文本文件,通常用于生成配置文件。Ansible 使用 Jinja2 模板引擎来处理模板文件,允许您在模板中插入变量和表达式,这些将在 playbook 运行时被替换为实际值。
  4. Handlers:处理器是当特定条件满足时触发的任务。通常,当任务报告状态为 “changed” 时,会通知一个或多个处理器。这通常用于重启服务或触发系统级操作,只有当实际发生变化时才需要执行这些操作。
  5. Roles:角色是一种组织 Playbook 的方法,它将变量、任务、模板、文件和处理器组合在一起,以便在多个 Playbook 之间重用。角色可以根据不同的环境或不同的服务器类型来组织任务,使得大型项目更加模块化和易于管理。

这些组件共同构成了 Ansible Playbook 的结构,使得 Ansible 成为自动化 IT 操作和应用程序部署的强大工具。通过组合这些组件,您可以创建复杂的自动化工作流程,以部署和配置您的应用程序和基础设施。

案例1 Playbook剧本基本用法

vim test1.yaml

在 YAML 格式中,缩进用于表示文档的结构和层次。YAML 文件中的缩进通常使用空格而不是制表符,并且每个层级的缩进应该是一致的。在 Ansible Playbook 中,通常每个缩进级别使用 2 个空格。
下面 playbook 示例中,- name: yum httpd 是一个 playbook 的开始,hosts: web1tasks:handlers: 都是与 - name: yum httpd 同一层级的键。tasks:handlers: 下的条目应该缩进 2 个空格,表示它们是 taskshandlers 的子项。确保了每个层级都有正确的缩进:

---
# Playbook 名称
- name: yum httpd
  hosts: web1
  tasks:
    - name: Stop firewalld service  # 停止 firewalld 服务
      service:
        name: firewalld
        state: stopped
    - name: sete***=0  # 设置 SELinux 为 permissive 模式
      shell:
        setenforce 0
    - name: an_zhuang_httpd  # 使用 yum 模块安装 httpd 包
      yum:
        name: httpd
    - name: gei_httpd_pei_zi  # 获取 httpd 配置文件
      copy:
        src: /opt/httpd.conf
        dest: /etc/httpd/conf/httpd.conf
      notify: "restart httpd"  # 当任务完成时,通知重启 httpd 服务
    - name: start httpd  # 启动 httpd 服务
      service:
        name: httpd
        state: started
        enabled: true
  handlers:
    - name: restart httpd  # 当任务完成时,重启 httpd 服务
      service:
        name: httpd
        state: restarted

在这里插入图片描述

在这里插入图片描述

注我httpd的配置文件将端口号改为8080了
playbook命令
ansible-playbook test1.yaml --syntax-check 检查yaml文件的语法是否正确
ansible-playbook test1.yaml --list-task 检查tasks任务
ansible-playbook test1.yaml --list-hosts 检查生效的主机
ansible-playbook test1.yaml --start-at-task=‘install httpd’ 指定从某个task开始运行

案例2 Playbook剧本定义、引用变量

vars:                 #定义变量
格式  key: value

将案例1的httpd软件安装定义成变量的模式如下,将httpd改成了nginx

---
---
# Playbook 名称
- name: yum httpd
  hosts: web1
  vars:
    - sname: nginx  # 定义一个变量 sname,其值为 nginx
  tasks:
    - name: Stop firewalld service  # 停止 firewalld 服务
      service:
        name: firewalld
        state: stopped
    - name: sete***=0  # 设置 SELinux 为 permissive 模式
      shell:
        setenforce 0
    - name: yum install epel-release  # 安装 epel-release 包
      yum:
        name: epel-release
    - name: an_zhuang_{{sname}}  # 使用 yum 模块安装 {{sname}} 包
      yum:
        name: "{{sname}}"
#    - name: gei_httpd_pei_zi  
#      copy:
#        src: /opt/httpd.conf
#        dest: /etc/httpd/conf/httpd.conf
      notify: "restart {{sname}}"  # 当任务完成时,通知重启 {{sname}} 服务
    - name: start {{sname}}  # 启动 {{sname}} 服务
      service:
        name: "{{sname}}"
        state: started
        enabled: true
  handlers:
    - name: restart {{sname}}  # 当任务完成时,重启 {{sname}} 服务
      service:
        name: "{{sname}}"
        state: restarted


在这里插入图片描述

在这里插入图片描述

案例3.when条件判断

使用when 可以让满足条件的主机执行命令,如下

---
---
---
- name: Create test1 file on remote host
  hosts: web1
  tasks:
    - name: Create test1 file
      file:
        path: /opt/test1
        state: touch
      when: ansible_default_ipv4.address == "192.168.20.10"

  	

这会让IP地址为192.168.20.10地址的主机在opt目录下创建一个test1文件
在这里插入图片描述
在这里插入图片描述

192.168.20.10的主机上创建了一个test1文件

迭代

一种循环结构,类似于loop
Ansible 中的迭代结构是 with_items,它允许您遍历一个列表、字典或字符串,并在每个迭代中执行一个任务。这相当于 Python 中的 for 循环。
例如

---
- name: 在opt目录上创建mydir目录,并且在mydir目录下创建myfile.txt文件
  hosts: web1
  tasks:
    - name: 创建目录和文件
      file:
        path: "{{item.path}}"
        state: "{{item.state}}"
      with_items:
        - { path: '/opt/mydir', state: 'directory' }
        - { path: '/opt/mydir/myfile.txt', state: 'touch' }

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

剧本Roles 模块

在 Ansible 中,角色(roles)是一种用于组织 playbook 的方法,它允许您将任务的集合、变量、处理器(handlers)和文件等组织成独立的、可重用的组件。roles 非常适合于构建和配置服务,尤其是当您需要在不同主机上重复执行相同的配置时。
一个 role 通常包含以下目录结构:

  • roles/<role_name>/tasks:包含主任务列表。
  • roles/<role_name>/handlers:包含处理程序,通常用于重启服务或执行其他操作。
  • roles/<role_name>/vars:包含角色级别的变量。
  • roles/<role_name>/defaults:包含角色的默认变量。
  • roles/<role_name>/meta:包含角色的依赖关系和其他元数据。
  • roles/<role_name>/templates:包含 Jinja2 模板文件。
  • roles/<role_name>/files:包含静态文件,如配置文件或脚本。
  • roles/<role_name>/templates:包含 Jinja2 模板文件。
  • roles/<role_name>/tasks/main.yml:主任务文件,通常会 include 其他任务文件。
    下面我将使用Roles模块创建一个LAMP用于展示
mkdir -p /opt/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta} 
mkdir -p /opt/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} 
mkdir -p /opt/roles/php/{files,templates,tasks,handlers,vars,defaults,meta} 

在这里插入图片描述
编写httpd模块

vim /opt/roles/httpd/tasks/main.yml

在这里插入图片描述

---
- name: install apache
  yum:
    name: "{{fw}}"
- name: start apache
  service:
    name: "{{fwkg}}"
    enabled: true
    state: started
vim /opt/roles/httpd/vars/main.yml
fw: httpd
fwkg: httpd

在这里插入图片描述
编写mysql模块

vim /opt/roles/mysql/tasks/main.yml
- name: "安装拓展源"
  yum:
    name: epel-release
- name: "安装Mysql数据库"
  yum:
    name: "{{fw}}"
- name: "启动数据库"
  service:
    name: "{{fwgl}}"
    state: started
    enabled: true

在这里插入图片描述

vim /opt/roles/mysql/vars/main.yml
fw:
  - mariadb
  - mariadb-server
fwgl: mariadb

在这里插入图片描述
编写php模块

vim /opt/roles/php/tasks/main.yml
- name: 安装PHP
  yum:
    name: "{{fw}}"
- name: 启动PHP
  service:
    name: "{{fwgl}}"
    state: started
    enabled: true

在这里插入图片描述

vim /opt/roles/php/vars/main.yml
fw: php
wfgl: php

在这里插入图片描述
编写roles

vim /opt/site.yml
---
- hosts: web1
  roles:
   - httpd
   - mysql
   - php

启动剧本

ansible-playbook site.yml

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

kubectl_进阶_安全

安全 在前面的学习中&#xff0c;我们知道对于资源对象的操作都是通过 APIServer 进行的&#xff0c;那么集群是怎样知道我们的请求就是合法的请求呢&#xff1f; 这就涉及到k8s的安全相关的知识了。 1. API对象 Kubernetes有一个很基本的特性就是它的所有资源对象都是模型…

pdf2htmlEX:pdf 转 html,医学指南精细化处理第一步

pdf2htmlEX&#xff1a;pdf 转 html&#xff0c;医学指南精细化处理第一步 单文件转换多文件转换 代码&#xff1a;https://github.com/coolwanglu/pdf2htmlEX 拉取pdf2htmlEX 的 Docker&#xff1a; docker pull bwits/pdf2htmlex # 拉取 bwits/pdf2htmlex不用进入容器&…

统信UOS 1070桌面操作系统如何备份及恢复全盘数据

原文链接&#xff1a;统信UOS 1070桌面操作系统如何备份及恢复全盘数据 Hello&#xff0c;大家好啊&#xff01;数据备份和还原对于保护我们的重要信息至关重要&#xff0c;尤其是当系统遭遇意外时&#xff0c;能够快速恢复到正常状态。今天&#xff0c;我将介绍如何在统信UOS …

树莓派配置双网卡分别为AD HOC和AP模式

树莓派配置双网卡分别为AD HOC和AP模式 需求说明&#xff1a;为了实现分级网络管理&#xff0c;将多个无人机分簇&#xff0c;簇间使用AD HOC进行无中心自组织的网络&#xff0c;簇内使用AP-AC模式进行中心化网络。因此&#xff0c;需要配置一台设备&#xff0c;同时完成AD HOC…

设计模式——行为型模式——策略模式(含实际业务使用示例、可拷贝直接运行)

目录 策略模式 定义 组成和UML图 代码示例 实际业务场景下策略模式的使用 策略模式优缺点 使用场景 JDK中使用策略模式示例 参考文档 策略模式 定义 策略模式定义了一系列算法&#xff0c;并将每个算法封装起来&#xff0c;使它们可以相互替换&#xff0c;且算法的变化…

【微信小程序开发】微信小程序、大前端之flex布局方式详细解析

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

液晶高抗干扰驱动LCD段码屏驱动芯片VK2C22抗干扰系列瓦斯表段码LCD液晶驱动芯片

VK2C22是一个点阵式存储映射的LCD驱动器&#xff0c;可支持最大176点&#xff08;44SEGx4COM&#xff09;的LCD屏。单片机可通过I2C接口配置显示参数和读写显示数据&#xff0c;也可通过指令进入省电模式。其高抗干扰&#xff0c;低功耗的特性适用于水电气表以及工控仪表类产品…

简单几步解决Windows 10播放视频提示安装HEVC扩展

相信有不少人都遇到过以下的问题&#xff0c;废话不多说&#xff0c;直接上干货&#xff01; 1.下载插件 免费地址链接: 点击下载 2.安装插件 如图所示&#xff0c;在下载的目录路径里&#xff0c; 1.按住键盘 SHIFT&#xff0c;点击鼠标右键&#xff0c;选择在此处打开Powe…

4WRPH系列比例阀外置放大器

控制4WRPH6或4WRPH10比例伺服阀放大器适用于驱动带非线性曲线的直动式比例伺服电磁阀&#xff0c;模拟量控制电器放大器模块式的放大器用于安装在机柜内35mm卡轨架上&#xff0c;输出级带电气反馈用于闭环控制。使能输入功能可控制放大器输出开或关&#xff0c;带斜坡时间发生器…

const成员函数、cout/cin和重载运算符<<、>>、

目录 一、为什么cout&#xff0c;cin可以自动识别类型&#xff1f; 二、留提取运算符重载&#xff08;<<&#xff09; 三、留插入运算符重载&#xff08;>>&#xff09; 四、对上述的总结&#xff1a; 五、const成员 成员函数原则&#xff1a; 六、默认成员函…

Object类

Object类 概念&#xff1a;Object类是所有类的父类&#xff0c;也就是说任何一个类在定义时候如果没有明确的指定继承一个父类的话&#xff0c;那么它就都默认继承Object类&#xff0c;因此Object类被称为所有类的父类&#xff0c;也叫做基类/超类。 常用方法 方法类型描述eq…

Python实战开发及案例分析(12)—— 模拟退火算法

模拟退火算法&#xff08;Simulated Annealing&#xff09;是一种概率搜索算法&#xff0c;源自于金属退火过程。在金属退火中&#xff0c;通过缓慢降低温度&#xff0c;金属内部的原子能够从高能态逐步达到较低能态。模拟退火算法利用类似的原理&#xff0c;通过随机搜索和概率…

Samtec连接器应用科普 | 连接智能工厂中的AI

【摘要/前言】 本文是系列的第一部分&#xff0c;我们将探讨人工智能在工业领域的作用。 人工智能&#xff08;AI&#xff09;的话题最近成为头条新闻&#xff0c;因为最新一代基于云的人工智能工具有望为机器的力量带来重大飞跃。在所有关于人工智能将如何影响我们的讨论中&…

Android内核之Binder消息处理:binder_transaction用法实例(七十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

overflow:hidden对解决外边距塌陷的个人理解

外边距塌陷&#xff1a; 子元素的上外边距大于父元素的上外边距&#xff0c;导致边距折叠&#xff0c;取两者之间最大值&#xff0c;即子元素外边距&#xff0c;导致父元素上外边距失效。 解决办法&#xff1a;在父元素样式添加overflow:hidden;或者border:1px solid black;(不…

Python数据分析实战

文章目录 第1关&#xff1a;读取MoMA数据集第2关&#xff1a;计算艺术家年龄第3关&#xff1a;把年龄换算成年代第4关&#xff1a;总结年代数据第5关&#xff1a;将变量插入字符串第6关&#xff1a;创建艺术家频率表第7关&#xff1a;创建显示艺术家信息的函数第8关&#xff1a…

Ubuntu下halcon软件的下载安装

由于工作需求&#xff0c;点云配准需要使用halcon进行实现&#xff0c;并且将该功能放入QT界面中 1.下载halcon 进入halcon官网进行下载 官网链接&#xff1a;https://www.mvtec.com/products/halcon/ 注意&#xff1a;要注册登陆之后才能进行下载 接着点击Downloads->H…

SOCKET编程(3):相关结构体与函数

相关结构体与函数 sockaddr、sockaddr_in结构体 sockaddr和sockaddr_in详解 struct sockaddr共16字节&#xff0c;协议族(family)占2字节&#xff0c;IP地址和端口号在sa_data字符数组中 /* Structure describing a generic socket address. */ struct sockaddr {__SOCKADDR…

Apache POI入门学习

Apache POI入门学习 官网地址 excel中使用到的类读取excel表格内容表格内容maven依赖方式一测试结果 方式二测试结果 向excel中写入数据方式一方式二方式三测试结果 从 Excel 工作表中的公式单元格读取数据测试结果 Excel 工作表中写入公式单元格从受密码保护的Excel中读取数据…

Apple 发布新款 iPad Pro 和 iPad Air:性能和设计的巨大飞跃

Apple 发布新款 iPad Pro 和 iPad Air&#xff1a;性能和设计的巨大飞跃 概述 苹果公司最近的“Let Loose”活动在科技界掀起了轩然大波&#xff0c;推出了最新的 iPad Pro 和 iPad Air 型号&#xff0c;在性能、设计和功能方面取得了前所未有的改进。在本文中&#xff0c;我…
最新文章