Ansible自动化运维(二)ad-hoc 模式详解

👨‍🎓博主简介

  🏅云计算领域优质创作者
  🏅华为云开发者社区专家博主
  🏅阿里云开发者社区专家博主
💊交流社区:运维交流社区 欢迎大家的加入!
🐋 希望大家多多支持,我们一起进步!😄
🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗


文章目录

  • Ansible 中的 ad-hoc 模式
    • 1、Ansible帮助命令
    • 2、ad-hoc 模式执行流程
    • 3、Ansible中常见的返回值
    • 4、常用模块
    • 5、常用模块的用法
      • 5.1 command 模块:用于远程执命令,不支持管道
      • 5.2 shell 模块:远程执行命令,支持管道
      • 5.3 raw 模块:ssh登录,再执行
      • 5.4 script 模块:远程执行本地脚本
      • 5.5 yum 模块:远程安装软件
      • 5.6 copy 模块:推送文件
      • 5.7 file 模块:对文件操作
      • 5.8 service 模块:控制启动关闭服务
      • 5.9 cron 模块:定时任务
      • 5.10 mount 模块:用于管理设备挂载与卸载
      • 5.11 user/group 模块:用于管理的用户创建与删除
      • 5.12 unarchive 模块:解压缩模块
      • 5.13 get_url 模块:下载文件
      • 5.14 setup 模块:获取主机信息
  • 相关文章

Ansible 中的 ad-hoc 模式

Ad-hoc模式的使用场景:

  • 查看某个进程的信息
  • 拷贝日志到本地

Ad-hoc模式的命令格式 :

ansible 主机组名称 -m 模块 -a “具体命令”常用选项:
-m 指定要使用的模块,不指定默认使用command模块 
-a 指定要执行的具体命令
-i  指定自定义的主机清单配置文件 
-f  一次返回几个结果

1、Ansible帮助命令

ansible-doc 		#帮助命令 
ansible-doc -l   	#列出所以的模块
ansible-doc 模块名   #查看模块的详细信息
ansible-doc 模块名 -s  #查看模块的选项使用说明

2、ad-hoc 模式执行流程

模块执行的工作流程:

  • 1.主控端命令行执行命令;

  • 2.将模块拷贝到受控端;

  • 3.按照模块定义的操作在受控端执行;

  • 4.返回信息,删除受控端模块;

说明:

ansible模块可以使用的前提是:主控端与受控端python版本一致,并且Ansible的模块是幂等执行的

Ansible执行命令的返回值颜色:

屎黄色:执行命令成功,并且做了修改;

草帽绿:执行命令成功,只查看信息,没有修改

玫瑰红:执行失败,报错

葡萄紫:表示对命令发错的操作有警告信息

比如上面,最开始的主机清单配置规则中,返回的结果就是绿色的,表示只查看,并不会做修改。

3、Ansible中常见的返回值

返回值返回值含义
changed几乎所有的Ansible模块都会返回该变量,表示模块是否对远程主机执行了修改操作
failed如果模块未能执行完成,将返回failed为true
msg模块执行失败的原因,常见的错误如ssh连接失败
rc与命令行工具相关的模块会返回rc,表示执行Linux命令的状态码
stdout与rc类似,返回的是标准输出的结果
stderr与rc类似,返回的是标准错误的结果
backup_file所有存在backup选项的模块,用来返回备份文件的路径
results应用在playbook中存在循环的情况,返回多个结果

4、常用模块

  • 远程命令相关
1. command  	# 默认使用模块,用于远程执命令,不支持管道
2. shell   		# 远程执行命令,支持管道 
3. raw    		# ssh登录,再执行
4. script   	# 远程执行本地脚本
5. yum			# 远程安装
6. copy			# 推送文件
7. file			# 对文件操作
8. service		# 控制启动关闭服务
9. systemd   	# 控制启动关闭服务
10. cron		# 定时任务模块
11. mount		# 挂载与卸载模块
12. user/group	# 用于管理的用户创建与删除
13. unarchive	# 解压缩模块
14. get_url		# 下载文件,类似于curl
15. firewalld	# 防火墙
16. selinux		# selinux
17. setup		# 获取主机信息
18. git			# git命令模块
19. sysctl      # 控制内核

5、常用模块的用法

5.1 command 模块:用于远程执命令,不支持管道

  • command 模块:用于远程执命令,不支持管道
