了解并创建 YAML 配置文件
Understanding and then creating a YAML configuration file
我正在研究 YAML,必须承认,我有点吃力。我有一个读取 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
这里有没有人可以帮我定义一个 YAML 文件,我可以在 Python 中轻松使用它?
我已经设法将基本配置纳入我的代码,但不是与我想做的相匹配的配置。
最终,我希望能够有一个我可以遍历的主机列表或字典。
干杯,
C
更新
我想我做这样的事情可能是对的
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
您不能完全那样做,但是您可以通过在列表中使用命名的 key/value 对对象来做类似的事情,如下所示:
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
等。
我相信我想出了以下方法,并借助上面 post 中的 connectyourcharger,有效:
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
当我使用以下 python 访问它时,我能够遍历 YAML 主机并检索所有配置项。
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
干杯,
C
我正在研究 YAML,必须承认,我有点吃力。我有一个读取 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
这里有没有人可以帮我定义一个 YAML 文件,我可以在 Python 中轻松使用它?
我已经设法将基本配置纳入我的代码,但不是与我想做的相匹配的配置。
最终,我希望能够有一个我可以遍历的主机列表或字典。
干杯,
C
更新
我想我做这样的事情可能是对的
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
您不能完全那样做,但是您可以通过在列表中使用命名的 key/value 对对象来做类似的事情,如下所示:
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
等。
我相信我想出了以下方法,并借助上面 post 中的 connectyourcharger,有效:
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
当我使用以下 python 访问它时,我能够遍历 YAML 主机并检索所有配置项。
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
干杯, C