运维自动化——Ansible

news2025/1/16 3:31:43

一:ansible命令执行过程

1. 加载自己的配置文件 默认/etc/ansible/ansible.cfg

2. 加载自己对应的模块文件,如command

3. 通过ansible将模块或命令生成对应的临时py文件, 并将该文件传输至远程服务器的对应执行用户                 $HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件

4. 给文件+x执行

5. 执行并返回结果

6. 删除临时py文件,sleep 0退出

执行状态: 绿色:执行成功并且不需要做改变的操作

                  黄色:执行成功并且对目标主机做变更

                  红色:执行失败

二:ansible常用模块:

1.command模块:command:在远程主机执行命令,默认模块,可忽略  -m  选项

 但是,command模块不支持特殊符号,| > *,也不支持变量:

 Shell命令是通过/bin/sh进行执行的,command命令没有shell的环境变量,因此不支持特殊符号或者变量的操作。

2.shell模块:和command模块相似,用shell执行命令

shell模块支持一些特殊符号:重定向符号,变量等的操作

 调用Bash执行命令,类似于:cat /tmp/first.txt | awk -F '|'  '{print $1,$2}'  &> /tmp/example.txt  这些复杂命令,即使使用shell也可能会失败。解决办法:写到脚本中,copy到远程执行,再把需要的结果拉回执行命令的机器。

3.script模块:功能:在远程机器上执行本地脚本

(1)执行本地的shell脚本文件,管控机的shell脚本文件

 (2)判断被控机上的文件是否存在,如果不存在,就执行,如果存在,就跳过:

情况1:被控机上 /root/ 不存在(script.sh)文件,则主控机上会在被控机上执行这个脚本

 

情况2:被控机上 /root/ 存在和主控机/root/一样的(script.sh)文件,则主控机不会在被控机上执行这个脚本

(3)判断被控机上的文件或目录是否存在,如果存在则不执行,如果不存在,则执行:

4.copy模块:copy:从ansible服务器主控端复制文件到远程主机

src:源文件  指定拷贝文件的本地路径(如果有,则拷贝目录内容,比拷贝目录本身)

dest:指定目录路径

mode:设置权限

backup:备份源文件

centent:代替src  指定本机文件内容,生成目标主机文件

(1)dest

 

 (2)如果目标存在,默认覆盖。(此处举例指定先备份)

 (3)指定内容,直接生成目标文件 (dest指定的必须是一个文件)

 

 (4)复制/etc/目录下的文件,不包括/etc/目录本身:

5.fetch模块:从远程主机提取文件至主控端,和copy相反,目前不支持目录!可以先打包,再提取文件。

(1)

 

 注意:会生成每个被管理主机不同编号的目录,不会发生文件名冲突

(2)

 

 6.file模块:file:设置文件属性

path:要管理的文件路径(强制添加)

recurse:递归,文件夹要递归

src:创建硬链接,软链接时,指定源目标,配合"state=link"或者"state=hard"设置软链接,硬链接

state:状态

absent:缺席,删除

(1)创建空文件:

 (2)删除空文件:

 (3)创建文件时,指定文件属主和权限:

(4)创建目录:

 (5)删除目录:

 (6)创建软链接:

 (7)删除软链接:

 (8)递归设置目录及文件属性,必须和 state=directory 结合使用

 7.unarchive模块:unarchive:解包解压缩,有两种方法:

(1)将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes

(2)将远程主机上的某个压缩包解压到指定路径下,设置copy=no

常见参数:

copy:默认为yes,当copy=yes时,拷贝的文件是从ansible主机复制到远程主机上;如果设置为               copy=no,会在远程主机上寻找src源文件

        src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上                  的路径,则需要设置copy=no

        dest:远程主机上的目标路径

        mode:设置解压缩后的文件权限

示例:(1)默认copy为yes,将本机目录文件解压到目录主机对应目录下:

 (2)解压远程主机文件到指定目录下,并设置权限为777(前提是被控机上有这个压缩包)

 

 8.archive模块:archive:打包压缩,将远程主机目录打包

        path:指定路径

        dest:指定目标文件

        format:指定打包格式

        owner:指定所属者

        mode:设置权限

