从小白到大神之路之学习运维第62天--------Ansible自动化运维工具(playbook配置深入了解2.0)

第三阶段基础

时 间:2023年7月17日

参加人:全班人员

内 容:

playbook配置深入了解2.0

目录

一、角色

实验案例:(安装Mariadb)

二、变量

(一)在playbook中使用自定义变量:

(二)查看内置变量

三、Template模板

四、基于Playbook部署Nginx综合案例


一、 角色

将多种不同的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】

网页访问:

相关推荐
月光在发光10 分钟前
多态(虚函数核心作用原理)--C++学习(0)
c++·学习
l1t27 分钟前
用docker安装oracle 19c
运维·数据库·docker·oracle·容器
车载测试工程师1 小时前
CAPL学习-AVB交互层-媒体函数2-其他类函数待分类
学习·tcp/ip·媒体·capl·canoe
深蓝海拓1 小时前
PySide6从0开始学习的笔记(十) 样式表(QSS)
笔记·python·qt·学习·pyqt
k***92161 小时前
【Linux】进程概念(五):详解环境变量的本质
linux·运维·服务器
专业开发者1 小时前
艾通科技(ITON Technology)借助蓝牙 ® 网状网络,构建适用于自动化控制应用的大规模设备网络
运维·物联网·自动化
KakiNakajima1 小时前
CentOS 7 x86系统安装EMQX 【kaki备忘录】
linux·运维·centos
deng-c-f1 小时前
Linux C/C++ 学习日记(59):手写死锁监测的组件
学习
深蓝海拓1 小时前
PySide6从0开始学习的笔记(十三) IDE的选择
笔记·python·qt·学习·pyqt
weixin_462446232 小时前
【原创实践】Docker 镜像批量导出镜像与导入镜像
运维·docker·容器