ansible 主机组名称 -m command -a “具体命令”
ansible 主机组名称 -a “具体命令”
# 默认为command模块
[root@localhost ansible]# vim /etc/ansible/hosts 
#配置要远程的地址
[web_group]
172.16.11.209
172.16.10.232[web_group:vars]
ansible_ssh_pass='123123'#执行:
[root@localhost ansible]# ansible web_group -a "mkdir /root/cs123"
[WARNING]: Consider using the file module with state=directory rather than running 'mkdir'.  If you need to use command because file is insufficient you can
add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message.
172.16.11.209 | CHANGED | rc=0 >>172.16.10.232 | CHANGED | rc=0 >>

5.2 shell 模块:远程执行命令,支持管道

  • shell 模块:远程执行命令,支持管道
ansible 主机组名称 -m shell -a “具体命令”
[root@localhost ansible]# vim /etc/ansible/hosts 
#配置要远程的地址
[web_group]
172.16.11.209
172.16.10.232[web_group:vars]
ansible_ssh_pass='123123'#执行:
[root@localhost ansible]# ansible web_group -m shell -a "ls /home/test/"
172.16.10.232 | CHANGED | rc=0 >>
xunjian-yong.sh# 在执行的时候多个地址是不分开的,需要仔细观看172.16.11.209 | CHANGED | rc=0 >>
xunjian-yong.sh

5.3 raw 模块:ssh登录,再执行

  • raw 模块:ssh登录,再执行
ansible 主机组名称 -m raw -a “具体命令”
[root@localhost ansible]# vim /etc/ansible/hosts 
#配置要远程的地址
[web_group]
172.16.11.209
172.16.10.232[web_group:vars]
ansible_ssh_pass='123123'#执行:
[root@localhost ansible]# ansible web_group -m raw -a "ls /home/test/"
172.16.10.232 | CHANGED | rc=0 >>
xunjian-yong.sh
Shared connection to 172.16.10.232 closed.172.16.11.209 | CHANGED | rc=0 >>
xunjian-yong.sh
Shared connection to 172.16.11.209 closed.

5.4 script 模块:远程执行本地脚本

  • script 模块:远程执行本地脚本
ansible 主机组名称 -m script -a "your_script_file"

在这个命令中,将主机组名称替换为您的目标主机名或组名,并将your_script_file替换为您要在目标主机上执行的脚本文件的本地路径。

[root@localhost ansible]# vim /etc/ansible/hosts 
#配置要远程的地址
[web_group]
172.16.11.209
172.16.10.232[web_group:vars]
ansible_ssh_pass='123123'#执行:
[root@localhost ansible]# ansible web_group -m script -a "/home/test/a.sh"
172.16.11.209 | CHANGED => {"changed": true, "rc": 0, "stderr": "Shared connection to 172.16.11.209 closed.\r\n", "stderr_lines": ["Shared connection to 172.16.11.209 closed."], "stdout": "bin  games    lib    libexec\t    openssh-9.4p1.tar.gz  openssl-1.1.1t  share\r\netc  include  lib64  openssh-9.4p1  openssl\t\t  sbin\t\t  src\r\n", "stdout_lines": ["bin  games    lib    libexec\t    openssh-9.4p1.tar.gz  openssl-1.1.1t  share", "etc  include  lib64  openssh-9.4p1  openssl\t\t  sbin\t\t  src"]
}
172.16.10.232 | CHANGED => {"changed": true, "rc": 0, "stderr": "Shared connection to 172.16.10.232 closed.\r\n", "stderr_lines": ["Shared connection to 172.16.10.232 closed."], "stdout": "bin  games    lib    libexec\t    openssl\t    phpstudy  share\r\netc  include  lib64  openssh-9.3p2  openssl-1.1.1t  sbin      src\r\n", "stdout_lines": ["bin  games    lib    libexec\t    openssl\t    phpstudy  share", "etc  include  lib64  openssh-9.3p2  openssl-1.1.1t  sbin      src"]
}

a.sh中内容为:ls /usr/local/

这将在目标主机上执行a.sh脚本文件。

请注意,script模块会将脚本文件传输到目标主机,然后在目标主机上执行它。因此,确保脚本文件在控制节点上可用,并且具有可执行权限(使用chmod +x命令添加执行权限)。

