ansible模块是在ansible中实际执行的,在每个playbook任务中被执行的,可以通过ansible命令来运行他们
常用模块
command、copy、fetch、file、ping、shell、service、setup、synchronize、yum
command模块
功能:在指定节点上运行linux命令
注意:command模块不支持特殊字符、管道、变量,shell支持,这是command和shell的主要区别
参数:
creates:一个文件名,当该文件存在,则该命令不执行
free_form:要执行的linux指令
chdir:在执行指令之前,先切换到该指定的目录
removes:一个文件名,当该文件不存在,则该选项不执行
executable:切换shell来执行指令,该执行路径必须是一个绝对路径
命令:ansible 172.17.10.242 -m command -a 'bash /home/batch/batch.sh removes=/home/batch/ip' -s
运行/home/batch/batch.sh脚本,当/home/batch/ip不存在,则不执行该脚本
效果:
命令:ansible 172.17.10.242 -m command -a 'bash /home/batch/batch.sh creates=/home/batch/ip' -s
运行/home/batch/batch.sh脚本,当/home/batch/ip存在,则不执行该脚本
效果:
copy模块
功能:把service端某一文件拷贝到指定节点上
当指定节点上有该文件,copy模块默认则会覆盖该文件,文件属性不会变
参数:
src:要复制的源文件的路径,可以是绝对路径也可以是相对路径。如果路径是一个目录,它将递归复制,在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容, 如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync
dest:源文件复制到远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
owner:指定属主
group:指定属组
mode:指定权限,可以以数字指定比如0644
backup:在覆盖之前将原文件备份,备份文件包含时间信息。选项:yes|no backup=yes|no
content:替代src,可以直接指定文件的值
others:所有的file模块里的选项都可以在这里使用
directory_mode:递归的设定目录的权限,默认为系统默认权限
force:
yes:默认项,如果目标主机包含该文件,但内容不同,则强制覆盖
no:只有当目标主机的目标位置不存在该文件时,才复制
命令:ansible 172.17.10.242 -m copy -a 'src=/home/taozi/user.yml dest=/home/batch/user.yml owner=batch group=batch mode=0644' -s
将/home/taozi/user.yml文件复制到目标主机/home/batch/user.yml,属主属组为batch权限为0644
效果:
将/home/taozi/user.yml文件复制到目标主机/home/batch/user.yml,并将之前文件进行备份
当文件内容不变,使用backup,则不会进行备份
修改文件内容,再次备份
效果:
fetch模块
功能:将远程主机中的文件拷贝到本机中,和copy模块的作用相反。
参数:
dest:将远程主机拉取过来的文件保存在本地的路径信息
src:指定从远程主机要拉取的文件信息,只能拉取文件
flat:默认设置为no,如果设置为yes,则不显示主机路径目录信息
fail_on_missing:当源文件不存在时,标记为失败
命令:ansible 172.17.10.242 -m fetch -a 'src=/root/anaconda-ks.cfg dest=/home/taozi/' -s
将目标主机/root/anaconda-ks.cfg文件复制到本机/home/taozi/,默认是目录
不命名则默认使用目标主机名
效果:
命令:ansible 172.17.10.242 -m fetch -a 'src=/root/anaconda-ks.cfg dest=/home/taozi/anaconda-ks.cfg' -s
将目标主机/root/anaconda-ks.cfg文件复制到本机/home/taozi/anaconda-ks.cfg,目录形式
效果:
命令:ansible 172.17.10.242 -m fetch -a 'src=/root/anaconda-ks.cfg dest=/home/taozi/anaconda-ks.cfg flat=yes' -s
ansible 172.17.10.242 -m fetch -a 'src=/root/anaconda-ks.cfg dest=/home/taozi/ flat=yes' -s
上面两条效果一样,将目标主机/root/anaconda-ks.cfg文件复制到本机/home/taozi/anaconda-ks.cfg,不显示主机路径信息,纯文件
效果:
file模块
功能:对远程主机上包含文件、文件夹、超级链接类的创立、拷贝、移动、删除操作
参数:
path:必选项,定义文件/目录的路径
owner:定义文件属主
group:定义文件属组
mode:定义文件/目录权限
src:要被链接的源文件/文件夹的原始位置,只应用于state=link的情况
dest:备链接到的路径,至应用于state=link的情况
state:
directory:如果目录不存在,创建目录
file:即使文件不存在,也不会被创建
link:创建软连接
hard:创建硬链接
touch:如果文件不存在,则创建一个新文件,如果文件或目录不存在,则更新其最后修改时间
absent:删除目录、文件或者取消链接文件
recurse:递归设置文件属性,支队目录有效
命令:ansible 172.17.10.242 -m file -a 'path=/root/anaconda-ks.cfg owner=batch group=batch mode=0644' -s
将远程主机上/root/anaconda-ks.cfg文件修改属组属主修改为batch,文件权限为0644
效果:
命令:ansible 172.17.10.242 -m file -a 'src=/root/anaconda-ks.cfg dest=/root/batch.cfg state=link' -s
将远程主机上/root/anaconda-ks.cfg文件创建软连接到/root/batch.cfg
效果:
命令:ansible 172.17.10.242 -m file -a 'path=/root/taozi.sh state=touch mode=0777' -s
在远程主机上创建一个文件,权限为0777
效果:
ping模块
功能:用于确认本机和远程主机之间是否能够ping通,正常返回pong
命令:ansible 172.17.10.242 -m ping -s
效果:
shell模块
功能:在指定节点上运行linux命令,与command模块类似,shell模块支持特殊字符
参数:
creates:一个文件名,当该文件存在,则该命令不执行
chdir:在执行指令之前,先切换到该指定的目录
removes:一个文件名,当该文件不存在,则该选项不执行
executable:换用shell来执行指令,该执行路径必须是一个绝对路径
命令:ansible 172.17.10.242 -m shell -a 'bash taozi.sh chdir=/root/' -s
在远程主机执行taozi.sh,脚本在/root/目录下
效果:
命令:ansible 172.17.10.242 -m shell -a 'ls -l | grep root' -s
在远程主机执行命令"ls -l | grep root",command不支持管道
效果:
service模块
功能:用于管理服务,就是linux下service命令,但是它更简单
参数:
name:必选项,服务名称
enabled:是否开机启动 yes|no
state:对于当前服务执行启动、停止、重启、重新加载等操作(started、stopped、restarted、reloaded)
sleep:如果服务备重新启动,则睡眠多少秒再执行停止和启动命令
arguments:给命令行提供一些选项
pattern:定义一个模式,如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行
runlevel:服务启动级别
命令:ansible 172.17.10.242 -m service -a 'name=httpd state=started enabled=yes' -s
在远程主机执行启动httpd服务,并设置开机自启
效果:
命令:ansible 172.17.10.242 -m service -a 'name=httpd state=restarted sleep=15' -s
在远程主机上执行睡眠15后再重启httpd服务
效果:
命令:ansible 172.17.10.242 -m service -a 'name=httpd state=started pattern=/usr/sbin/httpd' -s
在远程主机上执行启动httpd服务
效果:
setup模块
功能:收集远程主机信息
参数:
filter:过滤信息
命令:ansible 172.17.10.242 -m setup -s
收集远程主机上的基本信息
效果:
命令:ansible 172.17.10.242 -m setup -a 'filter=ansible_date_time' -s
手机远程主机上时间信息
效果:
synchronize模块
功能:使用rsync同步文件
参数:
archive: 归档,相当于同时开启recursive(递归)、links、perms、times、owner、group、-D选项都为yes ,默认该项为开启
checksum: 跳过检测sum值,默认关闭
compress:是否开启压缩
copy_links:复制链接文件,默认为no ,注意后面还有一个links参数
delete: 删除不存在的文件,默认no
dest:目录路径
src:源,同步源文件路径
dest_port:默认目录主机上的端口 ,默认是22,走的ssh协议
dirs:传速目录不进行递归,默认为no,即进行目录递归
rsync_opts:rsync参数部分
set_remote_user:主要用于/etc/ansible/hosts中定义或默认使用的用户与rsync使用的用户不同的情况
mode: push或pull 模块,push模的话,一般用于从本机向远程主机上传文件,pull 模式用于从远程主机上取文件
rsync_timeout:指定 rsync 操作的 IP 超时时间,和rsync命令的 --timeout 参数效果一样.
注意:使用rsync 模块,系统必须安装rsync 包,否则无法使用这个模块
yum模块
功能:使用yum包管理器来管理软件包
参数:
name:要安装的软件包的名字,也可以传递一个url或者一个本地rpm包的路径
state:状态(present、latest、absent) present、latest用于安装包、absent用于remove安装包
list
enablerepo:启用某个源
disablerepo:不启用某个源
disable_gpg_check:关闭gpg_check
config_file:yum的配置文件
命令:ansible 172.17.10.242 -m yum -a 'name=httpd state=latest' -s
在远程主机执行安装httpd服务
效果: