Мне нужно иметь возможность получить маску сети для интерфейса экземпляра при начальной загрузке экземпляра. После запуска 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