raw模块不同,script模块允许您在目标主机上执行本地脚本文件,而不需要手动传输脚本内容。这对于执行复杂的本地操作非常有用。


5.5 yum 模块:远程安装软件

  • yum 模块:远程安装软件

name=软件包的名,多个软件包逗号隔开

state=installed/present安装、removed/absent卸载 、lastest 更新、installed列出已安装的包

yum模块的更多使用可使用ansible-doc yum查看。

ansible 主机组名称 -m yum -a "name=要安装\卸载\更新的包名 state=是安装还是卸载还是更新"
[root@localhost ansible]# vim /etc/ansible/hosts 
#配置要安装的地址
[web_group]
172.16.11.209
172.16.10.232[web_group:vars]
ansible_ssh_pass='123123'#执行:
#更新lrzsz命令
[root@localhost ansible]# ansible web_group -m yum -a "name=lrzsz state=latest"
#安装tldr和netstat命令
[root@localhost ansible]# ansible web_group -m yum -a "name=tldr,net-tools state=present"
172.16.10.232 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "msg": "", "rc": 0, "results": ["tldr-1.2.0-4.el7.noarch providing tldr is already installed", "net-tools-2.0-0.25.20131004git.el7.x86_64 providing net-tools is already installed"]
}
172.16.11.209 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "msg": "", "rc": 0, "results": ["tldr-1.2.0-4.el7.noarch providing tldr is already installed", "net-tools-2.0-0.25.20131004git.el7.x86_64 providing net-tools is already installed"]
}

5.6 copy 模块:推送文件

  • copy 模块:推送文件

推送文件模块

src= 源文件路径

dest= 目标文件路径

content= 指定文件内容,只有目标文件;如果文件不存在会创建

owner= 指定属主

group= 指定属组

mode= 指定权限

copy 模块的更多使用可使用ansible-doc copy查看。

ansible 主机组名称 -m copy -a "src=文件路径及文件 dest=目录文件路径"
[root@localhost ansible]# vim /etc/ansible/hosts 
#配置要复制的地址
[web_group]
172.16.11.209
172.16.10.232[web_group:vars]
ansible_ssh_pass='123123'#执行:
[root@localhost ansible]# ansible web_group -m copy -a "src=/root/tongji.sh dest=/home/test/"
172.16.10.232 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "checksum": "4eff49d9f511f76b733cf739e820f8b7d17ff3f3", "dest": "/home/test/tongji.sh", "gid": 0, "group": "root", "mode": "0644", "owner": "root", "path": "/home/test/tongji.sh", "size": 10156, "state": "file", "uid": 0
}
172.16.11.209 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "checksum": "4eff49d9f511f76b733cf739e820f8b7d17ff3f3", "dest": "/home/test/tongji.sh", "gid": 0, "group": "root", "mode": "0644", "owner": "root", "path": "/home/test/tongji.sh", "size": 10156, "state": "file", "uid": 0
}

在这里插入图片描述

这时候就可以看到两台服务器上都有这个文件了,如果想要先备份在复制,后面会讲到实战;


5.7 file 模块:对文件操作

  • file 模块:对文件操作

对文件操作,创建文件或目录、删除文件或目录、修改文件权限

path 指定路径

src 源文件路径

recurse 递归授权

owner 指定属主

group 指定属组

mode 指定权限

state 指定文件的状态

  directory   在远端创建目录

  touch  在远端创建文件

  link  创建软连接

  hard  创建硬连接

  absent  表示删除文件或目录

ansible 主机组名称 -m file -a "操作内容"
[root@localhost ansible]# vim /etc/ansible/hosts 
#配置要执行的地址
[web_group]
172.16.11.209
172.16.10.232[web_group:vars]
ansible_ssh_pass='123123'#执行:
# 创建一个目录
ansible web_group -m file -a "path=/home/cs state=directory"# 创建一个文件
ansible web_group -m file -a "path=/home/cs/cs.sh state=touch"# 将/home/test/tongji.sh软连接到/home/cs/下
ansible web_group -m file -a "src=/home/test/tongji.sh path=/home/cs/tongji_link.sh state=link"# 创建一个文件并给予root用户和执行权限
ansible web_group -m file -a "path=/home/cs/lv.sh state=touch mode=777 owner=root group=root"

5.8 service 模块:控制启动关闭服务

  • service 模块:控制启动关闭服务

name 定义要启动服务的名称

