ansible自动化运维(五)roles角色管理

Roles角色管理

角色(roles)是ansible自1.2版本开始引入的新特性,用于层次性,结构化地组织playbook。

roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单的说,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中、并可以便捷地include他们的一种机制。角色一般用于基于主机构建服务的场景中、但也可以是用于构建守护进程等场景中。

一般情况下将roles写在 /etc/ansible/roles 中,也可以写在其他任意位置(写在其他位置要自己手动建立一个roles文件夹)

这里来编译安装 nginx ,部署一个web 页面,同时对roles角色的各个功能进行解析

创建nginx的角色目录

复制代码
[root@web01 roles]# mkdir -p /etc/ansible/roles/nginx/{files,tasks,handlers,vars,templates,meta,default}

目录结构:

复制代码
[root@web01 roles]# tree

.

└── nginx

    ├── default

    ├── files

    ├── handlers

    ├── meta

    ├── tasks

    ├── templates

    └── vars



8 directories, 0 files

目录解析:

  1. nginx:存放nginx服务的yml文件

  2. default:此目录至少应该有一个名为main.yml的文件,用于设定默认变量;

  3. files:存储由copy或者script等模块调用的文件或者脚本;

  4. handlers:此目录中至少应该有一个名为main.yml的文件,用于定义各个handler;其他文件需要由main.yml进行包含调用;

  5. meta:此目录中至少应该有一个名为main.yml的文件,定义当前角色的特殊设定以及依赖关系,其他文件需要由main.yml进行包含调用;

  6. tasks:此目录中至少应该有一个名为main.yml的文件,用于定义各个task;其他文件需要由main.yml进行包含调用;

  7. templates:存储由templates模块调用的模板文件;

  8. vars:此目录至少应该有一个名为main,yml的文件,用于定义各个variable;其他的文件需要由main.yml进行包含调用;

整个角色的一个流程:

定义任务配置文件 --> 定义jinja2 模板,生成配置文件用 --> 定义变量 --> 定义触发(通知已定义在配置文件中) --> 定义nginx 的yml 文件 -->

检查yml 语法 --> 执行nginx.yml 文件 --> 查看服务启动状态

提前准备工作:传包

复制代码
[root@web01 roles]# ls nginx/files/

nginx-1.24.0.tar.gz  李星云.jpg

定义任务配置文件:

复制代码
[root@web01 roles]# cat nginx/tasks/main.yml

  - name: copy nginx package

    copy:

      src: files/nginx-1.24.0.tar.gz

      dest: /tmp/

  - name: tar

    unarchive:

      src: /tmp/nginx-1.24.0.tar.gz

      dest: /usr/local/

      remote_src: yes

  - name: install 依赖

    yum:

      name: "{{ item }}"

      state: present

    loop: "{{ install_package }}"

  - name: Compile and install
     shell: |

      cd /usr/local/nginx-1.24.0

      ./configure --prefix=/usr/local/nginx

      make && make install





  - name: copy image

    copy:

      src: files/李星云.jpg

      dest: /usr/local/nginx/html/

  - name: changes web pages

    template: src=templates/web.conf.j2 dest=/usr/local/nginx/html/index.html

    notify: restart

  - name: start nginx

    shell: |

      cd /usr/local/nginx/sbin/

      ./nginx

定义jinjia2模板:

这里这个模板是一个html 文件,就是简单的web 页面

想达到的效果就是,把nginx 服务的html 目录下的页面替换成这个模板

前面说过jinjia2模板可以是支持多种数据类型,这里直接编辑一个html页面,去替换掉nginx的web页面

复制代码
[root@web01 roles]# cat nginx/templates/web.conf.j2

<!DOCTYPE html>

<html lang="en">



<head>

  <meta charset="utf-8">

  <title>画江湖之不良人 - 李星云</title>

  <style>

    body {

      margin: 0;

      padding: 0;

      background-image: url('./李星云.jpg');

      background-size: cover;

        background-repeat: no-repeat;

      background-attachment: fixed;

      color: white;
    }
    font-size: 30px;
<body>

<a href="./luocailian"  target="_blank">学习目录</a>

<br/>

  <a href="https://blog.csdn.net/LCL_18?spm=1000.2115.3001.5343"  target="_blank">欢迎来到我的博客</a>



<div id="luo">

