Module: Construqt::Tags

Defined in:
lib/construqt/tags.rb

Class Method Summary collapse

Class Method Details

.add(tag_str, &block) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 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) ⇒ Object



26
27
28
29
30
31
# 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) ⇒ Object



22
23
24
# File 'lib/construqt/tags.rb', line 22

def self.from(obj)
  @object_id_tags[obj.object_id]
end

.ips_adr(tag, family) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# 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) ⇒ Object



59
60
61
# 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) ⇒ Object



63
64
65
# File 'lib/construqt/tags.rb', line 63

def self.ips_net(tag, family)
  IPAddress.summarize(ips_adr(tag, family).map{|i| i.network })
end