三、ansible的模块
- ansible的模块非常多:600+
- ansible依赖模块完成具体工作
3.1 command模块
功能:
- 用来执行命令的模块
- 默认模块,可以省略
格式:
- -m command -a 命令
查看各个节点的内存
[root@master ~]
192.168.31.65 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 1819 272 1387 9 158 1398
Swap: 2047 0 2047
192.168.31.66 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 1819 272 1383 9 164 1399
Swap: 2047 0 2047
- command是默认的,可以省略
3.2 cron模块
作用:
- 定时周期完成特定的操作
格式
- -m cron -a "选项"
选项
- minute:设置以分钟为单位来运行
- state:设置添加或者删除计划任务
- present:添加计划任务
- absent:删除计划任务
- job:设置要执行的操作
- special_time:设置特殊时间点
- reboot:在系统重启的时候执行的操作
- daily:每天都执行一次的计划任务
- hourly:
- weekly:
- monthly:
- yearly:
案例:每隔2分钟执行一次echo操作
[root@master ~]
> -a 'name="mycron" state="present" job="echo \"123\"">>/tmp/test.log" minute=*/2'
结果会在各个节点创建接话任务
[root@master ~]
192.168.31.65 | CHANGED | rc=0 >>
#Ansible: None
*/2 * * * * echo "123">>/tmp/test.log
192.168.31.66 | CHANGED | rc=0 >>
#Ansible: None
*/2 * * * * echo "123">>/tmp/test.log
删除计划任务
[root@master ~]# ansible myservers -m cron -a 'name="mycron" state="absent"'
3.3 user模块
作用:
- 管理各个节点上的用户
格式
- -m user -a "选项"
选项
- name:指定用户名
- password:指定用户的密码
- state:是创建还是删除
- createhome:是否创建家目录 yes|no
- remove:当state=absent时,remove=yes则表示连同家目录一起删除
- groups:指定用户的属组
- system:是否为系统用户
- uid:用户uid
案例:在所有被管理节点上创建用户tom
[root@master ~]# ansible myservers -m user -a 'name="tom"'
[root@master ~]# ansible myservers -a 'tail -n1 /etc/passwd'
192.168.31.65 | CHANGED | rc=0 >>
tom:x:1000:1000::/home/tom:/bin/bash
192.168.31.66 | CHANGED | rc=0 >>
tom:x:1000:1000::/home/tom:/bin/bash
案例:删除tom用户
[root@master ~]# ansible myservers -m user -a 'name="tom" state="absent"'
案例:创建用户jerry,uid 为3000,所在组为gp001,shell为/bin/bash
[root@master ~]# ansible myservers -m group -a "name=gp001"
[root@master ~]# ansible myservers -m user \
> -a 'name="jerry" uid="3000" group="gp001" shell="/bin/bash"'
3.4 copy模块
作用:
- 目录和文件的复制
格式
- -m copy -a "选项"
选项
- src 指定原文件或目录。
- dest 被复制到远程主机的本地对象文件或者文件夹
- mode 设置复制后文件的权限 ,比如644
- owner 指定复制后的文件的属主
- backup 设置是否先将源文件备份.设定值:yes/no 缺省为yes
- force 是否强制覆盖同名文件.设定值:yes/no 缺省为no
- content 可替换 src,也就是直接用这个内容生成文件内容
案例1:将文件passwd复制到目标主机的tmp下,然后修改权限为777,属主改为jerry
[root@master ~]# ansible myservers -m copy \
> -a "src=/etc/passwd dest=/tmp mode=777 owner=jerry"
案例2:将两行内容复制tmp下,保存为文件b.txt
i am zxhk
i love golnag
[root@master ~]# ansible myservers -m copy \
> -a 'content="i am zxhk\ni love golang\n" dest=/tmp/b.txt'
3.5 file模块
作用:
- 对文件进行操作的模块,可以操作的内容包括
- 创建空文件、拷贝、移动、删除、链接
格式
- -m file -a "选项"
选项
- follow 如果原来的文件是link,拷贝后依旧是link
- force 强制执行
- group 设定一个群组拥有拷贝到远程节点的文件权限
- mode 等同于chmod
- owner 设定一个用户拥有拷贝到远程节点的文件权限
- path 目标路径,也可以用dest,name代替
- src 待拷贝文件/文件夹的原始位置。
- state 代表拷贝后是文件类型;
- link代表最终是个软链接;
- directory代表文件夹;
- hard代表硬链接;
- touch代表生成一个空文件;
- absent代表删除
案例1:在每个主机的tmp下创建一个空文件,文件名是new.txt
[root@master ~]# ansible all -m file -a 'path="/tmp/new.txt" state="touch"'
案例2:在每个主机的tmp的new.txt创建软链接new.txt.soft
[root@master ~]# ansible all -m file \
> -a 'src="/tmp/new.txt" path="/tmp/new.txt.soft" state="link"'
案例3:修改每个主机的tmp下new.txt的权限为000,属主为jerry
[root@master ~]# ansible all -m file -a "path=/tmp/new.txt mode=000 owner=jerry"
3.6 ping模块
作用:
- 这是个测试模块,测试主机是否都正常连接
案例:
[root@master ~]# ansible all -m ping
192.168.31.65 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.31.66 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
3.7 service模块
作用:
- 这模块很重要,是用来管理服务的
- 管理centos6的服务器,只能用service模块
格式
- -m service -a "选项"
选项
- state 有多个子选项
- started:启动服务
- stopped:关闭服务
- restarted:重启服务
- reloaded:重读服务的配置文件
- enabled 表示是否设置开机自动启动
- name 表示要控制的服务的名称
- runlevel 设置在哪些级别下自动启动
案例:查看httpd服务运行状态
[root@master ~]# ansible all -m command -a "systemctl status httpd"
[root@master ~]# ansible all -m command -a "service httpd status
案例:启动httpd服务,并且设置为开机自动启动
[root@master ~]
3.8 systemd模块
作用:
- 这模块很重要,是用来管理服务的
- 管理centos7的服务器,可以用service和systemd,建议用systemd模块
格式
- -m systemd -a "选项"
选项
- state 有多个子选项
- started:启动服务
- stopped:关闭服务
- restarted:重启服务
- reloaded:重读服务的配置文件
- enabled 表示是否设置开机自动启动
- name 表示要控制的服务的名称
- runlevel 设置在哪些级别下自动启动
[root@master ~]
> -a 'name="httpd.service" state="restarted" enabled="no"'
3.9 shell模块
作用:
- 与command模块类似,也是用于执行命令
- command只能执行简单命令
- shell模块可以执行复杂命令,可以使用变量
格式
- -m shell -a "选项"
案例:
[root@master ~]
3.10 script模块
作用:
- 将一个脚本文件发送到被管理节点,并执行较
格式
- -m scribe -a "选项"
案例:
首先创建一个shell脚本
[root@master ~]
useradd tom01
mkdir /tmp/qq
touch /tmp/baidu
使用ansible将脚本发送到被管理节点,并执行
[root@master ~]
3.11 yum模块
作用:
- 管理软件
格式
- -m yum -a "选项"
选项:
- name:软件名
- state:安装或者卸载
- present
- absent
案例:在所有节点上安装epel yum源
[root@master ~]
案例:在安装了epel源的节点上,安装nginx
[root@master ~]
案例:启动nginx
[root@master ~]
> -a 'name="nginx.service" state="started" enabled="on"'
3.12 setup模块
作用:
- 收集各个节点的参数信息:facts
格式
- -m setup
[root@master ~]
3.14 unarchive模块
作用:
- 将压缩包解压到目标主机的特定目录下
格式
- -m unarchive -a "选项"
选项:
- src:压解压的那个压缩包文件
- dest:指定解压到远程主机的哪个目录
案例:下载nginx的1.17.9版本,解压到远程主机的/usr/local/
[root@master ~]
[root@master ~]
[root@master ~]
3.15 reboot模块
作用:
- 重启远程主机
格式
- -m reboot
[root@master ~]
3.16 selinux模块
作用:
- 改变selinux的状态
格式
- -m selinux -a "选项"
选项:
- state:disabled
[root@master ~]
3.17 sysctl模块
作用:
- 用来修改内核参数
格式
- -m sysctl -a "选项"
选项:
- sysctl_file:知道内核文件的文件名
- name:内核参数的名称
- value:内核参数的值
案例:实现路由转发功能
[root@master ~]
> -a 'sysctl_file=/etc/sysctl.conf name=net.ipv4.ip_forward value=1'
3.18 stat模块
作用:
- 用来显示文件的属性信息,比如时间戳信息、uid、gid、inode、md5值等等
格式
- -m stat -a "选项"
选项:
- path:文件的绝对路径
案例:查看各个节点的/etc/passwd文件属性
[root@master ~]
> -a 'path="/etc/passwd" get_checksum="yes" checksum_algorithm="md5"'
3.19 replace模块
作用:
- 对字符串进行替换,支持正则表达式
格式
- -m replace -a "选项"
选项
- path:指定目标文件
- regexp:要替换的目标字符串,也可以是一个表达式
- replace:将目标字符串替换为什么字符串
- backup:是否对原始文件仅备份
案例:将目标主机的/tmp/passwd中的bash替换为BASH
[root@master ~]
> -a 'path=/tmp/passwd regexp=bash replace=BASH backup=yes'