(1). command模块
功能:在远程主机上执行命令,这个模块为默认模块,用ansible运行时,可以不用指定 -m
注意:command不支持管道和重定向符号('<','>','|',';',&','*')# cd /home/lixin/Desktop && ls -lha
[lixin@manager ~]$ ansible test -i erp/hosts -m command -a "chdir=/home/lixin/Desktop ls -lha"
(2). shell模块
功能: shell模块可以帮助我们在远程主机上执行命令,支持管道和重定向符号,与command模块不同的是,shell模块在远程主机中执行命令时,会经过远程主机上的/bin/sh程序处理.
# 支持管道符
# ls -lha|grep .ansible
[lixin@manager ~]$ ansible all -i erp/hosts -m shell -a "ls -lha|grep .ansible"
(3). script模块
功能:script模块可以帮助我们在远程主机上执行ansible主机上的脚本.
# 1. 创建脚本
[root@manager ~]$ cat tomcat.sh <<EOF
> #!/bin/bash
> yum -y install tomcat
> EOF
# 2. 配置可执行权限
[root@manager ~]$ chmod 755 tomcat.sh
# 3. 在远程主机上,执行tomcat.sh脚本
[root@manager lixin]# ansible all -i erp/hosts -m script -a "/home/lixin/tomcat.sh"
# 4. 验证是否安装了tomcat
[root@test ~]# yum list tomcat
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.163.com
* epel: epel.01link.hk
* extras: mirror.lzu.edu.cn
* updates: mirror.lzu.edu.cn
## **************************************************************************************************************
Installed Packages 代表tomcat安装成功
## **************************************************************************************************************
tomcat.noarch 7.0.76-16.el7_9 @updates
[root@test ~]#
(4). copy模块
功能:copy模块的作用就是拷贝ansible主控节点上的文件到被控节点上.
# src/content : 源文件
# dest : 目标文件
# mode : 文件拷贝到远程主机后的权限
# backup : 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份
# owner : 所属用户
# group : 所属组
[root@manager lixin]# ansible erp -i erp/hosts -m copy -a 'src=/home/lixin/tomcat.sh dest=/root/ mode=0755 backup=yes owner=lixin group=lixin'
(5). fetch模块
功能:从远程主机(被控机器)提取文件(不支持目录)到ansbible的主控节点.
# 可以提取远程主机的日志回到本地
# src : 远程主机文件
# dest : 主控节点目录(只能是目录,因为src会是多个,会在这个目录下生成主机名)
[root@manager lixin]# ansible erp -i erp/hosts -m fetch -a 'src=/root/tomcat.sh dest=/root/'
# 验证目录
[root@manager /]# tree /root/
/root/
└── test # 远程主机的名称
└── root
└── tomcat.sh
(6). file模块
功能:可以帮助我们完成一些对文件操作,创建文件或目录、删除文件或目录、修改文件权限.
# path : 路径
# state : directory(目录)/touch(文件)/link(软链接)/hard(硬链接)/absent(删除)
# recurse : 递归
# force : 强制
[root@manager lixin]# ansible erp -i erp/hosts -m file -a 'path=/root/hello.txt state=touch'
# 递归创建目录,并且指定所属组,所属用户,执行权限
[root@manager lixin]# ansible erp -i erp/hosts -m file -a 'path=/root/a/b state=directory recurse=yes owner=lixin group=lixin mode=0755'
# 在目录下再创建文件
[root@manager lixin]# ansible erp -i erp/hosts -m file -a 'path=/root/a/b/hello.txt state=touch'
# 删除文件
[root@manager lixin]# ansible erp -i erp/hosts -m file -a 'path=/root/a/b/hello.txt state=absent'
# 删除目录
[root@manager lixin]# ansible erp -i erp/hosts -m file -a 'path=/root/a state=absent force=yes'
# 创建软链接
[root@manager lixin]# ansible erp -i erp/hosts -m file -a 'path=/opt/mysql-5.7.34-linux-glibc2.12-x86_64 state=link src=/opt/mysql'
(7). unarchive模块
功能:可以帮且我们进行解压缩.
# copy : yes(拷贝文件是从主控机器到远程机器)/no(从远程机器到拷贝文件到主控机器)
# remote_src : 和copy互斥,yes:表示文件在远程主机上,不在ansible主控节点上,no:表示文件在ansible主控节点上.
# src : 源路径
# dest : 解压缩到目标主机上的目标路径
# copy如果是yes,代表拷贝文件到目标主机并解压.
# copy如果是no,代表不需要拷贝文件,直接在目标主机上解压.
[root@manager lixin]# wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz
# 拷贝本机文件(/home/lixin/mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz)到目标主机(test)的/opt目录下,并在目标主机的/opt下解压.
[root@manager lixin]# ansible erp -i erp/hosts -m unarchive -a 'src=/home/lixin/mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz dest=/opt copy=yes'
# 拷贝文件到远程主机上
[root@manager lixin]# ansible erp -i erp/hosts -m copy -a 'src=/home/lixin/mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz dest=/opt'
# 不需要拷贝文件(copy=no),直接解压远程主机目录:/opt/mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz)到/opt目录下.
[root@manager lixin]# ansible erp -i erp/hosts -m unarchive -a 'src=/opt/mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz dest=/opt copy=no'
(8). archive模块
功能:对ansible远程主机上的文件进行压缩.
# format : (Choices: bz2, gz, tar, xz, zip)[Default: gz]
# path : 过程主机的目录
# dest : 目标路径
# 压缩远程主机上的目录(/home/lixin/a),生成压缩文件到:/home/lixin/a.zip,压缩格式为:zip
[root@manager lixin]# ansible erp -i erp/hosts -m archive -a 'path=/home/lixin/a dest=/home/lixin/a.zip format=zip'
(9). hostname模块
功能:管理主机名
# 更改主机清单中某个机器的名称
# 修改远程主机的名称
# echo "test2" > /etc/hostname
[root@manager lixin]# ansible erp -i erp/hosts -m hostname -a 'name=test2'
(10). cron模块
功能: 定时任务 支持时间: minute/hour/day/month/weekday
# disabled : 禁用定时任务
# name : 给定时任务定义一个名称,用于查找定时任务.
# state : absent删除定时任务
[root@manager lixin]# cat > test.sh <<EOF
echo `date "+%Y-%m-%d %H:%M:%S"` >> /tmp/log.txt
EOF
# 1. 拷贝脚本到远程主机
[root@manager lixin]# ansible erp -i erp/hosts -m copy -a 'src=/home/lixin/test.sh dest=/opt/test.sh mode=0755'
# 2. 创建定时任务(周一到周五,0点过一分执行一次)
[root@manager lixin]# ansible erp -i erp/hosts -m cron -a 'weekday=1-5 hour=0 minute=1 name="mysql-dump" job="/mysql-dump.sh &> /dev/null " '
# 3. 创建定时任务(每隔1分钟执行一次)
[root@manager lixin]# ansible erp -i erp/hosts -m cron -a 'minute=*/1 name=log job="/opt/test.sh" disabled=no'
# 去test机器查询有哪些执行任务:
[root@test opt]# crontab -l
#Ansible: log
*/1 * * * * /opt/test.sh
(11). yum模块
功能:管理软件包
# name : 包名称
# state : installed/removed
# 安装tomcat
[root@manager lixin]# ansible erp -i erp/hosts -m yum -a 'name=tomcat state=installed'
# 列出可安装的tomcat包(yum list tomcat)
[root@manager lixin]# ansible erp -i erp/hosts -m yum -a 'list=tomcat'
# 删除tomcat
[root@manager lixin]# ansible erp -i erp/hosts -m yum -a 'name=tomcat state=removed'
(12). service模块
功能: 启动服务
# state : started(启动)/stopped(停止)/reloaded(重新加载)/restarted(重新启动)
# 启动服务,并设置为开机就启动
[root@manager lixin]# ansible erp -i erp/hosts -m service -a 'name=tomcat state=started enabled=yes'
# 停止服务
[root@manager lixin]# ansible erp -i erp/hosts -m service -a 'name=tomcat state=stopped'
# 检查下端口是否打开
[root@manager lixin]# ansible erp -i erp/hosts -m shell -a 'ss -tlnp|grep 8080'
(13). group模块
功能:对用户组进行管理
# 创建group
[root@manager lixin]# ansible erp -i erp/hosts -m group -a 'name=mysql'
(14). user模块
功能:对用户进行管理
# remove : yes(是否删除目录)
# 创建用户
[root@manager lixin]# ansible erp -i erp/hosts -m user -a 'name=mysql group=mysql groups="root,mysql" home="/home/mysql" shell="/sbin/nologin" system=yes create_home=yes comment="mysql user" '
# 删除用户以及目录
[root@manager lixin]# ansible erp -i erp/hosts -m user -a 'name=mysql state=absent remove=yes'
(15). lineinfile模块
功能:基于正则,替换某一行的内容
# 有点类似于 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# path : 路径
# regexp : 使用正则表达式匹配对应的行,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换.
# line : 使用此参数指定文本内容
# backup : True/False(操作之前是否先备份)
# 整行替换
[root@manager lixin]# ansible erp -i erp/hosts -m lineinfile -a " path='/etc/selinux/config' regexp='^SELINUX=enforcing' line='SELINUX=disabled' "
(16). replace模块
功能:基于正则,替换所有内容
# 有点类似于 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# regexp : 使用正则表达式匹配对应的行,如果有多行文本都能被匹配,则所有被匹配到的文本都会被替换(与lineinfile).
[root@manager lixin]# ansible erp -i erp/hosts -m replace -a " path='/root/fstab' regexp='^(UUID.*)' replace='#\1' "
(17). setup模块
功能:用来收集远程主机的系统信息,因为收集信息,影响速度,可以配置:gather_facts:no来禁止Ansible收集facts信息.
[root@manager lixin]# ansible erp -i erp/hosts -m setup
# 主机名称
[root@manager lixin]# ansible erp -i erp/hosts -m setup -a "filter=ansible_hostname"
# 内存信息
[root@manager lixin]# ansible erp -i erp/hosts -m setup -a "filter=ansible_memory_mb"
# 系统版本
[root@manager lixin]# ansible erp -i erp/hosts -m setup -a "filter=ansible_distribution_major_version"