示例:将远程主机的目录打包归档至指定目录下,并设置权限为777:

 

 9.hostname模块:hostname:管理主机名

ansible 192.168.137.160 -m hostname -a "name=new_name"    #更改单个主机名

10.cron模块:cron模块主要用于添加,删除,更新操作系统的crontab任务计划

name:任务计划名称
cron_file:替换客户端该用户的任务计划的文件
minute:分(0-59,*,*/2)
hour:时(0-23,*,*/2)
day:日(1-31,*,*/2)
month:月(1-12,*,*/2)
weekday:周(0-6或1-7, *)


job:任何计划执行的命令
backup:是否备份之前的任务计划
user:新建任务计划的用户
state:指定任务计划present、absent


#特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),
weekly(每周),daily(每天),hourly(每小时)

示例:(1)创建任务

 

 (2)删除任务:

 

 (3)注释任务,不再生效

(3)删除名称为空的计划任务:

 11.Yum模块:yum:管理包

enablerepo:启用某个源

name:要进行操作的软件包的名字,也可以传递一个 url 或者一个本地源的 rpm 包的路径

state定义软件包的状态:

        -present:安装(installed也可以)

        -absent:删除(removed)

        -latest:安装最新的

示例:(1)查看程序列表:

 (2)安装:

[root@Ansible_Master ~]# ansible 192.168.137.160 -m yum -a "anme=httpd state=present"

(3)删除:

[root@Ansible_Master ~]# ansible 192.168.137.160 -m yum -a "anme=httpd state=absent"

12.service模块:功能:实现远程管理服务的生命周期

关键参数:enabled        #开机启动 yes|no

                  name        #服务名称,必选项

                  runlevel        #运行级别

                  state        #状态:started | stopped | restarted | reloaded

示例:(1)停止服务:

ansible srv -m service -a 'name=httpd state=started enabled=yes'#启动服务,并设为开机自启

ansible srv -m service -a 'name=httpd state=reloaded' #重新加载

ansible srv -m service -a 'name=httpd state=restarted' #重启服务

ansible web -m service -a "name=httpd state=started" #启动

ansible web -m service -a "name=keepalived enabled=yes" #设置开机自启动

 13.systemd模块:systemd模块用于控制主机的systemd服务。说白了,就是Linux下的systemd命令。需要远程主机支持systemd。

ansible test -m systemd -a "name=httpd state=started"    #启动

ansible test -m systemd -a "name=httpd state=stopped"    #停止服务

ansible test -m systemd -a "name=httpd state=restarted"    #重启服务

ansible test -m systemd -a "name=httpd state=reloaded"    #重新加载

14.user模块:user:管理用户

关键参数:group        #属组

                groups        #附加组

                home        #设置家目录

                name        #用户名

                remove        #删除用户并删除用户的家目录

                shell        #用户登陆后的shell

                system        #系统用户

                uid        #用户的id        

                state        #创建或删除

                shell        制定用户的shell环境

15.group模块

关键参数:gid        #组id

                system        #系统组

                name        #名称

ansible web -m group -a "name=jason10 system=yes gid=5000" # 创建系统组

ansible web -m group -a "name=jason11" # 创建普通的组

ansible web -m group -a "name=jason11 state=absent" # 删除组

示例:创建普通的组:

 16.mount模块:

path:挂载到本地的目录

src:对端目录

fstype:文件系统类型        nfs  |  ext4  |  ext3

state:        present:只写入开机自动挂载的文件中,不挂载

                mounted:既写入文件,又挂载

                absent:卸载设备,并且清理开机自动挂载文件

                unmounted:只卸载不清理文件

推荐:挂载的时候:mounted

        卸载的时候:absent

#挂载192.168.5.80:/data目录到web_group组中的主机
ansible web_group -m mount -a 'path=/mnt 192.168.5.80:/data fstype=nfs state=mounted'

卸载,会直接删除/data目录,挂载的时候也不需要创建目标的/data目录
#ansible test -m mount -a "src=192.168.5.80:/data path=/data fstype=nfs opts=defaults state=absent"

17.setup模块:setup模块用于收集远程主机的一些基本信息。

filter参数:用于进行条件过滤。如果设置,仅返回匹配过滤条件的信息。

