命令格式:ansible [主机] [-m 模块] [-a args]
ansible-doc -l #列出所有已安装的模块 注:按q退出
ansible-doc -s yum #-s列出yum模块描述信息和操作动作
ansible 192.168.0.106 -m command -a 'date' #指定ip执行date
ansible abc -m command -a 'date' #指定分类执行date
ansible all -m command -a 'date' #所有hosts主机执行date命令
ansible all -a 'ls /root' #如果不加-m模块,则默认运行command模块为汇川等地区用户提供了全套网页设计制作服务,及汇川网站建设行业解决方案。主营业务为成都网站建设、网站建设、汇川网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
command模块在远程主机执行命令,不支持管道、重定向等shell的特性。常用的参数如下:
chdir:在远程主机上运行命令前要提前进入的目录;
creates:在命令运行时创建一个文件,如果文件已存在,则不会执行创建任务;
removes:在命令运行时移除一个文件,如果文件不存在,则不会执行移除任务;
executeable:指明运行命令的shell程序;
ansible web -m command -a 'ls /root'
shell模块在远程主机执行命令,相当于调用远程主机的Shell进程,然后在该Shell下打开一个子Shell运行命令。和command模块的区别是它支持Shell特性:如管道、重定向等。
ansible web -m shell -a "echo hello world " #输出到屏幕
ansible web -m shell -a "echo hello world > a.txt" #输出到a.txt
copy模块用于复制指定主机文件到远程主机的指定位置。常见的参数如下:
dest:指出复制文件的目标目录位置,使用绝对路径。如果源是目录,则目标也要是目录,如果目标文件已存在,会覆盖原有内容;
src:指出源文件的路径,可以使用相对路径和绝对路径,支持直接指定目录。如果源是目录,则目标也要是目录;
mode:指出复制时,目标文件的权限,可选;
owner:指出复制时,目标文件的属主,可选;
group:指出复制时目标文件的属组,可选;
content:指出复制到目标主机上的内容,不能和src一起使用,相当于复制content指明的数据到目标文件中;
ansible web -m copy -a 'src=/root/m.txt dest=/root/ owner=root mode=640'
hostname模块用于管理远程主机上的主机名
常用的参数如下:
name:指明主机名;
ansible 192.168.0.100 -m hostname -a "name=web"
yum模块基于yum机制,对远程主机管理程序包。常用的参数如下:
name:程序包名称,可以带上版本号。若不指明版本,则默认为最新版本;
state=present|atest|absent:指明对程序包执行的操作:present表明安装程序包,latest表示安装最新版本的程序包,absent表示卸载程序包;
disablerepo:在用yum安装时,临时禁用某个仓库的ID;
enablerepo:在用yum安装时,临时启用某个仓库的ID;
conf_file:yum运行时的配置文件,而不是使用默认的配置文件;
disable_gpg_check=yes|no:是否启用完整性校验功能;
ansible web -m yum -a "name=httpd" #安装httpd
ansible web -m shell -a "rpm -qa | grep httpd" #查看安装httpd
管理端只是发送yum指令到被管理端,被管理端要存在可用的yum仓库才可以成功安装。
service模块为用来管理远程主机上的服务的模块。常见的参数如下:
name:被管理的服务名称;
state=started|stopped|restarted:动作包含启动,关闭或重启;
enable=yes|no:表示是否设置该服务开机自启动;
runlevel:如果设定了enabled开机自启动,则要定义在哪些运行目标下自动启动;
ansible web -m service -a "name=httpd
enabled=yes state=restarted" #设置httpd服务重新启动和开机自动启动
user模块主要用于管理远程主机上的用户账号。常见的参数如下:
name:必选参数,账号名称;
state=present|absent:创建账号或者删除账号,present表示创建,absent表示删除;
system=yes|no:是否为系统账户;
uid:用户UID;
group:用户的基本组;
groups:用户的附加组;
shell:默认使用的shell;
home:用户的家目录;
mve_home=yes|no:如果设置的家目录已经存在,是否将已存在的家目录进行移动;
pssword:用户的密码,建议使用加密后的字符串;
comment:用户的注释信息;
remore=yes|no:当state=absent时,是否要删除用户的家目录;
ansible web -m user -a "name=user01 system=yes uid=52 group=root groups=root shell=/etc/nologin home=/home/user01 password=123123"
在web组的所有主机上新建一个系统用户,UID为52,
属组是root,名字是user01,密码是123123
ansible abc -m command -a 'tail -3 /etc/passwd'
用于定义任务计划
两种状态(state):present表示添加(可以省略),absent表示移除。
ansible abc -m cron -a 'minute="*/1" job="/bin/echo hello world" name="test cron job"' #每一分钟写入“hello world”
ansible abc -a 'crontab -l' #查看计划性任务
ansible abc -m cron -a 'name="test cron job" state=absent' #移除计划任务
ansible abc -a 'crontab -l'
对用户组进行管理
group模块请求的是groupadd, groupdel, groupmod 三个指令。
ansible abc -m group -a 'name=nginx gid=306 system=yes'
ansible abc -a 'tail -2 /etc/group'
用于设置文件属性 (path: 是文件路径 src:定义源文件路径 )
ansible abc -m file -a "path=/root/test.txt state=touch" #新建文件
ansible abc -a "ls -l /root/test.txt" #查看
ansible abc -m file -a "path=/root/test.txt state=absent" #删除文件
用于检测指定主机的连通性
ansible all -m ping
可以将本地脚本复制到被管理主机上进行执行。需要注意使用相对路径来指定脚本
echo -e 'echo "this is ansible script !" >/root/abc.sh' > /root/test.sh
chmod +x test.sh
ansible abc -m script -a 'test.sh'
ansible abc -a 'cat /root/abc.sh'
备注:本地脚本不要加上声明(#!/bin/bash),否则报错
用于收集、查看被管理主机的facts(facts是Ansible采集被管理主机设备信息的一个功能)
ansible abc -m setup