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