module Construqt::Tags
Public Class Methods
add(tag_str, &block)
click to toggle source
# File lib/construqt/tags.rb, line 6 def self.add(tag_str, &block) (name, *tags) = tag_str.split(/\s*#\s*/) obj = block.call(name, tags) #binding.pry tags && tags.uniq.each do |tag| @tags[tag] ||= [] @tags[tag] << obj unless @tags[tag].include?(obj) end if obj.respond_to? :tags obj.tags = tags end @object_id_tags[obj.object_id] ||= [] @object_id_tags[obj.object_id] = (@object_id_tags[obj.object_id] + tags).uniq [name, obj] end
find(tag, clazz = nil)
click to toggle source
# File lib/construqt/tags.rb, line 26 def self.find(tag, clazz = nil) #binding.pry ret = (@tags[tag] || []).select{|o| clazz.nil? || o.instance_of?(clazz.class) || (clazz.kind_of?(Proc) && clazz.call(o)) } Construqt.logger.warn("tag #{tag} #{clazz.inspect} empty result") if ret.empty? ret end
from(obj)
click to toggle source
# File lib/construqt/tags.rb, line 22 def self.from(obj) @object_id_tags[obj.object_id] end
ips_adr(tag, family)
click to toggle source
# File lib/construqt/tags.rb, line 33 def self.ips_adr(tag, family) (@tags[tag]||[]).map do |obj| if obj.kind_of?(IPAddress) || obj.kind_of?(Construqt::Addresses::CqIpAddress) obj elsif obj.respond_to? :ips obj.ips elsif obj.kind_of?(Construqt::Flavour::HostDelegate) res = obj.interfaces.values.map do |i| i.delegate.address.ips.map do |a| #prefix = a.ipv4? ? 32 : 128 #ret = IPAddress.parse("#{a.to_s}/#{prefix}") #ret a end end #puts "HOST=>#{tag} #{res.map{|i| i.to_string }}" res else nil end end.flatten.compact.select do |i| (((family==Construqt::Addresses::IPV4||family==IPAddress::IPv4) && i.ipv4?) || ((family==Construqt::Addresses::IPV6||family==IPAddress::IPv6) && i.ipv6?)) end end
ips_hosts(tag, family)
click to toggle source
# File lib/construqt/tags.rb, line 59 def self.ips_hosts(tag, family) IPAddress.summarize(ips_adr(tag, family).map{|i| IPAddress.parse("#{i.to_s}/#{i.ipv4? ? 32 : 128}") }) end
ips_net(tag, family)
click to toggle source
# File lib/construqt/tags.rb, line 63 def self.ips_net(tag, family) IPAddress.summarize(ips_adr(tag, family).map{|i| i.network }) end