Ansible ad hoc模式
基本语法:ansible {主机名/主机地址/主机组} [-m 模块名] [-a 模块参数]
-m 模块名
指定使用的模块名称
-a 模块参数列表
指定模块执行操作时的参数,参数列表须使用单引号或双引号包围
命令执行时,ansible将通过查找主机清单文件,获得被管理主机信息
1 ping模块:用于测试控制节点和被管理主机的连通性
ansible {主机名/主机地址/主机组} -m ping
eg:
ansible group1 -m ping
#测试与group1的主机是否连通
模块返回值
SUCCESS/CHANGED(黄色和绿色):模块执行成功;
FAILED(红色):模块执行失败;
UNREACHABLE(红色):无法与被管理主机建立连接
WARNING(紫色):一般由主机清单文件中的错误导致
2 command模块:帮助我们在被管理主机执行命令(command 模块不支持重定向、管道的使用 )
ansible {主机名/主机地址/主机组} -m command -a “执行的命令”
eg:
ansible group1 -m command -a "date"
#执行显示被管理主机的当前时间命令
模块返回值
rc(命令返回码):表明被管理主机对命令的执行情况
rc = 0:命令执行成功
rc > 0:命令执行失败
注:command模块是ansible默认模块,因此-m command可以省略
3 shell模块:与command模块类似,shell模块可以帮助我们在远程主机上执行命令(shell模块支持管道与重定向)
ansible {主机名/主机地址/主机组} -m shell -a “执行的命令”
eg:
ansible group1 -m command -a "echo 'hello' > /tmp/a.txt"
#在被管理主机执行输出hello到/tmp/a.txt
command和shell模块的选择:
优先选择command模块,如果命令中需要使用管道、重定向等操作,使用shell模块
4 script模块:script模块用于在被管理主机上执行控制节点上的脚本
ansible {主机名/主机地址/主机组} -m script -a “脚本执行命令”
eg:
ansible group1 -m script -a "/root/test.py"
#在被管理主机上执行test.py脚本
5 copy模块:copy模块将控制节点的文件或文件夹复制到被管理主机
ansible {主机名/主机地址/主机组} -m copy -a “模块参数”
eg:
ansible group1 -m copy -a "src=test.conf dest=/root mode=644 owner=root"
#复制文件——将控制节点当前目录下的test.conf文件,复制到被管理主机的/root目录下,并将权限设置为644,属主设置为root
模块常用参数
dest(必选参数):复制的目的路径(被管理主机上的绝对路径)
src (必选参数):被复制对象(文件、文件夹)在控制节点上的路径
mode :设置被复制对象在被管理主机上的权限(设置方法与Linux chmod命令类似)
owner:设置被复制对象在被管理主机上的属主
注:src参数的路径结尾没有“/”——表明将整个目录复制到被管理主机
src参数的路径以“/”结尾——表明只将目录下的内容复制到被管理主机
模块返回值
dest:最终产生的文件在被管理主机上的绝对路径
mode:最终 产生的文件、文件夹在被管理主机上的权限设置
owner:最终产生的文件、文件夹在被管理主机上的属主
size:文件大小
msg:模块执行错误的原因
不支持的模块参数——参数拼写错误
Unsupported parameters for (copy) module: ownerr --表明copy模块没有ownerr参数
Supported parameters include--示支持的参数有哪些
6 fetch模块:用于收集被管理主机上的文件
ansible {主机名/主机地址/主机组} -m fetch -a “模块参数”
eg:
ansible group1 -m fetch -a "src=/etc/hostname dest=/root/hostname"
#收集被管理主机的/etc/hostname文件,并存放在控制节点的/root/hostname目录下
模块常用参数
src(必选参数):所收集文件在被管理主机上的绝对路径
dest(必须参数):所收集文件在控制节点上的存放目录
模块返回值
dest:所收集文件的存放路径
7 file模块:用于对被管理主机上的文件/文件夹操作,如创建、删除文件/文件夹,设置权限等
ansible {主机名/主机地址/主机组} -m file -a “模块参数”
eg:
ansible group1 -m file -a "path=/root/test/test.py state=touch mode=744"
#在被管理主机上创建文件,并设置权限
模块常用参数
path(必须参数):被操作对象(文件、文件夹)在被管理主机上的绝对路径
mode:设置被操作对象的权限(设置方法与Linux chmod命令类似)
owner :设置被操作对象的属主
state:指定操作类型
directory:表明是对文件夹进行操作,如果path参数指定的文件夹不存在,则创建该文件夹(包括路径上的中间文件夹)
touch:表明是对文件进行操作,如果path参数指定的文件不存在,则创建该文件,如果存在,则更新该文件的最近访问时间
absent:删除文件/文件夹
8 dnf模块:使用dnf包管理器来管理软件包(安装、升级、删除、列表显示)
ansible {主机名/主机地址/主机组} -m dnf -a “模块参数”
eg:
ansible group1 -m dnf -a "name=vsftpd state=present"
#在被管理主机安装vsftpd安装包
模块常用参数
name:软件包的名字/rpm文件的url地址/rpm文件在被管理主机的本地路径
state:决定了对软件包的操作
present:安装软件包/rpm文件
latest:如果该软件包没安装,则安装软件包最新版本,如果该软件包已安装,则将软件包升级为最新版本
absent:卸载软件包
autoremove:在软件包卸载时,是否自动卸载该软件包的依赖包
no(默认):不卸载
yes:卸载
list:列表显示软件包信息(所属软件仓库、版本、是否已安装等)
list=软件包名
模块返回值
results:操作(安装、删除、列表显示)的软件包的信息
9 service模块:用于管理被管理主机上的服务
ansible {主机名/主机地址/主机组} -m service -a “模块参数”
eg:
ansible group1 -m service -a "name=vftpd state=started enabled=yes"
#在被管理主机上启动vsftpd服务,并设置为开机自启
模块常用参数
name(必选参数):服务名称
enabled:是否开机启动
yes
no
state:对服务的操作
reloaded:重新加载服务
started:启动服务
stopped:停止服务
restarted:重新启动服务
10 firewalld模块:用于为被管理主机上的某服务、端口添加firewalld规则
ansible {主机名/主机地址/主机组} -m firewalld -a “模块参数”
eg1:
ansible group1 -m firewalld -a "port=8080/tcp state=enabled immediate=yes"
#允许对被管理主机的tcp 8080端口连接
eg2:
ansible group1 -m firewalld -a "service=httpd state=enabled immediate=yes permanent=yes"
#允许对被管理主机的http服务的连接
模块常用参数:
service:被管理的服务名称
port:被管理的端口号
state:
enabled:接受对服务/端口的连接
disabled:拒绝对服务/端口的连接
permanent:
yes:被管理主机重启时,该配置不丢失
no:被管理主机重启时,该配置将丢失
immediate: 配置是否立即生效
yes
no(默认)
11 setup模块:用于获取被管理主机信息(软、硬件信息)
ansible {主机名/主机地址/主机组} -m setup -a “模块参数”
eg:
ansible -m setup -a "filter=ansible_distribution*"
#查看所有以ansible_distribution开头的键的值
模块常用参数
filter:对收集的信息进行过滤,只显示通过过滤的信息
filter=针对键的过滤条件
总结:
既然可以通过shell模块、command模块进行被管理主机的软件包管理、服务管理、防火墙管理等等操作——为什么需要那么多其它的ansible模块?
幂等性:针对同一被管理主机,重复执行同一模块的操作,并不会产生什么副作用,而且便于运维,不需要对各种异常情况进行过多考虑
shell模块、command模块不具备幂等性
绝大多数的ansible模块,具有幂等性