在我开始之前,我应该声明我对 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 都适合,我做错了什么?