2019-04-24-day 39 ansible的模块以及参数讲解

第1章 ansible的模块以及参数讲解

1.1 ansible的模块说明

常用模块 模块说明
command 执行命令模块,ansible命令执行的默认模块
shell 执行shell命令模块
script 执行脚本在远端服务器上(本地服务器上没有脚本)
copy 把本地文件拷贝到远端服务器
file 设定文件(目录)属性模块
service 系统服务管理模块(CentOS6使用)
systemd 系统服务管理模块(CentOS7使用)
cron 定时任务管理模块
yum yum软件包安装管理模块
mount 挂载设备管理模块
user 用户管理模块

1.2 ansible的模块说明

1.2.1 配置ansible主机列表,以下所有例子都使用此主机列表

[root@m01 ~]$ cat /etc/ansible/hosts
[oldboy]
172.16.1.31
172.16.1.41

1.2.2 shell模块功能说明

功能说明:执行一个命令在远程节点上
官方链接:http://docs.ansible.com/ansible/latest/shell_module.html
1、 可以支持> < | &等特殊符号,并且可以同时执行多条命令
例如:一条命令查看远端的内存和eth1的IP

[root@m01 ~]$ ansible oldboy -m shell -a "free -m;ifconfig eth1"
172.16.1.31 | CHANGED | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:            972         106         738           7         127         716
Swap:           767           0         767
eth1: flags=4163  mtu 1500
        inet 172.16.1.31  netmask 255.255.0.0  broadcast 172.16.255.255
        inet6 fe80::2ab4:7695:6d12:6e55  prefixlen 64  scopeid 0x20
        ether 00:0c:29:c9:33:b4  txqueuelen 1000  (Ethernet)
        RX packets 389  bytes 307066 (299.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 271  bytes 33736 (32.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

172.16.1.41 | CHANGED | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:            972         100         745           7         126         724
Swap:           767           0         767
eth1: flags=4163  mtu 1500
        inet 172.16.1.41  netmask 255.255.0.0  broadcast 172.16.255.255
        inet6 fe80::6f63:e4ca:a29a:1712  prefixlen 64  scopeid 0x20
        ether 00:0c:29:4f:d0:0d  txqueuelen 1000  (Ethernet)
        RX packets 391  bytes 307134 (299.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 271  bytes 33604 (32.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2、远程执行脚本:脚本必须在远端存在
远端脚本内容:

[root@nfs01 ~]$ cat /server/scripts/test.sh 
#!/bin/bash
for n in {1..5}
do
  echo $n
done

执行:

[root@m01 ~]$ ansible oldboy -m shell -a "/bin/sh /server/scripts/test.sh"
172.16.1.31 | CHANGED | rc=0 >>
1
2
3
4
5
172.16.1.41 | CHANGED | rc=0 >>
1
2
3
4
5

1.2.3 script模块功能说明

功能说明:在远程节点上运行本地脚本
官方链接:http://docs.ansible.com/ansible/latest/script_module.html
实践:远端运行本地脚本
查看本地脚本内容:

#!/bin/bash
for n in {6..10}
do
  echo $n
done

执行:

[root@m01 ~]$ ansible oldboy -m script -a "/server/scripts/test.sh"
172.16.1.31 | CHANGED => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to 172.16.1.31 closed.\r\n", 
    "stderr_lines": [
        "Shared connection to 172.16.1.31 closed."
    ], 
    "stdout": "6\r\n7\r\n8\r\n9\r\n10\r\n", 
    "stdout_lines": [
        "6", 
        "7", 
        "8", 
        "9", 
        "10"
    ]
}
172.16.1.41 | CHANGED => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to 172.16.1.41 closed.\r\n", 
    "stderr_lines": [
        "Shared connection to 172.16.1.41 closed."
    ], 
    "stdout": "6\r\n7\r\n8\r\n9\r\n10\r\n", 
    "stdout_lines": [
        "6", 
        "7", 
        "8", 
        "9", 
        "10"
    ]
}

1.2.4 copy模块功能说明

功能说明:复制文件到远程主机
官方链接:http://docs.ansible.com/ansible/latest/copy_module.html

模块参数 说明
src 文件在本地的路径(可以是绝对路径,也可以是相对路径)
如果路径以“/”结束,只将该目录下的内容拷贝到目的地
如果路径不以“/”结束,那么目录和目录下的内容都会被复制
dest 文件拷贝到远端的绝对路径
owner 定义文件或目录在远端主机的属主名称
group 定义文件或目录在远端主机的属组名称
mode 定义文件或目录在远端主机的权限信息
backup 创建一个包含时间戳信息的备份文件,默认为no,创建备份文件为yes
content 代替src参数时,将文件内容直接设置为指定值,并且只能设置简单值
force 默认为yes,当远程文件内容和源文件内容不同时,将覆盖目标文件

参数实践:
1、将本地的/etc/hosts文件拷贝到远程主机的/tmp目录下,并且设置权限为755。

[root@m01 ~]$ ansible oldboy -m copy -a "src=/etc/hosts dest=/tmp/ mode=755"
172.16.1.31 | CHANGED => {
    "changed": true, 
    "checksum": "e52c528913b5c22d388cc2a18f6943641c8442c3", 
    "dest": "/tmp/hosts", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "fa2c31e4614da1256984a0307ba4f31f", 
    "mode": "0755", 
    "owner": "root", 
    "size": 332, 
    "src": "/root/.ansible/tmp/ansible-tmp-1556176066.11-6180630705927/source", 
    "state": "file", 
    "uid": 0
}
172.16.1.41 | CHANGED => {
    "changed": true, 
    "checksum": "e52c528913b5c22d388cc2a18f6943641c8442c3", 
    "dest": "/tmp/hosts", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "fa2c31e4614da1256984a0307ba4f31f", 
    "mode": "0755", 
    "owner": "root", 
    "size": 332, 
    "src": "/root/.ansible/tmp/ansible-tmp-1556176066.12-240612656636195/source", 
    "state": "file", 
    "uid": 0
}

查看结果:

[root@nfs01 /tmp]$ ll
总用量 4
-rwxr-xr-x 1 root root 332 4月  25 15:07 hosts
[root@backup /tmp]$ ll
总用量 4
-rwxr-xr-x 1 root root 332 4月  25 15:07 hosts

2、在第一个例子的前提下,将oldboy写入到远程主机的/tmp/hosts文件中,将属主和属组设为oldboy并备份:

[root@m01 ~]$ ansible oldboy -m copy -a "content=oldboy dest=/tmp/hosts owner=oldboy group=oldboy backup=yes" 
172.16.1.31 | CHANGED => {
    "backup_file": "/tmp/hosts.10398.2019-04-25@15:17:59~", 
    "changed": true, 
    "checksum": "da3a7ab3551120059810d0c7156a8150a0bc245a", 
    "dest": "/tmp/hosts", 
    "gid": 1000, 
    "group": "oldboy", 
    "md5sum": "890b185727556f1be31d7fe5ee5ce4dc", 
    "mode": "0755", 
    "owner": "oldboy", 
    "size": 6, 
    "src": "/root/.ansible/tmp/ansible-tmp-1556176677.67-124571767570836/source", 
    "state": "file", 
    "uid": 1000
}
172.16.1.41 | CHANGED => {
    "backup_file": "/tmp/hosts.10977.2019-04-25@15:17:59~", 
    "changed": true, 
    "checksum": "da3a7ab3551120059810d0c7156a8150a0bc245a", 
    "dest": "/tmp/hosts", 
    "gid": 1000, 
    "group": "oldboy", 
    "md5sum": "890b185727556f1be31d7fe5ee5ce4dc", 
    "mode": "0755", 
    "owner": "oldboy", 
    "size": 6, 
    "src": "/root/.ansible/tmp/ansible-tmp-1556176677.68-215982150895297/source", 
    "state": "file", 
    "uid": 1000

查看结果:

[root@nfs01 /tmp]$ ll
总用量 8
-rwxr-xr-x 1 oldboy oldboy   6 4月  25 15:17 hosts
-rwxr-xr-x 1 root   root   332 4月  25 15:11 hosts.10398.2019-04-25@15:17:59~

1.2.5 file模块功能说明

功能说明:设置文件属性
官方链接:http://docs.ansible.com/ansible/latest/file_module.html

模块参数 说明
src 要链接的文件路径(只能应用state=link),创建链接文件时使用
path 远端创建的文件路径
owner 定义文件或目录的属主名称
group 定义文件或目录的属组名称
mode 定义文件或目录的权限信息
recurse 递归授权
state= 指定参数touch:创建文件或更新时间戳信息
指定参数directory:创建目录
指定参数absent:目录以及文件被递归删除
指定参数link:创建或更改软链接
指定参数hard:创建硬链接

注:file模块可以使用command模块代替。
替代方案:

ansible oldboy  -m command -a " mkdir /tmp/oldboy warn=false "
ansible oldboy  -m command -a " touch /tmp/oldboy warn=false "
ansible oldboy  -m command -a "chmod 644 /etc/hosts warn=false"
ansible oldboy  -m command -a "chown oldboy.oldboy /etc/hosts warn=false"

举例对比说明:
1、创建目录:

mkdir /tmp/oldboy_dir
ansible oldboy -m file -a "dest=/tmp/oldboy_dir state=directory"

2、递归设置权限:

ansible oldboy -m file -a "dest=/tmp/oldboy_dir state=directory mode=644 recurse=yes"

3、创建文件:

touch /tmp/oldboy_file
ansible oldboy -m file -a "dest=/tmp/oldboy_file state=touch"

4、删除文件:

rm -f /tmp/oldboy_file
ansible oldboy -m file -a "dest=/tmp/oldboy_file state=absent"

5、创建链接文件:

ln -s /etc/hosts /tmp/link_file
ansible oldboy -m file -a "src=/etc/hosts dest=/tmp/link_file state=link"

6、更改文件属组、属主和权限

ansible oldboy -m file -a "dest=/tmp/oldboy_file state=touch owner=oldboy group=oldboy mode=644"

1.2.6 systemd模块功能说明

功能说明:启动停止服务
官方链接:http://docs.ansible.com/ansible/latest/service_module.html

模块参数 说明
name 想要管理的服务的名称
state 想要管理的服务的状态,包括started、stopped、restarted
enable 是否开机自启动,状态为yes no

实践:

[root@m01 ~]$ ansible oldboy -m systemd -a "name=crond.service enabled=no state=stopped "
[root@nfs01 ~]$ ansible oldboy -m command -a "systemctl status crond"
[root@m01 ~]$ ansible oldboy -m systemd -a "name=crond.service enabled=yes state=started"

1.2.7 cron模块功能说明

功能说明:管理定时任务条目信息模块
官方链接:http://docs.ansible.com/ansible/latest/cron_module.html

模块参数 说明
name 对想要执行的定时任务的描述
minute 运行定时任务的分钟时间信息
hour 运行定时任务的小时时间信息
day 运行定时任务的日期时间信息
month 运行定时任务的月份时间信息
weekday 运行定时任务的星期时间信息
job 运行的定时任务内容
state 参数为absent是删除定时任务
disabled 参数为yes是注释掉定时任务
backup 在修改定时任务前进行备份

示例1:添加如下定时任务:

05 03 * * * /bin/sh /server/scripts/backup.sh >/dev/null 2>&1

命令如下:

ansible oldboy -m cron -a "name='backup data' minute=05 hour=03 job='/bin/sh /server/scripts/backup.sh >/dev/null 2>&1'"

结果:

#Ansible: backup data
05 03 * * * /bin/sh /server/scripts/backup.sh >/dev/null 2>&1

示例2:删除定时任务:

ansible oldboy -m cron -a "name='backup data' state=absent"

1.2.8 yum模块功能说明

功能说明:yum包管理模块
官方链接:http://docs.ansible.com/ansible/latest/yum_module.html

模块参数 说明
name 需要安装的软件包名称信息
state 是安装(present or installed)或者卸载(absent or removed)

注意:不要使用yum卸载,如果要卸载,就用rpm -e卸载。
示例:安装Nginx服务

ansible oldboy -m yum -a "name=nginx state=installed"

检查结果:

[root@nfs01 oldboy_dir]# rpm -qa nginx
nginx-1.10.2-1.el6.x86_64

你可能感兴趣的:(2019-04-24-day 39 ansible的模块以及参数讲解)