Ansible自动化部署工具-组件及语法介绍

大家好,我是蓝胖子,我认为自动化运维要做的事情就是把运维过程中的某些步骤流程化,代码化,这样在以后执行类似的操作的时候就可以解放双手了,让程序自动完成。避免出错,Ansible就是这方面非常好用的工具。它能将我们的安装软件,部署等过程进行代码编排,程序化我们的部署步骤。今天,我们就来看看它的工作模式以及编排的语法规则。

架构介绍

Ansible 与主机之间沟通的模式是通过ssh协议,执行相关的命令。这其中涉及到Ansible 的组成架构的问题,学习一门技术或工具首先得对它的架构有所了解。 我们来看看Ansible的组成架构是什么样的。

组成架构

inventory主机清单

inventory清单定义了 Ansible 要管理的主机,当执行Ansible 任务时,需要指定主机清单,默认的主机清单配置是在/etc/ansible/hosts 里,执行命令的时候也可以通过-i 参数指定主机清单的位置。

主机清单的配置文件是INI格式的文件,如下所示, 我配置了一个叫test的机器组,它又两个机器,分别是159.138.99.123,159.138.99.121,同时可以通过[组名:vars]的形式在下面定义特点组名的变量,下面👇🏻 示例的配置文件 我就定义了两个变量ansible_ssh_private_key_file代表连接服务器时使用的密钥的位置,ansible_ssh_user代表连接服务器时的用户名。

[test]  
159.138.99.123
159.138.99.121
[test:vars]  
ansible_ssh_private_key_file=/Users/xiongchuanhong/.ssh/id_rsa  
ansible_ssh_user=webserver

inventory 中的常用变量如下:

ansible_ssh_port: //定义连接主机的ssh端口 
ansible_ssh_user: //定义连接到该主机的ssh用户 
ansible_ssh_pass: //定义连接到该主机的ssh密码 
ansible_sudo_pass: //定义sudo的密码 
ansible_connection: //定义ansibles的连接类型,可以是local、ssh或paramiko ansible_ssh_private_key_file: //定义私钥文件路径

平时使用inventory组件时,我们可以在一个文件夹下创建不同的机器组,如下,我创建了一个hosts文件夹,并且新建了两个文件分别存放 生产环境的机器组和测试环境的机器组。文件的格式是INI格式。

(base) ➜  hosts tree .
.
├── prod
└── test

接着我们可以使用如下命令测试定义的机器组是否有效,-i 后接文件名或文件夹名,然后是机器组的名称,这里是test。如果inventory配置正确,那么会出现对应机器组的ip。

(base) ➜  hosts ansible -i test   test  --list-hostshosts (1):159.138.99.123159.138.99.121
Ansible 核心组件

我将Ad-hoc组件和playbook,role这些组件都称为核心组件,因为它们对部署任务的编排有非常紧密的联系。在后面我会介绍它们比较详细的语法,这里就简单的提及一下它们之间的区别。

Ad-hoc 命令是直接使用命令行来执行Ansible的任务,命令行也能使用Ansible的模块,如下Ad-hoc命令 使用copy模块复制文件,-m 后面跟的是模块名称,-a后面跟的是模块需要执行的命令。

ansible <机器组名称> -m copy -a "src=/path/to/local/file dest=/path/to/remote/file" 

📢📢 注意下,这里说的组件和模块的区别,在Ansible中封装了很多模块来方便我们完成对应的功能,可以用ansible-doc -l 去查看一共有哪些模块,关于模块的用法可以查看文档https://docs.ansible.com/ansible/latest/collections/ansible/builtin/index.html#plugins-in-ansible-builtin 文档记录了ansible内置的模块已经用法。

playbook 适用于完成一些复杂的配置部署任务,虽然Ad-hoc能完成部分配置任务,但毕竟是命令行,playbook可以将配置任务文档化。如下通过在一个yaml文件里定义任务的执行步骤,然后用ansible-playbook 命令便可以执行site.yml 里配置的任务了。-i参数指定了inventory主机清单的位置。关于playbook的yml文件的语法会在接下来语法介绍时详细阐述。

ansible-playbook site.yml -i hosts/prolinkbox

role 组件针对于playbook编排任务的方式就更进一步,如果有很多不同业务需要编排部署任务,就会产生很多playbook的yml文件,不好维护。所以通过role组件定义了一些固定的目录规范存放任务相关的文件,涉及到任务编排的yml语法和playbook类似,基本没有变动。

各种插件

除了上述提到的组件外,Ansible还有很多插件来让Ansible额外完成某些功能,比如日志,邮件功能,另外,Ansible默认的连接主机的方式是ssh,可以通过连接插件来来支持其他的连接方式。

至此,大致介绍了完了Ansible的组成架构,接着我们详细看下Ansible编排任务的语法是怎么样的,了解了语法后,便可以自己编写Ansible的任务了。

语法介绍

Ad-hoc临时命令模式

