Module: Inprovise::Infrastructure

Defined in:
lib/inprovise/infra.rb

Defined Under Namespace

Classes: Group, Node, Target

Class Method Summary collapse

Class Method Details

.deregister(tgt) ⇒ Object



51
52
53
54
55
56
# File 'lib/inprovise/infra.rb', line 51

def deregister(tgt)
  targets.synchronize do
    raise ArgumentError, "Invalid infrastructure target [#{tgt.to_s}]" unless targets.delete(Target === tgt ? tgt.name : tgt.to_s)
    targets.each_value {|t| t.remove_target(tgt) }
  end
end

.find(name) ⇒ Object



25
26
27
28
29
30
# File 'lib/inprovise/infra.rb', line 25

def find(name)
  return name if name.is_a?(Target)
  targets.synchronize do
    return targets[name]
  end
end

.init(path) ⇒ Object



66
67
68
# File 'lib/inprovise/infra.rb', line 66

def init(path)
  File.open(path, 'w') {|f| f << JSON.pretty_generate([]) }
end

.list(type = Target) ⇒ Object



38
39
40
41
42
# File 'lib/inprovise/infra.rb', line 38

def list(type=Target)
  targets.synchronize do
    targets.values.select {|t| type === t}
  end
end

.loadObject



70
71
72
73
74
# File 'lib/inprovise/infra.rb', line 70

def load
  targets.synchronize do
    JSON.load(IO.read(Inprovise.infra)) if File.readable?(Inprovise.infra)
  end
end

.namesObject



32
33
34
35
36
# File 'lib/inprovise/infra.rb', line 32

def names
  targets.synchronize do
    targets.keys.sort
  end
end

.register(tgt) ⇒ Object



44
45
46
47
48
49
# File 'lib/inprovise/infra.rb', line 44

def register(tgt)
  targets.synchronize do
    raise ArgumentError, "Existing [#{targets[tgt.name].to_s}] found" if targets.has_key?(tgt.name)
    targets[tgt.name] = tgt
  end
end

.saveObject



58
59
60
61
62
63
64
# File 'lib/inprovise/infra.rb', line 58

def save
  targets.synchronize do
    data = []
    targets.keys.sort.each {|t| targets[t].is_a?(Node) ? data.insert(0,targets[t]) : data.push(targets[t]) }
    File.open(Inprovise.infra, 'w') {|f| f << JSON.pretty_generate(data) }
  end
end

.symbolize_keys(hsh) ⇒ Object



14
15
16
17
# File 'lib/inprovise/infra.rb', line 14

def self.symbolize_keys(hsh)
  return hsh unless ::Hash === hsh
  hsh.reduce({}) {|h, (k,v)| h[k.to_sym] = symbolize_keys(v); h }
end

.targetsObject



20
21
22
# File 'lib/inprovise/infra.rb', line 20

def targets
  @targets ||= ::Hash.new.extend(::MonitorMixin)
end