state 指定服务状态

  started 启动服务(幂等)

  stopped 停止服务(幂等)

  restarted 重启服务

  reloaded 重载服务

enabled 开机自启

ansible 主机组名称 -m service -a "name=服务名称 state=服务操作 enabled=是否设置开机自启"
[root@localhost ansible]# vim /etc/ansible/hosts 
#配置要执行的地址
[web_group]
172.16.11.209
172.16.10.232[web_group:vars]
ansible_ssh_pass='123123'#执行:
# 可以先安装一个httpd服务来测试
ansible web_group -m yum -a "name=httpd state=present"# 启动httpd服务
ansible web_group -m service -a "name=httpd state=started"# 关闭httpd服务
ansible web_group -m service -a "name=httpd state=stopped"# 重启httpd服务状态
ansible web_group -m service -a "name=httpd state=restarted"# 设置httpd服务开机自启
ansible web_group -m service -a "name=httpd state=enabled"# 重启httpd服务并设置开机自启
ansible web_group -m service -a "name=httpd state=restarted enabled=yes"
# 设置完可以使用命令查看是否设置了开机自启
systemctl is-enabled httpd
systemctl list-unit-files --type=service --state=enabled --no-pager | grep "enabled" | grep httpd

5.9 cron 模块:定时任务

  • cron 模块:定时任务

name 注释说明

minute、hour、day、month、weekday(分、时、日、月、周)

user 指定用户

job 操作的指令

state

  present 创建

  absent 删除

ansible 主机组名称 -m cron -a "操作内容"
[root@localhost ansible]# vim /etc/ansible/hosts 
#配置要设置的地址
[web_group]
172.16.11.209
172.16.10.232[web_group:vars]
ansible_ssh_pass='123123'#执行:
# 直接写一个定时任务(不写执行时间,默认就是每分钟一次;不写name默认为None);不建议使用。
ansible web_group -m cron -a "job='/bin/sh /home/cs/tongji_link.sh'"# 查看设置的定时任务
crontab -l# 设置定时执行统计脚本(每一个小时执行一次,使用root用户)
ansible web_group -m cron -a "name="每小时执行一次统计脚本" minute=0 hour=*/1 day=* month=* weekday=* user=root job='/bin/sh /home/cs/tongji_link.sh' state=present"# 删除指定的定时任务
ansible web_group -m cron -a "name="每小时执行一次统计脚本" minute=0 hour=*/1 day=* month=* weekday=* user=root job='/bin/sh /home/cs/tongji_link.sh' state=absent"

5.10 mount 模块:用于管理设备挂载与卸载

  • mount 模块:用于管理设备挂载与卸载

mount操作需要谨慎,一不小心会导致服务器不可使用。

src :指定挂载源

path:指定挂载点 (挂载点不存在会自动创建)

fstype:指定文件系统类型

opts:挂载参数,默认不写为:defaults

dump:是否备份:0表示不进行备份

passno:文件系统检测:0表示不进行文件系统检测

state

  present  写入fstab,但实际没有挂载,需要重启服务器

  absent  取消临时挂载,并且删除fstab

  mounted  写入fstab,并且直接挂载了(常用)

  unmounted  临时取消挂载,但是没有删除fstab,重启服务器之后就会恢复(常用)

ansible 主机组名称 -m mount -a "操作内容"
[root@localhost ansible]# vim /etc/ansible/hosts 
#配置要挂载的地址
[web]
172.16.11.209[web:vars]
ansible_ssh_pass='123123'#执行:
# 临时取消挂载在data的/dev/sdb(常用)
ansible web -m mount -a "src=/dev/sdb path=/data/ state=unmounted"# 取消挂载在data的/dev/sdb,并且直接删除fstab中的单独配置(暂时没有成功,我也不知道为什么)
ansible web -m mount -a "src=/dev/sdb path=/data/ state=absent"# 添加一个挂载写入fstab,但实际没有挂载,需要重启服务器,重启完就会自动挂载上
ansible web -m mount -a "src=/dev/sdb path=/data fstype=xfs opts=defaults dump=0 passno=0 state=present"# 添加一个挂载写入fstab,并且直接挂载上(常用)
ansible web -m mount -a "src=/dev/sdb path=/data fstype=xfs opts=defaults dump=0 passno=0 state=mounted"

5.11 user/group 模块:用于管理的用户创建与删除

  • user/group 模块:用于管理的用户创建与删除

