[自动化运维工具]ansible简单介绍和常用模块

news2024/12/25 22:16:31

 ansible 源操作主机功能 自动化运维(playbook剧本yaml)

是基于python开发的一个配置管理和应用部署工具,在自动化运维中,现在还是异军突起

ansible能批量配置,部署,管理上千台主机,类似于xshell的一键输入工具,不需要每次都切换主机进行操作,只要有一台ansible的固定主机,就可以所有节点的操作,他是不需要agent(客户端),只需要一台主机上配置了ansible

Ansible是基于模块进行工作,他只是提供了一种运行的架构,真正执行和变更的是ansible的模块来实现的,如copy模块,service模块

 ansible如何实现通信的

Ansible默认是通过ssh的密钥队实现通信(可以改,但一般不动)

Anible的另一个特点,所有模块都是幂等性

所谓幂等性,指的是多次操作或者多次执行对系统资源的影响是一致的,举例:如关闭防火墙,只要发现要停止的目标服务已经停止,后续同样的停止操作,不会改变任何结果,也就是什么也不做。

举例:重启防火墙,这不是幂等性,每一次操作都会先停再启动。

举例:http 的get 是幂等性

举例:Post多次执行相同的post可能创建多个相同的资源

Ansible的幂等性决定了你可以放心大胆的使用,重复执行某个人物,不会对结果产生任何影响(绝大多数情况)

Ansible的四大组件

1lnventory主机清单(主机组)定义ansible可以远程操控的服务器
2模块,ansible常用的有13个模块,通过模块可以实现远程的配置和操作
3plugins插件
4playbook剧本(shell脚本)是yaml格式

ansible的优点

部署较为简单,只需要控制主机部署即可,被控制主机需要有ssh和python(2.5以上版本),基本上linux都是自带的

Ansible只能控制linux系统,widows不行

基于模块工作,可以使用任意语言开发模块(二次开发,底层架构)

实验环境

1.管理端:192.168.233.11     ansible

2.被管理端:192.168.233.12/13

安装ansible

[root@docker1 ~]# systemctl stop firewalld.service
[root@docker1 ~]# setenforce 0
[root@docker1 ~]# yum -y install epel-release.noarch
[root@docker1 ~]# yum -y install ansible
[root@docker1 ~]# yum -y install tree
[root@docker1 ~]# cd /etc/ansible/
[root@docker1 ansible]# ls
ansible.cfg  hosts  roles
[root@docker1 ansible]# vim hosts
#20取消注释 [webservers] 
#21添加 192.168.233.12
#34取消注释 [dbservers]
#35添加 192.168.233.13
[root@docker1 ansible]# ssh-keygen -t rsa
#配置秘钥队
[root@docker1 ansible]# sshpass -p '123' ssh-copy-id root@192.168.233.13
[root@docker1 ansible]# ansible 192.168.233.13 -m command -a 'date'
[root@docker1 ansible]# sshpass -p '123' ssh-copy-id root@192.168.233.12
[root@docker1 ansible]# ansible 192.168.233.12 -m command -a 'date'
192.168.233.12 | CHANGED | rc=0 >>
2023年 12月 18日 星期一 17:26:47 CST
#可以指定ip地址主机
[root@docker1 ansible]# ansible webservers -m command -a 'date'
192.168.233.12 | CHANGED | rc=0 >>
2023年 12月 18日 星期一 17:29:45 CST
#也可以指定整个主机组
[root@docker1 ansible]# ansible all -m command -a 'date'
192.168.233.12 | CHANGED | rc=0 >>
2023年 12月 18日 星期一 17:29:52 CST
192.168.233.13 | CHANGED | rc=0 >>
2023年 12月 18日 星期一 17:29:52 CST
#指定所有主机

command模块

在远程执行linux的命令,不支持管道符,重定向输出。
[root@docker1 ansible]# ansible 192.168.233.12 -a 'ls /opt'
#不加-m也就是不声明使用的模块,默认就是command模块

常用参数
chdir:在远程主机上运行命令,提前进入目录
creates:判断指定文件是否存在,如果存在,不执行后面的操作
removes:判断指定文件是否存在,如果存在,执行后面的操作

[root@docker1 ansible]# ansible all -m command -a 'chdir=/home ls'
192.168.233.12 | CHANGED | rc=0 >>
chen

[root@docker1 ansible]# ansible all -m command -a 'creates=/opt/123 ls /opt'
192.168.233.12 | SUCCESS | rc=0 >>
skipped, since /opt/123 exists
192.168.233.13 | CHANGED | rc=0 >>
containerd
rh
[root@docker1 ansible]# ansible all -m command -a 'removes=/opt/123 ls /opt'
192.168.233.13 | SUCCESS | rc=0 >>
skipped, since /opt/123 does not exist
192.168.233.12 | CHANGED | rc=0 >>
123
containerd
rh


