首页 > 其他分享 >配置渲染工具

配置渲染工具

时间:2023-10-11 16:44:28浏览次数:30  
标签:render 渲染 配置 context input path 工具 config dir

dockerfile

FROM python:3.11.3-alpine3.17

COPY requirements.txt .

RUN pip install --no-cache-dir -r requirements.txt -i https://mirrors.cloud.tencent.com/pypi/simple && \
    rm -f requirements.txt

requirements.txt

Jinja2==3.1.2
MarkupSafe==2.1.2
PyYAML==6.0
jinja2-base64-filters==0.1.4

镜像构建

docker build -t config-render:v1.0 .
docker save config-render:v1.0 -o config-render_v1.0.tar

render.py

#!/usr/bin/env python3

import os
from yaml import safe_load
from jinja2 import Environment, FileSystemLoader, Template
from jinja2_base64_filters import jinja2_base64_filters

def get_vars_from_file(config_file):
    with open(config_file, 'r') as f:
        vars_string = f.read()
    base_vars = safe_load(vars_string)
    context = Template(vars_string).render(base_vars)
    # print(context)
    return context

def render_template(input_path, output_path, context=None):
    """
    渲染一个输入路径的文件或文件夹,并将渲染后的结果输出到指定输出路径
    :param env: Jinja2的环境对象
    :param input_path: 需要渲染的文件或文件夹路径
    :param output_path: 渲染结果保存的输出路径
    :param context: 传递给Jinja2模板的上下文数据
    """
    # 如果输入路径是文件夹,则处理所有子文件和子目录
    if os.path.isdir(input_path):
        for dirpath, dirnames, filenames in os.walk(input_path):
            # 创建相同的子目录结构
            rel_dir = os.path.relpath(dirpath, input_path)
            new_dir = os.path.join(output_path, rel_dir)
            os.makedirs(new_dir, exist_ok=True)

            # 处理所有的子文件
            for filename in filenames:
                input_file = os.path.join(dirpath, filename)
                output_file = os.path.join(new_dir, filename)
                render_template(input_file, output_file, context=context)
    # 如果输入路径是一个文件,则对该文件进行渲染
    else:
        print("{} > {}".format(input_path, output_path))
        env = Environment(extensions=["jinja2_base64_filters.Base64Filters"], loader=FileSystemLoader(os.path.dirname(input_path)))
        template = env.get_template(os.path.basename(input_path))
        rendered = template.render(context or {})
        with open(output_path, "w", encoding="utf-8") as fp:
            fp.write(rendered)


if __name__ == "__main__":
    input_dir = "templates"
    output_dir = "deploy"
    config_file = "config.yaml"
    # 渲染并加载配置文件
    context = safe_load(get_vars_from_file(config_file))
    # print(context)
    render_template(input_dir, output_dir, context)
    print("渲染完成!")

render.sh

#!/bin/bash

base_path=$(
    cd "$(dirname "$0")" || exit 1
    pwd
)

echo "开始渲染配置文件,请稍等..."

docker images | grep config-render > /dev/null 2>&1 || docker load -i ${base_path}/config-render_v1.0.tar

docker run -i --rm \
    --name render \
    --volume ${base_path}:/opt \
    -w /opt \
    harbor.stacs.cn/devops/config-render:v1.0 \
    python render.py

标签:render,渲染,配置,context,input,path,工具,config,dir
From: https://www.cnblogs.com/xwjh/p/17757587.html

相关文章

  • 关于CH32V系列MCU 免表中断(VTF)的使用配置方法
    可编程快速中断控制器(PFIC)提供四个免表(VectorTableFree)中断通道,可不经过中断向量表的查表过程,直达中断函数入口。个人简单测试过,当开启VTF后,中断延迟时间大概可缩短2个时钟周期左右。关于VTF的具体介绍,可参考对应青稞微处理器手册3.5小节。QingKeV3手册:https://www.wch.cn/do......
  • 国内外敏捷管理工具大全
    ​敏捷开发涉及多个阶段和活动,因此有许多工具可以帮助团队有效地规划、跟踪和管理工作。以下是一些常用的敏捷开发工具: Trello: Trello是一种直观的项目管理工具,它使用卡片和面板来帮助团队协作和可视化项目进度。适合小型团队和项目。Leangoo领歌: Leangoo领歌是国产的永......
  • 13_配置免密登录
    1.生成密钥对[root@centos79~]#ssh-keygenGeneratingpublic/privatersakeypair.Enterfileinwhichtosavethekey(/root/.ssh/id_rsa):Enterpassphrase(emptyfornopassphrase):Entersamepassphraseagain:Youridentificationhasbeensavedin/root/.s......
  • 在Ubuntu22.04上安装MySQL-Server,并配置可视化界面SQL-Workbench
    在Ubuntu22.04上安装MySQL-Server,并配置可视化界面MySQL-Workbench彻底删除MySQL若您是首次,在Ubuntu22.04上崭新安装mysql,可以略过该步。首先卸载mysql-common:sudoapt-getremovemysql-common然后卸载已经安装的mysql-server:sudoapt-getautoremove--purgemysql-ser......
  • 关于CH32V307 PA6、7引脚复用为串口1和串口7配置方法
    1、复用为串口1配置方法关于PA6和PA7,重映射串口1时,最后下标为3,如下图。换算成二进制为11,重映射对应的就是PA6、PA7,如下图。由于库中没有直接定义该位,因此将PA6、PA7复用为USART1时,需要进行如下操作,如下图。可直接调用GPIO_PinRemapConfig函数,先调用该函数复用为USART1高位,再......
  • 国标GB28181安防视频系统LiteGBS配置完成之后,视频无法播放是什么原因?
    国标GB28181系统LiteGBS设计了转码、上传一体化的功能,使音视频资源转码后可立即面向互联网进行发布和分发。在视频能力上,LiteGBS可以实现视频监控直播、录像检索与回看、云台控制、语音对讲、告警上报、平台级联等能力,在安防领域也有着广泛的应用,如明厨亮灶、平安乡村、雪亮工程、......
  • Python-pip配置国内镜像源
    推荐的国内镜像站[个人推荐清华大学pypi镜像站(https://mirrors.tuna.tsinghua.edu.cn/help/pypi/),每五分钟同步一次,资源丰富,下载速度很快]:清华大学:https://pypi.tuna.tsinghua.edu.cn/simple阿里云:http://mirrors.aliyun.com/pypi/simple/豆瓣:http://pypi.douban.com/simple/......
  • Consul+Ocelot配置微服务
    1、下载consul地址 Install|Consul|HashiCorpDeveloper解压之后启动consul:终端运行 consul agent -dev -client 0.0.0.0 -ui2、写一个扩展方法 1publicstaticvoidConsulExtend(thisIConfigurationconfiguration,stringserviceName)2{3Co......
  • Spring Cloud服务之Nacos作为注册中心与配置中心
    1、创建maven父工程管理jar包版本创建maven骨架,删除多余部分文件。只留pom文件,添加依赖<packaging>pom</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId>......
  • luffy前端配置,跨域问题,后端数据库迁移, 后台主页功能,后台管理
    1luffy前端配置......