虽然我是极力建议使用Ansible编写对线上服务的部署任务时,尽量采用playbook方式,这样能文档化任务。但是一些简单的命令又想批量的在主机上运行,还是可以用到Ad-hoc方式执行。

我们简单的看看其使用规则,-m 参数 指定使用的模块,-a 参数指定模块使用到的命令。举几个简单的例子,

使用了shell模块,输出test机器组中每个linux服务器的主机名

(base) ➜  boxdev ansible  -i hosts test -m shell -a 'hostname'  
159.138.99.123 | CHANGED | rc=0 >>
hw-sg1-test-0001

使用了copy模块将本地的ReadMe.md 文件复制到了远程

(base) ➜  boxdev ansible  -i hosts test -m copy  -a "dest=./ReadMe.md mode=600  src=./ReadMe.md" 159.138.99.123 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"},"changed": true,"checksum": "73072172dcf3a9e8fd75b72a96d859240c65a26f","dest": "./ReadMe.md","gid": 1001,"group": "nemo","mode": "0600","owner": "webserver","path": "./ReadMe.md","size": 119,"state": "file","uid": 1002
}

Ad-hoc 的使用十分简单,关键都是要掌握Ansible中有哪些模块,各个模块能有哪些参数,具体参考文档 https://docs.ansible.com/ansible/latest/collections/ansible/builtin/index.html#plugins-in-ansible-builtin

playbook编排模式

接下来,来看下playbook使用yml编排任务时的语法规则。如下是一个yml的示例文件,

---
- hosts: alltasks:- name: Install Nginx Packageyum: name=nginx state=present- name: Copy Nginx.conftemplate: src=./nginx.conf.j2 dest=/etc/nginx/nginx.conf
owner=root group=root mode=0644 validate=' nginx -t -c %s'notify:- ReStart Nginx Servicehandlers:- name: ReStart Nginx Serviceservice: name=nginx state=restarted

上面这个文件足以介绍playbook的基础语法了首先hosts代表使用到的机器组,all代表主机清单上全部的机器组。

tasks下面定义的是Ansible需要执行的任务,name代表人物的名称,接着就是Ansible的一些模块,像上面例子中就用到了yum模块,template模块。模块的用法以及需要定义哪些参数和使用Ad-hoc命令时一致。

在任务后面还可以跟notify 配置,它代表在该任务完成后可以执行的额外操作,操作定义在handlers里,如上面例子那样,在Copy Nginx.conf任务完成后,执行了ReStart Nginx Service的handler,这个handler被定义在下面handlers的配置里,也是引用Ansible的模块的方式,使用了service模块启动nginx服务。

总结

你可以发现,其实用上Ansible并不难,关键就是熟练的掌握各种模块的用法,无她,唯手熟尔。关于playbook的语法还涉及到参数定义,role模式的写法,这些详细的语法会放到后面的章节在继续讲解,这一节先简单的知道Ansible是个什么东西,能看懂很简单的playbook配置文件即可。

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

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

相关文章

【性能测试】Linux下Docker安装与docker-compose管理容器(超细整理)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、Linux下Docker…

Python123:使用函数输出指定范围内的Fibonacci数、使用函数验证哥德巴赫猜想(C语言)

文章目录 1、使用函数输出指定范围内的Fibonacci数2、使用函数验证哥德巴赫猜想 1、使用函数输出指定范围内的Fibonacci数 题目&#xff1a; 本题要求实现一个计算Fibonacci数的简单函数&#xff0c;并利用其实现另一个函数&#xff0c;输出两正整数m和n&#xff08;0<m≤n…

SLAM_语义SLAM相关论文

目录 1. 综述 2. 相关文章 Probabilistic Data Association for Semantic SLAM VSO:Visual Semantic Odometry 语义信息分割运动物体

RuoYi-Vue 在Swagger和Postman中 上传文件测试方案

RequestPart是Spring框架中用于处理multipart/form-data请求中单个部分的注解。在Spring MVC中&#xff0c;当处理文件上传或其他类型的多部分请求时&#xff0c;可以使用RequestPart注解将请求的特定部分绑定到方法参数上。 使用RequestPart注解时&#xff0c;需要指定要绑定…

iOS使用NSURLSession实现后台上传下载

NSURLSession后台上传的基本逻辑是&#xff1a;首先创建一个后台模式的NSURLSessionConfiguration&#xff0c;然后通过这个configuration创建一个NSURLSession&#xff0c;接着是创建相关的NSURLSessionTask&#xff0c;最后就是处理相关的代理事件。 1、创建NSURLSession -…

asp.net水资源检测系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net 水资源检测系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言开 发 ASP.NET水资源检测系统1 (1) 应用技…

易点易动固定资产管理系统:定制流程与用量控制的高效库存管理利器

对于企业来说&#xff0c;有效的库存管理是保证供应链运作顺畅、降低成本和提高客户满意度的关键要素。易点易动固定资产管理系统凭借其自定义库存管理流程和库存用量控制功能&#xff0c;成为了提升库存管理效率的利器。本文将详细介绍易点易动固定资产管理系统的自定义流程和…

