[自动化运维工具]ansible简单介绍和常用模块
ansible 源操作主机功能 自动化运维(playbook剧本yaml)
| 是基于python开发的一个配置管理和应用部署工具,在自动化运维中,现在还是异军突起 ansible能批量配置,部署,管理上千台主机,类似于xshell的一键输入工具,不需要每次都切换主机进行操作,只要有一台ansible的固定主机,就可以所有节点的操作,他是不需要agent(客户端),只需要一台主机上配置了ansible |
| Ansible是基于模块进行工作,他只是提供了一种运行的架构,真正执行和变更的是ansible的模块来实现的,如copy模块,service模块 |
ansible如何实现通信的
| Ansible默认是通过ssh的密钥队实现通信(可以改,但一般不动) |
Anible的另一个特点,所有模块都是幂等性
| 所谓幂等性,指的是多次操作或者多次执行对系统资源的影响是一致的,举例:如关闭防火墙,只要发现要停止的目标服务已经停止,后续同样的停止操作,不会改变任何结果,也就是什么也不做。 举例:重启防火墙,这不是幂等性,每一次操作都会先停再启动。 举例:http 的get 是幂等性 举例:Post多次执行相同的post可能创建多个相同的资源 |
| Ansible的幂等性决定了你可以放心大胆的使用,重复执行某个人物,不会对结果产生任何影响(绝大多数情况) |
Ansible的四大组件
| 1 | lnventory主机清单(主机组)定义ansible可以远程操控的服务器 |
| 2 | 模块,ansible常用的有13个模块,通过模块可以实现远程的配置和操作 |
| 3 | plugins插件 |
| 4 | playbook剧本(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通即结束

相关文章:
[自动化运维工具]ansible简单介绍和常用模块
ansible 源操作主机功能 自动化运维(playbook剧本yaml) 是基于python开发的一个配置管理和应用部署工具,在自动化运维中,现在还是异军突起 ansible能批量配置,部署,管理上千台主机,类似于xshell…...
记一次渗透测试信息收集-越权
目录 一、信息收集 子域名收集 存活探测 二、越权 越权一 越权二 一、信息收集 子域名收集 使用subfinder进行子域名收集 语法:subfinder.exe -d xx.com -all -o qq1.txt -v //结合自己渗透经验,多渠道收集子域名,汇总去重。 …...
Flink系列之:Table API Connectors之JSON Format
Flink系列之:Table API Connectors之JSON Format 一、JSON Format二、依赖三、创建一张基于 JSON Format 的表四、Format 参数五、数据类型映射关系 一、JSON Format JSON Format 能读写 JSON 格式的数据。当前,JSON schema 是从 table schema 中自动推…...
2018年第七届数学建模国际赛小美赛B题世界杯足球赛的赛制安排解题全过程文档及程序
2018年第七届数学建模国际赛小美赛 B题 世界杯足球赛的赛制安排 原题再现: 有32支球队参加国际足联世界杯决赛阶段的比赛。但从2026年开始,球队的数量将增加到48支。由于时间有限,一支球队不能打太多比赛。因此,国际足联提议改变…...
【为数据之道学习笔记】5-7五类数据主题联接的应用场景
在数字化转型的背景下,华为的数据消费已经不再局限于传统的报表分析,还要支持用户的自助分析、实时分析,通过数据的关联,支持业务的关联影响分析以及对目标对象做特征识别,进行特定业务范围圈定、差异化管理与决策等。…...
得帆信息创始人-张桐,受邀出席 BV百度风投AIGC主题论坛
近日,得帆信息创始人兼CEO张桐,作为百度风投被投代表企业创始人受邀出席“向未来,共成长” BV百度风投AIGC主题论坛。 与包括上海市徐汇区相关部门领导、百度集团相关事业部负责人及代表,以及来自国寿资本、中网投、麦顿投资的投资…...
云原生之深入解析减少Docker镜像大小的优化技巧
一、什么是 Docker? Docker 是一种容器引擎,可以在容器内运行一段代码,Docker 镜像是在任何地方运行应用程序而无需担心应用程序依赖性的方式。要构建镜像,docker 使用一个名为 Dockerfile 的文件,Dockerfile 是一个包…...
记一次java for循环改造多线程的操作
背景 今天在开发质量平台时需要获取某些数据,要请求公司某个工程的OpenAPI接口A。此接口为返回通用数据的接口,且接口本身的RT都在2~3秒之间。使用该接口,需要进行两次循环获取,然后对返回数据进行处理组装࿰…...
Java面试整理-Java复制
Java复制 在Java中,复制对象或数据通常涉及不同的场景和方法。以下是几种常见的复制情况及其相关方法: 基本数据类型的复制:基本数据类型(如int, double, char等)在Java中是通过值传递的。当你将一个基本数据类型的值赋给另一个变量时,实际上是创建了一个新的值。 int a …...
wsl kafka的简单应用
安装并配置单机版kafka所需环境 wsl2 环境可用性较高,如下介绍在该环境中安装单机版本kafka的详细过程。 启动命令行工具启动wsl:wsl --user root --cd ~,(以root用户启动,进入wsl后当前路径为~“用户主目录”&#…...
2023年国赛高教杯数学建模D题圈养湖羊的空间利用率解题全过程文档及程序
2023年国赛高教杯数学建模 D题 圈养湖羊的空间利用率 原题再现 规模化的圈养养殖场通常根据牲畜的性别和生长阶段分群饲养,适应不同种类、不同阶段的牲畜对空间的不同要求,以保障牲畜安全和健康;与此同时,也要尽量减少空间闲置所…...
Flink系列之:Table API Connectors之Raw Format
Flink系列之:Table API Connectors之Raw Format 一、Raw Format二、示例三、Format 参数四、数据类型映射 一、Raw Format Raw format 允许读写原始(基于字节)值作为单个列。注意: 这种格式将 null 值编码成 byte[] 类型的 null。这样在 ups…...
社交网络分析3:社交网络隐私攻击、保护的基本概念和方法 + 去匿名化技术 + 推理攻击技术 + k-匿名 + 基于聚类的隐私保护算法
社交网络分析3:社交网络隐私攻击、保护的基本概念和方法 去匿名化技术 推理攻击技术 k-匿名 基于聚类的隐私保护算法 写在最前面社交网络隐私泄露用户数据暴露的途径复杂行为的隐私风险技术发展带来的隐私挑战经济利益与数据售卖防范措施 社交网络 用户数据隐私…...
2023大湾区汽车创新大会在深圳坪山开幕
12月15日,2023大湾区汽车创新大会在深圳坪山开幕。 本次大会是由广东省科学技术厅、深圳市发展和改革委员会、深圳市工业和信息化局、中共深圳市新能源和智能网联汽车产业链委员会、坪山区人民政府指导,北京理工大学深圳汽车研究院、广东省大湾区新能源汽…...
Graylog 中日志级别及其对应的数字
在 Graylog 中,日志级别 level 通常使用数字表示,数字越低表示日志级别越高。以下是常见的日志级别及其对应的数字表示: DEBUG(调试):对应数字 7。INFO(信息):对应数字 …...
智能手表上的音频(五):录音
上篇讲了语音通话,本篇讲录音。录音功能就是把录到的音频保存成文件。保存文件的格式支持两种:一是PCM(16K采样)的WAV格式,二是AMR-NB(8k采样)的AMR格式。WAV格式简单:44字节的文件头PCM 数据,示…...
2023.12.17 关于 Redis 的特性和应用场景
目录 引言 Redis 特性 内存中存储数据 可编程性 可扩展性 持久化 支持集群 高可用性 Redis 优势 Redis 用作数据库 Redis 相较于 MySQL 优势 Redis 相较于 MySQL 劣势 Redis 用作缓存 典型场景 Redis 存储 session 信息 Redis 用作消息队列 初心 消息队列的…...
智能优化算法应用:基于社会群体算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于社会群体算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于社会群体算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.社会群体算法4.实验参数设定5.算法结果6.…...
Kotlin 笔记 -- Kotlin 语言特性的理解(二)
都是编译成字节码,为什么 Kotlin 能支持 Java 中没有的特性? kotlin 有哪些 Java 中没有的特性: 类型推断、可变性、可空性自动拆装箱、泛型数组高阶函数、DSL顶层函数、扩展函数、内联函数伴生对象、数据类、密封类、单例类接口代理、inter…...
数据结构【1】:数组专题
一、定义 数组是编程中一种强大的数据结构,它允许您存储和操作相同类型元素的集合。在 Python 中,数组是通过数组模块创建的,该模块提供了一个简单的接口来创建、操作和处理数组。 二、创建数组 在 Python 中,可以使用内置的 a…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...
消息队列系统设计与实践全解析
文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...
2.2.2 ASPICE的需求分析
ASPICE的需求分析是汽车软件开发过程中至关重要的一环,它涉及到对需求进行详细分析、验证和确认,以确保软件产品能够满足客户和用户的需求。在ASPICE中,需求分析的关键步骤包括: 需求细化:将从需求收集阶段获得的高层需…...
react-pdf(pdfjs-dist)如何兼容老浏览器(chrome 49)
之前都是使用react-pdf来渲染pdf文件,这次有个需求是要兼容xp环境,xp上chrome最高支持到49,虽然说iframe或者embed都可以实现预览pdf,但为了后续的定制化需求,还是需要使用js库来渲染。 chrome 49测试环境 能用的测试…...
[QMT量化交易小白入门]-六十二、ETF轮动中简单的评分算法如何获取历史年化收益32.7%
本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。 QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。 文章目录 相关阅读1. 策略概述2. 趋势评分模块3 代码解析4 木头…...
dvwa11——XSS(Reflected)
LOW 分析源码:无过滤 和上一关一样,这一关在输入框内输入,成功回显 <script>alert(relee);</script> MEDIUM 分析源码,是把<script>替换成了空格,但没有禁用大写 改大写即可,注意函数…...