user用于管理用户的创建与删除,相当于useradd,userdel,usermod;

group模块用于管理用户组的,相当于groupadd,groupdel等。

name(必需):指定用户的用户名。

state:指定用户账户的状态。可以是以下之一:

  present:创建用户(默认值)。

  absent:删除用户。

  locked:锁定用户账户。

  unlocked:解锁用户账户。

  password:仅更改用户的密码。

uid:指定用户的用户ID(UID)

gid: 指定用户的用户ID(GID)

group:指定用户的初始主组。

groups:指定用户所属的其他组。

home:指定用户的家目录路径。

shell:指定用户的登录 shell。

password:指定用户的密码(已加密的密码)。

append:如果为 yes,则添加用户到组而不是替换(默认为 no)。

remove:如果为 yes,则删除用户的家目录和邮箱文件(默认为 no)。

move_home:如果为 yes,则在更改用户的主目录时移动用户的文件(默认为 no)。

create_home:如果为 yes,则创建用户的主目录(默认为 yes)。

update_password:如果为 always,则始终更新密码(默认为 on_create)。

ansible 主机组名称 -m user -a "操作内容"
ansible 主机组名称 -m group -a "操作内容"
[root@localhost ansible]# vim /etc/ansible/hosts 
#配置要管理的地址
[web]
172.16.11.209[web:vars]
ansible_ssh_pass='123123'#执行:
# 创建用户,使用 user 模块创建一个名为 johndoe 的新用户:
ansible web -m user -a "name=johndoe state=present"
# 查看
tail -1 /etc/passwd# 删除用户,使用 user 模块删除一个名为 johndoe 的用户:
ansible web -m user -a "name=johndoe state=absent"
# 删除用户和home家目录,使用 user 模块删除一个名为 johndoe 的用户:(常用)
ansible web -m user -a "name=johndoe remove=yes state=absent"
# 查看
tail -1 /etc/passwd# 创建组,使用 group 模块创建一个名为 mygroup 的新组:
ansible web -m group -a "name=mygroup state=present"
# 查看
tail -1 /etc/group# 删除组,使用 group 模块删除一个名为 mygroup 的组:
ansible web -m group -a "name=mygroup state=absent"
# 查看
tail -1 /etc/group# 在将上面的用户和用户组在创建一遍;
ansible web -m user -a "name=johndoe state=present"
ansible web -m group -a "name=mygroup state=present"
# 添加用户到组,使用 user 模块将用户 johndoe 添加到组 mygroup:
ansible web -m user -a "name=johndoe group=mygroup append=yes"
# 查看
tail -1 /etc/passwd# 从组中移除用户,使用 user 模块从组 mygroup 中移除用户 johndoe:
ansible web -m user -a "name=johndoe groups=mygroup append=no"

这里就不写加创建密码的了,因为创建密码必须要哈希密码;我这边用了转换成哈希的密码还是不行,不知道为啥;

这里写了一个转为哈希密码的py脚本,需要在PyCharm中运行,交互式的;

import bcrypt# 加密密码
passwd = input("请输入要加密的密码:")
password = passwd.encode('utf-8')
salt = bcrypt.gensalt()
hashed_password = bcrypt.hashpw(password, salt)# 输出哈希密码
print("转换后的哈希密码:", hashed_password.decode('utf-8'))# 验证密码
password_to_check = passwd.encode('utf-8')
if bcrypt.checkpw(password_to_check, hashed_password):print("密码验证成功!")
else:print("密码验证失败!")

这里还是建议如果需要加密码或者修改密码使用command、shell、raw方式去执行 passwd 用户名 修改;


5.12 unarchive 模块:解压缩模块

  • unarchive 解压缩模块

解压缩模块,这个模块有两种用法:

  • 1、将ansible主机上的压缩包在本地解压缩后传到远程主机上,这种情况下,copy=yes.本地解压缩,解压缩位置不是默认的目录,没找到或传完删了后传到远程主机

  • 2、将远程主机上的某个压缩包解压缩到指定路径下。这种情况下,需要设置copy=no远程主机上面的操作,不涉及ansible服务端

tar、.tar.gz、.tar.bz2、.zip等都支持

copy 默认为no,当copy=yes,那么拷贝的文件是从ansible主机复制到远程主机上而不是在原地解压缩,如果设置为copy=no,那么会在远程主机上寻找src源文件;

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