基于SSM框架的共享单车管理系统小程序系统的设计和实现

基于SSM框架的共享单车管理系统小程序系统的设计和实现 源码传送入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码传送入口 前言 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;…

腾讯云16核服务器配置有哪些?CPU型号处理器主频性能

腾讯云16核服务器配置大全&#xff0c;CVM云服务器可选择标准型S6、标准型SA3、计算型C6或标准型S5等&#xff0c;目前标准型S5云服务器有优惠活动&#xff0c;性价比高&#xff0c;计算型C6云服务器16核性能更高&#xff0c;轻量16核32G28M带宽优惠价3468元15个月&#xff0c;…

acwing算法基础之搜索与图论--BFS

目录 1 基础知识2 模板3 工程化 1 基础知识 BFS可以用来求取最短路&#xff0c;前提条件是所有边的权重一样。 2 模板 题目1&#xff1a;走迷宫&#xff0c;从左上角走到右下角&#xff0c;求最短路。 #include <iostream> #include <queue> #include <cstr…

《嵌入式虚拟化技术与应用》:深入浅出阐述嵌入式虚拟机原理,实现“小而能”嵌入式虚拟机!

随着物联网设备的爆炸式增长和万物互联应用的快速发展&#xff0c;虚拟化技术在嵌入式系统上受到了业界越来越多的关注、重视和实际应用。嵌入式系统与虚拟化技术这个跨界创新组合应运而生&#xff0c;其典型的应用场景包括软件定义汽车驾驶舱、工业领域的工作负载整合等。 虚…

PHP网站源码 知识付费分站代理自助下单系统 自带多款模板

源码测评&#xff1a;功能很齐全&#xff0c;有可以对接的总站&#xff0c;应该是对接好就可以推广赚钱了&#xff0c;但是这种感觉能赚钱的就那么几个人&#xff0c;见仁见智吧&#xff01; 截图演示&#xff1a; 转载自 https://www.qnziyw.cn/cmsmb/qtcms/3952.html

Go进阶之rpc和grpc

文章目录 Go环境安装1&#xff09;windows2&#xff09;linux go语言编码规范1.1 包名&#xff1a;package1.2 ⽂件名1.3 结构体命名1.4 接⼝命名1.5 变量命名1.6 常量命名2.1 包注释2.2 结构&#xff08;接⼝&#xff09;注释2.3 函数&#xff08;⽅法&#xff09;注释2.4 代码…

Javascript知识点详解:正则表达式

目录 RegExp 对象 概述 实例属性 实例方法 RegExp.prototype.test() RegExp.prototype.exec() 字符串的实例方法 String.prototype.match() String.prototype.search() String.prototype.replace() String.prototype.split() 匹配规则 字面量字符和元字符 转义符…

python使用pysqlcipher3对sqlite数据库进行加密

python对很多项目都需要对sqlite数据库的数据进行加密&#xff0c;最流行的加密方式是使用pysqlcipher3&#xff0c;当前使用的python版本为3.7&#xff0c;本博文是直接使用pysqlcipher3在项目上的应用&#xff0c;使用的是已编译好的pysqlcipher3包&#xff0c;如果你需要pys…

使用Python调用API接口获取淘宝商品数据

一、引言 随着互联网的发展&#xff0c;电子商务已经成为了我们生活中不可或缺的一部分。淘宝作为中国最大的电子商务平台&#xff0c;其商品种类繁多&#xff0c;价格透明&#xff0c;购物方便&#xff0c;深受消费者的喜爱。然而&#xff0c;淘宝的商品数据量庞大&#xff0…

基于TI 与ADIDSP音频项目实战

基于空时域的声反馈抑制系统 项目描述软件环境&#xff1a;MATLAB、CCS开发工具&#xff1a;TMS320C6748DSP、TLV320A1C23B音频编解码芯片、功放、扬声器、 麦克风项目简述&#xff1a; 本项目研制一种具有声反馈抑制功能的麦克风阵列产品&#xff0c;应用于教室及中小型会议…

Java定时任务实现

Java定时任务实现 Java 定时任务 JAVA实现定时任务的几种方式 Java实现定时任务的方法总结

爱剪辑如何将视频旋转90度,详细操作流程

爱剪辑是一款电脑端常用的视频剪辑类软件&#xff0c;基本上囊括了视频剪辑所需的所有功能&#xff0c;此处主要介绍&#xff0c;爱剪辑是如何对视频进行旋转操作的&#xff0c;水平旋转或者垂直旋转爱剪辑都是可以操作的&#xff0c;整体操作的详细过程将在下方为大家讲解。 …

使用TS进行Vue-Router的Meta类型扩展

文章目录 1、前言2、解决 1、前言 使用Vue-Router时&#xff0c;会将一些字段信息附加到路由的Meta对象里面&#xff0c;比如图标icon&#xff0c;标题&#xff0c;权限等&#xff0c;如下&#xff1a; {path: /billboard/board/:boardId,name: billboardBoard,props: true,c…