shell模块

shell模块,在远程主机执行命令,相当于调用远程主机的shell进程,支持管道符和重定向

在Ansible当中,多个引号之间要做隔离,

[root@docker1 ansible]# ansible 192.168.233.12 -m shell -a 'useradd test'
192.168.233.12 | CHANGED | rc=0 >>
[root@docker1 ansible]# ansible 192.168.233.12 -m shell -a 'cat /etc/passwd'
[root@docker1 ansible]# ansible 192.168.233.12 -m shell -a 'echo 123456 | passswd --stdin test'

[root@docker1 ansible]# ansible 192.168.233.12 -m shell -a 'echo $(ifconfig ens33 | awk "NR==2{print $2}")'
192.168.233.12 | CHANGED | rc=0 >>
inet 192.168.233.12 netmask 255.255.255.0 broadcast 192.168.233.255
#取出ifconfig ens33中的IP地址
[root@docker1 ansible]# ansible 192.168.233.12 -m shell -a "echo $(ifconfig ens33 | awk 'NR==2{print $2}')"
192.168.233.12 | CHANGED | rc=0 >>
192.168.233.11
#单引号和双引号都可以

[root@docker1 ansible]# ansible 192.168.233.12 -m shell -a 'touch /opt/123 && echo 456 > 123 && ls /opt && cat /opt/123'
#表示逻辑且,前一个命令成功才会执行后一个命令

[root@docker1 ansible]# ansible 192.168.233.12 -m shell -a 'touch /opt/456 ; echo "666" > /opt/456 ; cat /opt/456'
#表示逻辑或,前面的成功与否,后面的命令都会执行,分号也可以实现一样的操作

练习
1.指定主机上创建一个脚本,在脚本中写入一个内容 #!/bin/bash ifconfig,然后运行
[root@docker1 ansible]# ansible 192.168.233.12 -m shell -a 'echo -e "#!/bin/bash\nifconfig" > /opt/ip.sh && sh /opt/ip.sh'
#最好加上双引号

2.写一个运算脚本
[root@docker1 ansible]# ansible 192.168.233.12 -m shell -a 'echo -e "#!/bin/bash\na=$((2+3))\necho \$a" > /opt/t1.sh && sh /opt/t1.sh'
192.168.233.12 | CHANGED | rc=0 >>
5

cron模块

远程主机定时任务

有两种状态

1.present:表示添加(默认就是添加,可以省略)

2.absent:表示移除,#absent在整个语法中都表示移除的意思(删除)

分 时 日 月 周
分=minute ,时=hour , 日=day , 月=month , 周=weekday
job:表示任务执行的命令
name:任务计划的名称,可以不加,最好写上

练习
1.每5分钟查看一下opt
[root@docker1 ansible]# ansible 192.168.233.12 -m cron -a 'minute="*/5" job="ls /opt" name="t3"'
[root@docker1 ansible]# ansible 192.168.233.12 -a 'crontab -l'

2.9月1号早上8点30分,执行ls /opt 任务名:t22
[root@docker1 ansible]# ansible 192.168.233.12 -m cron -a 'minute=30 hour="8" day=1 month=9 job="ls /opt" name=t22'

3.周三下午14点30分执行,ls /opt 不需要任务名
[root@docker1 ansible]# ansible 192.168.233.12 -m cron -a 'minute=30 hour=14 weekday=3 job="ls /opt"'
[root@docker1 ansible]# ansible 192.168.233.12 -a 'crontab -l'   

删除定时任务
[root@docker1 ansible]# ansible 192.168.233.12 -m cron -a 'name=test2 state=absent'
[root@docker1 ansible]# ansible 192.168.233.12 -a 'crontab -l'    
[root@docker1 ansible]# ansible 192.168.233.12 -m cron -a 'name=None state=absent'
#如果有多个名称为None的定时任务将会被一并删除,不推荐(最好是一个不重复的名称)

user模块

常用的参数用户管理模块
name

指定用户名,必须要有

State present absent

创建用户可以不加present,删除一定要加absent

System=yes 或者on

标记用户是否是一个程序用户

Uid

用户的唯一标识

Group

用户的所在组

Create_home=yes or no

换用户的家目录 ,不需要替换用户的家目录可以不写

Password

给用户创建密码

Comment

可以添加用户的注释信息(可有可无)

Remove=yes or no

当删除用户时,加上remove=yes,删除用户的家目录相当于userdel -r 如果不删除家目录,可以不写。

