如何通過python代碼根據(jù)模板修改變量生成新yaml文件
有些時候,需要根據(jù)一個yaml模板創(chuàng)建多個yaml文件實(shí)例,我們先寫一個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" #可以定義字符串變量,然后引用進(jìn)行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文件順序出先異常運(yùn)行結(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.1networks:
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'}}}}

參考閱讀:
到此這篇關(guān)于如何通過python代碼根據(jù)模板修改變量生成新yaml文件的文章就介紹到這了,更多相關(guān)python創(chuàng)建yaml模板文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python機(jī)器學(xué)習(xí)之Kmeans基礎(chǔ)算法
這篇文章主要介紹了Python機(jī)器學(xué)習(xí)之Kmeans基礎(chǔ)算法,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04
使用Python3+PyQT5+Pyserial 實(shí)現(xiàn)簡單的串口工具方法
今天小編就為大家分享一篇使用Python3+PyQT5+Pyserial 實(shí)現(xiàn)簡單的串口工具方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-02-02
Tensorflow 自帶可視化Tensorboard使用方法(附項(xiàng)目代碼)
這篇文章主要介紹了Tensorflow 自帶可視化Tensorboard使用方法(附項(xiàng)目代碼),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02
通過Python OpenGL的point sprite技術(shù)繪制雪花
通常,點(diǎn)精靈(point sprite)技術(shù)被用于描述大量粒子在屏幕上的運(yùn)動,自然也可以用于繪制雪花。本文將通過Python OpenGL繪制雪花,感興趣的可以動手試一試2022-02-02
python實(shí)現(xiàn)簡易五子棋游戲(控制臺版)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡易五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
Python使用matplotlib時顯示中文亂碼解決方法(或更改字體)
這篇文章主要給大家介紹了關(guān)于Python使用matplotlib時顯示中文亂碼的解決方法(或更改字體),在Matplotlib中,中文亂碼問題通常出現(xiàn)在圖表的標(biāo)題、標(biāo)簽和刻度上,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12
Python使用Mechanize模塊編寫爬蟲的要點(diǎn)解析
這篇文章主要介紹了Python使用Mechanize模塊編寫爬蟲的要點(diǎn)解析,作者還講解了Mechanize程序占用內(nèi)存過高問題的相關(guān)解決方法,需要的朋友可以參考下2016-03-03

