当前位置: 首页 > news >正文

Jinja2模板、Roles角色详解

Ansible自动化运维这部分我将会分为五个部分来为大家讲解

(一)介绍、无密钥登录、安装部署、设置主机清单

(二)Ansible 中的 ad-hoc 模式 模块详解(15)个

(三)Playbook 模式详解

(四)jinja2 模板 Roles角色详解

(五)运维实战

相关文章大家在最后可以看到(包含链接)

一、Jinja2模板

jinja2是Python的全功能模板引擎。在python的WEB开发中被广泛应用。

Ansible通常会使用jinja2模板来修改被管理主机的配置文件等。

jinja2模块概念:

在 Ansible 中,Jinja2 模板引擎用于动态生成配置文件、脚本和其他文本内容。Ansible Playbook 使用 Jinja2 模板来创建灵活且可重用的任务定义,特别是在 template 模块中。

在ansible中的作用

使用Ansible的jinja2模板也就是使用template 模块,该模块和copy 模块一样,都是将文件复制到远端主机上去,但是区别在于,template 模块可以获取到文件中的变量,而copy则是原封不动的把文件内容复制过去。比如想把脚本中的变量名改成主机名,如果使用copy模块则推送过去的就是{{ ansible_fqdn }},不变,如果使用template,则会变成对应的主机名。

Ansible允许jinja2模板中使用条件判断和循环,但是不允许在playbook中使用。通常jinja2模板文件的后缀为.j2

jinja2模板的语法

基础语法

1)playbook文件使用template模块
2)模板文件里面变量使用{{名称}},比如{{PORT}}或使用facts
3){{}}也可以使用表达式,比如{{ 3+5 }} {{3 in [1,2,3,4,5] -}}

说明:{{}}中的表达式其实就是python中的表达式,可以包括比较运算,算数运算,逻辑运算,成员运行。

该模板支持:

字符串:使用单引号或双引号;数字:整数,浮点数;列表:[item1, item2, ...]元组:(item1, item2, ...)字典:{key1:value1, key2:value2, ...}布尔型:true/false算术运算:+, -, *, /, //, %, **比较操作:==, !=, >, >=, <, <=逻辑运算:and, or, not

模板通常都是通过引用变量来运用的

template模块在jinja2中的作用

copy与template的区别:

copy模块不替代参数,template模块替代参数

template的参数几乎与copy的参数完全相同

常用参数:

参数

解析

src

指定本地jinja2模板文件的位置

dest

指定目标远程主机路径

backup

指定是否备份,默认值no

mode

设置权限

user

设置用户

group

设置用户组

实例

1、创建模板文件:

首先,需要创建一个包含Jinja2模板的文件。这个文件通常包含要插入变量或表达式的位置。可以在文件中使用{{ }}来包裹变量或表达式。

例如,创建一个名为 my_jinja.j2 的模板文件:

[root@server ansible]# cat my_jinja.j2 
Welcome to {{ ansible_fqdn }}
This system total mem is : {{ ansible_memtotal_mb }} MB
This system free mem is : {{ ansible_memfree_mb }} MB

2、在playbook中使用模板:

在 Ansible Playbook中,可以使用template模块来加载模板文件并将变量传递给它。

以下是一个示例Playbook:

创建文件:

[root@server ansible]# cat jinja2.yml 
---
- name: 使用jingja2模板hosts: node1tasks: - name: jinja2信息template:src: /etc/ansible/my_jinja.j2dest: /opt/hhh

在这个示例中,我们使用了template模块,指定了模板文件的源 (src) 和目标 (dest)。

3、执行 playbook

ansible-playbook -i inventory.ini jinja2.yml

检查一下:

ansible node1 -m command -a "ls /opt/"

ansible node1 -m command -a "cat /opt/hhh"

模板文件中的{{ }}不仅可以包含变量,还可以包含表达式,如您所述的比较运算、算术运算、逻辑运算等。这使得您可以在模板中执行各种操作以生成需要的配置或文本。

Jinja2模板的强大之处在于它允许创建灵活和动态的配置文件,以适应不同的场景和变量值。

二、Roles角色管理

介绍与优势:

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

1、对于以上所有方式有个缺点就是无法实现同时部署web、database、keepalived等不同服务或者不同服务器组合不同的应用就需要写多个yaml文件,很难实现灵活的调用
2、roles用于层次性,结构化地组织playbook。roles能够根据层次结果自动装载变量文件、tasks以及handlers等。
3、要使用roles只需要在playbook中使用include指令即可。
4、简单来讲,roles就是通过分别将变量(vars)、文件(files)、任务(tasks)、模块(modules)以及处理器(handlers)放置于单独的目录中,并且可以便捷的include它们地一种机制。

roles模块概念:

在roles能够根据层次型结构自动装载变量文件、task以及handlers等。

简单来讲,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中、并可以便捷地include他们的一种机制。角色一般用于基于主机构建服务的场景中、但也可以是用于构建守护进程等场景中。

其主要作用有以下几点:

1、模块化任务和变量管理:允许将相关任务、处理程序、变量和模板等组织到一个独立的角色中,以便更好地管理和维护代码。

