ad-hoc模式基本使用
ansible在使用ad-hoc模式执行命令时,相当于使用SSH连接各个服务器并在服务器上执行命令。格式为:
ansible <host-pattern> [options]
一个典型的ansible ad-hoc命令格式为:
ansible <host> -m module -a 'command' -f forks # eg ansible group-a -a 'date' ansible all -m service -a 'name=mysql state=restarted'
上面给出了两个例子,第一个例子为在group-a组中所有服务器上执行date命令;第二个例子为在所有服务器上执行service mysql restart命令。
第一个例子只是简单的执行命令,这里不多介绍。而在第二个例子中,我们使用了ansible自带的service模式,这个模式中提供了restart选项,这样我们就可以直接使用这个命令来重启服务。
ansible自带的模式有很多,可以通过以下命令查看当前ansible支持的模块:
ansible-doc -l
逻辑运算
ansible对host的控制支持逻辑运算,举例如下:
目的:在group-a和group-b上执行date命令
ansible group-a:group-b -a 'date'
目的:在group-a和group-b上排除site-1执行date命令
ansible 'group-a:group-b:!site-1' -a 'date'
常用模块
下面用一些实例介绍比较常用的几个模块:
copy模块:
目的:把主控端/root目录下的a.sh文件拷贝到到指定节点上
ansible 111.111.111.111 -m copy -a 'src=/root/a.sh dest=/tmp/'
file模块:
目的:更改指定节点上/tmp/t.sh的权限为755,属主和属组为root
ansible all -m file -a "dest=/tmp/t.sh mode=755 owner=root group=root"
cron模块:
目的:在指定节点上定义一个计划任务,每隔3分钟到主控端更新一次时间
ansible all -m cron -a 'name="custom job" minute=*/3 hour=* day=* month=* weekday=* job="/usr/sbin/ntpdate 122.122.122.122"'
service模块:
目的:重启指定节点上的 mysql 服务
ansible all -m service -a 'name=mysql state=restarted'
script模块:
目的:在指定节点上执行/root/a.sh脚本(请注意,这个脚本存放在Server端而不是Client端)
ansible site-1 -m script -a '/root/a.sh'
ping模块:
目的:检查指定组机器是否还能连通
ansible group-a -m ping
command模块:
目的:在指定组服务器上运行git pull命令
ansible group-all -m command -a 'git pull origin master chdir=/srv/www/{{ domain }}'
get_url模块:
目的:在制定服务器上执行wget操作
ansible site-3 -m get_url -a 'url=http://www.google.com/favicon.ico dest=/tmp'
synchronize模块:
目的:同步Server和Client内容。将Server的/root/a目录推送到指定节点的/tmp目录下
ansible site-5 -m synchronize -a 'src=/root/a dest=/tmp/ compress=yes'
这里有几个参数可以使用:
mode=pull 更改推送模式为拉取模式 delete=yes 使两边的内容一样(即以推送方为主) compress=yes 开启压缩,默认为开启 --exclude=.git 忽略同步.git结尾的文件
拉取
目的:将site-3节点的/tmp/a目录拉取到主控节点的/root目录下 命令:ansible site-3 -m synchronize -a 'mode=pull src=/tmp/a dest=/root/'
查看进程:
目的:查看远程主机的httpd进程
ansible storm_cluster -m shell -a "ps -ef | grep httpd" ansible storm_cluster -m raw -a "pa -ef | grep httpd"
以上就是一些常用的模式的使用,其他的模块和具体的说明信息见这里:Ansible Documentation – All Modules