[root@docker1 ansible]# ansible 192.168.233.12 -m user -a 'name=g11 system=yes'
[root@docker1 ansible]# ansible 192.168.233.12 -a 'cat /etc/passwd'
g11:x:990:984::/home/g11:/bin/bash
在创建用户时,虽然声明了是一个程序用户,但是默认的登录shell如果没有额外声明,还是默认的/bin/bash,UID会按照程序用户来指定

[root@docker1 ansible]# ansible 192.168.233.12 -m user -a 'name=g11 shell=/sbin/nologin'
[root@docker1 ansible]# ansible 192.168.233.12 -a 'cat /etc/passwd'
g11:x:990:984::/home/g11:/sbin/nologin
#指定为程序用户,/sbin/nologin 不能登陆

使用ansible的user模块创建用户,如果创建普通用户可以不加system=no,指定shell类型也可以不加,默认就是/bin/bash,如果创建的程序用户,一定要声明system=yes,声明shell的类型,shell=/sbin/onlogin,也可以指定uid的方式,给用户分配一个uid

[root@docker1 ~]# ansible 192.168.233.12 -m user -a 'name=g2 home=/home/g2 create_home=yes'
#更改家目录

[root@docker1 ~]# ansible 192.168.233.12 -m user -a 'name=g11 remove=yes state=absent'
#删除用户以及用户的家目录

group模块

用户的管理模块,name必须要有,gid设置组的id,ansible不使用交互命令
[root@docker1 ~]# ansible 192.168.233.12 -m group -a 'name=gq1 gid=306 system=yes'
[root@docker2 ~]# cat /etc/group
gq1:x:306:
[root@docker1 ~]# ansible 192.168.233.12 -m user -a 'name=guoqi uid=1011 group=gq1'
[root@docker1 ~]# ansible 192.168.233.12 -a 'cat /etc/passwd'
#指定他的用户组
[root@docker1 ~]# ansible 192.168.233.12 -m group -a 'name=gq1 state=absent'
#删除组,但必须要先删除组里的用户

ping模块

[root@docker1 ~]# ansible all -m ping
#ping通即结束


 

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

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

相关文章

安全生产隐患排查治理信息化系统软件

安全隐患排查系统实现对重大危险源企业、安全隐患信息的登记、整改、复查、分类和统计。系统涵盖了安全隐患排查整治工作的各项基本内容,实现以安全隐患排查整治业务流为主线,处理流程简洁清晰、快速灵活;以排查整治流程为干线,快…

5行Python实现验证码识别,太稳了

很久之前,分享过一次Python代码实现验证码识别的办法。 当时采用的是pillowpytesseract,优点是免费,较为易用。但其识别精度一般,若想要更高要求的验证码识别,初学者就只能去选择使用百度API接口了。 但其实百度API接…

Linux-----21、挂载

# 挂载命令 将硬件资源,或文件资源💿,和📂空目录🔗连接起来的过程 # mount linux 所有存储设备都必须挂载使用,包括硬盘 ​ 命令名称:mount ​ 命令所在路径:/bin/mount ​ 执行…

无懈可击的防泄密之旅:迅软DSE在民营银行的成功实践

客户简要介绍 某股份有限公司主体是中部地区的民营银行,由其母公司联合9家知名民营企业共同发起设立。正式开业于2016年,紧紧围绕目标产业生态圈和消费金融,着力打造产业银行、便捷银行、数字银行、财富管理银行为一体的BEST银行&#xff0c…

学习Java第74天,Ajax简介

什么是ajax AJAX Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。 AJAX 不是新的编程语言,而是一种使用现有标准的新方法。 AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页…

基于Java SSM框架实现二手车交易网站系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现二手车交易网站系统演示 摘要 二手车交易网站采用B/S模式,促进了二手车交易网站的安全、质量、快捷的发展。传统的管理模式还处于手工处理阶段,管理效率极低,随着用户的不断增多,传统基于手工管理模式已经无…

Redis7--基础篇9(SpringBoot集成Redis)

1. jedis、lettuce、Redistemplate的关系 第一代为jedis,之后推出了lettuce,然后springboot继承了Redistemplate,现推荐使用Redistemplate。 总的来说,jedis、lettuce、Redistemplate都是java操作Redis数据库的驱动。 2. 本地Ja…

MapReduce和Yarn部署+入门

看的黑马视频记的笔记 目录 1.入门知识点 分布式计算: 概念: 两种模式: MapReduce(分布式计算,分散汇总模式) 概念 执行原理 注: Yarn(分布式资源调度) 概述 Y…

探讨小鹏汽车CAN通讯协议分析破解过程数据研究技术应用

当前新能源电动汽车设计日益复杂,为提高舒适性、功能性、提升性能和确保更高的安全性,很多汽车的设计中融入了更复杂的功能。包括了雷达、激光雷达、自适应巡航、L2以上自动驾驶系统,高级驾驶辅助系统、盲区监测等等。安装在汽车上的传感器和…

代码魔法:递归嵌套的《迷宫之旅》算法解析

前言 在代码的舞台上,递归算法的奇迹就如同魔法一般令人叹为观止。本文以经典的迷宫问题为基础,通过递归嵌套的方式,带你踏上一场神奇的迷宫之旅。 迷宫规则 迷宫由一个二维数组表示,其中0表示可通行的路径,1表示墙…

泛型(泛型类、接口及方法)——学习推荐版,通俗易懂讲解

泛型定义及分类 1.泛型类 类型变量其实就是一个标识符&#xff0c;一般用大写字母表示&#xff0c;如K&#xff0c;T&#xff0c;E&#xff0c;V&#xff0c;当然也可以多个字母或数字的组合&#xff0c;只要满足标识符的定义规则就都可以。 形式1 若写成MyArrayList<> …

UE5 C++(六)— 枚举UENUM、结构体USTRUCT和补充属性说明符

文章目录 枚举&#xff08;ENUM&#xff09;第一种方式第二种方式 结构体&#xff08;USTRUCT&#xff09;补充属性说明符&#xff08;ExposeOnSoawn&#xff09;结构体创建数据表格 枚举&#xff08;ENUM&#xff09; 第一种方式 定义枚举 UENUM(BlueprintType) namespace …

Vue中英文翻译小结

背景&#xff1a;时局艰难&#xff0c;后端开发被强制写了vue&#xff0c;这不有个需求是中英文翻译&#xff0c;特此记录下&#xff0c;该怎么个翻译法子。 先引入全局的路由国际化文件&#xff0c;zh.js 和 en.js 1.关于插值表达Button里面 {{ $t(reinsop.common.back) }} …

制造业CRM选型注意事项:有这些功能的系统更好用

当前&#xff0c;推动制造业数字化转型已成时代发展趋势。为了适应这一趋势&#xff0c;制造业使用CRM管理系统是非常重要的。那么&#xff0c;制造业CRM应该怎么选&#xff1f; 1、全方位客户管理 订单价值大&#xff0c;交货周期长&#xff0c;客户开发难。。。这一直是制造…

MySQL job 定时任务

目录 介绍 优点&#xff1a; 缺点&#xff1a; 使用场景&#xff1a; 案例 创建表 -- 创建定时任务 每一分钟插入一条数据 执行结果 -- 查询定时任务 ENABLED--启用 DISABLED--禁用 -- 查询定时任务 -- 启用定时任务 ​-- 禁用定时任务 ​-- 删除定时任务 …

Unity | 渡鸦避难所-3 | 控制角色移动

1 移动刚体 在物理世界中&#xff0c;控制刚体移动通常有三种方式&#xff0c;每种方式产生的效果也不尽相同 AddForce&#xff1a;添加作用力&#xff0c;用于模拟真实的物理效果 MovePosition&#xff1a;设置位置&#xff0c;用于精确控制游戏对象的位置 velocity&#x…

opencv 入门一(显示一张图片)

头文件添加如下&#xff1a; 库目录添加如下&#xff1a; 依赖的库如下&#xff1a; #include <iostream> #include "opencv2/opencv.hpp" int main(int argc,char ** argv) { cv::Mat img cv::imread(argv[1], -1); if (img.empty()) return -1; …

1998-2022年最大NDVI数据集(1km)

本文的植被指数&#xff08;NDVI&#xff09;数据来源于美国NASA定期发布的MOD13A3植被指数数据集。MOD13A3提供自1998年4月起逐月1km的NDVI数据。原始数据来源详细的介绍见&#xff1a;https://doi.org/10.5067/MODIS/MOD13A3.006   月度NDVI数据为每月1-3旬NDVI数据数值的最…

第二证券:耐心等待指数企稳 关注数据要素等板块

其时或是布局商场的时间窗口。2024年美联储或打开降息周期&#xff0c;欧洲降息预期也在增强&#xff0c;全球流动性有望迎来拐点。中心经济工作提及2024年的职业及工业方向&#xff0c;政策有望落地施行&#xff0c;将会为职业配备带来较多的催化要素&#xff0c;是具备配备价…

小红书可观测 Metrics 架构演进,如何实现数十倍性能提升?

在当前云原生时代&#xff0c;随着微服务架构的广泛应用&#xff0c;云原生可观测性概念被广泛讨论。可观测技术建设&#xff0c;将有助于跟踪、了解和诊断生产环境问题&#xff0c;辅助开发和运维人员快速发现、定位和解决问题&#xff0c;支撑风险追溯、经验沉淀、故障预警&a…