http://blog.csdn.net/iloveyin/article/details/46982023
ansible 默认提供了很多模块来供我们使用。在 Linux 中,我们可以通过 ansible-doc -l 命令查看到当前 ansible 都支持哪些模块,通过 ansible-doc -s 模块名 又可以查看该模块有哪些参数可以使用。
下面介绍比较常用的几个模块:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
copy模块
file
模块
cron
模块
group模块
user模块
yum模块
service模块
script模块
ping
模块
command
模块
raw模块
get_url模块
synchronize模块
|
copy模块:
目的:把主控端/root目录下的a.sh文件拷贝到到指定节点上
命令:ansible 10.1.1.113 -m copy -a 'src=/root/a.sh dest=/tmp/'
执行效果:
![clipboard1.png wKioL1TB_EWytdwHAALpQ_NZj_Y676.jpg](https://i-blog.csdnimg.cn/blog_migrate/8a5058b9ace09020d5f577a9eedacf9c.jpeg)
file模块:
目的:更改指定节点上/tmp/t.sh的权限为755,属主和属组为root
命令:ansible all -m file -a "dest=/tmp/t.sh mode=755 owner=root group=root"
执行效果:
![spacer.gif](https://i-blog.csdnimg.cn/blog_migrate/55325794c36b5a850fd3fb362748dc51.png)
![clipboard2.png wKiom1TB-23S6GIaAAFkf3LCV0I648.jpg](https://i-blog.csdnimg.cn/blog_migrate/5ae20f90fe184e3b7d65239abd619b31.jpeg)
cron模块:
目的:在指定节点上定义一个计划任务,每隔3分钟到主控端更新一次时间
命令:ansible all -m cron -a 'name="custom job" minute=*/3 hour=* day=* month=* weekday=* job="/usr/sbin/ntpdate 172.16.254.139"'
执行效果:
![clipboard3.png wKioL1TB_EXAZ9npAAKlZcJk-2A313.jpg](https://i-blog.csdnimg.cn/blog_migrate/70b1db1d4d071d36fee6acdef1b88b54.jpeg)
group模块:
目的:在所有节点上创建一个组名为nolinux,gid为2014的组
命令:ansible all -m group -a 'gid=2014 name=nolinux'
执行效果:
![spacer.gif](https://i-blog.csdnimg.cn/blog_migrate/55325794c36b5a850fd3fb362748dc51.png)
![clipboard4.png wKiom1TB-22w2EHsAAEyGxpaZ1Q696.jpg](https://i-blog.csdnimg.cn/blog_migrate/5455f45067cdfa07d68db8864998c096.jpeg)
user模块:
目的:在指定节点上创建一个用户名为nolinux,组为nolinux的用户
命令:ansible 10.1.1.113 -m user -a 'name=nolinux groups=nolinux state=present'
执行命令:
![clipboard5.png wKioL1TB_EajzhgWAAKh8udIwfU616.jpg](https://i-blog.csdnimg.cn/blog_migrate/edbc638dbb557d3fc2491a4b6e2f55d1.jpeg)
补充:删除用户示例
![spacer.gif](https://i-blog.csdnimg.cn/blog_migrate/55325794c36b5a850fd3fb362748dc51.png)
![clipboard6.png wKiom1TB-27BpMDGAAJUaZVZKlQ882.jpg](https://i-blog.csdnimg.cn/blog_migrate/f09d09bb511c1c5de7f3e0f66c2370ed.jpeg)
yum模块:
目的:在指定节点上安装 lrzsz 服务
命令:ansible all -m yum -a "state=present name=httpd"
执行效果:
![clipboard7.png wKioL1TB_EaTCw3xAAo06fOJT9o358.jpg](https://i-blog.csdnimg.cn/blog_migrate/34867fd3229548663fb87d7e93ce62d9.jpeg)
service模块:
目的:启动指定节点上的 puppet 服务,并让其开机自启动
命令:ansible 10.1.1.113 -m service -a 'name=puppet state=restarted enabled=yes'
执行效果:
![clipboard8.png wKiom1TB-27BK1j6AAE7uhMosLQ824.jpg](https://i-blog.csdnimg.cn/blog_migrate/6f1095c8a75b74cde41bd43f6ad39e4f.jpeg)
![spacer.gif](https://i-blog.csdnimg.cn/blog_migrate/55325794c36b5a850fd3fb362748dc51.png)
script模块:
目的:在指定节点上执行/root/a.sh脚本(该脚本是在ansible控制节点上的)
命令:ansible 10.1.1.113 -m script -a '/root/a.sh'
执行效果:
![clipboard9.png wKioL1TB_EehJLUgAAFvF7DUzTA542.jpg](https://i-blog.csdnimg.cn/blog_migrate/9257fa3322ef2760ced3b61a20aa946e.jpeg)
![spacer.gif](https://i-blog.csdnimg.cn/blog_migrate/55325794c36b5a850fd3fb362748dc51.png)
ping模块:
目的:检查指定节点机器是否还能连通
命令:ansible 10.1.1.113 -m ping
执行效果:
![clipboard10.png wKioL1TB_EfDOcX3AAD56pSs8vw739.jpg](https://i-blog.csdnimg.cn/blog_migrate/158e22be5277deffddd3405e1053e605.jpeg)
command模块:
目的:在指定节点上运行hostname命令
命令:ansible 10.1.1.113 -m command -a 'hostname'
执行效果:
![clipboard11.png wKiom1TB-2_TVLsoAAH9514heiw532.jpg](https://i-blog.csdnimg.cn/blog_migrate/d11951c09c13959ba9db773d9e7d1542.jpeg)
![spacer.gif](https://i-blog.csdnimg.cn/blog_migrate/55325794c36b5a850fd3fb362748dc51.png)
raw模块:
目的:在10.1.1.113节点上运行hostname命令
命令:ansible 10.1.1.113 -m raw-a 'hostname|tee'
执行效果:
![clipboard12.png wKioL1TB_EfiXSlvAAD6X2f-nZ4937.jpg](https://i-blog.csdnimg.cn/blog_migrate/8ca042a2df4b0f8dd2b7c603d9883055.jpeg)
get_url模块:
目的:将http://10.1.1.116/favicon.ico文件下载到指定节点的/tmp目录下
命令:ansible 10.1.1.113 -m get_url -a 'url=http://10.1.1.116/favicon.ico dest=/tmp'
执行效果:
![clipboard22.png wKiom1TB_ZvyFnXpAAQItOAiI4M141.jpg](https://i-blog.csdnimg.cn/blog_migrate/cde41acdf331b046355bea2694ea730e.jpeg)
synchronize模块:
目的:将主控方/root/a目录推送到指定节点的/tmp目录下
命令:ansible 10.1.1.113 -m synchronize -a 'src=/root/a dest=/tmp/ compress=yes'
执行效果:
delete=yes 使两边的内容一样(即以推送方为主)
compress=yes 开启压缩,默认为开启
--exclude=.git 忽略同步.git结尾的文件
![clipboard14.png wKioL1TB_EjxkmYpAAYA5Ai3IPg889.jpg](https://i-blog.csdnimg.cn/blog_migrate/172204a35c0f3236988d7bb5bd3fa0b0.jpeg)
由于模块,默认都是推送push。因此,如果你在使用拉取pull功能的时候,可以参考如下来实现
mode=pull 更改推送模式为拉取模式
目的:将10.1.1.113节点的/tmp/a目录拉取到主控节点的/root目录下
命令:ansible 10.1.1.113 -m synchronize -a 'mode=pull src=/tmp/a dest=/root/'
执行效果:
![clipboard15.png wKiom1TB-3CwhN2dAASKTtTpOxI903.jpg](https://i-blog.csdnimg.cn/blog_migrate/bd4c72302c5c96482e06aefd3dd89552.jpeg)
由于模块默认启用了archive参数,该参数默认开启了recursive, links, perms, times, owner,group和-D参数。如果你将该参数设置为no,那么你将停止很多参数,比如会导致如下目的递归失败,导致无法拉取
![clipboard16.png wKiom1TB-3CwM88JAAKGdhDvVqI952.jpg](https://i-blog.csdnimg.cn/blog_migrate/99c8bc5c0e1220d5645fd6df70668439.jpeg)
其它相关的参数解释:
1
2
3
|
dest_port=22
rsync_path
rsync_timeout
|
OK!
以上暂且列举这些日常运维中经常会用到的一些模块,更多的模块信息后期会继续完善,大家也可以去官网查看更多的信息。
官网地址:http://docs.ansible.com/synchronize_module.html