如何在智能告警平台CA触发测试告警
932
2022-10-07
自动化运维工具Ansible第三篇——Ansible模块实用技巧(1)
模块介绍
Ansible是基于模块进行工作的,用户可以通过命令查看Ansible当前已加载的模块。
ansible-doc -l
终端会进入一个说明界面,按Q键即可退出。
Ansible的模块都可以通过命令进行调用,具体命令格式如下
ansible [节点] -m [模块] -a [参数]
节点可以是某个被管理节点,也可以是某个主机组,-m用于指定需要调用的模块,-a用于指定参数。
查看各个模块的具体用法:
ansible-doc shell
输出内容为全英文,看着就头大了,下面听我来细细讲解。
setup模块
setup模块用于获取被管理节点的详细信息,包括软件信息与硬件信息。
执行一下试试:
ansible host1 -m setup
输出结果如下。
host1 | SUCCESS => { "ansible_facts": { "ansible_all_ipv4_addresses": [ "192.168.0.105" ], "ansible_all_ipv6_addresses": [], "ansible_apparmor": { "status": "disabled" }, "ansible_architecture": "x86_64", "ansible_bios_date": "04/13/2018", "ansible_bios_version": "6.00", "ansible_cmdline": { "BOOT_IMAGE": "/vmlinuz-3.10.0-1127.10.1.el7.x86_64", "crashkernel": "auto", "ipv6.disable": "1", "quiet": true, "rd.lvm.lv": "centos/swap", "rhgb": true, "ro": true, "root": "/dev/mapper/centos-root" }, "ansible_date_time": { "date": "2020-06-23", "day": "23", "epoch": "1592927284", "hour": "23", "iso8601": "2020-06-23T15:48:04Z", "iso8601_basic": "20200623T234804232203", "iso8601_basic_short": "20200623T234804", "iso8601_micro": "2020-06-23T15:48:04.232277Z", "minute": "48", "month": "06", "second": "04", "time": "23:48:04", "tz": "CST", "tz_offset": "+0800", "weekday": "Tuesday", "weekday_number": "2", "weeknumber": "25", "year": "2020" }, ...
篇幅有限,先展示这么多。
copy模块
copy模块可以将管理节点中的文件复制到被管理节点中。
copy模块常用的选项,如下。
backup:在覆盖之前将原文件备份,备份文件包含时间信息(默认为no,可选值:yes/no)
content:当用content代替src参数的时候,可以把文档的内容设置到特定值
dest:目标绝对路径。如果src是一个目录,dest也必须是一个目录。如果dest是不存在的路径,并且如果dest以/结尾或者src是目录,则dest被创建。如果src和dest是文件,如果dest的父目录不存在,任务将失败
follow:是否遵循目的机器中的文件系统链接(默认为no,可选值:yes/no)
force:当内容不同于源时,将替换远程文件。设置为no,则只有在目标不存在的情况下才会传输文件(默认为no,可选值:yes/no)
group:设置文件/目录的所属组
local_follow:是否遵循本地机器中的文件系统链接(默认为no,可选值:yes/no)
mode:设置文件权限
owner:设置文件/目录的所属用户
src:将本地路径复制到远程服务器; 可以是绝对路径或相对的。如果是一个目录,它将被递归地复制。如果路径以/结尾,则只有该目录下内容被复制到目的地,如果没有使用/来结尾,则包含目录在内的整个内容全部复制
unsafe_writes:是否以不安全的方式进行,可能导致数据损坏(可选值:yes/no)
validate:复制前是否检验需要复制目的地的路径
从管理节点中复制文件给被管理节点
ansible webserver -m copy -a "src=/etc/passwd backup=yes dest=/tmp owner=root mode=777"
这条命令的含义是,将管理节点中的/etc/passwd文件复制到webserver主机组中的被管理节点的/tmp路径下,并且备份了原始文件,将文件属组配置为root用户,文件权限配置为777。
file模块
file模块是文件属性模块,主要用于设置已存在文件、符号链接或者目录的属性,或删除文件、符号链接、目录等。
file模块常用的选项,如下。
follow:是否遵循目的机器中的文件系统链接
force:强制执行
group:设置文件/目录的所属组
mode:设置文件权限
owner:设置文件/目录的所属用户
path:目标文件/目录
recurse:是否递归设置属性(仅适用于state=directory时)
src:要链接到的文件路径(仅适用于state=link时)
state:若是directory,所有的子目录将被创建(如果它们不存在);若是file,文件将不会被创建(如果文件不存在);link表示符号链接;若是absent,目录或文件会被递归删除;touch代表生成一个空文件;hard代表硬链接
unsafe_writes:是否以不安全的方式进行,可能导致数据损坏
尝试使用file模块修改刚刚复制到被管理节点中的文件的属主:
ansible webserver -m file -a "path=/tmp/passwd owner=Verus"
这条命令中,path指定了节点中的文件路径,owner用于指定文件的所属的用户。
注意:如果命令中指定的用户不存在于被管理节点的话,那么需要你去节点中创建。
现在尝试将节点中的文件删除:
ansible webserver -m file -a "path=/tmp/passwd state=absent"
这条命令中,state选项的值为absent,表示递归删除指定文件。
shell模块
shell模块可以帮助用户在远程主机上执行命令。与command模块不同的是,shell模块在远程主机中执行命令时,会经过远程主机上的/bin/sh程序处理。
尽管command模块同样可以在远程主机上执行命令,但其无法获取一些环境变量,甚至无法使用一些运算符。
shell模块作为command模块的增强版,不仅能够获取与使用所有环境变量与运算符,甚至可以执行远程主机上的脚本文件。
shell模块常用的选项,如下。
free_form:指定需要远程执行的命令
chdir:指定一个目录,在执行对应的命令之前,会先进入到chdir参数指定的目录中
creates:指定一个文件,当指定的文件存在时,就不执行对应命令
removes:指定一个文件,当指定的文件不存在时,就不执行对应命令
executable:默认情况下,shell模块会调用远程主机中的/bin/sh去执行对应的命令,远程主机中的默认shell都是bash。如果想要使用其他类型的shell执行命令,则可以使用此参数指定某种类型shell去执行对应的命令。指定shell文件时,需要使用绝对路径。
尝试指定一个路径执行命令:
ansible host2 -m shell -a 'chdir=/tmp echo book > Verus.txt'
这条命令的含义是,在被管理节点host2中的/tmp路径下,将“book”输入到Verus.txt文件中。
尝试在节点中安装Apache:
ansible webserver -m shell -a 'yum -y install httpd' -f 2
这条命令中,-f参数表示一次命令执行之后的并发线程数。
script模块
script模块可以帮助用户在远程主机上执行Ansible管理主机上的脚本。也就是说,脚本只存在于Ansible管理主机本地,不需要拷贝到被管理节点。
创建一个简单的脚本:
vim ansible.sh
内容如下:
#!/bin/bashid nginx &> dev/nullif [ $? -eq 0 ];then echo "nginx already exists"else useradd nginxfi
该脚本的大致意思是,
首先用id命令测试用户nginx是否存在,如果存在则输出提示信息,如果不存在,则创建用户。
在Ansible主机上执行命令,使该脚本在各个节点得到执行:
ansible webserver -m script -a '/root/ansible.sh'
-a用于指定脚本路径。
ok,今天先到这里。下一篇讲解其他常用的Ansible模块。
放个链接,万一有人关注呢
发表评论
暂时没有评论,来抢沙发吧~