实验概述:(本次实验采用3台虚拟机,分别为1台主控端YTeduRHEL8,和2台被控端node1、node2)
在本章我们将了解在Ansible内使用"Ad- Hoc"命令,又指在Ansible下临时执行的一条命令,Ad- Hoc命令的执行依赖于模块,那么Ansible官方提供了大量的模块,例如:command、raw、shell、file、cron等。
命令说明:
ansible 主机或组 -m 模块名 -a '模块参数' ansible参数
主机和组,是在/etc/ansible/hosts 里进行指定;
模块名,可以通过ansible-doc -l 命令查看目前已安装的所有模块,默认不指定模块时,使用的是command模块,具体可以查看/etc/ansible/ansible.cfg 的“#module_name = command ”部分,默认模块可以在该配置文件中进行修改;
模块参数,可以通过“ansible-doc 模块名”查看具体的用法及后面的参数;
ansible参数,可以通过ansible命令的帮助信息里查看到,这里有很多参数可以供选择,如是否需要输 入密码、是否sudo等。
总结
帮助查询:
# ansible-doc -l 查看所有模块
# ansible-doc -s module 查看某个模块的参数
# ansible-doc module 查看该模块更详细的信息
命令执行模块包含如下四个模块:
command模块:该模块通过-a跟上要执行的命令可以直接执行,不过命令里如果有带有如下字符部分则 执行不成功“ "<", ">", " |", "&";
# ansible node1 -m command -a 'pwd' 默认模块为command时,可以不指定-m command
shell 模块:用法基本和command一样,不过其是通过/bin/sh进行执行,所以shell模块可以执行任何命 令,就像在本机执行一样;
# ansible node1 -m shell -a 'ls'
raw模块:用法和shell模块一样,也可以执行任意命令,就像在本机执行一样;和command、shell模块不同的是其没有chdir、creates、removes参数;
参数说明:
chdir:在执行指令之前,先切换到该指定的目录,默认工作目录是远程主机的家目录;
creates:一个文件名,当该文件存在,则该命令不执行;
removes:一个文件名,当该文件不存在,则该命令不执行;
实验:
说明:两个命令都会返回执行成功的状态。不过实际上只有command模块中的文件会被创建成功。使用raw模块的执行的结果文件事实上也被正常创建了,不过不是在chdir指定的目录,而是在当前执行用户的家目录
script模块:将管理端的shell在被管理主机上执行,其原理是先将shell复制到远程主机,再在远程主机上执行。
实验:
要执行的脚本文件script.sh 内容如下:
执行指令:
ansible node1 -m script -a 'scripts.sh'
## script模块的脚本文件在主控端,而不需要传到被控端