Ansible模块按功能分为:云模块、集群模块、 命令模块、数据库模块、文件模块、资产模块、消息模块、监控模块、网络模块、通知模块、包管理模块、源码控制模块、系统模块、单元模块、web设施模块、windows模块 具体的可以参考官网(http://docs.ansible.com/ansible/latest/list_of_all_modules.html)。这里从官方分类的模块里选择最常用的一些模块进行介绍。
1,ping模块。测试主机是否是通的
1
2
3
4
5
6
7
8
9
|
[root@Monitor ansible]
# ansible web1 -m ping
Server5 | SUCCESS => {
"changed"
:
false
,
"ping"
:
"pong"
}
Server6 | SUCCESS => {
"changed"
:
false
,
"ping"
:
"pong"
}
|
2,远程命令模块
1
2
3
|
ansible webserver -m
command
-a
"free -m"
#远程命令。
ansible webserver -m script -a
"/home/test.sh"
#远程主机执行主控服务器ansible上的脚本
ansible webserver -m shell -a
"/home/test.sh"
#执行远程主机上的脚本命令
|
3,setup模块。主要用于获取主机信息,在playbooks里经常会用到的一个参数,gather_facts就与该模块相关。setup模块下经常使用的一个参数是filter参数
1
2
3
|
ansible 10.212.52.252 -m setup -a
'filter=ansible_*_mb'
//
查看主机内存信息
ansible 10.212.52.252 -m setup -a
'filter=ansible_eth[0-2]'
//
查看地接口为eth0-2的网卡信息
ansible all -m setup --tree
/tmp/facts
//
将所有主机的信息输入到
/tmp/facts
目录下,每台主机的信息输入到主机名文件中(
/etc/ansible/hosts
里的主机名)
|
4,stat模块。获取远程文件状态信息,包括atime、ctime、mtime、MD5、uid、gid等信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
[root@Monitor ansible]
# ansible 192.168.180.5 -m stat -a "path=/etc/sysctl.conf
"
192.168.180.5 | SUCCESS => {
"changed"
:
false
,
"stat"
: {
"atime"
: 1504513902.6297896,
"checksum"
:
"a27c7ce2e6002c37f3cb537ad997c6da7fd76480"
,
"ctime"
: 1480926522.4591811,
"dev"
: 64768,
"executable"
:
false
,
"exists"
:
true
,
"gid"
: 0,
"gr_name"
:
"root"
,
"inode"
: 393634,
"isblk"
:
false
,
"ischr"
:
false
,
"isdir"
:
false
,
"isfifo"
:
false
,
"isgid"
:
false
,
"islnk"
:
false
,
"isreg"
:
true
,
"issock"
:
false
,
"isuid"
:
false
,
"md5"
:
"c97839af771c8447b9fc23090b4e8d0f"
,
"mode"
:
"0644"
,
"mtime"
: 1361531931.0,
"nlink"
: 1,
"path"
:
"/etc/sysctl.conf"
,
"pw_name"
:
"root"
,
"readable"
:
true
,
"rgrp"
:
true
,
"roth"
:
true
,
"rusr"
:
true
,
"size"
: 1150,
"uid"
: 0,
"wgrp"
:
false
,
"woth"
:
false
,
"writeable"
:
true
,
"wusr"
:
true
,
"xgrp"
:
false
,
"xoth"
:
false
,
"xusr"
:
false
}
}
|
5,file模块。file模块主要用于远程主机上的文件操作,file模块包含如下选项:
force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
-
group:定义文件/目录的属组
-
mode:定义文件/目录的权限
-
owner:定义文件/目录的属主
-
path:必选项,定义文件/目录的路径
-
recurse:递归的设置文件的属性,只对目录有效
-
src:要被链接的源文件的路径,只应用于state=link的情况
-
dest:被链接到的路径,只应用于state=link的情况
-
state:
-
directory:如果目录不存在,创建目录
-
file:即使文件不存在,也不会被创建
-
link:创建软链接
-
hard:创建硬链接
-
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
-
absent:删除目录、文件或者取消链接文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
[root@Monitor ansible]
# ansible 192.168.180.6 -m file -a "src=/etc/fstab dest=/
tmp
/fstab
state=link"
########在远程主机180.6上创建远程软连接
192.168.180.6 | SUCCESS => {
"changed"
:
true
,
"dest"
:
"/tmp/fstab"
,
"gid"
: 0,
"group"
:
"root"
,
"mode"
:
"0777"
,
"owner"
:
"root"
,
"size"
: 10,
"src"
:
"/etc/fstab"
,
"state"
:
"link"
,
"uid"
: 0
}
[root@Monitor ansible]
# ansible 192.168.180.6 -m file -a "path=/tmp/test state=
touch
"
############在远程主机180.6上创建test文件
192.168.180.6 | SUCCESS => {
"changed"
:
true
,
"dest"
:
"/tmp/test"
,
"gid"
: 0,
"group"
:
"root"
,
"mode"
:
"0644"
,
"owner"
:
"root"
,
"size"
: 5,
"state"
:
"file"
,
"uid"
: 0
}
[root@Monitor ansible]
# ansible 192.168.180.6 -m file -a "path=/tmp/test state=
absent"
#############在远程主机删除文件
192.168.180.6 | SUCCESS => {
"changed"
:
true
,
"path"
:
"/tmp/test"
,
"state"
:
"absent"
}
[root@Monitor ansible]
# ansible 192.168.180.6 -m file -a "path=/tmp/fstab state
=absent"
#############在远程主机删除fstab软连接
192.168.180.6 | SUCCESS => {
"changed"
:
true
,
"path"
:
"/tmp/fstab"
,
"state"
:
"absent"
}
|
6,copy模块。实现复制文件到远程主机,copy模块包含如下选项:
-
backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no
-
content:用于替代"src",可以直接设定指定文件的值
-
dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
-
directory_mode:递归的设定目录的权限,默认为系统默认权限
-
force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
-
others:所有的file模块里的选项都可以在这里使用
-
src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。
以下的例子试下拷贝/etc/ansible/script.sh文件到主机组web1所有的主机/tmp下并更新文件属主和权限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[root@Monitor ansible]
# ansible web1 -m copy -a "src=/etc/ansible/script.sh des
t=
/tmp/
owner=appuser group=appuser mode=0755"
###复制本地脚本到远程主机server6下并定义用户和组以及权限755
Server6 | SUCCESS => {
"changed"
:
true
,
"checksum"
:
"18ca258e92141948010f2e0896cf655cdb945a1d"
,
"dest"
:
"/tmp/script.sh"
,
"gid"
: 500,
"group"
:
"appuser"
,
"md5sum"
:
"d5e15b2da056fdd7b7ba30100035de2e"
,
"mode"
:
"0755"
,
"owner"
:
"appuser"
,
"size"
: 30,
"src"
:
"/root/.ansible/tmp/ansible-tmp-1504517543.07-102988847745614/source"
,
"state"
:
"file"
,
"uid"
: 500
}
|
7,service模块。用于远程主机的服务管理。该模块包含如下选项:
-
arguments:给命令行提供一些选项
-
enabled:是否开机启动 yes|no
-
name:必选项,服务名称
-
pattern:定义一个模式,如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行
-
runlevel:运行级别
-
sleep:如果执行了restarted,在则stop和start之间沉睡几秒钟