欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何通過python代碼根據(jù)模板修改變量生成新yaml文件

 更新時間:2023年11月01日 09:55:56   作者:月早十  
有些時候,需要根據(jù)一個yaml模板創(chuàng)建多個yaml文件實例,我們先寫一個yaml文件模板,然后通過python代碼修改模板中的變量,存儲為一個新的yaml文件,需要配合python的庫Template及ymal使用,本文給大家講解的非常詳細,需要的朋友跟隨小編一起看看吧

有些時候,需要根據(jù)一個yaml模板創(chuàng)建多個yaml文件實例,我們先寫一個yaml文件模板,然后通過python代碼修改模板中的變量,存儲為一個新的yaml文件。需要配合python的庫Template及ymal使用。

  • 創(chuàng)建yaml模板

如下截取了OAI核心網(wǎng)啟動yaml文件docker-compose-basic-vpp-nrf-slice4中的部分代碼,將其中的部分參數(shù)設(shè)置為變量
創(chuàng)建的變量的格式為 ${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文件內(nèi)容,存儲到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字典到y(tǒng)aml_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文件順序出先異常

運行結(jié)果

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模塊使用

到此這篇關(guān)于如何通過python代碼根據(jù)模板修改變量生成新yaml文件的文章就介紹到這了,更多相關(guān)python創(chuàng)建yaml模板文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實現(xiàn)的求解最大公約數(shù)算法示例

    Python實現(xiàn)的求解最大公約數(shù)算法示例

    這篇文章主要介紹了Python實現(xiàn)的求解最大公約數(shù)算法,涉及Python數(shù)學(xué)運算相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • Django跨域請求CSRF的方法示例

    Django跨域請求CSRF的方法示例

    這篇文章主要介紹了Django跨域請求CSRF的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • 深入解析Python中的集合類型操作符

    深入解析Python中的集合類型操作符

    這篇文章主要介紹了深入解析Python中的集合類型操作符,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-08-08
  • Python?如何引用不確定的函數(shù)

    Python?如何引用不確定的函數(shù)

    在Python中,引用不確定的函數(shù)通常意味著我們可能在運行時才知道要調(diào)用哪個函數(shù),或者我們可能想根據(jù)某些條件動態(tài)地選擇不同的函數(shù)來執(zhí)行,下面給大家分享Python?如何引用不確定的函數(shù),感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • PyTorch實現(xiàn)MNIST數(shù)據(jù)集手寫數(shù)字識別詳情

    PyTorch實現(xiàn)MNIST數(shù)據(jù)集手寫數(shù)字識別詳情

    這篇文章主要介紹了PyTorch實現(xiàn)MNIST數(shù)據(jù)集手寫數(shù)字識別詳情,文章圍繞主題展開詳細的內(nèi)容戒殺,具有一定的參考價值,需要的朋友可以參考一下
    2022-09-09
  • Python 套接字 Accept 超時問題解析

    Python 套接字 Accept 超時問題解析

    本文討論了 Python 中套接字的超時功能,該功能對于緩解無限期等待套接字接受的問題是必要的,下面通過本文給大家大家介紹Python 套接字 Accept 超時問題,需要的朋友可以參考下
    2023-06-06
  • Python如何提取chm數(shù)據(jù)

    Python如何提取chm數(shù)據(jù)

    這篇文章主要介紹了Python如何提取chm數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • python socket 超時設(shè)置 errno 10054

    python socket 超時設(shè)置 errno 10054

    這篇文章主要介紹了python 遠程主機強迫關(guān)閉了一個現(xiàn)有的連接 socket 超時設(shè)置 errno 10054 ,需要的朋友可以參考下
    2014-07-07
  • python中自定義with的具體使用

    python中自定義with的具體使用

    在 Python 中,with?語句用于簡化資源管理,它保證在執(zhí)行完代碼塊后正確地釋放資源,通過__enter__和__exit__魔術(shù)方法實現(xiàn),本文就來詳細的介紹一下,感興趣的可以了解一下
    2024-09-09
  • Tensorflow Summary用法學(xué)習(xí)筆記

    Tensorflow Summary用法學(xué)習(xí)筆記

    這篇文章主要介紹了Tensorflow Summary用法學(xué)習(xí)筆記,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01

最新評論