dest 指定了解压缩后文件的目标目录

mode 设置解压缩后的文件权限,可以使用数字或符号模式,例如 "0644""u=rw,go=r"

list_files 默认值为no,如果设置为yes,解压同时,返回压缩包的文件列表

remote_src:如果设置为 yes,则表示 src 参数是远程主机上的路径。

extra_opts: 允许您指定解压缩命令的额外选项。这对于一些特定格式的存档文件非常有用。

creates: 如果指定了此选项,只有在 creates 中指定的文件或目录不存在时,才会执行解压缩操作。

owner: 设置解压缩后文件的所有者。

group: 设置解压缩后文件的所属组。

ansible 主机组名称 -m unarchive -a "src=源路径 dest=目标路径 其他参数"
[root@localhost ansible]# vim /etc/ansible/hosts 
#配置要解压的地址
[web]
172.16.11.209[web:vars]
ansible_ssh_pass='123123'#执行:
# 将jdk-8u221-linux-x64.tar.gz复制到/home/cs/下并解压
[root@localhost ~]# ansible web -m unarchive -a "src=/home/test/jdk-8u221-linux-x64.tar.gz dest=/home/cs/"
172.16.11.209 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": true, "dest": "/home/cs/", "extract_results": {"cmd": ["/usr/bin/gtar", "--extract", "-C", "/home/cs/", "-z", "-f", "/root/.ansible/tmp/ansible-tmp-1697035885.77-18118-31918487585626/source"], "err": "", "out": "", "rc": 0}, "gid": 0, "group": "root", "handler": "TgzArchive", "mode": "0755", "owner": "root", "size": 26, "src": "/root/.ansible/tmp/ansible-tmp-1697035885.77-18118-31918487585626/source", "state": "directory", "uid": 0
}

5.13 get_url 模块:下载文件

  • get_url 模块:下载文件
  • url (必需): 指定要下载文件的URL。这是一个必需参数。
  • dest (必需): 指定文件将保存到本地目标主机上的目标路径。这是一个必需参数。
  • force (可选): 如果设置为 yes,将强制下载文件,即使文件已经存在。默认为 no
  • checksum (可选): 提供要下载文件的校验和,以确保文件完整性。
  • backup (可选): 如果设置为 yes,将在下载之前备份现有文件。默认为 no
  • timeout (可选): 设置下载文件的超时时间(秒)。
  • url_username (可选): 如果目标URL需要身份验证,可以提供用户名。
  • url_password (可选): 如果目标URL需要身份验证,可以提供密码。
  • owner (可选): 设置下载后文件的所有者。
  • group (可选): 设置下载后文件的所属组。
  • mode (可选): 设置下载后文件的权限模式。
ansible 主机组名称 -m get_url -a "url=远程下载的url dest=目标路径 其他参数"
ansible web -m get_url -a "url=https://example.com/file.txt dest=/path/to/local/file.txt"
[root@localhost ansible]# vim /etc/ansible/hosts 
#配置要下载到的地址
[web]
172.16.11.209[web:vars]
ansible_ssh_pass='123123'#执行:
[root@localhost ~]# ansible web -m get_url -a "url=https://liucy.blog.csdn.net/article/details/133460612?spm=1001.2014.3001.5502 dest=/home/cs/csdn.txt"
172.16.11.209 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": true, "checksum_dest": null, "checksum_src": "263c306aaaa75ea1890f33fb846e17c47bac1a7c", "dest": "/home/cs/csdn.txt", "elapsed": 0, "gid": 0, "group": "root", "md5sum": "6337bd5bd661d45598c6402652c59e03", "mode": "0644", "msg": "OK (unknown bytes)", "owner": "root", "size": 244776, "src": "/root/.ansible/tmp/ansible-tmp-1697037340.77-18641-38036675583497/tmp0nw1sp", "state": "file", "status_code": 200, "uid": 0, "url": "https://liucy.blog.csdn.net/article/details/133460612?spm=1001.2014.3001.5502"
}

5.14 setup 模块:获取主机信息

  • setup 模块:获取主机信息

setup 模块不仅是一个常见的模块,而且是一个特殊的模块。它用于获取目标主机的系统信息和事实(facts),并将这些信息返回到 Ansible Playbook 中,以供后续任务使用。setup 模块通常不需要额外的参数,因为它会自动获取系统信息。

