百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

DevOps学习笔记-CD篇-ansible自动化运维4

nanshan 2024-10-15 11:29 9 浏览 0 评论

目录

一、文档概述

发现前面的文章推荐和阅读量都不高,看来枯燥知识总是不容易引起共鸣。果然尝不到果实的甜美是不知道种树的意义的。不过不要紧,后面介绍到真实案例的时候,回来翻翻也是够用的。为了提高大家学习的信心,我会降低每篇文章的内容含量,省的看到一半就看不下去了..

本文档主要介绍playbook编写与使用的预备知识。

二、PLAYBOOK相关名词

playbook是个啥,上篇文章已经讲到了,现在我们看看它都包含啥

  • Tasks:任务,由模板定义的操作列表
  • Variables:变量
  • Templates:模板,即使用模板语法的文件
  • Handlers:处理器,当某条件满足时,触发执行的操作
  • Roles:角色

1. Tasks

一个合格的task通常包含hosts(用来指定任务要执行的主机或者主机群),一堆task排在一起就叫做Tasks,Play的主体部分是task列表,Tasks中的各任务按次序逐个在hosts中指定的主机上执行,即在所有主机上完成第一个任务后再开始第二个任务。

  • task包含hosts,name,module: options等参数
  • hosts指定当前任务要操作的主机对象,一般在hosts同时指定了对端服务器IP、执行用户等关键信息。多个task合并成一组Tasks时,hosts可以共用一份.
  • name,是指task的名称,每个最小粒度的task必须有一个name,由开发者自由定义
  • module:options.一般成对出现,用来声明当前任务要执行的动作.一般推荐采用ansible自带的模块加模块执行参数.

如果你觉得上面一堆东西晕头转向,那么上代码!!我们的原则是,能用代码说清楚的事情就绝对不哔哔....

---
- hosts: 192.168.11.101 //指定主机
 remote_user: root //指定在被管理的主机上执行任务的用户
 tasks: //任务列表↓
 - name: disable selinux //任务名关闭selinux
 command: '/sbin/setenforce 0' //调用command模块 执行关闭命令
 - name: start httpd //任务名 开启httpd
 service: name=httpd state=started //调用service模块 开启httpd 服务

上面这个脚本干了两个活,一是禁用selinux,二是启动apache.至于ansible模块不熟悉没关系,后面我们会逐一讲到.上述文件格式为啥这么写,请参照第三节.

2. Variables

vars是为了增加脚本普适性而存在的概念,可以大大增加ansible文件的可复用性.例如上小节提到的这个脚本只能启用httpd服务,如果要换成其他服务看起来很麻烦.我们可以小手一动,变成这样:

---
- hosts: 192.168.11.101 //指定主机
 remote_user: root //指定在被管理的主机上执行任务的用户
 vars: 
 - service: tomcat
 tasks: //任务列表↓
 - name: disable selinux //任务名关闭selinux
 command: '/sbin/setenforce 0' //调用command模块 执行关闭命令
 - name: start {{service}} //任务名 开启变量定义的服务
 service: name={{service}} state=started //调用service模块 开启 服务

也没什么嘛,不就是把要修改的地方放到前面去了么,嘿嘿,小同志,你这么想也没啥不对,但是如果变量能从数据库或者其他API动态获取的话,是不是这么干瞬间就有意义啦.具体案例我们下回分解.

3. Handlers

handlers也是一些task的列表,和一般的task并没有什么区别。只是有个类似AOP的机制,到声明的地方,可以跳转到一段指定逻辑执行,执行完毕后再返回原任务列表位置继续向下执行.且一个个handler只能被执行一次.

这个东西,在这里不做赘述,后面文章里我们用实战案例来进一步了解.

4. template

签于本文写着写着又超长了,template模块介绍的时候再详细介绍这部分

5. Roles

敲黑板、划重点。其实有了上面的元素,足够应对我们的业务逻辑了。那么为啥又引入了一个角色的概念呢。其实也是为了复用性考虑。你可以简单的认为,一个角色就是把一堆使用频度相对较高,有共性的任务列表组合而成,简化真正逻辑的编写。试想一下下面的场景。

张三,早上,上了个厕所,然后赶地铁上班

李四,早上,上了个厕所,然后出门买早餐

王五,早上,上了个厕所,打卡下班

嗯。。。。,你看上厕所也不是个简单是吧,得打开门、进去蹲下、脱(和谐)。。。等等一大堆步骤,如果上述张三李四王五每个都要写一遍简直不可理喻,干脆打包个角色 上厕所,然后再编写各自场景的个性化部分就好了。

我这么说,你是不是考虑去上个厕所?

三、PLAYBOOK编写语法

PlayBook全面采用了YAML语法, 它被用来描述一个 playbooks(我们的配置管理语言).,YAML有基本的分支写法,但是它不是一种脚本代码,可以理解为是一种和json一样的易读性强的数据格式.

1. 基本的 YAML

对于 Ansible, 每一个 YAML 文件都是从一个列表开始. 列表中的每一项都是一个键值对, 通常它们被称为一个 “哈希” 或 “字典”. 所以, 我们需要知道如何在 YAML 中编写列表和字典.

YAML基本编写方式,相比搜索一下,你就知道.本文就说点干货和要点 .先让大家知其然,如果大家有钻研精神,想知其所以然,可以留言或者自行百度..

  1. 每个YAML文件(也就是ansible每个配置文件)都必须以"---"开头(三个中划线).
  2. 列表成员缩进必须相同,必须以:"- "(一中划线一空格)开头
  3. 键值对的键和值用": "(冒号,空格)分割
  4. 值如果包含冒号,那么整个值串必须用双引号包裹
  5. {{var}} 双大括号是标记变量的方式

