上一篇已经介绍了Ansible架构的介绍及安装,这一篇我们来通过文字讲解及实践进一步学习了解Ansible常见模块的使用。众所周知,Ansible是模块化、插件化的,支持的插件也是非常的众多,所有的操作基本都是通过调用不同的插件去完成的。
1、command/shell模块
语法格式:
ansible $hostgroup -i 主机清单 -m 模块名 -a "命令/参数"
需要注意的是:
- 所有可以使用command模块完成的任务基本都可以使用shell模块实现
- command模块不支持管道符
- 能使用shell模块就尽量不要使用command模块
一下通过几个例子进行说明
- 使用Ansible执行lsblk命令,查看输出
# 分别使用command和shell模块执行lsblk命令
[root@Ansible opt]# ansible client -i hosts -m command -a "lsblk"
192.168.91.110 | CHANGED | rc=0 >>
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─rl-root 253:0 0 17G 0 lvm /
└─rl-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 2.1G 0 rom
[root@Ansible opt]# ansible client -i hosts -m shell -a "lsblk"
192.168.91.110 | CHANGED | rc=0 >>
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─rl-root 253:0 0 17G 0 lvm /
└─rl-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 2.1G 0 rom
# 分别使用command和shell模块执行lsblk命令并使用管道符过滤sr0关键字
[root@Ansible opt]# ansible client -i hosts -m command -a "lsblk |grep sr0"
192.168.91.110 | FAILED | rc=32 >>
lsblk: |grep:不是一个块设备
lsblk: sr0:不是一个块设备non-zero return code
[root@Ansible opt]# ansible client -i hosts -m shell -a "lsblk |grep sr0"
192.168.91.110 | CHANGED | rc=0 >>
sr0 11:0 1 2.1G 0 rom
通过上面的执行结果,可以看出使用command模块加上管道符时会报错,shell模块显示正常。以上通过一个简单的例子说明了command模块与shell模块在使用上的差异,但以上介绍的两个模块的用法可远不止于此,command和shell模块可以结合几乎所有的可执行命令
# 查看目标主机/etc/passwd文件内容
[root@Ansible opt]# ansible client -i hosts -m shell -a "cat /etc/passwd"
[root@Ansible opt]# ansible client -i hosts -m command -a "cat /etc/passwd"
# 查看目标主机的内存使用情况
[root@Ansible opt]# ansible client -i hosts -m shell -a "free -m"
192.168.91.110 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 739 190 110 4 438 421
Swap: 2047 1 2046
[root@Ansible opt]# ansible client -i hosts -m command -a "free -m"
192.168.91.110 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 739 190 110 4 438 421
Swap: 2047 1 2046
# 查看目标主机的系统时间
[root@Ansible opt]# ansible client -i hosts -m shell -a "date"
192.168.91.110 | CHANGED | rc=0 >>
2023年 06月 26日 星期一 18:46:04 CST
[root@Ansible opt]# ansible client -i hosts -m command -a "date"
192.168.91.110 | CHANGED | rc=0 >>
2023年 06月 26日 星期一 18:46:11 CST
2、yum模块
在我们的日常工作中面不了需要在大批量的主机上安装软件,这个时候我们就可以使用Ansible的yum模块进行批量部署。同时Ansible为我们提供了一个查看模块使用方法的帮助命令:ansible-doc,我们可以使用此命令查看yum模块的具体用法:
# 查看支持的模块
ansible-doc -l
# 查看模块用法
ansible-doc -s 模块名
# 查看yum模块用法
ansible-doc -s yum
yum模块是用于在远程主机上安装、升级、删除和查询软件包的模块。它使用yum包管理器来执行这些操作
使用yum模块安装mariadb-server
[root@Ansible opt]# ansible client -i hosts -m yum -a "name=mariadb-server state=present"
192.168.91.110 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Installed: mariadb-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.x86_64",
"Installed: mariadb-server-utils-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.x86_64",
"Installed: mariadb-backup-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.x86_64",
"Installed: mariadb-gssapi-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.x86_64"
]
}
以上命令中各参数的含义:
name:指定要安装的软件名
state:指定状态(包含安装和卸载,present表示安装,absent表示卸载)
从输出信息可以看出,mariadb已经在192.168.91.110节点上安装成功了,同时我们也可以在192.168.91.110节点上验证
[root@192-168-91-110 ~]# rpm -q mariadb-server
mariadb-server-10.3.35-1.module+el8.6.0+1005+cdf19c22.x86_64
yum模块还支持很多的安装参数,大家可以自行通过命令帮助进行尝试,类如:
- enablerepo/disablerepo # 指定使用或禁用哪个repo源来安装
- download_only/download_dir # 指定仅下载不安装及rpm包的的保存目录
3、service/systemd模块
顾名思义,service/systemd模块主要是用来管理各种服务的启停及是否开机自启动的模块。两个模块的用法基本相同,service模块更多的用在7系类之前的操作系统上,systemd模块则更多的用于管理systemd类型的服务。
同样的可以使用上面的方法查看其模块的用法,下面我就演示将以上例子中安装的mariadb-server启动并设置为开机自启动,因为上面的例子当中只是在节点上安装了mariadb-server,并未启动。
可以通过ansible-doc命令查看模块帮助
查看当前状态,刚好我们可以使用shell模块进行远程查看
# 查看当前状态
[root@Ansible opt]# ansible client -i hosts -m shell -a "systemctl status mariadb"
192.168.91.110 | FAILED | rc=3 >>
● mariadb.service - MariaDB 10.3 database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Docs: man:mysqld(8)
https://mariadb.com/kb/en/library/systemd/non-zero return code
# 启动
[root@Ansible opt]# ansible client -i hosts -m service -a "name=mariadb state=started enabled=yes"
192.168.91.110 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"enabled": true,
"name": "mariadb",
"state": "started",
...
...
...
# 输出信息过多,进行了删除
# 再次查看状态
[root@Ansible opt]# ansible client -i hosts -m shell -a "systemctl status mariadb"
192.168.91.110 | CHANGED | rc=0 >>
● mariadb.service - MariaDB 10.3 database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2023-06-26 19:35:10 CST; 3min 2s ago
Docs: man:mysqld(8)
https://mariadb.com/kb/en/library/systemd/
Process: 12308 ExecStartPost=/usr/libexec/mysql-check-upgrade (code=exited, status=0/SUCCESS)
Process: 12163 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mariadb.service (code=exited, status=0/SUCCESS)
Process: 12139 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS)
Main PID: 12273 (mysqld)
Status: "Taking your SQL requests now..."
Tasks: 30 (limit: 4498)
Memory: 58.4M
CGroup: /system.slice/mariadb.service
└─12273 /usr/libexec/mysqld --basedir=/usr
6月 26 19:35:09 192-168-91-110 mysql-prepare-db-dir[12210]: which will also give you the option of removing the test
6月 26 19:35:09 192-168-91-110 mysql-prepare-db-dir[12210]: databases and anonymous user created by default. This is
6月 26 19:35:09 192-168-91-110 mysql-prepare-db-dir[12210]: strongly recommended for production servers.
6月 26 19:35:09 192-168-91-110 mysql-prepare-db-dir[12210]: See the MariaDB Knowledgebase at http://mariadb.com/kb
6月 26 19:35:09 192-168-91-110 mysql-prepare-db-dir[12210]: Please report any problems at http://mariadb.org/jira
6月 26 19:35:09 192-168-91-110 mysql-prepare-db-dir[12210]: The latest information about MariaDB is available at http://mariadb.org/.
6月 26 19:35:09 192-168-91-110 mysql-prepare-db-dir[12210]: Consider joining MariaDB's strong and vibrant community:
6月 26 19:35:09 192-168-91-110 mysql-prepare-db-dir[12210]: https://mariadb.org/get-involved/
6月 26 19:35:09 192-168-91-110 mysqld[12273]: 2023-06-26 19:35:09 0 [Note] /usr/libexec/mysqld (mysqld 10.3.35-MariaDB) starting as process 12273 ...
6月 26 19:35:10 192-168-91-110 systemd[1]: Started MariaDB 10.3 database server.
可以看到mariadb目前已处于运行状态,并设置为了开机自启动。
关于使用service模块时,涉及参数的说明:
- name:指定要操作的服务名
- state:指定服务状态,包括started、stoped、restarted、reloaded
- enabled:布尔值(yes/no),指定是否开机自启动
- runlevel:指定服务启动级别
- sleep:当state设置为restarted时,表示执行stop与start操作时,中间间隔的时间,单位为秒。
以上为本章节的全部内容,希望大家参考学习、举一反三、勤加练习加深印象。后期还有很多更高级的模块进行介绍。后面的内容会更加精彩,敬请关注!