ansible web -m setup

获取的信息较长,可以使用重定向到一个空文件中。

  • 常用的几个参数:
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

至此,Ansible的ad-hoc模式就讲解完了,下面讲解的是playbook模式,因为playbook模式要使用yaml格式的语法,所以可以先去了解一下yaml语法;推荐:yaml文件格式详解及实例

相关文章

文章标题文章链接
Ansible自动化运维(一)简介及部署、清单https://liucy.blog.csdn.net/article/details/133769300
Ansible自动化运维(二)ad-hoc 模式详解https://liucy.blog.csdn.net/article/details/133772023
Ansible自动化运维(三)Playbook 模式详解https://liucy.blog.csdn.net/article/details/133899966
Ansible自动化运维(四)jinja2 模板、Roles角色详解https://liucy.blog.csdn.net/article/details/133994509

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

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

相关文章

PLC期末速成——顺序功能图转梯形图

一、根据顺序功能图写出梯形图程序 顺序功能图: 梯形图: 1、程序段1,系统运行标志M0.0的启-保-停控制电路。 2、程序段2,PLC上电与逆行,初始化脉冲M1.0激活初始化步M2.0。 3、程序段3,当M2.0初始化步为活…

jupyter内核错误

1、在dos窗口输入以下命令激活环境:anaconda activate 【py环境名,比如py37】(目的是新家你一个虚拟环境) 2、在虚拟环境py37下安装jupyter notebook,命令:pip install jupyter notebook 3、安装ipykerne…

Unity C# 枚举多选

枚举多选 &#x1f96a;例子&#x1f354;判断 &#x1f96a;例子 [System.Flags]public enum TestEnum{ None 0,Rooms 1 << 1,Walls1<<2,Objects1<<3,Slabs 1 << 4,All Rooms|Walls|Objects|Slabs}&#x1f354;判断 TestEnum test TestEnum.R…

ArcGIS中style文件的导入及lyr的文件的使用

地图是地理信息的重要载体&#xff0c;科学的配色方案可以有效地传递地理信息&#xff0c;而美观协调的配色方案也是我们进行地图符号化设计的重要内容。在日常工作中&#xff0c;我们常常苦恼于自带颜色不能满足需要或是希望使用现成的颜色模板&#xff0c;自定义配色方案导入…

css选择器有哪些?优先级?哪些属性可以继承?

面试官&#xff1a;css选择器有哪些&#xff1f;优先级&#xff1f;哪些属性可以继承&#xff1f; 一、选择器 CSS选择器是CSS规则的第一部分 它是元素和其他部分组合起来告诉浏览器哪个HTML元素应当是被选为应用规则中的CSS属性值的方式 选择器所选择的元素&#xff0c;叫做…

百度吉利合作造车生态,极越“智价比”能否带来科技平权?

文|AUTO芯球 作者|文泽 临近年关&#xff0c;车企迎来“降价潮”。为了获得更好的年终成绩单&#xff0c;包括上汽大众、比亚迪、长安汽车、智己汽车等20多家品牌推出了购车补贴、限时优惠等措施&#xff0c;优惠幅度最高近20万元。 在此背景下&#xff0c;新车发布一个多月…

深度解析分布式锁及实现方案

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

Spark MLlib ----- ALS算法

补充 在谈ALS(Alternating Least Squares)之前首先来谈谈LS,即最小二乘法。LS算法是ALS的基础,是一种数优化技术,也是一种常用的机器学习算法,他通过最小化误差平方和寻找数据的最佳匹配,利用最小二乘法寻找最优的未知数据,保证求的数据与已知的数据误差最小。LS也被用…

Web开发:SQLsugar的安装和使用

一、安装 第一步&#xff0c;在你的项目中找到解决方案&#xff0c;右键-管理解决方案的Nuget 第二步&#xff0c;下载对应的包&#xff0c;注意你的框架是哪个就下载哪个的包&#xff0c;一个项目安装一次包即可 点击应用和确定 安装好后会显示sqlsugar的包 二、使用&#xf…

聚类分析 | Matlab实现基于RIME-DBSCAN的数据聚类可视化

聚类分析 | Matlab实现基于RIME-DBSCAN的数据聚类可视化 目录 聚类分析 | Matlab实现基于RIME-DBSCAN的数据聚类可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.聚类分析 | Matlab实现基于RIME-DBSCAN的数据聚类可视化&#xff08;完整源码和数据) 2.多特征输入&…