ansible websrvs -m setup
返回的信息非常多,很多情况我们并不需要全部的信息,可以通过过滤获得指定的信息。
获取主机ip
ansible websrvs -m setup -a "filter=ansible_all_ipv4_addresses"


获取对应主机的内存信息
ansible websrvs -m setup -a "filter=ansible_memory_mb"


通过通配符实现模糊匹配,比如以”mb”关键字结尾的信息
ansible ansible-demo3 -m setup -a "filter=*mb"


获取主机名
ansible web01 -m setup -a 'filter=ansible_fqdn'

示例:查看IP

 18.firewalld模块:

ansible all -m firewalld -a 'port=443/tcp permanent=nostate=enabled'
#使用防火墙规则将443/tcp端口打开

ansible all -m firewalld -a 'service=http permanent=nostate=enabled'

19.get_url模块:(相当于Linux中的wget)

用于将文件或软件从http、https或ftp下载到本地节点上或被管理机节点上
ansible 192.168.42.210 -m get_url -a "dest=/opt/ owner=nebula group=nebula mode=600
url=http://archive.apache.org/dist/httpd/httpd-2.4.7.tar.gz"

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

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

相关文章

leetcode 51~60 学习经历

leetcode 51~60 学习经历51. N 皇后52. N 皇后 II53. 最大子数组和54. 螺旋矩阵55. 跳跃游戏56. 合并区间57. 插入区间58. 最后一个单词的长度59. 螺旋矩阵 II60. 排列序列小结51. N 皇后 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子…

【MobileNet】MobileNet V1

MobileNet V11、简介2、Depthwise Separable Convolution1)Depthwise Separable Convolution 的优点2)Depthwise Separable Convolution 网络结构3)pytorch 函数 实现 depth-wise convolution2、Mobile 网络结构pytorch实现 Mobile 网络结构&…

hiveSQL开窗函数详解

hive开窗函数 文章目录hive开窗函数1. 开窗函数概述1.1 窗口函数分类1.2 窗口函数和普通聚合函数的区别2. 窗口函数的基本用法2.1 基本用法2.2 设置窗口的方法2.2.1 window_name2.2.2 partition by2.2.3 order by 子句2.2.4 rows指定窗口大小窗口框架2.3 开窗函数中加 order by…

Linux下使用Makefile实现条件编译

在Linux系统下Makefile和C/C语言都有提供条件选择编译的语法,就是在编译源码的时候,可以选择性地编译指定的代码。这种条件选择编译的使用场合有好多,例如我们开发一个兼容标准版本与定制版本兼容的项目,那么,一些与需…

[数据结构]:07-二叉树(无头结点)(C语言实现)

目录 前言 已完成内容 二叉树实现 01-开发环境 02-文件布局 03-代码 01-主函数 02-头文件 03-QueueFunction.cpp 04-TreeFunction.cpp 结语 前言 此专栏包含408考研数据结构全部内容,除其中使用到C引用外,全为C语言代码。使用C引用主要是为了…

金三银四,助力你的大厂梦,2023年软件测试经典面试真题(3)(共3篇)

前言 金三银四即将到来,相信很多小伙伴要面临面试,一直想着说分享一些软件测试的面试题,这段时间做了一些收集和整理,下面共有三篇经典面试题,大家可以试着做一下,答案附在后面,希望能帮助到大…

【软件测试】从0到1的突破,appium自动化测试你真的会吗?自动化测试思路总结......

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

超店有数分享:tiktok数据分析工具推荐,助你成功出海!

现阶段的跨境电商人都纷纷入局tiktok,这是风口也是发展趋势。Tiktok的下载量已经超过了35亿,每月都有10亿用户活跃,在154国家/地区使用。Tiktok用户每天在平均花1小时左右进行浏览,打开率也很高。如今,tiktok也越来越成…

酷雷曼VR丨十大“高含金量”荣誉,一起见证!

VR全景领域 十大“高含金量”荣誉 高光时刻 一同见证 01、双高新技术企业 同时获得国家高新技术企业、中关村高新技术企业双认证,是对酷雷曼企业研究开发组织管理水平、科技成果转化能力、自主知识产权数量、销售与总资产成长性等多维度实力的综合体现。 双高…