2、重复使用:角色允许将常见的任务和功能打包到可重用的单元中,可以在不同的 Playbook 中多次引用,提高了代码的重用性。

3、结构化组织:角色允许按照应用程序的不同组件或功能模块来组织任务,使代码更易于理解和维护。

4、简化playbook:通过将复杂的任务拆分成多个角色,可以使playbook 更为清晰简洁,提高代码的可读性和可维护性

5、自动化部署:角色可以包含特定应用程序或服务的安装、配置和部署等任务,简化了自动化部署过程

roles的目录结构:

[root@server ~]# tree /etc/ansible/roles

/etc/ansible/roles
└── nginx
    ├── default
    │   └── main.yml
    ├── files
    ├── handlers
    │   └── main.yml
    ├── meta
    │   └── main.yml
    ├── roles.yml
    ├── tasks
    │   └── main.yml
    ├── templates
    │   ├── nginx.conf.j2
    │   └── systemctl.nginx.j2
    └── vars
        └── main.yml

8 directories, 8 files

创造一个角色目录,用于演示:

mkdir -pv /etc/ansible/roles/nginx/{files,templates,vars,tasks,handlers,meta,default}

然后除了files目录和templates目录,其他都需要再建一个main.yml的文件用于写东西的

使用tree命令来进行查看,没有的先进行下载

yum -y install tree

进入/etc/ansible/目录下查看

[root@server ansible]# tree roles

Roles内各目录作用:

Roles模块可以含有files、templates、tasks、handlers、vars、defaults、meta七个目录(可以根据情况自行进行删减)

每个目录的作用如下:

files:           用来存放由 copy 模块或script模块调用的文件。
templates:  用来存放jinjia2模板,template模块会 自动在此目录中寻找jinjia2模板文件。
tasks:         此目录应当包含一个main.yml文件, 用于定义此角色的任务列表,此文件可以使用                          include包含其它的位于此目录的 task 文件。
handlers:    此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动作。
vars:           此目录应当包含一个main.yml文件,用于定义此角色用到的变量。
defaults:     此目录应当包含一个main.yml文件,用于为当前角色设定默认变量。
meta:          此目录应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系

使用方式

Roles在playbook中使用方式:

先创建roles命令的目录以及创建全局变量目录,然后在roles目录中分别创建以各角色名称命令的目录(如httpd在每个角色命令的目录中分别创建file、handlers、tasks、templates、meta、defaults和vars目录,用不到的目录可以创建为空),接着在每个角色的handlers、tasks、meta、defaults、vars、目录下创建main.yml文件,不能自定义。最后在playbook文件中调用各角色。

接下来我来为大家写一份非常简单的一个安装nginx服务的小案例:

编辑变量:

 [root@server ansible]# vi /etc/ansible/roles/nginx/vars/main.yml[root@server ansible]# cat /etc/ansible/roles/nginx/tasks/main.yml- name: nginxyum:name: "{{ nginx_packet }}"state: present

编辑任务:

 [root@server ansible]# vi /etc/ansible/roles/nginx/tasks/main.yml[root@server ansible]# cat /etc/ansible/roles/nginx/tasks/main.yml- name: nginxyum:name: "{{ nginx_packet }}"state: present

执行:

ansible-playbook -i inventory.ini roles1.yml

三、相关文章:

相关文章标题以及链接
Ansible自动化运维(一)介绍、无密钥登录、安装部署_ansible 免密登录-CSDN博客
Ansible自动化运维(二) ad-hoc 模式 模块详解_ansible ad-hoc-CSDN博客
Ansible自动化运维(三)playbook剧本详解-CSDN博客
Jinja2模板、Roles角色详解-CSDN博客
Ansible自动化运维(五) 运维实战-CSDN博客

http://www.mrgr.cn/news/80276.html

相关文章:

  • 【教学类-83-01】20241215立体书三角嘴1.0——小鸡(正菱形嘴)
  • Docker的镜像
  • 基于SpringBoot的嗨玩旅游网站:一站式旅游信息服务平台的设计与实现
  • C语言:const的用法
  • Android-ImagesPickers 拍照崩溃优化
  • VBA API 概述 / 声明 / 宏编程
  • Linux 中的 mkdir 命令:深入解析
  • 10个富士胶片模拟的设置
  • JAVA学习日记(二十六)网络编程
  • MySQL 主从复制与高可用架构
  • 金蝶云苍穹踩过的坑(慢慢更新)
  • Java21 虚拟线程
  • epoll反应堆模型
  • python导出requirements.txt的方法
  • 浅议Flink lib包下的依赖项
  • Mybatisplus教学
  • 基线检查:Windows安全基线.【手动 || 自动】
  • SQL server学习05-查询数据表中的数据(上)
  • gorm源码解析(二):核心设计与初始化
  • 计算机网络知识点全梳理(二.HTTP知识点总结)
  • PostgreSQL JSON/JSONB 查询与操作指南
  • git使用教程(超详细)-透彻理解git
  • 计算机网络知识点全梳理(一.TCP/IP网络模型)
  • Python自动化操作文档系列
  • 【Flink-scala】DataStream编程模型之延迟数据处理
  • vscode+msys2+clang+xmake c++开发环境搭建