我需要能够在引导实例时获取实例接口的网络掩码。在实例上运行ohai后,我有以下输出将提供网络掩码:
"network": {
"interfaces": {
"lo": {
"mtu": "65536",
"flags": [
"LOOPBACK",
"UP",
"LOWER_UP"
],
"encapsulation": "Loopback",
"addresses": {
"127.0.0.1": {
"family": "inet",
"prefixlen": "8",
"netmask": "255.0.0.0",
"scope": "Node"
}
},
"state": "unknown"
},
"ens5": {
"type": "ens",
"number": "5",
"mtu": "9001",
"flags": [
"BROADCAST",
"MULTICAST",
"UP",
"LOWER_UP"
],
"encapsulation": "Ethernet",
"addresses": {
"0E:D6:03:1B:8D:42": {
"family": "lladdr"
},
"10.191.196.213": {
"family": "inet",
"prefixlen": "24",
"netmask": "255.255.255.0",
"broadcast": "10.191.196.255",
"scope": "Global"
}
},...
我没有得到正确的语法,但我发现我可以用这个获取IP地址:
node[:network][:interfaces][:eth0][:addresses].detect{|k,v| v[:family] == "inet" }.first
然而,使用它,将无法获得网络掩码:
node[:network][:interfaces][:ens192][:addresses][:netmask]
有关正确红宝石的任何想法都能获得这个价值吗?
*编辑 - 使用:
node["network"]["interfaces"]["ens192"]["addresses"].values.find { |i| i["family"] == "inet" }["netmask"]
我收到此错误:
[2018-04-24T17:06:45-04:00] ERROR:
Chef::Mixin::Template::TemplateError (undefined method `[]' for nil:NilClass) on line #9:
7: DNS2=<%= node['dns_dtbg']['dns_servers_dtbg'][1] %>
8: PEERDNS=no
9: NETMASK=<%= node["network"]["interfaces"]["ens192"]["addresses"].values.find { |i| i["family"] == "inet" }["netmask"] %>
10: TYPE=Ethernet
答案 0 :(得分:0)
node["network"]["interfaces"]["ens192"]["addresses"].values.find { |i| i["family"] == "inet" }["netmask"]
你还应该检查你是否在路上没有任何空的Mash。
答案 1 :(得分:0)
node[:network][:interfaces][:ens5][:addresses].detect do |k,v|
v[:family]=='inet'
end.last[:netmask]
您可以通过将json粘贴到pry或irb来找到它,并在添加另一个嵌套密钥提取后每次检查结果。此外,您可以使用Hash#dig
改进此答案。