刘正宁 发表于 2023-5-24 15:14:05

Ansible常用模块

Command模块

作用:使用ansible自带模块执行一些简单的命令 不能使用 > < | & ' '等特殊字符,如果需要使用,则用shell模块。
常用参数有:

[*]chdir:先切换工作目录,再执行后面的命令,一般情况下在编译时候使用;
[*]creates:先切换工作目录,再执行后面的命令,一般情况下在编译时候使用;
[*]removes:先切换工作目录,再执行后面的命令,一般情况下在编译时候使用
在节点服务器上面执行命令时,默认是在当前用户的家目录/root
ansible 192.168.1.2 -a 'ls'https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679908505.png
chdir先切换工作目录,再执行后面的命令,一般情况下在编译时候使用
ansible 192.168.1.2 -a 'chdir=/tmp pwd'https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679908575.png
creates如果creates的目录或文件存在,则不执行后面的操作
ansible httpd -a 'creates=/tmp ls /etc/passwd'ansible httpd -a 'creates=/lemon ls /etc/passwd'https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679908624.png
removes和creates相反,如果removes的文件存在,才执行后面的操作
ansible httpd -a 'removes=/tmp ls /etc/passwd'ansible httpd -a 'removes=/lemon ls /etc/passwd'https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679908687.png
使用特殊符号
ansible httpd,mysql -m command -a "ifconfig ens32"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679908702.png
ansible httpd -m command -a "ifconfig |awk NR==2'{print $2}'"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679908718.png
Shell模块

参数和command基本一样,都有chdir,creates,removes等参数。
调用bash执行命令,可以理解为command的升级版,与command区别在于他能调用一些复杂的命令了。但是,类似于ifconfig |awk NR==2'{print $2}'这种很复杂的命令,他依然做不到完美的处理结果。
注意:command和shell模块的核心参数直接为命令本身;而其它模块的参数通常为“key=value”
创建目录时的警告解决方案
ansible 192.168.1.2 -m shell -a 'mkdir /tmp/test'ansible 192.168.1.2 -m shell -a 'ls /tmp'https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679908856.png
测试创建节点主机已经存在的文件之后会不会覆盖
ansible httpd -m copy -a "content='very good\n' dest=/tmp/test/1.txt"    //在节点1主机创建数据文件ansible httpd -m shell -a 'cd /tmp/test && touch 1.txt && cat /tmp/test/1.txt'   //验证是否会被覆盖https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679908932.png
为了避免这种无意义的操作,使用creates如果文件存在就不执行后面的命令
ansible httpd -m shell -a 'creates=/tmp/test/1.txt cd /tmp/test && touch 1.txt && ls'https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679908971.png
验证shell模块能否使用特殊符号
ansible httpd,mysql -m shell -a "ifconfig ens32|grep 'RX'"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679908995.png
ansible httpd -m shell -a "ifconfig |awk NR==2'{print $2}'"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679909047.png
解决办法:写到脚本里,在copy到远程执行,再把需要的结果拉回执行命令的机器(执行Ansible命令的机器往往称为:Master机或者中控机或者堡垒机)。
操作如下
vim /root/shell.shifconfig | awk NR==2'{print $2}'保存退出chmod a+x /root/shell.shansible httpd,mysql -m copy -a "src=/root/shell.sh dest=/root/ mode=777"   //将本地shell.sh文件远程传送到两台节点上的/root路径下https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679909256.png
查看结果
ansible httpd,mysql -m shell -a "ls -l /root/"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679909281.png
然后在运行传过去的shell脚本;结果OK
ansible httpd,mysql -m shell -a "sh /root/shell.sh"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679909305.png
Copy 模块

复制本地文件至远程主机,并且能够改属性等。
注意:src和content选项不能同时使用,这两种方法是互斥的!
常用参数有:

[*]src:需要copy的文件的源路径
[*]dest:需要copy的文件的目标路径
[*]backup:对copy的文件进行备份
[*]content:直接在远程主机被管理文件中添加内容,会覆盖原文件内容
[*]mode:对copy到远端的文件设置权限
[*]owner:对copy到远端的文件设置属主
[*]group:对copy到远端文件设置属组
1、只将数据内容直接复制到文件中
ansible httpd -m copy -a "content='very good' dest=/root/good.txt"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679910289.png
Cat查看一下是否写入成功
ansible httpd -m shell -a "cat /root/good.txt"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679910303.png
建议:最好在数据结尾处加上\n换行符,不然就会出现下面这种情况!
https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679910327.png
2、将server文件复制到节点主机上并修改文件名及权限属主数组
echo 'lemon is a very good!' > /root/nice.txt    // 创建一个文件ansible httpd -m shell -a 'useradd tom'      //为节点1创建用户ansible httpd -m copy -a "src=/root/nice.txt dest=/root/very.txt mode=744 owner=tom group=tom"src:server的文件路径
dest: 节点主机的接收路径
mode: 复制过去的文件权限
验证
ansible httpd -m shell -a "ls -lh very.txt && cat /root/very.txt"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679910493.png
备份:更新文件数据并备份之前未被修改过的数据
echo 'lemon is a nice man!!!!' >> nice.txt   //更改文件数据ansible httpd -m copy -a 'src=/root/nice.txt dest=/root/very.txt backup=yes'https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679910581.png
ansible httpd -m shell -a 'ls /root'    //验证ansible httpd -m shell -a 'cat /root/very.txt'ansible httpd -m shell -a 'cat /root/very.txt.21171.2020-01-02@14:34:45'https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679910593.png
Unarchive模块

直接将server上的tar包解压传到指定的节点主机路径上。
ansible mysql -m unarchive -a "src=/root/nginx-1.12.2.tar.gz dest=/root/ copy=yes"ansible mysql -m shell -a "ls -ld /root/nginx-*"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679910636.png
Script模块

用于在被管理机器上面执行shell脚本的模块,脚本无需在被管理机器上面存在,执行结果会在server端上输出。
常用参数

[*]free_form:必须参数,指定需要执行的脚本,脚本位于 ansible 管理主机本地,并没有具体的一个参数名叫 free_form,具体解释请参考 command 模块。
[*]chdir:此参数的作用就是指定一个远程主机中的目录,在执行对应的脚本之前,会先进入到 chdir 参数指定的目录中。
[*]creates:使用此参数指定一个远程主机中的文件,当指定的文件存在时,就不执行对应脚本,可参考 command 模块中的解释。
[*]removes:使用此参数指定一个远程主机中的文件,当指定的文件不存在时,就不执行对应脚本,可参考 command 模块中的解释。
1、如果ansible主机中的 /root/test.sh 脚本将在httpd主机中执行,执行此脚本之前,会先进入到httpd主机中的/opt目录。
echo -e '#!/bin/bash\necho `hostname`\necho `pwd`' > /root/test.shansible httpd -m script -a 'chdir=/opt /root/test.sh'https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679910765.png
2、如果httpd主机中的/bucunzai的文件存在,ansible主机中的/root/test.sh脚本将不会在httpd主机中执行。
ansible httpd -m script -a "creates=/bucunzai /root/test.sh"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679910814.png
3、如果httpd主机中的/root/test文件不存在,ansible主机中的/root/test.sh脚本将不会在httpd主机中执行。
ansible httpd -m script -a "removes=/test /root/test.sh"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679910821.png
File模块

用于对文件的处理,创建,删除,权限控制等。
相关选项:

[*]path:在节点主机上创建的目录或文件名
[*]recurse:递归
[*]state:类型如下

[*]state=directory:创建目录
[*]state=touch:创建文件
[*]state=mode:设置文件或目录权限
[*]state=owner:设置文件或目录属主信息
[*]state=group:设置文件或目录属组信息
[*]state=absent:删除文件或目录
[*]state=link:创建软链接
[*]state=hard:创建硬链接

给节点1创建目录及文件;在此之前先将节点上的/root/路径下的目录及文件清空
ansible httpd -m shell -a "rm -rf /root/*"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679911030.png
创建目录
# ansible httpd -m file -a "path=/root/lemon state=directory"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679911052.png
查看一下结果
ansible httpd -m shell -a "ls -l /root/"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679911099.png
创建文件
ansible httpd -m file -a "path=/root/hehe.txt state=touch"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679911125.png
查看一下结果
ansible httpd -m shell -a "ls -l /root/"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679911152.png
给hehe.txt文件创建一个软连接(src表示源文件,dest表示目标文件)
ansible httpd -m file -a "src=/root/hehe.txt dest=/hehe state=link"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679911175.png
查看结果
ansible httpd -m shell -a "ls -l /hehe"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679911201.png
删除目录
ansible httpd -m file -a "path=/root/lemon state=absent"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679911226.png
删除文件(包括软连接)
ansible httpd -m file -a "path=/hehe state=absent"ansible httpd -m file -a "path=/root/hehe.txt state=absent"查看一下结果
ansible httpd -m shell -a "ls -l /root/"ansible httpd -m shell -a "ls -l /hehe"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679911282.png
创建文件时同时设置权限、属主数组等信息
ansible httpd -m file -a 'path=/root/test state=directory mode=700 owner=tom group=tom'ansible httpd -m shell -a 'ls -lh /root'       //验证https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679911315.png
使用递归
ansible httpd -m shell -a 'touch /root/test/{1..3}.txt && ls -lh test'https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679911348.png
ansible httpd -m file -a 'path=/root/test mode=700 owner=tom group=tom recurse=yes'https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679911357.png
ansible httpd -m shell -a 'ls -lh /root/test'       //验证https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679911382.png
Fetch模块

