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

检验结果:

这里注意记得关闭服务所在主机的防火墙

通过浏览器检验:

可以正常访问页面,成功

相关推荐
西柚与蓝莓5 分钟前
报错:{‘csrf_token‘: [‘The CSRF token is missing.‘]}
前端·flask
AGI学习社12 分钟前
2024中国排名前十AI大模型进展、应用案例与发展趋势
linux·服务器·人工智能·华为·llama
是梦终空24 分钟前
JAVA毕业设计210—基于Java+Springboot+vue3的中国历史文化街区管理系统(源代码+数据库)
java·spring boot·vue·毕业设计·课程设计·历史文化街区管理·景区管理
加油,旭杏26 分钟前
【go语言】变量和常量
服务器·开发语言·golang
wanhengidc1 小时前
网站服务器中的文件被自动删除的原因
运维·服务器
基哥的奋斗历程1 小时前
学到一些小知识关于Maven 与 logback 与 jpa 日志
java·数据库·maven
m0_512744641 小时前
springboot使用logback自定义日志
java·spring boot·logback
十二同学啊1 小时前
JSqlParser:Java SQL 解析利器
java·开发语言·sql
老马啸西风1 小时前
Plotly 函数图像绘制
java
9毫米的幻想1 小时前
【Linux系统】—— 编译器 gcc/g++ 的使用
linux·运维·服务器·c语言·c++