Class: Konzertmeister::Backend
- Inherits:
-
Object
- Object
- Konzertmeister::Backend
- Defined in:
- lib/konzertmeister/backend.rb
Constant Summary collapse
- KINDS =
%w[ production sandbox development internal ]
Instance Attribute Summary collapse
-
#created_at ⇒ Object
readonly
Returns the value of attribute created_at.
-
#id ⇒ Object
readonly
Returns the value of attribute id.
-
#kind ⇒ Object
Returns the value of attribute kind.
-
#monthly_cost ⇒ Object
readonly
Returns the value of attribute monthly_cost.
-
#name ⇒ Object
Returns the value of attribute name.
-
#puppet_master ⇒ Object
readonly
Returns the value of attribute puppet_master.
-
#short_name ⇒ Object
readonly
Returns the value of attribute short_name.
-
#updated_at ⇒ Object
readonly
Returns the value of attribute updated_at.
Class Method Summary collapse
Instance Method Summary collapse
- #coda_count ⇒ Object
- #coda_count=(size) ⇒ Object
- #coda_flavor ⇒ Object
- #coda_flavor=(input_flavor) ⇒ Object
- #customer ⇒ Object
- #customer=(input_customer) ⇒ Object
- #early_access_programs ⇒ Object
- #enroll_in_early_access_program(eap) ⇒ Object
- #fqdn(scope = nil) ⇒ Object
- #full_name ⇒ Object
- #hosts ⇒ Object
-
#initialize(data = {}) ⇒ Backend
constructor
A new instance of Backend.
- #meta_version ⇒ Object
- #meta_version=(input_mv) ⇒ Object
- #postgres_flavor ⇒ Object
- #postgres_flavor=(input_flavor) ⇒ Object
- #production? ⇒ Boolean
- #proxy_command(host, user, port = 1535, *args) ⇒ Object
- #proxy_host ⇒ Object
- #proxy_port ⇒ Object
- #rsync_down_command(host, user, file_remote, file_local, port = 1535, *args) ⇒ Object
- #rsync_up_command(host, user, file_local, file_remote = "", port = 1535, *args) ⇒ Object
- #save ⇒ Object
- #set_latest_meta_version ⇒ Object
- #ssh_prefix(user, port = 1535, *args) ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize(data = {}) ⇒ Backend
Returns a new instance of Backend.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/konzertmeister/backend.rb', line 28 def initialize(data = {}) @data = data data.each do |k,value| next if %w[hosts customer meta_version program].include?(k) if m = k.match(/^backend_(.*)$/) key = m[1] else key = k end instance_variable_set("@#{key}", value) end end |
Instance Attribute Details
#created_at ⇒ Object (readonly)
Returns the value of attribute created_at.
11 12 13 |
# File 'lib/konzertmeister/backend.rb', line 11 def created_at @created_at end |
#id ⇒ Object (readonly)
Returns the value of attribute id.
11 12 13 |
# File 'lib/konzertmeister/backend.rb', line 11 def id @id end |
#kind ⇒ Object
Returns the value of attribute kind.
10 11 12 |
# File 'lib/konzertmeister/backend.rb', line 10 def kind @kind end |
#monthly_cost ⇒ Object (readonly)
Returns the value of attribute monthly_cost.
11 12 13 |
# File 'lib/konzertmeister/backend.rb', line 11 def monthly_cost @monthly_cost end |
#name ⇒ Object
Returns the value of attribute name.
10 11 12 |
# File 'lib/konzertmeister/backend.rb', line 10 def name @name end |
#puppet_master ⇒ Object (readonly)
Returns the value of attribute puppet_master.
11 12 13 |
# File 'lib/konzertmeister/backend.rb', line 11 def puppet_master @puppet_master end |
#short_name ⇒ Object (readonly)
Returns the value of attribute short_name.
11 12 13 |
# File 'lib/konzertmeister/backend.rb', line 11 def short_name @short_name end |
#updated_at ⇒ Object (readonly)
Returns the value of attribute updated_at.
11 12 13 |
# File 'lib/konzertmeister/backend.rb', line 11 def updated_at @updated_at end |
Class Method Details
.all ⇒ Object
13 14 15 16 17 18 19 20 21 22 |
# File 'lib/konzertmeister/backend.rb', line 13 def self.all response = Konzertmeister.session.get('/backends') if response response.map do |data| Konzertmeister::Backend.new(data) end.sort_by do |b| "#{b.customer.short_name} #{b.short_name}" end end end |
.find_by(attr, value) ⇒ Object
24 25 26 |
# File 'lib/konzertmeister/backend.rb', line 24 def self.find_by(attr, value) Backend.new(Konzertmeister.session.get("/backends/#{attr}/#{value}")) end |
Instance Method Details
#coda_count ⇒ Object
94 95 96 |
# File 'lib/konzertmeister/backend.rb', line 94 def coda_count @coda_count ||= self.hosts.size end |
#coda_count=(size) ⇒ Object
98 99 100 |
# File 'lib/konzertmeister/backend.rb', line 98 def coda_count=(size) @coda_count = size end |
#coda_flavor ⇒ Object
102 103 104 |
# File 'lib/konzertmeister/backend.rb', line 102 def coda_flavor @coda_flavor ||= self.hosts.find{|h| h.kind == Konzertmeister::Host::CODA_KIND}.flavor end |
#coda_flavor=(input_flavor) ⇒ Object
106 107 108 109 110 111 112 |
# File 'lib/konzertmeister/backend.rb', line 106 def coda_flavor=(input_flavor) if Konzertmeister::Host::FLAVORS.include?(input_flavor) @coda_flavor = input_flavor else raise "Invalid flavor: #{input_flavor}. Choose one of: #{Konzertmeister::Host::Flavors.join(', ')}" end end |
#customer ⇒ Object
143 144 145 146 147 148 149 |
# File 'lib/konzertmeister/backend.rb', line 143 def customer @customer ||= if @data.key?('customer') Konzertmeister::Customer.new(@data.fetch('customer')) else Backend.find_by('id', self.id).customer end end |
#customer=(input_customer) ⇒ Object
151 152 153 |
# File 'lib/konzertmeister/backend.rb', line 151 def customer=(input_customer) @customer = input_customer end |
#early_access_programs ⇒ Object
79 80 81 82 83 84 85 86 87 |
# File 'lib/konzertmeister/backend.rb', line 79 def early_access_programs if @data.key?('early_access_programs') @data.fetch('early_access_programs').map do |program_hash| Konzertmeister::EarlyAccessProgram.new(program_hash) end else Backend.find_by('id', self.id).early_access_programs end end |
#enroll_in_early_access_program(eap) ⇒ Object
89 90 91 92 |
# File 'lib/konzertmeister/backend.rb', line 89 def enroll_in_early_access_program(eap) params = { program_key: eap.key } Konzertmeister.session.post("/backends/id/#{self.id}/early_access_grants", params) end |
#fqdn(scope = nil) ⇒ Object
170 171 172 173 174 175 176 177 178 |
# File 'lib/konzertmeister/backend.rb', line 170 def fqdn(scope = nil) first = scope.nil? ? full_name : "#{full_name}-admin" [ first, "backend", "tempoiq", "com" ].join(".") end |
#full_name ⇒ Object
163 164 165 166 167 168 |
# File 'lib/konzertmeister/backend.rb', line 163 def full_name [ short_name, customer.short_name ].join("-") end |
#hosts ⇒ Object
69 70 71 72 73 74 75 76 77 |
# File 'lib/konzertmeister/backend.rb', line 69 def hosts @hosts ||= if @data.key?('hosts') @data.fetch('hosts').map do |host_hash| Konzertmeister::Host.new(host_hash) end.sort_by(&:hostname) else Backend.find_by('id', self.id).hosts end end |
#meta_version ⇒ Object
126 127 128 129 130 131 132 |
# File 'lib/konzertmeister/backend.rb', line 126 def ||= if @data.key?('meta_version') Konzertmeister::MetaVersion.new(@data.fetch('meta_version')) else Backend.find_by('id', self.id). end end |
#meta_version=(input_mv) ⇒ Object
134 135 136 |
# File 'lib/konzertmeister/backend.rb', line 134 def (input_mv) = input_mv end |
#postgres_flavor ⇒ Object
114 115 116 |
# File 'lib/konzertmeister/backend.rb', line 114 def postgres_flavor @postgres_flavor ||= self.hosts.find{|h| h.kind == Konzertmeister::Host::POSTGRES_KIND}.flavor end |
#postgres_flavor=(input_flavor) ⇒ Object
118 119 120 121 122 123 124 |
# File 'lib/konzertmeister/backend.rb', line 118 def postgres_flavor=(input_flavor) if Konzertmeister::Host::FLAVORS.include?(input_flavor) @postgres_flavor = input_flavor else raise "Invalid flavor: #{input_flavor}. Choose one of: #{Konzertmeister::Host::Flavors.join(', ')}" end end |
#production? ⇒ Boolean
180 181 182 |
# File 'lib/konzertmeister/backend.rb', line 180 def production? @kind == 'production' end |
#proxy_command(host, user, port = 1535, *args) ⇒ Object
192 193 194 195 |
# File 'lib/konzertmeister/backend.rb', line 192 def proxy_command(host, user, port=1535, *args) prefix = ssh_prefix(user, port, *args) %Q{#{prefix} #{user}@#{host.management_ip}} end |
#proxy_host ⇒ Object
155 156 157 |
# File 'lib/konzertmeister/backend.rb', line 155 def proxy_host @proxy_host ||= @data.fetch('proxy').fetch('proxy_host') end |
#proxy_port ⇒ Object
159 160 161 |
# File 'lib/konzertmeister/backend.rb', line 159 def proxy_port @proxy_port ||= @data.fetch('proxy').fetch('proxy_port') end |
#rsync_down_command(host, user, file_remote, file_local, port = 1535, *args) ⇒ Object
202 203 204 205 |
# File 'lib/konzertmeister/backend.rb', line 202 def rsync_down_command(host, user, file_remote, file_local, port=1535, *args) prefix = ssh_prefix(user, port, *args) %Q{rsync -avzP -e '#{prefix}' #{user}@#{host.management_ip}:#{file_remote} #{file_local}} end |
#rsync_up_command(host, user, file_local, file_remote = "", port = 1535, *args) ⇒ Object
197 198 199 200 |
# File 'lib/konzertmeister/backend.rb', line 197 def rsync_up_command(host, user, file_local, file_remote="", port=1535, *args) prefix = ssh_prefix(user, port, *args) %Q{rsync -avzP -e '#{prefix}' #{file_local} #{user}@#{host.management_ip}:#{file_remote}} end |
#save ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/konzertmeister/backend.rb', line 43 def save params = { backend_platform: 'Rackspace', backend_name: name, backend_kind: kind, customer: {customer_id: customer.id}, meta_version: {meta_version_id: .id}, coda_count: coda_count, coda_flavor: coda_flavor, postgres_flavor: postgres_flavor } puts "Creating with params: #{params}" response = Konzertmeister.session.post("/backends", params) if response response_object = Konzertmeister::Backend.new(response) @id = response_object.id @short_name = response_object.short_name @puppet_master = response_object.puppet_master @monthly_cost = response_object.monthly_cost @created_at = response_object.created_at @updated_at = response_object.updated_at response_object end end |
#set_latest_meta_version ⇒ Object
138 139 140 141 |
# File 'lib/konzertmeister/backend.rb', line 138 def mv = Konzertmeister::MetaVersion.all.last Konzertmeister.session.put("/backends/id/#{self.id}", {'meta_version' => { 'meta_version_id' => mv.id }}) end |
#ssh_prefix(user, port = 1535, *args) ⇒ Object
184 185 186 187 188 189 190 |
# File 'lib/konzertmeister/backend.rb', line 184 def ssh_prefix(user, port=1535, *args) proxy = @data.fetch("proxy") proxy_host = proxy.fetch("proxy_host") proxy_port = proxy.fetch("proxy_port") %Q{ssh -p #{port} -o "ProxyCommand ssh -p #{proxy_port} #{user}@#{proxy_host} nc %h %p" #{args.join(' ')}} end |
#to_s ⇒ Object
207 208 209 210 211 212 213 214 215 |
# File 'lib/konzertmeister/backend.rb', line 207 def to_s cost = "%1.2f" % monthly_cost ([ "$#{cost}/month #{full_name} (#{kind})", "MetaVersion: #{meta_version}", "Hosts:" ] + hosts.sort_by(&:name).map {|h| " #{h}"}).join("\n") end |