自动化运维工具Ansible实战(四)常用模块

  1. 云栖社区>
  2. 博客>
  3. 正文

自动化运维工具Ansible实战(四)常用模块

科技小能手 2017-11-12 01:18:00 浏览942
展开阅读全文

    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之间沉睡几秒钟

本文转自 lqbyz 51CTO博客,原文链接:http://blog.51cto.com/liqingbiao/1962609

网友评论

登录后评论
0/500
评论
科技小能手
+ 关注