2017-06-27 7 views
1

を使ってYAMLするには、私は、次のYAMLファイルを持っている:私は(デフォルトが存在しない場合)private_network_idとfloating_ipするキー - >デフォルトを追加したい書き込みパラメータと値のpython

heat_template_version: 2015-10-15 
parameters: 

    image: 
    type: string 
    label: Image name or ID 
    default: CirrOS 
    private_network_id: 
    type: string 
    label: Private network name or ID 
    floating_ip: 
    type: string 

を、デフォルトのキーへ私は値を追加したい(ユーザーから取得する)

これをどのようにしてPythonで実現できますか? (免責事項:私はパッケージの作者午前)ラウンドトリップあなたが使用ruamel.yamlを行う必要があり、この種の

heat_template_version: 2015-10-15 
parameters: 

    image: 
    type: string 
    label: Image name or ID 
    default: CirrOS 
    private_network_id: 
    type: string 
    label: Private network name or ID 
    default: <private_network_id> 
    floating_ip: 
    type: string 
    default: <floating_ip> 

答えて

1

結果のYAMLは次のようになります。あなたのファイルは、正確なあなたが要求した出力と一致しますその後

from ruamel.yaml import YAML 
from pathlib import Path 

yaml = YAML() 
path = Path('input.yaml') 

data = yaml.load(path) 
parameters = data['parameters'] 
# replace assigned values with user input 
parameters['private_network_id']['default'] = '<private_network_id>' 
parameters['floating_ip']['default'] = '<floating_ip>' 
yaml.dump(data, path) 

:あなたの入力を想定し

はファイルinput.yamlと、次のプログラムです。

YAMLファイルのコメントとキーの順序は自動的に保持されます(YAML仕様では保証されません)。

あなたはまだ(標準ライブラリにはpathlibを持っていない)Python2 from ruamel.std.pathlib import Pathを使用するか、適切に開かれた、古いスタイルで​​と.dump()行を書き換え、ファイルオブジェクトを使用している場合。例えば。

with open('input.yaml', 'w') as fp: 
    yaml.dump(data, fp) 
+0

ありがとうございました...それは働きました –

関連する問題