深度探析卷积神经网络(CNN)在图像视觉与自然语言处理领域的应用与优势

目录 前言1 CNN网络结构与工作原理1.1 输入层1.2 卷积层1.3 最大池化层1.4 全连接层 2 应用领域2.1 图像视觉领域中CNN的应用2.2 NLP领域中CNN的应用 3 CNN的限制与未来展望3.1 CNN的挑战3.2 CNN的展望 结语 前言 卷积神经网络&#xff08;CNN&#xff09;作为一种强大的深度学…

【Spring】Spring的事务管理

前言&#xff1a; package com.aqiuo.service.impl;import com.aqiuo.dao.AccountMapper; import com.aqiuo.pojo.Account; import com.aqiuo.service.AccountService; import org.springframework.jdbc.core.JdbcTemplate;import java.sql.Connection; import java.sql.SQLEx…

CentOS 8 8.5.2111 网络在线安装系统 —— 筑梦之路

之前写过一篇关于centos 8 官方停止更新维护后解决yum源问题的文章&#xff1a; CentOS 8 停止维护后换可用yum源——筑梦之路_http://ftp.iij.ad.jp/pub/linux/centos-vault/8.5.21-CSDN博客 由于centos 8 dvd的镜像比较大&#xff0c;有时候我们根本不需要去下载一个10G以上…

“30天化学探索旅程”提纲

文章目录 第一部分&#xff1a;化学基础理论1. 第1天&#xff1a;化学世界的开启2. 第2天&#xff1a;元素周期表的探索之旅3. 第3天&#xff1a;原子构造的秘密揭示4. 第4天&#xff1a;化学键的魔力解析5. 第5天&#xff1a;无机化合物的世界与应用 第二部分&#xff1a;化学…

Python中无法使用Selenium,显示ValueError: Timeout value connect was ……, but it must be an int, float or None

近期重装了系统&#xff0c;需要做个爬虫&#xff0c;最初想用Selenium和Msedge模拟浏览器操作&#xff0c;但总是不成功&#xff0c;即使是用webdriver打开网页这样最简单的操作&#xff0c;也无法做到&#xff0c;总是显示ValueError: Timeout value connect was <object …

手机远程控制电脑_手机操作电脑方法

在我们的日常生活和工作中&#xff0c;有时候我们需要从外面访问家里或公司的电脑。这听起来可能很复杂&#xff0c;但实际上非常简单。今天&#xff0c;我们将分享如何使用手机远程控制电脑。 首先&#xff0c;您需要在电脑上安装KKView远程控制软件&#xff0c;该软件提供手…

PositiveSSL和Sectigo的多域名证书

首先&#xff0c;我们要知道PositiveSSL是Sectigo旗下的子品牌&#xff0c;提供多种类型的SSL数字证书&#xff0c;包括DV基础型的多域名SSL证书。Sectigo的SSL证书产品同样比较丰富&#xff0c;不仅有DV基础型多域名SSL证书&#xff0c;还有OV企业型以及EV增强型的多域名SSL证…

IO类day02

JAVA IO java io可以让我们用标准的读写操作来完成对不同设备的读写数据工作. java将IO按照方向划分为输入与输出,参照点是我们写的程序. 输入:用来读取数据的,是从外界到程序的方向,用于获取数据. 输出:用来写出数据的,是从程序到外界的方向,用于发送数据. java将IO比喻为…

LINUX基础培训三之文件和目录管理

前言、本章学习目标 了解LINUX文件类型及目录结构掌握LINUX文件的基本属性熟悉用户、用户组、其他的安全模型掌握LINUX文件和目录的常用管理 一、LINUX文件管理 1、什么是LINUX中的文件 在LINUX操作系统中有一个重要的概念&#xff1a;一切皆为文件。除了我们常说的文本文…

pytorch09:可视化工具-TensorBoard,实现卷积核和特征图可视化

目录 一、TensorBoard简介二、TensorBoard安装三、TensorBoard运行可视化四、TensorBoard详细使用4.1 SummaryWriter4.2 add_scalar()4.3 add_scalars()4.4 add_histogram()4.4.1实际项目开发使用 4.5 add_image()4.6 torchvision.utils.make_grid4.7 卷积核和特征图可视化4.7.…