<h1>画江湖之不良人 - 李星云</h1>

<p>李星云,身世神秘,身负奇学。</p>

<p>身世:李星云是唐昭宗李晔的第十子,唐哀帝李祚的胞弟。朱温篡位后,李晔将李星云托付给心腹大臣李焕,李焕带着李星云隐姓埋名,拜在阳叔子门下学艺。</p>

<p>成长经历:李星云在成长过程中结识了师妹陆林轩和好友张子凡,三人一起闯荡江湖。在江湖中,李星云逐渐揭开了自己的身世之谜,并肩负起了光复唐室的使命。</p>

<p>性格特点:李星云性格开朗、幽默风趣,十分宠爱自己的师妹陆林轩。他口才出众,常常用机智的语言逗得大家捧腹大笑。他为人正直,对朋友、对伴侣、对不良人、对天下苍生都十分有责任心。

</p>

<p>武功技能:李星云的武功技能包括天罡诀、华阳针法、青莲剑歌、龙泉剑诀、易容术、气经等。</p>

    position: relative;

    left: 50px;

    margin-top: 20px;

       color: lightblue;

    top:100px;

    }

    #two {

    font-size: 30px;

    position: relative;

    left: 50px;

    margin-top: 20px;

       color: lightblue;

    top:100px;

    }



  </style>

</head>
<p>武器装备:李星云的武器装备包括长剑、龙泉剑、华阳针、唐刀等。</p>



  <p>李星云的背景故事充满了传奇色彩,他的成长经历和性格特点也深受观众喜爱</p>

  </div>

</body>



</html>







    h1 {

      text-align: center;

     margin-bottom: 200px;

      font-size: 48px;

      text-shadow: 2px 2px 4px black;

      float: none;

    }



    p {

      text-align: center;

      font-size: 16px;

      text-shadow: 2px 2px 4px black;

    }

    a {

定义变量配置文件:
[root@web01 roles]# cat nginx/vars/main.yml

install_package:

  - gcc

  - gcc-c++

  - pcre

  - pcre-devel

  - zlib

  - zlib-devel

  - make

定义触发器文件:
root@web01 roles]# cat nginx/handlers/main.yml

- name: restart

  shell:

    cd /usr/local/nginx/bin

    ./nginx -s reload

定义nginx yml文件

复制代码
[root@web01 roles]# cat nginx/nginx.yml

---

  - hosts: web02

    remote_user: root

    roles:

      - nginx

检查语法,执行命令

复制代码
[root@web01 roles]# ansible-playbook  --syntax-check nginx/nginx.yml

playbook: nginx/nginx.yml

最后的目录结构:

复制代码
.

└── nginx

    ├── default

    ├── files

    │ ├── nginx-1.24.0.tar.gz

    │└── 李星云.jpg

    ├── handlers

    │ └── main.yml

    ├── meta

    ├── nginx.yml

    ├── tasks

    │ └── main.yml

    ├── templates

    │└── web.conf.j2

    └── vars

        └── main.yml



8 directories, 7 files

root@web01 roles\]# tree \[root@web01 roles\]# ls nginx/files/ nginx-1.24.0.tar.gz 李星云.jpg #### 检验结果: 这里注意记得关闭服务所在主机的防火墙 通过浏览器检验: 可以正常访问页面,成功 ![](https://i-blog.csdnimg.cn/direct/4f220d05c52f447d818fc61fd2b3c461.png)

相关推荐
剪刀石头布啊5 分钟前
生成随机数,Math.random的使用
前端
剪刀石头布啊5 分钟前
css外边距重叠问题
前端
剪刀石头布啊6 分钟前
chrome单页签内存分配上限问题,怎么解决
前端
剪刀石头布啊8 分钟前
css实现一个宽高固定百分比的布局的一个方式
前端
Fcy6489 分钟前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满11 分钟前
Linux怎么查看最新下载的文件
linux·运维·服务器
剪刀石头布啊12 分钟前
js数组之快速组、慢数组、密集数组、稀松数组
前端
Ro Jace15 分钟前
计算机专业基础教材
java·开发语言
mango_mangojuice33 分钟前
Linux学习笔记(make/Makefile)1.23
java·linux·前端·笔记·学习
程序员侠客行38 分钟前
Mybatis连接池实现及池化模式
java·后端·架构·mybatis