72 lines
2.1 KiB
Ruby
72 lines
2.1 KiB
Ruby
|
|
Ohai.plugin(:ZeroTier) do
|
|
provides 'zerotier'
|
|
|
|
def zerotier_command (subcommand)
|
|
return "<%= @zerotier_binary %> <% unless @zerotier_binary.end_with?('-cli') %>-q<% end %> #{subcommand} -p<%= @control_port %> -D<%= @data_dir %>"
|
|
end
|
|
|
|
def linux_get_networks
|
|
networks = Mash.new
|
|
cmd = zerotier_command('listnetworks')
|
|
Ohai::Log.info(cmd)
|
|
so = shell_out(cmd)
|
|
first_line = true
|
|
so.stdout.lines do |line|
|
|
if first_line
|
|
# skip the header line
|
|
first_line = false
|
|
next
|
|
end
|
|
|
|
data = line.strip.split(/\s+/)
|
|
|
|
cur_network = Mash.new
|
|
cur_network[:network_name] = data[3]
|
|
cur_network[:mac] = data[4]
|
|
cur_network[:status] = data[5]
|
|
cur_network[:type] = data[6]
|
|
cur_network[:interface] = data[7]
|
|
cur_network[:addresses] = []
|
|
|
|
data[8].split(',').each do |addr|
|
|
cur_network[:addresses].push(addr)
|
|
end
|
|
|
|
networks[data[2]] = cur_network
|
|
end
|
|
return networks
|
|
end
|
|
|
|
def linux_get_node_id
|
|
node_id = ''
|
|
|
|
if ::File.exists?("<%= @data_dir %>/identity.public")
|
|
node_id = ::File.read("<%= @data_dir %>/identity.public")
|
|
node_id = node_id[0..9]
|
|
Ohai
|
|
else
|
|
Ohai::Log.warn("<%= @data_dir %>/identity.public' does not exist")
|
|
end
|
|
|
|
return node_id unless node_id.empty?
|
|
end
|
|
|
|
def get_version
|
|
so = shell_out("<%= @zerotier_binary %> -v 2>&1")
|
|
version = so.stdout.strip
|
|
return version unless version.empty?
|
|
end
|
|
|
|
collect_data(:linux) do
|
|
if ::File.exists?("<%= @zerotier_binary %>")
|
|
zerotier Mash.new
|
|
zerotier[:version] = get_version
|
|
zerotier[:node_id] = linux_get_node_id
|
|
zerotier[:networks] = linux_get_networks
|
|
else
|
|
Ohai::Log.warn("Cannot find zerotier binary")
|
|
end
|
|
end
|
|
end
|