先放个链接,万一有人关注呢
↓ ↓ ↓ ↓ ↓
书接上回:Ansible自动化运维工具2.0:主机清单的合理应用
模块介绍
Ansible是基于模块进行工作的,用户可以通过命令查看Ansible当前已加载的模块。
ansible-doc -l终端会进入一个说明界面,按Q键即可退出。
Ansible的模块都可以通过命令进行调用,具体命令格式如下
ansible [节点] -m [模块] -a [参数]节点可以是某个被管理节点,也可以是某个主机组,-m用于指定需要调用的模块,-a用于指定参数。
查看各个模块的具体用法:
ansible-doc shell输出内容为全英文,看着就头大了,下面听我来细细讲解。
setup模块
setup模块用于获取被管理节点的详细信息,包括软件信息与硬件信息。
ansible host1 -m setuphost1 | 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模块可以将管理节点中的文件复制到被管理节点中。
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内容如下:
id nginx &> /dev/nullif [ $? -eq 0 ];thenecho "nginx already exists"elseuseradd nginxfi
该脚本的大致意思是,
首先用id命令测试用户nginx是否存在,如果存在则输出提示信息,如果不存在,则创建用户。
在Ansible主机上执行命令,使该脚本在各个节点得到执行:
ansible webserver -m script -a '/root/ansible.sh'-a用于指定脚本路径。
未完待续。。。。。。
来不及解释了,快上车!(进群看公告)

欢迎新的小伙伴加入!在这里,我们鼓励大家积极参与群内讨论和交流,分享自己的见解和经验,一起学习和成长。同时,也欢迎大家提出问题和建议,让我们不断改进和完善这个平台。
↓↓↓ 点个在看,无需赞赏!
原文作者:运维book思议;如有侵权,请联系管理员删除。