如何通过python代码根据模板修改变量生成新yaml文件

 更新时间:2023年11月01日 09:55:56   作者:月早十  
有些时候,需要根据一个yaml模板创建多个yaml文件实例,我们先写一个yaml文件模板,然后通过python代码修改模板中的变量,存储为一个新的yaml文件,需要配合python的库Template及ymal使用,本文给大家讲解的非常详细,需要的朋友跟随小编一起看看吧

有些时候,需要根据一个yaml模板创建多个yaml文件实例,我们先写一个yaml文件模板,然后通过python代码修改模板中的变量,存储为一个新的yaml文件。需要配合python的库Template及ymal使用。

  • 创建yaml模板

如下截取了OAI核心网启动yaml文件docker-compose-basic-vpp-nrf-slice4中的部分代码,将其中的部分参数设置为变量
创建的变量的格式为 ${variable} 或者$variable

version: ${version}
services:
    ${mysql_sever_name}:
        container_name: ${mysql_container_name}
        image: mysql:8.0
        volumes:
            - ./database/oai_db2.sql:/docker-entrypoint-initdb.d/oai_db.sql
            - ./healthscripts/mysql-healthcheck2.sh:/tmp/mysql-healthcheck.sh
        environment:
            - TZ=Europe/Paris
            - MYSQL_DATABASE=oai_db
            - MYSQL_USER=test
            - MYSQL_PASSWORD=test
            - MYSQL_ROOT_PASSWORD=linux
        healthcheck:
            test: /bin/bash -c "/tmp/mysql-healthcheck.sh"
            interval: 10s
            timeout: 5s
            retries: 30
        networks:
            public_net:
                ipv4_address: ${mysql_ip}
networks:
    public_net:
        driver: bridge
        name: ${network1_name}
        ipam:
            config:
                - subnet: ${network1_subnet}
        driver_opts:
            com.docker.network.bridge.name: ${network1_driver}

编写修改模板中变量的代码

from string import Template
import yaml
with open('D:\Visual Stdio file\onekeydeploye_network\changeyaml\yaml_template.yaml', encoding='utf-8') as fp:   #打开yaml模板文件,指定到fp中
    read_yaml= fp.read()      #读取fp文件内容,存储到read_yaml中,类型为str
    tempTemplate1=Template(read_yaml)
    mysql_container_name="mysql1"         #可以定义字符串变量,然后引用进行yaml文件的修改
    c = tempTemplate1.safe_substitute({"mysql_container_name":mysql_container_name,"mysql_ip":"192.168.10.1","mysql_sever_name":"mysql1","natwork1_name":"demo-oai-public-net-slice4","network1_subnet":"192.168.10.0/24","network1_driver":'"oai-slice4"'})
    print(c)
yaml_date = yaml.safe_load(c)   #返回python字典到yaml_date中
print(yaml_date)
with open('docker-compose-basic-vpp-nrf4.yaml', 'w') as fp:
    yaml.dump(yaml_date, fp,sort_keys=False)      #sort_keys=False 可以避免yaml文件顺序出先异常

运行结果

version: ${version}
services:
    mysql1:
        container_name: mysql1
        image: mysql:8.0
        volumes:
            - ./database/oai_db2.sql:/docker-entrypoint-initdb.d/oai_db.sql
            - ./healthscripts/mysql-healthcheck2.sh:/tmp/mysql-healthcheck.sh
        environment:
            - TZ=Europe/Paris
            - MYSQL_DATABASE=oai_db
            - MYSQL_USER=test
            - MYSQL_PASSWORD=test
            - MYSQL_ROOT_PASSWORD=linux
        healthcheck:
            test: /bin/bash -c "/tmp/mysql-healthcheck.sh"
            interval: 10s
            timeout: 5s
            retries: 30
        networks:
            public_net:
                ipv4_address: 192.168.10.1

networks:
    public_net:
        driver: bridge
        name: ${network1_name}
        ipam:
            config:
                - subnet: 192.168.10.0/24
        driver_opts:
            com.docker.network.bridge.name: "oai-slice4"

{'version': '${version}', 'services': {'mysql1': {'container_name': 'mysql1', 'image': 'mysql:8.0', 'volumes': ['./database/oai_db2.sql:/docker-entrypoint-initdb.d/oai_db.sql', './healthscripts/mysql-healthcheck2.sh:/tmp/mysql-healthcheck.sh'], 'environment': ['TZ=Europe/Paris', 'MYSQL_DATABASE=oai_db', 'MYSQL_USER=test', 'MYSQL_PASSWORD=test', 'MYSQL_ROOT_PASSWORD=linux'], 'healthcheck': {'test': '/bin/bash -c "/tmp/mysql-healthcheck.sh"', 'interval': '10s', 'timeout': '5s', 'retries': 30}, 'networks': {'public_net': {'ipv4_address': '192.168.10.1'}}}}, 'networks': {'public_net': {'driver': 'bridge', 'name': '${network1_name}', 'ipam': {'config': [{'subnet': '192.168.10.0/24'}]}, 'driver_opts': {'com.docker.network.bridge.name': 'oai-slice4'}}}}

参考阅读:

PYYAML模块

yaml.dump()按原顺序存储

Template模块使用

到此这篇关于如何通过python代码根据模板修改变量生成新yaml文件的文章就介绍到这了,更多相关python创建yaml模板文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python实现指定ip端口扫描方式

    python实现指定ip端口扫描方式

    今天小编就为大家分享一篇python实现指定ip端口扫描方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 一文了解Python3的错误和异常

    一文了解Python3的错误和异常

    Python 的语法错误或者称之为解析错,是初学者经常碰到的。即便 Python 程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。本文就来和大家聊聊Python3的错误和异常,感兴趣的可以学习一下
    2022-09-09
  • Python读取MRI并显示为灰度图像实例代码

    Python读取MRI并显示为灰度图像实例代码

    这篇文章主要介绍了Python读取MRI并显示为灰度图像实例代码,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • python实现无边框进度条的实例代码

    python实现无边框进度条的实例代码

    这篇文章主要介绍了python实现无边框进度条的实例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Python urllib模块urlopen()与urlretrieve()详解

    Python urllib模块urlopen()与urlretrieve()详解

    Python urllib模块urlopen()与urlretrieve()的使用方法详解。
    2013-11-11
  • 如何在Python中导入EXCEL数据

    如何在Python中导入EXCEL数据

    这篇文章主要介绍了使用Python处理EXCEL基础操作篇1,如何在Python中导入EXCEL数据,文中提供了解决思路和部分实现代码,一起来看看吧
    2023-03-03
  • matplotlib绘制折线图的基本配置(万能模板案例)

    matplotlib绘制折线图的基本配置(万能模板案例)

    折线图可以很方便的看出数据的对比,本文主要介绍了matplotlib绘制折线图的基本配置(万能模板案例),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • 通过CartPole游戏详解PPO 优化过程

    通过CartPole游戏详解PPO 优化过程

    这篇文章主要为大家介绍了通过CartPole游戏详解PPO 优化过程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • CentOS7下安装python3.6.8的教程详解

    CentOS7下安装python3.6.8的教程详解

    这篇文章主要介绍了CentOS7下安装python3.6.8的教程,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • 使用K.function()调试keras操作

    使用K.function()调试keras操作

    这篇文章主要介绍了使用K.function()调试keras操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06

最新评论