In Chef 0.7 I would search the node index and collect relevant data like so:
munin_hosts = search(:node, “roles:optimize_server”).map { |host| {
“hostname” => host[“hostname”],
“fqdn” => host[“fqdn”],
“domain” => host[“domain”],
“ipaddress” => host[“ipaddress”],
“interfaces” => host[“network”][“interfaces”]
}
}
In Chef 0.8, I went to this:
munin_hosts = search(:node, “run_list:role\[optimize_server\]”).map { |host| {
“hostname” => host[“hostname”],
“fqdn” => host[“fqdn”],
“domain” => host[“domain”],
“ipaddress” => host[“ipaddress”],
“interfaces” => host[“network”][“interfaces”]
}
}
Now, in different circumstances I care about different IP addresses
which ohai rarely makes the default interface address. I would collect
addresses from individual interfaces like so:
ipaddress_raw = host[“interfaces”][“tun0”][“addresses”].invert[“inet”]
However I can’t do that in Chef 0.8 because this is now a
Chef::Attribute and it has no invert method or a to_s method.
How do I get the IP address of a particular known interface name in Chef 0.8.16?
Bryan