【MinIO】文件断点续传和分块合并

【MinIO】文件断点续传和分块合并 文章目录【MinIO】文件断点续传和分块合并0. 准备工作1. 检查文件是否存在1.1 定义接口1.2 编写实现方法2. 检查分块文件是否存在2.1 定义接口2.2 编写实现方法3. 上传分块文件接口3.1 定义接口3.2 编写实现方法4. 合并分块文件接口4.1 定义接…

如何判断一个客户是大客户?

米茂搜对主要外贸销售客户的识别方法整理如下:1. 确定研究目标。通过对客户数据的收集和分析,找出大客户,对大客户实施个性化管理,并对其服务进行跟踪,以及。不时地改善服务,以保持他们的忠诚度。2. 扩大信…

ChatGPT 引爆全网热议,如果当它是“聊天机器人”,那你可就错了

近日来,智能聊天机器人ChatGPT的出现引发众多网友讨论,那它到底是什么呢? 2022年11月,人工智能公司OpenAI推出了一款聊天机器人:ChatGPT。它能够通过学习和理解人类语言来进行对话,还能与聊天对象进行有逻…

骨传导耳机对骨头有影响吗?骨传导耳机好不好

首先很明确的告诉你,骨传导耳机对骨头是没有影响的,骨传导耳机反倒可以起到保护听力的作用。 骨传导是一种声音传导方式,即将声音转化为不同频率的机械振动,通过人的颅骨、骨迷路、内耳淋巴液传递,螺旋器、听神经、听觉…

【转载】bootstrap自定义样式-bootstrap侧边导航栏的实现

bootstrap自带的响应式导航栏是向下滑动的,但是有时满足不了个性化的需求: 侧滑栏使用定位fixed 使用bootstrap响应式使用工具类 visible-sm visible-xs hidden-xs hidden-sm等对不同屏幕适配 侧滑栏的侧滑效果不使用jquery方法来实现,使用的是css3 tr…

02-27 周一 图解机器学习SVM-人脸识别之PCA降维

02-27 周一 图解机器学习SVM分类时间版本修改人描述2023年2月27日09:48:38V0.1宋全恒新建文档 简介 本文主要是在试图代码分析图解机器学习这本书中5.5人脸识别分类(p60),主要的过程是使用PCA技术和SVM技术进行人脸的分类工作。 准备 数据集…

JavaScript中单例模式这样用

如果希望自己的代码更优雅、可维护性更高以及更简洁,往往离不开设计模式这一解决方案。 在JS设计模式中,最核心的思想:封装变化(将变与不变分离,确保变化的部分灵活,不变的部分稳定)。 单例模式…

Spring Batch 综合案例实战中

目录 需求一 需求二 转视频版 需求一 需求:先动态生成50w条员工数据,存放再employee.csv文件中 步骤1:定义:DataInitController RestController public class DataInitController {Autowiredprivate IEmployeeService emplo…

arduino-sentry2之卡片篇

欧克,今天在学生的强烈要求下 我又重启arduino的sentry2调试篇 目前实验结果,可以检测到10张交通卡片 也就是如图所示十张 具体视频如下: https://live.csdn.net/v/279170 具体代码如下: #include <Arduino.h> #include <

什么是千年虫?计算机如何开始处理日期?都有哪些时间日期格式化?

目录 “千年虫”漏洞&#xff08;Year 2000 Problem&#xff0c;简称“Y2K”&#xff09; 计算机是怎么开始处理日期的么&#xff1f; 举例1&#xff1a;时间格式化举例( 过滤器) 举例2&#xff1a;时间格式化 自定义私有过滤器(日期格式化) 高性能计数器演示 OLE时间对象…

Vue的组件(注册、局部、组件复用、props、emit、生命周期)全解

文章目录前言知识点组件注册局部组件组件复用组件间通信props 类型检测子父组件通信之 emit动态组件生命周期函数前言 Vue 支持模块化和组件化开发&#xff0c;可以将整个页面进行模块化分割&#xff0c;低耦合高内聚&#xff0c;使得代码可以在各个地方使用。 知识点 组件注册…