を達成するための文字列書式テンプレートや使用文字列にYAMLを変換することができますこれは実際に起こると言われています。例えば。あなたの<ID>
が@abc
のようなもので置き換えする必要がある場合、YAMLファイルの実際の行は@
として
id: '@abc'
なく
id: '@abc'
なる必要が予約されています。そのような警告がいくつかあるので、文字列レベルに置き換えるのは良い考えではありません。
あなたが行うことができます
:あなたを与えるだろう
import sys
import ruamel.yaml
yaml_str = """\
vagrantfile:
target: local
vm:
provider:
local:
box: puphpet/ubuntu1404-x<BITS> # MEERKEUZE: 32 OF 64, STANDAARD 64
box_url: puphpet/ubuntu1404-x<BITS> # MEERKEUZE: 32 OF 64, STANDAARD 64
box_version: '0'
chosen_virtualizer: <virtualiser> # MEERKEUZE: virtualbox OF vmware, STANDAARD 64
virtualizers:
virtualbox:
modifyvm:
natdnshostresolver1: false
showgui: 0
vmware:
numvcpus: 1
parallels:
use_linked_clone: 0
check_guest_tools: 0
update_guest_tools: 0
machines:
vflm_7orc03npv15g:
id: <ID> # STRING
hostname: <HOSTNAME> # STRING
network:
private_network: <IP-ADDRESS> #lOKAAL IP, STANDARAARD 192.168.50.101
forwarded_port:
hon1d:
host: '80'
guest: '80'
memory: '<MEGABYTES>' # AANTAL, STANDAARD VEELVOUD VAN 1024
cpus: '<CORES>' # AANTAL CPUS, STANDAARD AANTAL CORES - 1, NIET HOGER DAN AANTAL CORES
"""
def replace(data, values):
def do_one(data, values):
if isinstance(data, dict):
for k in data:
data[k] = do_one(data[k], values)
return data
elif isinstance(data, list):
for idx, elem in enumerate(data):
data[idx] = do_one(elem, values)
return data
elif isinstance(data, str):
for k in values: # full match
if data == k:
return values[k]
if '<' in data and '>' in data:
for k in values:
data = data.replace(k, str(values[k]))
return data
expanded = { ('<' + k + '>'): v for (k, v) in values.iteritems()}
do_one(data, expanded)
data = ruamel.yaml.round_trip_load(yaml_str)
replace(data, {
'BITS': 64,
'virtualiser': 'virtualbox',
'HOSTNAME': 'localhost',
'IP-ADDRESS': '192.168.0.1',
'ID': '@abc',
'MEGABYTES': 2048,
'CORES': 8,
})
ruamel.yaml.round_trip_dump(data, stream=sys.stdout, indent=4)
:
vagrantfile:
target:
vm:
provider:
local:
box: puphpet/ubuntu1404-x64 # MEERKEUZE: 32 OF 64, STANDAARD 64
box_url: puphpet/ubuntu1404-x64 # MEERKEUZE: 32 OF 64, STANDAARD 64
box_version:
chosen_virtualizer: virtualbox # MEERKEUZE: virtualbox OF vmware, STANDAARD 64
virtualizers:
virtualbox:
modifyvm:
natdnshostresolver1:
showgui:
vmware:
numvcpus:
parallels:
use_linked_clone:
check_guest_tools:
update_guest_tools:
machines:
vflm_7orc03npv15g:
id: '@abc' # STRING
hostname: localhost # STRING
network:
private_network: 192.168.0.1 #lOKAAL IP, STANDARAARD 192.168.50.101
forwarded_port:
hon1d:
host:
guest:
memory: 2048 # AANTAL, STANDAARD VEELVOUD VAN 1024
cpus: 8 # AANTAL CPUS, STANDAARD AANTAL CORES - 1, NIET HOGER DAN AANTAL CORES
ことに注意してください。
- コメントは
- を保存している
cpus
の値ということと、 memory
は文字列ではなく整数です
id
の値は、必要に応じて適切に引用されます。
上記は、ruamel.yaml
を使用しています。免責事項私はそのパッケージの著者です。 PyYAMLでも同じことができますが、コメントは失われますが、YAML 1.1標準(2005年版)ではなく、YAML 1.1標準(2009年版)ではなくYAML 1.1標準に制限する必要があります。
リストまたは辞書で? – Anthon
** ** https://stackoverflow.com/questions/41620674/use-placeholders-in-yaml – dreftymac