ansible自动化运维(二)ad-hoc模式

目录

Ansible模块(ad-hoc模式)

1.command模块:远程执行命令

[2.shell 模块:远程执行命令,支持管道,重定向](#2.shell 模块:远程执行命令,支持管道,重定向)

3.Raw模块:先登录,再执行,最后退出

4.Script模块:远程执行脚本

[5.cron 模块:远程定义任务计划](#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 ![b06bf1611f724256a46b65cc3fb04173.png](https://i-blog.csdnimg.cn/direct/b06bf1611f724256a46b65cc3fb04173.png) 判断指定文件或目录是否存在,如果存在,该怎么办 执行命令: ![6b70ea74b6b74d0da21ee56397a6c013.png](https://i-blog.csdnimg.cn/direct/6b70ea74b6b74d0da21ee56397a6c013.png) 不执行命令: ![f49414e9ac9148ee847f6b061b714cc0.png](https://i-blog.csdnimg.cn/direct/f49414e9ac9148ee847f6b061b714cc0.png) 参数可结合使用 ![7fb84a215573407db88ea3bbc5e86688.png](https://i-blog.csdnimg.cn/direct/7fb84a215573407db88ea3bbc5e86688.png) 与shell的区别,对管道及重定向等shell命令支持与否 ![89f6d760578647b085475a5a76e49ec2.png](https://i-blog.csdnimg.cn/direct/89f6d760578647b085475a5a76e49ec2.png) ### 2.shell 模块:远程执行命令,支持管道,重定向 输出信息到shell.txt \[root@web01 \~\]# ansible web02 -m shell -a "echo "这是shell命令" \>shell.txt" 192.168.143.162 \| CHANGED \| rc=0 \>\> 验证: ![6a3434c970be4958889b8e02dece6fe8.png](https://i-blog.csdnimg.cn/direct/6a3434c970be4958889b8e02dece6fe8.png) Shell使用removes参数 ![cac2e28031b14ba79990af3d9946e943.png](https://i-blog.csdnimg.cn/direct/cac2e28031b14ba79990af3d9946e943.png) ### 3.Raw模块:先登录,再执行,最后退出 它是支持一些shell命令的,因为它的本质就是ssh登录后再执行命令 输出信息到raw.sh文件中 \[root@web01 \~\]# ansible web02 -m raw -a "echo "这是raw模块" \>raw.sh ![3bcc84f119b14aa6924fd816f431ab52.png](https://i-blog.csdnimg.cn/direct/3bcc84f119b14aa6924fd816f431ab52.png)![e4f1ede8c25549c08cd34bdb5b60666f.png](https://i-blog.csdnimg.cn/direct/e4f1ede8c25549c08cd34bdb5b60666f.png) ### 4.Script模块:远程执行脚本 格式: ansible 本地主机 -m script -a "script_file" script_file填写你的目标主机脚本路径 再web01,web02主机上编写脚本 ![c2f59305da7943fbbdcc18804a64979f.png](https://i-blog.csdnimg.cn/direct/c2f59305da7943fbbdcc18804a64979f.png) ![38e8217f1f4047e5b1dc87b27fa84ff0.png](https://i-blog.csdnimg.cn/direct/38e8217f1f4047e5b1dc87b27fa84ff0.png) 执行web02主机上的脚本 ![8ea8a8b342c64e46b369876e15fbf48a.png](https://i-blog.csdnimg.cn/direct/8ea8a8b342c64e46b369876e15fbf48a.png) 可以看出不能执行远程服务器的脚本 执行本地主机web01的脚本 ![cb94654d806546f9b373fc61f36b143c.png](https://i-blog.csdnimg.cn/direct/cb94654d806546f9b373fc61f36b143c.png) ### 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' " ![7e1648ef6801445890dd8fb838049199.png](https://i-blog.csdnimg.cn/direct/7e1648ef6801445890dd8fb838049199.png) 查看设置的定时任务 ![a00d105ece2f42458641112a54ea357e.png](https://i-blog.csdnimg.cn/direct/a00d105ece2f42458641112a54ea357e.png) ### 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" ![003d3e8385184d05b2d3fc58c790da21.png](https://i-blog.csdnimg.cn/direct/003d3e8385184d05b2d3fc58c790da21.png) ![ca6a6045694242cf8be2814345dc2e97.png](https://i-blog.csdnimg.cn/direct/ca6a6045694242cf8be2814345dc2e97.png) ### 7.Group模块:管理用户组 group模块用于管理用户组的,相当于groupadd,groupdel等。 User模块的参数同样适用于group 设置用户组为mysql,组id为1001,设为系统用户组 \[root@web01 \~\]# ansible web02 -m group -a "name=mysql gid=1001 system=yes" ![4e77687f02034b6cb4ff3f026d8b8c93.png](https://i-blog.csdnimg.cn/direct/4e77687f02034b6cb4ff3f026d8b8c93.png) ![94ddad63a0d34889804426e07a37376e.png](https://i-blog.csdnimg.cn/direct/94ddad63a0d34889804426e07a37376e.png) ### 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/" ![fe1b0bbe37a1499b839c50738ac914f3.png](https://i-blog.csdnimg.cn/direct/fe1b0bbe37a1499b839c50738ac914f3.png) ![3e2027b6df9048b68967107d33edf5d8.png](https://i-blog.csdnimg.cn/direct/3e2027b6df9048b68967107d33edf5d8.png) 将123写入远程服务器的1.txt文件中 \[root@web01 \~\]# ansible web02 -m copy -a "content="123" dest=/root/1.txt ![061774d7446f4584a19974b67e28d074.png](https://i-blog.csdnimg.cn/direct/061774d7446f4584a19974b67e28d074.png) ![62833e8bbbba4c76b21cedd3bc05c050.png](https://i-blog.csdnimg.cn/direct/62833e8bbbba4c76b21cedd3bc05c050.png) ### 9.Fetch模块:从远程主机获取文件 一般用于收集远程主机上的配置文件、日志文件等数据进行备份或检查 > 常用参数: > > src:指定远程主机上要获取的文件的路径。(必需参数) > > dest:指定在本地主机保存文件的目标目录,目录不存在会自行创建。(必须参数) > > flat:这是一个可选参数。默认值为no。当flat设置为yes时,文件将直接保存到dest指定的文件下;当flat设置为no时,文件将按照远程主机的主机名 / IP地址和文件路径结构保存在dest目录下。 在远程主机web02上创建fetch.sh文件 ![91e74379c7724bd49455751f80c2a38f.png](https://i-blog.csdnimg.cn/direct/91e74379c7724bd49455751f80c2a38f.png) 把远程主机的fetch.sh传到本地fetch目录下 \[root@web01 \~\]# ansible web02 -m fetch -a "src=fetch.sh dest=fetch" ![ce8f48ec54c64ab3b120038884171acb.png](https://i-blog.csdnimg.cn/direct/ce8f48ec54c64ab3b120038884171acb.png) 可以看到没有使用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" ![e3240d4ab049429cafa8ebcfb441b6fb.png](https://i-blog.csdnimg.cn/direct/e3240d4ab049429cafa8ebcfb441b6fb.png) ### 10.File模块:设置文件属性 对文件操作,创建文件或目录、删除文件或目录、修改文件权限 > 常用参数: > > path :定义需要操作的文件或目录(必须参数) > > src :本地文件路径 > > recurse :递归授权 > > owner :指定属主 > > group :指定属组 > > mode :指定权限 > > state :指定对文件的操作(必须参数) > >   directory :在远端创建目录 > >   touch:在远端创建文件 > >   link :创建软连接 > >   hard :创建硬连接 > >   absent :表示删除文件或目录 参数path指定路径必须存在 ![d223d0e8282a466a887eb22b22099f77.png](https://i-blog.csdnimg.cn/direct/d223d0e8282a466a887eb22b22099f77.png) ### 11.Service/systemd模块:控制服务运行状态 > 常用参数: > > name 定义要启动服务的名称 > > state 指定服务状态 > >   started 启动服务(具有幂等性) > >   stopped 停止服务(具有幂等性) > >   restarted 重启服务 > >   reloaded 重载服务 > > enabled 开机自启 关闭防火墙服务 ![7511c5c6084e467985c5885344081b8c.png](https://i-blog.csdnimg.cn/direct/7511c5c6084e467985c5885344081b8c.png) ![0def39b64e3e47b2bf35050da5303650.png](https://i-blog.csdnimg.cn/direct/0def39b64e3e47b2bf35050da5303650.png) ### 12.yum模块:远程安装软件 name=软件包的名,多个软件包逗号隔开 state=installed/present安装、removed/absent卸载 、lastest 更新、如果已安装,installed列出已安装的包 安装httpd服务 ![87b0eaa47c1e462285defad4aa03aa52.png](https://i-blog.csdnimg.cn/direct/87b0eaa47c1e462285defad4aa03aa52.png) 可以看到,installed没有安装服务时,会安装,安装了会列出包 ### 13.Mount模块:管理设备下载和caish卸载 > src :指定挂载源 > > path:指定挂载点 (挂载点不存在会自动创建) > > fstype:指定文件系统类型 > > opts:挂载参数,默认为defaults > > dump:是否备份:0表示不进行备份 > > passno:文件系统检测:0表示不进行文件系统检测 > > state > >   present  写入fstab,但实际没有挂载,需要重启服务器 > >   absent  取消临时挂载,并且删除fstab > >   mounted  写入fstab,并且直接挂载了(常用) > >   unmounted  临时取消挂载,但是没有删除fstab,重启服务器之后就会恢复(常用) 将镜像挂载到目录media下 ![2faee6deadfc4f19af7ce33ec3d08dea.png](https://i-blog.csdnimg.cn/direct/2faee6deadfc4f19af7ce33ec3d08dea.png) ![8d1986085211437294292a0b155e2d2c.png](https://i-blog.csdnimg.cn/direct/8d1986085211437294292a0b155e2d2c.png) ### 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),为本地解压,本地指定目录接收;远程解压,远程目录接收。即不会出现本地文件传输到远程或远程文件被本地接收的情况 本地解压: ![98822bf3c92645caada7a9f7e6c68d7a.png](https://i-blog.csdnimg.cn/direct/98822bf3c92645caada7a9f7e6c68d7a.png) 远程主机解压:远程主机src路径必须写绝对路径 ![6e3e9c2c67e34cabad3cfa1a7a3a37a8.png](https://i-blog.csdnimg.cn/direct/6e3e9c2c67e34cabad3cfa1a7a3a37a8.png) ![efafd80e9b1d4fd487e22d30d1ff815e.png](https://i-blog.csdnimg.cn/direct/efafd80e9b1d4fd487e22d30d1ff815e.png) 当参数copy=yes,具有copy模块的属性,可以把文件传输到远程主机。 将本地解压后的文件传入远程主机的/home下 ansible web02 -m unarchive -a "src=openjdk-8u44-linux-x64.tar.gz dest=/home/ copy=yes" ![cb0bd304b97f4fb18b13b20564ebabba.png](https://i-blog.csdnimg.cn/direct/cb0bd304b97f4fb18b13b20564ebabba.png) ![f68b1cadee7b4d7cb8797ac37178b58f.png](https://i-blog.csdnimg.cn/direct/f68b1cadee7b4d7cb8797ac37178b58f.png) ### 15.Archive模块:打包压缩 > **常用的参数:** > > path: (必须参数)远程主机上需要被打包压缩的源文件/目录 > > dest: 打包压缩后的包文件路径(包文件的父目录必须存在);如果包文件已存在,则会被覆盖 > > format: 指定压缩类型,包括: bz2、gz(默认)、tar、xz、zip > > remove=yes / no: 是否删除源文件 将本地文件1.txt打包压缩为1.gz ![d8c7cb213ea746ff912494792df58f1c.png](https://i-blog.csdnimg.cn/direct/d8c7cb213ea746ff912494792df58f1c.png) ### 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" ![5c040c2cfa9744d6b97db1a50430d5ad.png](https://i-blog.csdnimg.cn/direct/5c040c2cfa9744d6b97db1a50430d5ad.png) ### 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" " ![ff22341b68aa43bdae7bcc799e3c0b58.png](https://i-blog.csdnimg.cn/direct/ff22341b68aa43bdae7bcc799e3c0b58.png) ### 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" ![e64c25b755ad4b738d15ecb0328a4596.png](https://i-blog.csdnimg.cn/direct/e64c25b755ad4b738d15ecb0328a4596.png)

相关推荐
宁zz6 小时前
乌班图安装jenkins
运维·jenkins
工业通讯探索者6 小时前
ProfiNet转CANopen协议转换网关驱动新能源汽车生产线多轴同步控制
自动化·工业物联网·协议转换网关·网关模块·总线协议
无名之逆7 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
大丈夫立于天地间7 小时前
ISIS协议中的数据库同步
运维·网络·信息与通信
cg50177 小时前
Spring Boot 的配置文件
java·linux·spring boot
Dream Algorithm7 小时前
路由器的 WAN(广域网)口 和 LAN(局域网)口
网络·智能路由器
IT猿手7 小时前
基于CNN-LSTM的深度Q网络(Deep Q-Network,DQN)求解移动机器人路径规划,MATLAB代码
网络·cnn·lstm
暮云星影7 小时前
三、FFmpeg学习笔记
linux·ffmpeg
吴盐煮_7 小时前
使用UDP建立连接,会存在什么问题?
网络·网络协议·udp
rainFFrain7 小时前
单例模式与线程安全
linux·运维·服务器·vscode·单例模式