मैं वाईएएमएल में देख रहा हूं और मुझे स्वीकार करना होगा, मैं थोड़ा संघर्ष कर रहा हूं। मेरे पास एक प्रोग्राम है जो एक JSON कॉन्फ़िगरेशन फ़ाइल पढ़ता है (और ठीक काम करता है) लेकिन मैं इसे YAML कॉन्फ़िगरेशन फ़ाइल के साथ काम करने के लिए पुन: सक्रिय कर रहा हूं, एक के लिए, मेरी अपनी शिक्षा और दो, उपयोगकर्ताओं के लिए एक अधिक मानव अनुकूल कॉन्फ़िगरेशन फ़ाइल।

संक्षेप में, मैं दो प्रमुख मूल्य जोड़े रखना चाहता हूं, उदा।

log-file: /var/log/file

api-key: /api/key

जिन्हें केवल एक बार परिभाषित किया गया है। मैं फिर एक मेजबान को परिभाषित करना चाहता हूं, और मेरी कॉन्फ़िगरेशन फ़ाइल में एकाधिक होस्ट रखने में सक्षम होना चाहता हूं।

यहाँ एक मेजबान का एक उदाहरण है।

fqdn: firewall.example.com.
project_id: fluffy-penguin-242411
managed_zone: example
domain: example.com
ttl: 60
interval: 600

क्या यहां कोई है जो मुझे वाईएएमएल फ़ाइल को परिभाषित करने में मदद कर सकता है जिसे मैं आसानी से पायथन में काम कर सकता हूं?

मैंने अपने कोड में बुनियादी कॉन्फ़िगरेशन प्राप्त करने में कामयाबी हासिल की है, लेकिन ऐसा कॉन्फ़िगरेशन नहीं जो मैं करना चाहता हूं।

आखिरकार, मैं मेजबानों की एक सूची या शब्दकोश प्राप्त करने में सक्षम होना चाहता हूं जिसे मैं फिर से शुरू कर सकता हूं।

चीयर्स,

सी

अपडेट करें

मुझे लगता है कि मैं इस तरह कुछ के साथ सही रास्ते पर हो सकता हूं

api-key: './ddns-api-key.json'
log-path: './ddns.log'
hosts:
    -   fqdn: 'firewall.example.com.'
        project_id: 'fluffy-penguin-242411'
        managed_zone: 'example'
        domain: 'example.com'
        ttl: 60
        interval: 600

-2
anowlinorbit 20 जून 2019, 22:29

2 जवाब

सबसे बढ़िया उत्तर

आप बिल्कुल ऐसा नहीं कर सकते हैं, लेकिन आप सूची में एक नामित कुंजी/मान जोड़ी ऑब्जेक्ट का उपयोग करके कुछ ऐसा ही कर सकते हैं, जैसे:

api-key: './ddns-api-key.json'
log-path: './ddns.log'
hosts:
    - host1:
        fqdn: 'firewall.example.com.'
        project_id: 'fluffy-penguin-242411'
        managed_zone: 'example'
        domain: 'example.com'
        ttl: 60
        interval: 600
    - host2:
        fqdn: 'stuff.example.org.'
        project_id: 'fluffy-bear-213461'
        managed_zone: 'example'
        domain: 'example.org'
        ttl: 70
        interval: 700

आपको बस प्रत्येक सूची प्रविष्टि के लिए एक अद्वितीय नाम का उपयोग करना होगा - मैंने इस उदाहरण में host1, host2, आदि का उपयोग किया है।

1
connectyourcharger 20 जून 2019, 22:41

मेरा मानना ​​​​है कि निम्नलिखित जिसके साथ मैं आया था, और उपरोक्त पोस्ट से कनेक्ट योरचार्जर की मदद से काम करता है:

api-key: './ddns-api-key.yaml'
logfile: './ddns.log'
hosts:
    -   host: 'firewall.example.com.'
        project_id: 'fluffy-penguin-242411'
        managed_zone: 'example'
        domain: 'example.com'
        ttl: 60
        interval: 600

    -   host: 'www.example-two.com.'
        project_id: 'fluffy-penguin-242411'
        managed_zone: 'example-two'
        domain: 'example-two.com'
        ttl: 60
        interval: 600

जब मैं निम्नलिखित पायथन का उपयोग करके इसे एक्सेस करता हूं, तो मैं वाईएएमएल मेजबानों के माध्यम से लूप करने और सभी कॉन्फ़िगरेशन आइटम पुनर्प्राप्त करने में सक्षम हूं।

import yaml

# Read YAML file
with open("configuration.yaml", 'r') as stream:
    try:
        yaml_data = yaml.safe_load(stream)
    except yaml.YAMLError as exc:
        print(exc)

print(yaml_data['api-key']) # prints ./ddns-api-key.yaml

for host in yaml_data['hosts']:
    print(host['host'])    # prints firewall.example.com and www.exmaple-two.com
    print(host['ttl'])     # prints 60 twice
    print(host['domain'])  # prints example.com and example-two.com

चीयर्स, सी

0
anowlinorbit 22 जून 2019, 00:00