Module: Boucher::Servers

Defined in:
lib/boucher/servers.rb

Constant Summary collapse

NotFound =
Class.new(StandardError)

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.clearObject



39
40
41
# File 'lib/boucher/servers.rb', line 39

def clear
  @instance = nil
end

.cultivate(thing) ⇒ Object



58
59
60
61
# File 'lib/boucher/servers.rb', line 58

def cultivate(thing)
  thing.extend(Boucher::Servers) if thing
  thing
end

.instanceObject



43
44
45
46
# File 'lib/boucher/servers.rb', line 43

def instance
  reload if !@instance
  @instance
end

.reloadObject



48
49
50
51
52
# File 'lib/boucher/servers.rb', line 48

def reload
  @instance = Boucher.compute.servers
  @instance.each {} # Wake up you lazy list!
  cultivate(@instance)
end

.restart(servers) ⇒ Object



110
111
112
113
# File 'lib/boucher/servers.rb', line 110

def self.restart(servers)
  Boucher.change_servers_state(servers, :stop, "stopped")
  Boucher.change_servers_state(servers, :start, "running")
end

.start(servers) ⇒ Object



102
103
104
# File 'lib/boucher/servers.rb', line 102

def self.start(servers)
  Boucher.change_servers_state(servers, :start, "running")
end

.stop(servers) ⇒ Object



106
107
108
# File 'lib/boucher/servers.rb', line 106

def self.stop(servers)
  Boucher.change_servers_state(servers, :stop, "stopped")
end

.terminate(servers) ⇒ Object



115
116
117
# File 'lib/boucher/servers.rb', line 115

def self.terminate(servers)
  Boucher.change_servers_state(servers, :destroy, "terminated")
end

Instance Method Details

#[](meal) ⇒ Object



123
124
125
# File 'lib/boucher/servers.rb', line 123

def [](meal)
  find(:env => Boucher::Config[:env], :meal => meal, :state => "running")
end

#allObject



64
65
66
# File 'lib/boucher/servers.rb', line 64

def all
  self
end

#find(options = {}) ⇒ Object



76
77
78
79
80
81
82
83
# File 'lib/boucher/servers.rb', line 76

def find(options={})
  servers = search(options)
  first = servers.first
  if first.nil?
    raise Boucher::Servers::NotFound.new("No server matches criteria: #{options.inspect}")
  end
  first
end

#in_env(env) ⇒ Object



85
86
87
# File 'lib/boucher/servers.rb', line 85

def in_env(env)
  Servers.cultivate(self.find_all { |s| s.tags["Env"] == env.to_s })
end

#in_state(state) ⇒ Object



89
90
91
92
93
94
95
96
# File 'lib/boucher/servers.rb', line 89

def in_state(state)
  if state[0] == "!"
    state = state[1..-1]
    Servers.cultivate(self.find_all { |s| s.state != state.to_s })
  else
    Servers.cultivate(self.find_all { |s| s.state == state.to_s })
  end
end

#of_meal(meal) ⇒ Object



98
99
100
# File 'lib/boucher/servers.rb', line 98

def of_meal(meal)
  Servers.cultivate(self.find_all { |s| s.tags["Meal"] == meal.to_s })
end

#search(options = {}) ⇒ Object



68
69
70
71
72
73
74
# File 'lib/boucher/servers.rb', line 68

def search(options={})
  servers = self
  servers = servers.of_meal(options[:meal]) if options[:meal]
  servers = servers.in_env(options[:env]) if options[:env]
  servers = servers.in_state(options[:state]) if options[:state]
  servers
end

#with_id(server_id) ⇒ Object



119
120
121
# File 'lib/boucher/servers.rb', line 119

def with_id(server_id)
  Servers.cultivate(self.all.find_all { |s| s.id == server_id }).first
end