第三阶段基础
时 间:2023年7月17日
参加人:全班人员
内 容:
playbook配置深入了解2.0
目录
一、 角色
将多种不同的tasks的文件集中存储在某个目录下,则该目录就是角色。
角色一般存放在/etc/ansible/roles/目录中,可通过ansible的配置文件来调整默认的角色目录。
/etc/ansible/roles目录下有很多的子目录,其中每一个子目录对应一个角色。每个角色也有自己的目录结构。
/etc/ansible/roles/为角色集合,该目录下有自定义的各个子目录:
****mariadb:****mysql角色
****apache:****httpd角色
****nginx:****nginx角色
每个角色的定义,以特定的层级目录结构进行组织。
以Mariadb(mysql角色)为例 :
****file:****存放copy或script等模块调用的文件;
****templates:****存放template模块查找所需要的模板文件的目录,如mysql配置文件等模板;
****tasks:****任务存放目录;
****handlers:****存放相关触发执行器的目录;
****vars:****变量存放的目录;
****meta:****用于存放此角色元数据;
****default:****默认变量存放目录,文件中定义了此角色使用的默认变量。
上述目录中tasks,handlers,vars,meta,default至少应该包含一个main.yml,该目录下也可以有其他的yml文件,但是需要在main.yml文件中用include指定将其他.yml文件包含进来。
有了角色之后,可以直接在yaml文件中(playbook配置文件)中调用角色示例如下:
- hosts: test01
remote_user: root
roles:
- mysql #调用角色名
- httpd #调用角色名
可以只调用一个角色,也可以调用多个角色,当定义了角色后,用ansible-playbook PLAYBOOK文件执行即可,此时ansible会到角色集合的目录(/etc/ansible/roles)去找mysql和httpd目录,然后依次运行mysql目录和httpd目录下的所有代码。
实验案例 :(安装Mariadb)
下面通过一个实例配置数据库角色,要求被管理主机自动安装Mariadb,安装完成后上传提前准备好的配置文件到远端主机。重启服务,然后新建testdb数据库,并允许test用户对其拥有所有权限。
服务器配置:
|----------------|---------|---------|
| IP地址 | 角色 | 主机名 |
| 192.168.59.137 | Ansible | huyang1 |
| 192.168.59.138 | Client | huyang2 |
| 192.168.59.140 | Client | huyang3 |
环境配置:(关闭防火墙、配置免密登录)
1. 被管理端配置yum源
【huyang2/3】cd /etc/yum.repos.d/
backup CentOS-Media.repo
yum clean all
2. 配置数据库角色
mkdir -p
/etc/ansible/roles/mariadb/{files,tasks,handlers}
创建需要的文件路径 注意不要写错
3、配置主引导文件
cd /etc/ansible/
vim /etc/ansible/mariadb.yml
配置如下:
4、修改任务配置文件
cd /etc/ansible/roles/mariadb/
vim tasks/main.yml
配置如下:
注 释 :
--- #固定开头格式
- name: install mariadb #指定任务名称安装mariadb数据库
yum: name=mariadb-server state=present #执行yum模块安装mariadb
- name: move config file #指定任务名称移除原有配置文件
shell: "[ -e /etc/my.cnf ] && mv /etc/my.cnf /etc/my.cnf.bak" #判断有就移除
- name: provide a new config file #创建一个新的配置文件
copy: src=my.cnf dest=/etc/my.cnf #src源会自动到files文件去找my.cnf文件
- name: reload mariadb #指定任务名称为重启mariadb
shell: systemctl restart mariadb #shell模块重启
- name: create database testdb #按要求添加执行如下sql语句
shell: mysql -u root -e "create database testdb;grant all privileges on testdb.* to 'test'@'192.168.200.%' identified by 'test123';flush privileges;"
notify: #配置触发器
- restart mariadb #为重启mariadb
...
5、修改触发器配置文件
vim handlers/main.yml
配置如下:
注 释 :
- name: restart mariadb #引用上面配置的触发器
service: name=mariadb state=restarted #触发后重启mariadb
...
6、修改存放模块调用文件
cd files/
cp /etc/my.cnf ./
ls
my.cnf
保持不变,使用默认配置不进行修改
7、达到的目标
8、 预执行
ansible-playbook -C /etc/ansible/mariadb.yml
9、测试:
ansible-playbook /etc/ansible/mariadb.yml
验 证:
【huyang1】
ansible hu -m shell -a 'mysql -u root -e "show databases;"'
【huyang2】
【huyang3】
二、 变量
(一) 在playbook中使用自定义变量 :
vim /etc/ansible/test_vars.yml
配置如下:
预测试:
#这里提示,name是一个保留的内置变量,我们在自定义时不能用
修改name内置变量
vim /etc/ansible/test_vars.yml
配置如下:
预测试:
当设置的不是内置变量时,则不会出现警告
测 试:
获得如下的信息
(二)查看内置变量
使用ansible all -m setup | more查看ansible内置变量
例:vim /etc/ansible/test_setupvars.yml
配置如下:
预测试:
测试:
三、Template模板
配置文件如果使用copy模块去下发的话,那么所有主机的配置都是一样的; 如果下发的配置文件里有可变的配置,需要用到template模块。
利用template模块下发可变的配置文件
例:配置模版
配置模板文件
预测试:
测试:
验证:
【huyang2】
【huyang3】
可以发现,虽然定义了同样的信息,但是呈现出的是不一样的结果。
四、基于Playbook部署Nginx综合案例
【huyang1】
1、创建目录结构
mkdir -pv /etc/ansible/roles/nginx/{files,handlers,tasks,templates,vars}
2、定义一个主调用文件
vim /etc/ansible/nginx.yaml
配置如下:
达到的要求:
3、files:存储由copy或script等模块调用的文件
4、配置触发器handlers下main.yaml文件
配置如下:
5、配置tasks下main.yaml文件
6、配置templates下main.yaml文件
7、配置vars下main.yaml文件
8、预测试:
9、测试
验证:(验证成功)
【huyang1】
【huyang2】
【huyang3】
网页访问: