ansible自动化运维(二)ad-hoc模式
目录
Ansible模块(ad-hoc模式)
1.command模块:远程执行命令
2.shell 模块:远程执行命令,支持管道,重定向
3.Raw模块:先登录,再执行,最后退出
4.Script模块:远程执行脚本
5.cron 模块:远程定义任务计划
6.User模块:管理用户的模块
7.Group模块:管理用户组
8.Copy模块:指定本地文件复制到远程主机
9.Fetch模块:从远程主机获取文件
10.File模块:设置文件属性
11.Service/systemd模块:控制服务运行状态
12.yum模块:远程安装软件
13.Mount模块:管理设备下载和caish卸载
14.Unarchive模块:解压缩模块
15.Archive模块:打包压缩
16.Get_url模块:下载文件
17.Replace模块:类似于sed命令
18.Setup模块:获取主机信息
Ansible模块(ad-hoc模式)
Ansible帮助命令
ansible –help #查询更多的参数命令
ansible-doc #帮助命令
ansible-doc -l #列出所以的模块
ansible-doc 模块名 #查看模块的详细信息
ansible-doc 模块名 -s #查看模块的选项使用说明
sible中常见的返回值
返回值 | 返回值含义 |
changed | 几乎所有的Ansible模块都会返回该变量,表示模块是否对远程主机执行了修改操作 |
failed | 如果模块未能执行完成,将返回failed为true |
msg | 模块执行失败的原因,常见的错误如ssh连接失败 |
rc | 与命令行工具相关的模块会返回rc,表示执行Linux命令的状态码 |
stdout | 与rc类似,返回的是标准输出的结果 |
stderr | 与rc类似,返回的是标准错误的结果 |
backup_file | 所有存在backup选项的模块,用来返回备份文件的路径 |
results | 应用在playbook中存在循环的情况,返回多个结果 |
模块的格式:
# 默认为command模块
ansible 主机 / 组名称 -m 模块 -a “具体命令”
ansible 主机 / 组名称 -a “具体命令”
1.command模块:远程执行命令
在远程主机执行命令,不支持管道,重定向等shell的特性。【默认模块】
常用的参数:(command和shell可用)
- chdir:在远程主机上运行命令前提前进入目录
- creates:判断指定文件或目录是否存在,如果存在,不执行后面的操作
- removes:判断指定文件或目录是否存在,如果存在,执行后面的操作
正常用法:
切换到指定目录在执行命令
[root@web01 ~]# ansible web02 -m command -a "chdir=/home ls"
192.168.143.162 | CHANGED | rc=0 >>
456.txt
判断指定文件或目录是否存在,如果存在,该怎么办
执行命令:
不执行命令:
参数可结合使用
与shell的区别,对管道及重定向等shell命令支持与否
2.shell 模块:远程执行命令,支持管道,重定向
输出信息到shell.txt
[root@web01 ~]# ansible web02 -m shell -a "echo "这是shell命令" >shell.txt"
192.168.143.162 | CHANGED | rc=0 >>
验证:
Shell使用removes参数
3.Raw模块:先登录,再执行,最后退出
它是支持一些shell命令的,因为它的本质就是ssh登录后再执行命令
输出信息到raw.sh文件中
[root@web01 ~]# ansible web02 -m raw -a "echo "这是raw模块" >raw.sh
4.Script模块:远程执行脚本
格式:
ansible 本地主机 -m script -a "script_file"
script_file填写你的目标主机脚本路径
再web01,web02主机上编写脚本
执行web02主机上的脚本
可以看出不能执行远程服务器的脚本
执行本地主机web01的脚本
5.cron 模块:远程定义任务计划
其中有两种状态(state):present表示添加(可以省略),absent表示移除。
Cron模块常用的参数:
- minute/hour/day/month/weekday:分/时/日/月/周
- job:任务计划要执行的命令
- name:任务计划的名称
- user:指定计划任务属于哪个用户,默认是root用户
- state
present:创建
absent:删除
(不写执行时间,默认就是每分钟一次;不写name默认为None)
主题为test,输出hello
[root@web01 ~]# ansible web02 -m cron -a "job='/bin/echo hello' name='test' "
查看设置的定时任务
6.User模块:管理用户的模块
user用于管理用户的创建与删除,相当于useradd,userdel,usermod;
常用的参数:
name:用户名,必选参数
state=present|absent:创建账号或者删除账号,present表示创建,absent表示删除
system=yes/no:是否为系统账号
uid:用户uid
group:用户基本组
groups: 用户所属附加组
shell:默认使用的shell
create_home=yse/no: 是否创建家目录
password:用户的密码,建议使用加密后的字符串
remove=yes/no:是否删除用户的家目录
user模块更多参数可使用ansible -doc user查看
用户名要用引号包裹,创建用户test01,不删除家目录
[root@web01 ~]# ansible web02 -m user -a "name="test01" remove=no"
7.Group模块:管理用户组
group模块用于管理用户组的,相当于groupadd,groupdel等。
User模块的参数同样适用于group
设置用户组为mysql,组id为1001,设为系统用户组
[root@web01 ~]# ansible web02 -m group -a "name=mysql gid=1001 system=yes"
8.Copy模块:指定本地文件复制到远程主机
常用参数:
src= 本地文件路径(可根据当前位置决定使用相对路径还是绝对路径)
dest= 目标文件路径(只能使用绝对路径)
content= 指定文件内容,写入到目标文件;如果文件不存在会创建
owner= 指定属主
group= 指定组
mode= 指定权限
copy 模块的更多使用可使用ansible-doc copy查看。
复制本地文件222.sh到远程服务器的root下
[root@web01 ~]# touch 222.sh
[root@web01 ~]# ansible web02 -m copy -a "src=222.sh dest=/root/"
将123写入远程服务器的1.txt文件中
[root@web01 ~]# ansible web02 -m copy -a "content="123" dest=/root/1.txt
9.Fetch模块:从远程主机获取文件
一般用于收集远程主机上的配置文件、日志文件等数据进行备份或检查
常用参数:
src:指定远程主机上要获取的文件的路径。(必需参数)
dest:指定在本地主机保存文件的目标目录,目录不存在会自行创建。(必须参数)
flat:这是一个可选参数。默认值为no。当flat设置为yes时,文件将直接保存到dest指定的文件下;当flat设置为no时,文件将按照远程主机的主机名 / IP地址和文件路径结构保存在dest目录下。
在远程主机web02上创建fetch.sh文件
把远程主机的fetch.sh传到本地fetch目录下
[root@web01 ~]# ansible web02 -m fetch -a "src=fetch.sh dest=fetch"
可以看到没有使用flat参数默认为no,文件会以ip地址+文件的形式保存到dest所给目录下。
设置flat=yes时,dest参数只能为文件,不能为目录,执行的操作是将src文件内容,写入dest文件中。
[root@web01 ~]#rm -rf fetch
[root@web01 ~]# ansible web02 -m fetch -a "src=fetch.sh dest=fetch flat=yes"
10.File模块:设置文件属性
对文件操作,创建文件或目录、删除文件或目录、修改文件权限
常用参数:
path :定义需要操作的文件或目录(必须参数)
src :本地文件路径
recurse :递归授权
owner :指定属主
group :指定属组
mode :指定权限
state :指定对文件的操作(必须参数)
directory :在远端创建目录
touch:在远端创建文件
link :创建软连接
hard :创建硬连接
absent :表示删除文件或目录
参数path指定路径必须存在
11.Service/systemd模块:控制服务运行状态
常用参数:
name 定义要启动服务的名称
state 指定服务状态
started 启动服务(具有幂等性)
stopped 停止服务(具有幂等性)
restarted 重启服务
reloaded 重载服务
enabled 开机自启
关闭防火墙服务
12.yum模块:远程安装软件
name=软件包的名,多个软件包逗号隔开
state=installed/present安装、removed/absent卸载 、lastest 更新、如果已安装,installed列出已安装的包
安装httpd服务
可以看到,installed没有安装服务时,会安装,安装了会列出包
13.Mount模块:管理设备下载和caish卸载
src :指定挂载源
path:指定挂载点 (挂载点不存在会自动创建)
fstype:指定文件系统类型
opts:挂载参数,默认为defaults
dump:是否备份:0表示不进行备份
passno:文件系统检测:0表示不进行文件系统检测
state
present 写入fstab,但实际没有挂载,需要重启服务器
absent 取消临时挂载,并且删除fstab
mounted 写入fstab,并且直接挂载了(常用)
unmounted 临时取消挂载,但是没有删除fstab,重启服务器之后就会恢复(常用)
将镜像挂载到目录media下
14.Unarchive模块:解压缩模块
它支持tar,tar.gz,tar.bz2,.zip等压缩包格式
常用参数:
src 源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置 remote_src=yes
dest: 指定了解压缩后文件的目标目录
mode: 设置解压缩后的文件权限,可以使用数字或符号模式,例如 "644" 或 "u=rw,go=r"。
list_files: 默认值为no,如果设置为yes,解压同时,返回压缩包的文件列表
remote_src:如果设置为 yes,则表示 src 参数是远程主机上的路径。
extra_opts: 允许您指定解压缩命令的额外选项。这对于一些特定格式的存档文件非常有用。
creates: 如果指定了此选项,只有在 creates 中指定的文件或目录不存在时,才会执行解压缩操作。
owner: 设置解压缩后文件的所有者。
group: 设置解压缩后文件的所属组。
这个模块有两种模式:
当参数copy=no(默认为no),为本地解压,本地指定目录接收;远程解压,远程目录接收。即不会出现本地文件传输到远程或远程文件被本地接收的情况
本地解压:
远程主机解压:远程主机src路径必须写绝对路径
当参数copy=yes,具有copy模块的属性,可以把文件传输到远程主机。
将本地解压后的文件传入远程主机的/home下
ansible web02 -m unarchive -a "src=openjdk-8u44-linux-x64.tar.gz dest=/home/ copy=yes"
15.Archive模块:打包压缩
常用的参数:
path: (必须参数)远程主机上需要被打包压缩的源文件/目录
dest: 打包压缩后的包文件路径(包文件的父目录必须存在);如果包文件已存在,则会被覆盖
format: 指定压缩类型,包括: bz2、gz(默认)、tar、xz、zip
remove=yes / no: 是否删除源文件
将本地文件1.txt打包压缩为1.gz
16.Get_url模块:下载文件
常用参数:
url (必需): 指定要下载文件的URL。
dest (必需): 指定文件将保存到本地目标主机上的目标路径。
force (可选): 如果设置为 yes,将强制下载文件,即使文件已经存在。默认为 no。
checksum (可选): 提供要下载文件的校验和,以确保文件完整性。
backup (可选): 如果设置为 yes,将在下载之前备份现有文件。默认为 no。
timeout (可选): 设置下载文件的超时时间(秒)。
url_username (可选): 如果目标URL需要身份验证,可以提供用户名。
url_password (可选): 如果目标URL需要身份验证,可以提供密码。
owner (可选): 设置下载后文件的所有者。
group (可选): 设置下载后文件的所属组。
mode (可选): 设置下载后文件的权限模式。
把文件下载到远程主机web02的root/下
[root@web01 ~]# ansible web02 -m get_url -a "url=https://blog.csdn.net/LCL_18?type=blog dest=/root"
17.Replace模块:类似于sed命令
主要的操作也是基于正则进行匹配和替换
常用参数:
path:(必须参数)指定要修改的文件
regexp:(必须参数),指定一个文本内容,也可以使用正则表达式
replace:替换regexp参数匹配到的字符串
backup=yes /no: 修改源文件前创建一个包含时间戳信息的备份文件
before:如果指定,则仅替换/删除此匹配之前的内容,可以和after参数结合使用
after:如果指定,则仅替换/删除此匹配之后的内容,可以和before参数结合使用
owner:修改文件用户名
group:修改文件组名
mode:修改文件权限
实现关闭selinux
[root@web01 ~]# ansible web01 -m replace -a "path=/etc/selinux/config regexp="SELINUX=e.*" replace="SELINUX=disabled" "
18.Setup模块:获取主机信息
facts 组件是用来收集节点信息的,使用 setup 模块可以获取这些信息
常用参数:
filter:对 setup 模块收集的系统信息进行筛选,只获取你指定的那些特定的信息子集
gather_subset:指定具体要收集哪些类别的系统信息以及排除哪些类别
gather_timeout :设定了收集系统信息的超时时间限制(以秒为单位)
fact_path :指定 Ansible 查找自定义事实(Custom Facts)文件的本地路径。
一些facts组件的内置变量:
ansible_all_ipv4_addresses | ipv4的所有地址 |
ansible_all_ipv6_addresses | ipv6的所有地址 |
ansible_date_time | 获取到控制节点时间 |
ansible_default_ipv4 | 默认的ipv4地址 |
ansible_distribution | 系统 |
ansible_distribution_major_version | 系统的大版本 |
ansible_distribution_version | 系统的版本号 |
ansible_domain | 系统所在的域 |
ansible_env | 系统的环境变量 |
ansible_hostname | 系统的主机名 |
ansible_fqdn | 系统的全名 |
ansible_machine | 系统的架构 |
ansible_memory_mb | 系统的内存信息 |
ansible_os_family | 系统的家族 |
ansible_pkg_mgr | 系统的包管理工具 |
ansible_processor_cores | 系统的cpu的核数(每颗) |
ansible_processor_count | 系统cpu的颗数 |
ansible_processor_vcpus | 系统cpu的总个数=cpu的颗数*CPU的核数 |
ansible_python | 系统上的python |
查看主机web02的ipv4地址
[root@web01 ~]# ansible web02 -m setup -a "filter=ansible_all_ipv4_addresses"
相关文章:

ansible自动化运维(二)ad-hoc模式
目录 Ansible模块(ad-hoc模式) 1.command模块:远程执行命令 2.shell 模块:远程执行命令,支持管道,重定向 3.Raw模块:先登录,再执行,最后退出 4.Script模块ÿ…...

技术栈6:Docker入门 Linux入门指令
目录 1.Linux系统目录结构 2.处理目录的常用命令 3.Docker概述 4.Docker历史 5.Docker基本组成 6.Docker底层原理 7.Docker修改镜像源 8.Docker基本命令 9.Docker创建Nginx实战 10.数据卷 11.本地目录直接挂载* 12.镜像和dockerfile 13.容器互联与自定义网络 14.…...

OPStack Optimism Layer2
概述 OP Stack 是标准化、共享和开源的开发堆栈,为 Optimism 提供支持,由 Optimism Collective 维护。 Optimism Bedrock 是 OP Stack的当前版本。 Bedrock 版本提供了用于启动生产质量的 Optimistic Rollup 区块链的工具。此时,OP Stack不同层的 API 仍然与Stack的 Rollu…...

Leetcode—1498. 满足条件的子序列数目【中等】
2024每日刷题(210) Leetcode—1498. 满足条件的子序列数目 C实现代码 class Solution { public:int numSubseq(vector<int>& nums, int target) {const int MOD 1e9 7;int n nums.size();vector<int> pows(n, 1);for(int i 1; i &…...

生活大爆炸版石头剪刀布(洛谷P1328)
生活大爆炸版石头剪刀布(洛谷P1328) [NOIP2014 提高组] 前言: 由于洛谷发布题解有限制,所以在CSDN上发布洛谷题解。 所有题解均是Java语言, 但是思路是相同的 每篇都是刷题日常,尽量讲清楚算法逻辑。 希望有问题还请大佬们指导! …...

OmniParser一种用于增强视觉语言模型与用户界面交互效果的技术
OmniParser一种用于增强视觉语言模型与用户界面交互效果的技术 OmniParser的核心功能是将用户界面截图转换为结构化元素,这一过程涉及几个关键步骤和技术要素,解决了视觉语言模型(VLMs)在与用户界面交互时所面临的多种挑战。 1.…...

Unity引擎UI滚动列表——滚动复用基础介绍
大家好,我是阿赵。 一、滚动复用的介绍 在制作游戏的过程中,经常会遇到一些需要显示数量比较大的数据的情况。比如说,一个排行榜,需要展示当前服务器前一千个玩家的排名。或者游戏的背包容量特别大,可以有几千个格子。…...

在 Windows 11 WSL (Ubuntu 24.04.1 LTS) | Python 3.12.x 下部署密码学库 charm
1. 在 Windows 11 上部署 Ubuntu (WSL) 由于作者没有高性能的 Ubuntu 服务器或个人电脑,且公司或学校提供的 Ubuntu 服务器虽然提供高性能 GPU 等硬件配置但通常不会提供 root 权限,因而作者通过在搭载了 Windows 11 的个人电脑上启动 Ubuntu (WSL) 来进…...

【六足机器人】01功能开发
包含:WIFI模块、GPS模块、语言模块、调试信息接口。 一、硬件连接 huart4( PA0、 PA1 )与GPS模块连接。 huart3(PB10、PB11)与ESP8266模块连接。 huart2( PA2、 PA3 )与语音模块连接。 hu…...

notepad++安装教程(超详细)
1.下载地址(可以私信博主) https://notepad-plus.en.softonic.com/download 2.解压安装...

创建简单的 PL/pgSQL 存储过程
文章目录 创建简单的 PL/pgSQL 存储过程CREATE OR REPLACE FUNCTIONadd_two_numbers(a integer, b integer)RETURNS integerAS$$ ... $$函数体LANGUAGE plpgsql 创建带有 IN 和 OUT 参数的存储过程创建修改数据的存储过程创建带有异常处理的复杂存储过程 在 PostgreSQL 中&…...

Java项目实战II基于微信小程序的无中介租房系统(开发文档+数据库+源码)
目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着城市化进程的加速,租房市场日益繁荣&a…...

Node.js实现WebSocket教程
Node.js实现WebSocket教程 1. WebSocket简介 WebSocket是一种在单个TCP连接上提供全双工通信的协议,允许服务器和客户端之间进行实时、双向通信。本教程将详细讲解如何在Node.js中实现WebSocket。 2. 技术选型 我们将使用ws库来实现WebSocket服务器,…...

Docker Compose实战一( 轻松部署 Nginx)
通过过前面的文章(Docker Compose基础语法)你已经掌握基本语法和常用指令认识到Docker Compose作为一款强大工具的重要性,它极大地简化了多容器Docker应用程序的部署与管理流程。本文将详细介绍如何使用 Docker Compose 部署 Nginx࿰…...

hive分区分桶、数据倾斜总结
一、hive的基本概念 hive是一个构建在hadoop上的数据仓库工具,可以将结构化的数据文件映射为一张数据库表并提供数据查询功能 二、hive的特点 (1)数据是存储在hdfs上 (2)底层是将sql转换为MapReduce任务进行计算 …...

unity打包到安卓帧率降低
这个问题遇到过很多次了我的做法就是直接设置Application.targetFrameRate60 参考...

【Python3】装饰器 自动更新缓存
自动更新缓存的需求场景 在某些应用中,我们可能需要定期从外部数据源(如 Redis 或者远程接口)拉取数据,并将其缓存在内存中。当有其他代码需要访问这些数据时,可以立刻从内存获取最新数据,而无需每次都进行…...

通过EPEL 仓库,在 CentOS 7 上安装 OpenResty
通过EPEL 仓库,在 CentOS 7 上安装 OpenResty 通过EPEL 仓库,在 CentOS 7 上安装 OpenResty步骤 1: 安装 EPEL 仓库步骤 2: 安装 OpenResty步骤 3: 启动 OpenResty步骤 4: 设置开机自启步骤 5: 验证安装说明 通过EPEL 仓库,在 CentOS 7 上安装…...

[RabbitMQ] RabbitMQ常见应用问题
🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…...

每日速记10道java面试题13-MySQL篇
其他资料 每日速记10道java面试题01-CSDN博客 每日速记10道java面试题02-CSDN博客 每日速记10道java面试题03-CSDN博客 每日速记10道java面试题04-CSDN博客 每日速记10道java面试题05-CSDN博客 每日速记10道java面试题06-CSDN博客 每日速记10道java面试题07-CSDN博客 每…...

乐鑫科技嵌入式面试题及参考答案(3万字长文)
嵌入式开发为什么用 C 语言,而不用 C++ 语言? 在嵌入式开发中,C 语言被广泛使用而 C++ 相对少用有以下一些原因。 首先,C 语言具有更高的效率。嵌入式系统通常资源受限,包括处理器速度、内存容量等。C 语言的代码生成效率高,能够生成紧凑的机器码,占用较少的内存空间和处…...

Leetcode 每日一题 56.合并区间
目录 问题描述 示例 示例 1 示例 2 问题分析 算法设计 步骤 1:排序 步骤 2:合并区间 步骤 3:返回结果 过题图片 代码实现 复杂度分析 题目链接 结语 问题描述 给定一个区间数组 intervals,其中每个区间由两个整数 s…...

【Vue】v-model、ref获取DOM
目录 v-moel v-model的原理 v-model用在组件标签上 方式 defineModel()简写 ref属性 获取原生DOM 获取组件实例 nextTick() v-moel v-model:双向数据绑定指令 数据变了,视图跟着变(数据驱动视图)视图变了,数…...

Python 类的设计(以植物大战僵尸为例)
关于类的设计——以植物大战僵尸为例 一、设计类需满足的三要素1. 类名2. 属性和方法 二、以植物大战僵尸的为例的类的设计1. 尝试分类2. 创建对象调用类的属性和方法*【代码二】*3. 僵尸的继承 三、代码实现 一、设计类需满足的三要素 1. 类名 类名:某类事物的名…...

python中权重剪枝,低秩分解,量化技术 代码
目录 python中权重剪枝,低秩分解,量化技术 代码 权重剪枝 低秩分解 scipy 量化技术 python中权重剪枝,低秩分解,量化技术 代码 权重剪枝 权重剪枝可以通过PyTorch的torch.nn.utils.prune模块实现。以下是一个简单的例子: import torch import torch.nn as nn impor…...

调用matlab用户自定义的function函数时,有多个输出变量只输出第一个变量
很多朋友在使用matlab时,会使用或自己编辑多个function函数,来满足自己对任务处理的要求,但是在调用function函数时,会出现这个问题:调用matlab用户自定义的function函数时,有多个输出变量只输出第一个变量…...

RabbitMQ七种工作模式之简单模式, 工作队列模式, 发布订阅模式, 路由模式, 通配符模式
文章目录 一. Simple(简单模式)公共代码:生产者:消费者: 二. Work Queue(工作队列模式)公共代码:生产者:消费者1, 消费者2(代码相同): 三. Publish/Subscribe(发布/订阅模式)公共代码:生产者:消费者: 四. Routing(路由模式)公共代码:消费者: 五. Topics(通配符模式)公共代码:生…...

Win10安装kafka并用C#调用
kafka安装 jdk、kafka版本如下,zookeeper使用kafka自带版本 安装包下载位置:https://download.csdn.net/download/henreash/90087368 (赚点csdn下载资源分) 安装jdk后,解压kafka压缩包,修改配置文件: kafka_2.13-3.9.0\config\…...

高级架构二 Git基础到高级
一 Git仓库的基本概念和流程 什么是版本库?版本库又名仓库,英文名repository,你可以简单的理解一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任何…...

深入解析二叉树算法
引言 二叉树(Binary Tree)作为数据结构中的一种重要形式,在计算机科学的诸多领域中得到了广泛应用。从文件系统到表达式解析,再到搜索和排序,二叉树都扮演着关键角色。本文将从二叉树的基础概念出发,详细探讨其各种算法及其应用,并提供相关代码示例,旨在为读者建立扎实…...