【发布时间】:2013-08-20 12:19:51
【问题描述】:
在我开始之前,我应该声明我是 YAML 和 JSON 的新手,所以格式化规则不是那么清楚。
我正在尝试编写一个 Perl 脚本(Perl,因为我知道它存在于我们所有的服务器上。)它将为各种主机更新几个与网络相关的设置。我的偏好是将所有设置放在一个文件中,并根据运行脚本的主机更新配置。
我查看了 YAML,但由于无法执行以下操作,我有点犹豫:
host:
hostname: first
interface: eth0
oldip: 1.2.3.4
newip: 2.3.4.5
oldgw: 1.2.3.1
newgw: 2.3.4.1
interface: eth1
oldip: 1.2.3.4
newip: 2.3.4.5
oldgw: 1.2.3.1
newgw: 2.3.4.1
host:
hostname: second
interface: eth0
oldip: 1.2.3.4
newip: 2.3.4.5
oldgw: 1.2.3.1
newgw: 2.3.4.1
interface: eth1
oldip: 1.2.3.4
newip: 2.3.4.5
oldgw: 1.2.3.1
newgw: 2.3.4.1
也就是说,我已将其插入 YAML 验证器,但它失败了。
我发现,对于 YAML,我可以做到以下几点:
host: "first"
interface1:
name: eth0
oldip: 1.2.3.4
newip: 2.3.4.5
oldgw: 1.2.3.1
newgw: 2.3.4.1
interface2:
name: eth1
oldip: 1.2.3.4
newip: 2.3.4.5
oldgw: 1.2.3.1
newgw: 2.3.4.1
不过,这不太理想,因为它使得在一个文件中拥有多个主机是不可能的。我这样做是基于这样一个事实,即我在尝试此操作时一直从我使用的在线验证器中收到错误。
我研究过使用 JSON,但我也不知道所有的规则。我知道以下方法不起作用:
{
"host": "first",
"interface1": {
"newip": "2.3.4.5",
"oldip": "1.2.3.4",
"oldgw": "1.2.3.1",
"name": "eth0",
"newgw": "2.3.4.1"
},
"interface2": {
"newip": "2.3.4.5",
"oldip": "1.2.3.4",
"oldgw": "1.2.3.1",
"name": "eth1",
"newgw": "2.3.4.1"
}
}
{
"host": "second",
"interface1": {
"newip": "2.3.4.5",
"oldip": "1.2.3.4",
"oldgw": "1.2.3.1",
"name": "eth0",
"newgw": "2.3.4.1"
},
"interface2": {
"newip": "2.3.4.5",
"oldip": "1.2.3.4",
"oldgw": "1.2.3.1",
"name": "eth1",
"newgw": "2.3.4.1"
}
}
是否有一种格式可以让我将所有主机及其信息存储在一个可以解析的文件中?
如果 YAML 或 JSON 都适合,我做错了什么?
【问题讨论】:
-
人类编写正确的 YAML 和 JSON 比阅读它更难。您应该在 Perl 中构建您的初始数据结构并使用 Perl 将其写入文件,至少一开始是这样。然后,如果你有勇气,你可以手动对文件进行一些小改动。