从小白到大神之路之学习运维第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】

网页访问:

相关推荐
青木沐21 分钟前
Jenkins介绍
运维·jenkins
量子-Alex23 分钟前
【多模态聚类】用于无标记视频自监督学习的多模态聚类网络
学习·音视频·聚类
吉大一菜鸡28 分钟前
FPGA学习(基于小梅哥Xilinx FPGA)学习笔记
笔记·学习·fpga开发
WTT00111 小时前
2024楚慧杯WP
大数据·运维·网络·安全·web安全·ctf
苹果醋31 小时前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
日记跟新中2 小时前
Ubuntu20.04 修改root密码
linux·运维·服务器
唐小旭2 小时前
服务器建立-错误:pyenv环境建立后python版本不对
运维·服务器·python
BUG 4042 小时前
Linux——Shell
linux·运维·服务器
大霞上仙2 小时前
Linux 多命令执行
linux·运维·服务器