实验概述:本次实验采用3台虚拟机,分别为1台主控端YTeduRHEL8,和2台被控端node1、node2。
在本章我们将了解如何使用各个Ansible基础常用模块,例如:file模块、copy模块、yum_repository模块、yum模块、systemd模块、cron模块、user模块、group模块等。各模块将分为一大类。
file模块主要用于远程主机上的文件操作,file模块包含如下选项:
path:必选项,定义文件/目录的路径
state:
file:查看文件状态,默认选项,若文件不存在,也不会被创建,会报错文件不存在
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新时间戳
absent:删除目录、文件或者取消链接文件
directory:如果目录不存在,创建目录
link:创建软链接
hard:创建硬链接
owner:定义文件/目录的属主
group:定义文件/目录的属组
mode:定义文件/目录的权限
src:要被链接的源文件的路径,只应用于state=link的情况
dest:被链接到的路径,只应用于state=link的情况
force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
例1:在node1主机下创建/tmp/test.txt文件并设置拥有人与拥有组为root,文件权限为rw-r--r--。
例2:在node2主机下创建/tmp/test2/test3/aaa/bbb目录并设置拥有人与拥有组为root,目录权限为 rwxr-xr-x。
copy模块主要用于复制文件到远程主机,copy模块包含如下选项:
src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来 结尾,则包含目录在内的整个内容全部复制,类似于rsync。
dest:必选项。要将源文件复制到的远程主机的绝对路径。
force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no
content:用于替代“src”,可以直接设定指定文件的值
others:所有的file模块里的相关文件属性选项都可以在这里使用
remote_src:复制远程主机的文件
例1:把/etc/ansible/ansible.cfg文件复制到node1主机的/usr/local/src目录下并设置拥有人与拥有组为 root,权限为rw-r--r--。
例2:使用copy模块将just a test!添加至node2主机内不存在的/usr/local/src/test.txt文本内。
使用yum_repository管理yum仓库,其选项有:
file:配置文件的名字,不包含.repo
name:yum仓库的名字
description:仓库的描述信息
baseurl:yum源地址
enabled:是都开启yum仓库,yes/on
gpgcheck:是否检查软件包的完整性,yes/no
gpgcheck:公钥地址
例1:使用yum_repository模块给node1主机配置一个yum仓库。
验证:
yum模块是使用yum包管理器来管理软件包,其选项有:
name:要进行操作的软件包的名字,也可以传递一个url或者一个本地的rpm包的路径
state:状态(present安装,absent卸载,latest最新版本)
例1:使用yum模块在node1主机内安装httpd服务
例2:使用yum模块在node1主机内卸载httpd服务
systemd模块用于管理服务,该模块包含如下选项:
name:指定服务名称
state:管理服务状态,reloaded|restarted|started|stopped
enabled:是否设置开机自启
例1:使用systemd模块在node1主机上开启httpd服务并设置为开机自启
cron模块用于管理计划任务,包含如下选项:
name:该任务的描述
state:确认该任务计划是创建还是删除,present创建,absent删除
user:以哪个用户的身份执行
day:日(1-31,,/2,……)
hour:小时(0-23,,/2,……)
minute:分钟(0-59,,/2,……)
month:月(1-12,,/2,……)
weekday:周(0-7,*,……)
job:要执行的任务,依赖于state=present
cron_file:指定配置文件,例如/etc/crontab,/etc/cron.d/*
例1:在node1主机内添加一个12小时候重启的任务
验证1:
例2:在node1主机内添加一个"每10分钟执行一次'echo test'到/tmp/test内的任务"
验证2:
user模块请求的是useradd,userdel,usermod 三个指令:
state:是创建还是删除
name:指定用户名
uid:指定用的uid
group:指定用户属组
groups:指定用户的附加组
comment:定义用户描述信息
create_home:是否创建家目录 yes|no
home:指定用户的家目录,需要与createhome配合使用
shell:指定用户的shell环境
password:指定用户的密码
remove:当state=absent时,remove=yes则表示连同家目录一起删除,等价于userdel -r
***重要:
#需要说明的是,在指定password参数时,不能使用明文密码,因为后面这一串密码会被直接传送到被管理主机的/etc/shadow文件中,所以需要先将密码字符串进行加密处理。然后将得到的字符串放到password中即可。
#使用下面的密码创建用户
# echo "yutian" | openssl passwd -1 -salt $(< /dev/urandom tr -dc '[:alnum:]' | head -c 32) -stdin
$1$munr3v2y$2.xs5g/WtTGnLFwyTDxhA/
ansible all -m user -a 'name=foo password="$1$munr3v2y$2.xs5g/WtTGnLFwyTDxhA/"'
例1:在node1主机上创建johnd用户,描述信息为:John Doe,uid为:1080,组为admin组。
例2:给johnd设置密码,密码为:yutian
group模块请求的是groupadd,groupdel,groupmod三个指令:
gid:指定组id
name:指定组名
state:创建还是删除组,选项:present|absent
例1:使用group模块在node1主机上创建一个名为it的组,gid为2023
例2:使用group模块删除node1以存在的it组