从节点主机上拉取文件到本机,拉取下来的内容会保留目录结构,一般情况用在收集被管理机器的日志文件等。
只能fetch文件,不能fetch目录,如果想拉目录,先tar/zip打包 再拉到本机即可。
ansible 192.168.1.2 -m fetch -a 'src=/var/log/cron dest=/root'

[*]src=/var/log/cron:节点主机的路径文件
[*]dest=/root/:server的路径
https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679911479.png
https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1679911517.png
cron模块

cron模块
相关选项:

[*]job            // 指定需要执行的任务
[*]minute      // 分钟
[*]hour          //小时
[*]day         // 天
[*]month       //月
[*]weekday   // 周
[*]name      // 对计划任务进行描述
[*]state      // 指定状态,默认为添加定时任务

[*]absetn   // 删除计划任务
[*]prsent   // 添加定时任务

// 创建一个每隔五分钟同步一次时间的计划任务ansible httpd -m cron -a "minute='*/5' job='/usr/sbin/ntpdate 172.16.0.1 &> /dev/null' name='Synctime'"解释:minute:分钟job:命令name:计划任务的名字// 查看一下结果ansible httpd -m shell -a "crontab -l"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1680060492.png
删除计划任务
ansible httpd -m cron -a "state=absent name='Synctime'"ansible httpd -m shell -a "crontab -l"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1680060508.png
注:删除时最好将job的命令也写上,因为可能会有重名的计划任务。
Yum 模块

用于对软件包的管理,下载、安装、卸载、升级等操作。
相关选项:

[*]name                  // 指定要操作的软件包名字
[*]download_dir      // 指定下载软件包的存放路径,需要配合download_only一起使用
[*]download_only    // 只下载软件包,而不进行安装,和yum --downloadonly一样
[*]list:

[*]installed      // 列出所有已安装的软件包
[*]updates       // 列出所有可以更新的软件包
[*]repos          // 列出所有的yum仓库

[*]state:

[*]installed, present   // 安装软件包(两者任选其一都可以)
[*]removed, absent      // 卸载软件包
[*]latest               // 安装最新软件包

# 列出所有已安装的软件包ansible 192.168.1.2 -m yum -a 'list=installed'# 列出所有可更新的软件包ansible 192.168.1.2 -m yum -a 'list=updates'#列出所有的yum仓库ansible 192.168.1.2 -m yum -a 'list=repos'# 安装包组,类似yum groupinstall 'Development Tools'ansible 192.168.1.2 -m yum -a 'name="@Development Tools" state=installed'# 安装软件包ansible httpd -m yum -a "name=httpd state=latest"解释:name=httpd    #软件名state=latest#安装yum源里最新的版本https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1680070318.png
注:如果不想有这些输出,直接在后面跟上“>> /dev/null”输出到黑洞里面
// 查看一下结果ansible httpd -m shell -a "rpm -qa httpd"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1680070354.png
# 卸载软件包ansible 192.168.1.2 -m yum -a 'name=httpd state=removed'# 验证ansible httpd -m shell -a "rpm -qa httpd"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1680070394.png
yum_repository模块

yum_repository 模块可以帮助我们管理远程主机上的 yum 仓库。
常用参数:

[*]name参数:必须参数,用于指定要操作的唯一的仓库ID,也就是”.repo”配置文件中每个仓库对应的”[中括号]”内的仓库ID。
[*]baseurl参数:此参数用于设置 yum 仓库的 baseurl。
[*]description参数:此参数用于设置仓库的注释信息,也就是”.repo”配置文件中每个仓库对应的”name字段”对应的内容。
[*]file参数:此参数用于设置仓库的配置文件名称,即设置”.repo”配置文件的文件名前缀,在不使用此参数的情况下,默认以 name 参数的仓库ID作为”.repo”配置文件的文件名前缀,同一个”.repo” 配置文件中可以存在多个 yum 源。
[*]enabled参数:此参数用于设置是否激活对应的 yum 源,此参数默认值为 yes,表示启用对应的 yum 源,设置为 no 表示不启用对应的 yum 源。
[*]gpgcheck参数:此参数用于设置是否开启 rpm 包验证功能,默认值为 no,表示不启用包验证,设置为 yes 表示开启包验证功能。Yes:1   No:0
[*]gpgcakey:当 gpgcheck 参数设置为 yes 时,需要使用此参数指定验证包所需的公钥。
[*]state参数:默认值为 present,当值设置为 absent 时,表示删除对应的 yum 源。
示例:
1.在 httpd 主机上设置ID为 local 的 yum 源,并启用它(local源使用系统光盘镜像作为本地 yum 源,以便测试举例)。ansible httpd -m yum_repository -a 'file=lemon name=A baseurl=file:///mnt description="local" enabled=yes gpgcheck=no'2.在 testA 主机上设置ID为 local 的 yum 源,开启包验证功能,并指定验证包所需的公钥位置为 /media/RPM-GPG-KEY-CentOS-7。ansible httpd -m yum_repository -a 'name=local baseurl=file:///mnt description="A" gpgcheck=yes gpgcakey=file:///mnt/RPM-GPG-KEY-CentOS-7'3.在httpd主机上删除/etc/yum.repos.d/alibaba.repo 配置文件中的 aliEpel 源。ansible httpd -m yum_repository -a 'file=lemon name=A state=absent'pip模块

用于安装python中的包(需要联网)。
# 查看模块参数ansible-doc -s pip# 配置阿里yum源ansible httpd -m shell -a 'curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && yum makecache && yum -y install epel epel-release'# 使用pip时,需要保证被管理机器上有python-pip软件包ansible 192.168.1.2 -m yum -a 'name=python-pip'# 安装python的三方包ansible 192.168.1.2 -m pip -a 'name=flask'ansible httpd -m shell -a 'find / -name flask' //验证https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1680070772.png
Service|Systemd模块

用于对服务进行管理,服务的启动、关闭、开机自启等。
相关选项:

[*]name 指定服务的名字,比如nginx.service,crond.service
[*]state 填入你要执行的操作,比如reloaded, restarted, started, stopped
[*]enabled 指定服务开机自启 systemctl enable nginx
启动服务ansible httpd -m yum -a "name=httpd state=latest"ansible httpd -m service -a "name=httpd state=started"查看一下结果ansible httpd -m shell -a "systemctl status httpd | grep Active"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1680071112.png
添加开机启动项ansible httpd -m service -a "name=httpd enabled=true"查看一下结果ansible httpd -m shell -a "systemctl is-enabled httpd"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1680071127.png
Selinux模块

管理Selinux的模块。
相关选项:
https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1680071308.png
关闭节点1的selinux
ansible httpd -m selinux -a 'state=disabled'https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1680071342.png
group模块

组的管理模块。
创建组并指定组的GID号
ansible httpd -mgroup -a "name=alex"ansible httpd -mgroup -a "name=lemon gid=1111"ansible httpd -m shell -a "tail -2 /etc/group"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1680071436.png
删除组
ansible httpd -mgroup -a "name=alex state=absent"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1680071456.png
User模块

用于对系统用户的管理,用户的创建、删除、家目录、属组等设置。
相关选项:

[*]name         // 指定用户的名字
[*]home         // 指定用户的家目录
[*]uid            // 指定用户的uid
[*]group         // 指定用户的用户组
[*]groups       // 指定用户的附加组
[*]password   // 指定用户的密码
[*]shell          // 指定用户的登录shell
[*]create_home   // 是否创建用户家目录,默认是yes
[*]remove   // 删除用户时,指定是否删除家目录
[*]state         // 设置账号状态,不知道为创建,指定值为absent则表示删除
创建用户并指定家目录,指定uid及组和shell环境
ansible httpd -m user -a 'name=AA shell=/bain/bash home=/opt/AA uid=1002 group=root'ansible httpd -m shell -a "tail -1 /etc/passwd"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1680071587.png
创建用户,不创建家目录,并且不能登录
ansible httpd -m user -a 'name=BB shell=/sbin/nologin uid=1003 create_home=no'ansible httpd -m shell -a "tail -2 /etc/passwd"      //验证https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1680071624.png
https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1680071630.png
删除用户
ansible 192.168.1.2 -m user -a 'name=BB state=absent'ansible httpd -m shell -a "tail -2 /etc/passwd"https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1680071665.png
删除用户并删除家目录
ansible httpd -m user -a 'name=AA state=absent remove=yes'ansible httpd -m shell -a 'cd /opt/AA/'             //验证https://bucket-1301203199.cos.ap-shanghai.myqcloud.com/usr/uploads/2023/03/1680071696.png

来源:https://www.cnblogs.com/ArMinLi/p/17428314.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Ansible常用模块