自动化运维工具Ansible第三篇——Ansible模块实用技巧(1)

网友投稿 932 2022-10-07

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

自动化运维工具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模块。

放个链接,万一有人关注呢

上一篇:做了5年运维,靠着这份监控知识体系,我从3K变成了40K
下一篇:100道MySQL数据库经典面试题解析(收藏版)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~