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

网页访问:

猜你喜欢

转载自blog.csdn.net/2302_77582029/article/details/131780989