要求
0.进入servera进行准备工作,做一些清理
1)停止httpd服务,清除httpd软件包、配置文件、主页文件
2)清理/etc/hosts文件中的内容,只保留最上面默认的两行
(127.0.0.1和::1这两行)
1.根据之前的剧本改造
0)还在之前的/work工作目录下
1)清单
确保servera在newweb组
2)项目文件目录
建立目录/work/files,存放ansible工作相关文件
提前编辑好httpd.conf放到files目录里
3)变量目录和文件
在工作目录中,建立变量目录varfile
在varfile目录中新建变量文件vars
4)变量文件vars内容
包含以下变量和对应值:
web_pkg | httpd |
fw_pkg | firewalld |
web_svc | httpd |
fw_svc | |
cfg_src | files/httpd.conf |
cfg_dest | /etc/httpd/conf/httpd.conf |
web_root | /var/www/html/ |
5)编写剧本(使用刚定义好的变量)
5.1)使用dnf模块,确保web_pkg和fw_pkg指定的软件包被安装
5.2)将cfg_src指定的文件,放到客户机的cfg_dest位置
并确保文件属于root账户组,权限644
5.3)在web_root指定的客户机目录,创建index.html文件
index.html中包含:客户机的主机名和IP地址
(获取客户机的facts信息并写入)
5.4)确保服务启动
web_svc和fw_svc
立刻启动,并开机自动启动
5.5)配置防火墙
确保防火墙放行web_svc指定的服务
立即生效,且写入配置文件(永久生效)
6)对变量文件加密
使用ansible-vault对变量文件var加密,使用密码redhat
密码写入密码文件files/pwd,确保文件仅root账户可读写
7)执行剧本
8)探索
刚才清除了客户机/etc/hosts文件内容
是否可以让ansible读取客户机facts,并填充hosts文件
把客户机的IP和对应主机名,填充进去
实验过程
0.工作目录
ansible的配置文件
files,要给客户机的文件,全放里头
varfile,变量文件房里头
host,是清单inventory
其他
facts.yml,查看客户机的所有facts,留着,回头有用
1.变量文件
web的软件包和服务名一样,web_pkg_svc赋值httpd
防火墙的软件包,fw_pkg
防火墙要放行的服务名,web_fw_svc
web的配置文件源,cfg_src
web的配置文件,放到客户机的哪里,cfg_dest
web的工作目录,web_root
web配置文件所属用户、组、权限
cfg_own,cfg_grp,fmode
2.变量文件需要加密
2.1)先建立密码文件
2.2)用这个密码文件,去加密刚才的变量文件
命令ansible-vault,选项
encrypt,加密
--vault-password-file,指定密码文件
2.3)加密后的变量文件,vim或cat看一下
打开以后,或者cat以后,只能看到一堆加密后的字符
看不到源文件内容的
如果要看源文件,需要解密……
用于加密的密码文件,看情况,是否要再加密后删除
密码文件需要限制权限,如果自己记住密码,也可以删了……
而且,之后,执行playbook的时候,可以使用交互式输入密码
可以不指定密码文件
3.准备要给web的配置文件
4.看剧本
开头,剧本名字
操作的主机
指定变量文件
开始tasks
第一个task
用了dnf模块,装软件包
用变量指定俩包,httpd,firewalld
第二个task
用copy模块
把web的配置文件复制到客户机指定目录
并且改所属和权限
第三个task
还是用copy模块
但是,是生成一个文件,index.html主页文件,在指定的目录产生
不需要提前先创建这个文件,会自动新建
content部分,和书里参考不太一样
在咱自己这个环境里,有可能default_ipv4这个fact是空的
需要从别的位置,去取IP地址
于是用了:
ansible_facts
ens160
ipv4
address
第四个task
启用防火墙服务
没干别的……
第五个task
并没有继续启动web服务
配置防火墙
放行web服务的端口
防火墙,是否放行服务,和目标服务本身的状态配置没关系
最后一个task
最后拉起web服务
5.执行这个剧本
要用vault的选项,使用了交互式提供密码,没使用密码文件
如果要详细过程,加选项 -v、-vv、-vvv
6.看一下web主页内容
所以,上面剧本里,fact外面的( ),就只是括号……
7.如果要修改已加密的变量文件,需要重新解密、加密