2. YAML样例

让我们把目前所学到的 YAML 例子组合在一起. 这些在 Ansible 中什么也干不了, 但这些格式将会给你感觉:

---
# 一位职工记录
name: Example Developer
job: Developer
skill: Elite
employed: True
foods:
 - Apple
 - Orange
 - Strawberry
 - Mango
languages:
 ruby: Elite
 python: Elite
 dotnet: Lame

四、小结

今天的知识有个大体概念后,我们就可以着手开始编写真的业务逻辑了.下篇文章,我们将直接展示几个案例的playbook编制.欢迎MARK.

相关推荐

服务器数据恢复—Raid5数据灾难不用愁,Raid5数据恢复原理了解下

Raid5数据恢复算法原理:分布式奇偶校验的独立磁盘结构(被称之为raid5)的数据恢复有一个“奇偶校验”的概念。可以简单的理解为二进制运算中的“异或运算”,通常使用的标识是xor。运算规则:若二者值...

服务器数据恢复—多次异常断电导致服务器raid不可用的数据恢复

服务器数据恢复环境&故障:由于机房多次断电导致一台服务器中raid阵列信息丢失。该阵列中存放的是文档,上层安装的是Windowsserver操作系统,没有配置ups。因为服务器异常断电重启后,rai...

服务器数据恢复-V7000存储更换磁盘数据同步失败的数据恢复案例

服务器数据恢复环境:P740+AIX+Sybase+V7000存储,存储阵列柜上共12块SAS机械硬盘(其中一块为热备盘)。服务器故障:存储阵列柜中有磁盘出现故障,工作人员发现后更换磁盘,新更换的磁盘...

「服务器数据恢复」重装系统导致XFS文件系统分区丢失的数据恢复

服务器数据恢复环境:DellPowerVault系列磁盘柜;用RAID卡创建的一组RAID5;分配一个LUN。服务器故障:在Linux系统层面对LUN进行分区,划分sdc1和sdc2两个分区。将sd...

服务器数据恢复-ESXi虚拟机被误删的数据恢复案例

服务器数据恢复环境:一台服务器安装的ESXi虚拟化系统,该虚拟化系统连接了多个LUN,其中一个LUN上运行了数台虚拟机,虚拟机安装WindowsServer操作系统。服务器故障&分析:管理员因误操作...

「服务器数据恢复」Raid5阵列两块硬盘亮黄灯掉线的数据恢复案例

服务器数据恢复环境:HPStorageWorks某型号存储;虚拟化平台为vmwareexsi;10块磁盘组成raid5(有1块热备盘)。服务器故障:raid5阵列中两块硬盘指示灯变黄掉线,无法读取...

服务器数据恢复—基于oracle数据库的SAP数据恢复案例

服务器存储数据恢复环境:某品牌服务器存储中有一组由6块SAS硬盘组建的RAID5阵列,其中有1块硬盘作为热备盘使用。上层划分若干lun,存放Oracle数据库数据。服务器存储故障&分析:该RAID5阵...

「服务器虚拟化数据恢复」Xen Server环境下数据库数据恢复案例

服务器虚拟化数据恢复环境:Dell某型号服务器;数块STAT硬盘通过raid卡组建的RAID10;XenServer服务器虚拟化系统;故障虚拟机操作系统:WindowsServer,部署Web服务...

服务器数据恢复—RAID故障导致oracle无法启动的数据恢复案例

服务器数据恢复环境:某品牌服务器中有一组由4块SAS磁盘做的RAID5磁盘阵列。该服务器操作系统为windowsserver,运行了一个单节点Oracle,数据存储为文件系统,无归档。该oracle...

服务器数据恢复—服务器磁盘阵列常见故障表现&解决方案

RAID(磁盘阵列)是一种将多块物理硬盘整合成一个虚拟存储的技术,raid模块相当于一个存储管理的中间层,上层接收并执行操作系统及文件系统的数据读写指令,下层管理数据在各个物理硬盘上的存储及读写。相对...

「服务器数据恢复」IBM某型号服务器RAID5磁盘阵列数据恢复案例

服务器数据恢复环境:IBM某型号服务器;5块SAS硬盘组成RAID5磁盘阵列;存储划分为1个LUN和3个分区:第一个分区存放windowsserver系统,第二个分区存放SQLServer数据库,...

服务器数据恢复—Zfs文件系统下误删除文件如何恢复数据?

服务器故障:一台zfs文件系统服务器,管理员误操作删除服务器上的数据。服务器数据恢复过程:1、将故障服务器所有磁盘编号后取出,硬件工程师检测所有硬盘后没有发现有磁盘存在硬件故障。以只读方式将全部磁盘做...

服务器数据恢复—Linux+raid5服务器数据恢复案例

服务器数据恢复环境:某品牌linux操作系统服务器,服务器中有4块SAS接口硬盘组建一组raid5阵列。服务器中存放的数据有数据库、办公文档、代码文件等。服务器故障&检测:服务器在运行过程中突然瘫痪,...

服务器数据恢复—Sql Server数据库数据恢复案例

服务器数据恢复环境:一台安装windowsserver操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。在windows服务器内装有SqlServer数据库。存储空间LU...

服务器数据恢复—阿里云ECS网站服务器数据恢复案例

云服务器数据恢复环境:阿里云ECS网站服务器,linux操作系统+mysql数据库。云服务器故障:在执行数据库版本更新测试时,在生产库误执行了本来应该在测试库执行的sql脚本,导致生产库部分表被tru...

取消回复欢迎 发表评论: