自动化运维工具Ansible使用(三)

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

参考:Ansible – exclude host from playbook execution

发表评论

电子邮件地址不会被公开。 必填项已用*标注