| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | require "db/mongo/models/mongo_model" | 
					
						
							| 
									
										
										
										
											2015-08-04 12:36:10 +03:00
										 |  |  | require "db/mongo/models/model_with_provider" | 
					
						
							| 
									
										
										
										
											2015-08-26 13:59:04 +03:00
										 |  |  | require "db/validators/deploy_env/run_list" | 
					
						
							| 
									
										
										
										
											2015-11-03 11:46:54 +03:00
										 |  |  | require "providers/static" | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  | module Devops | 
					
						
							|  |  |  |   module Model | 
					
						
							|  |  |  |     class Server < MongoModel | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-04 12:36:10 +03:00
										 |  |  |       include ModelWithProvider | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-09 18:57:22 +03:00
										 |  |  |       module OperationType | 
					
						
							| 
									
										
										
										
											2015-11-20 15:15:06 +03:00
										 |  |  |         # we store strings in mongo, so it's better not to use symbols | 
					
						
							|  |  |  |         CREATION = 'creation' | 
					
						
							|  |  |  |         DEPLOY = 'deploy' | 
					
						
							|  |  |  |         RESERVE = 'reserve' | 
					
						
							|  |  |  |         UNRESERVE = 'unreserve' | 
					
						
							|  |  |  |         PAUSE = 'pause' | 
					
						
							|  |  |  |         UNPAUSE = 'unpause' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def self.supported_type?(value) | 
					
						
							|  |  |  |           return false unless value.is_a?(String) | 
					
						
							|  |  |  |           [CREATION, DEPLOY, RESERVE, UNRESERVE, PAUSE, UNPAUSE].include?(value) | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2015-11-09 18:57:22 +03:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-04 12:36:10 +03:00
										 |  |  |       attr_accessor :chef_node_name, :id, :remote_user, :project, :deploy_env, :private_ip, :public_ip, :created_at, :without_bootstrap, :created_by, :reserved_by, :stack, :run_list | 
					
						
							| 
									
										
										
										
											2015-11-23 17:21:43 +03:00
										 |  |  |       attr_accessor :key, :last_operation | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  |       types :id => {:type => String, :empty => false}, | 
					
						
							|  |  |  |             :provider => {:type => String, :empty => false}, | 
					
						
							|  |  |  |             :remote_user => {:type => String, :empty => false}, | 
					
						
							|  |  |  |             :project => {:type => String, :empty => false}, | 
					
						
							|  |  |  |             :deploy_env => {:type => String, :empty => false}, | 
					
						
							|  |  |  |             :private_ip => {:type => String, :empty => false}, | 
					
						
							|  |  |  |             :public_ip => {:type => String, :empty => true, :nil => true}, | 
					
						
							|  |  |  |             :key => {:type => String, :empty => false}, | 
					
						
							|  |  |  |             :created_by => {:type => String, :empty => false}, | 
					
						
							|  |  |  |             :chef_node_name => {:type => String, :empty => true}, | 
					
						
							| 
									
										
										
										
											2015-07-30 02:14:45 +03:00
										 |  |  |             :reserved_by => {:type => String, :empty => true}, | 
					
						
							| 
									
										
										
										
											2015-08-04 12:36:10 +03:00
										 |  |  |             :stack => {:type => String, :nil => true}, | 
					
						
							|  |  |  |             :run_list => {:type => Array, :value_type => String, :empty => true, :nil => false} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       set_validators  ::Validators::DeployEnv::RunList | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  |       def self.fields | 
					
						
							| 
									
										
										
										
											2015-11-09 18:57:22 +03:00
										 |  |  |         ["chef_node_name", "project", "deploy_env", "provider", "remote_user", "private_ip", "public_ip", "created_at", "created_by", "key", "reserved_by", "run_list", "stack", | 
					
						
							| 
									
										
										
										
											2015-11-23 17:21:43 +03:00
										 |  |  |           "last_operation"] | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2014-08-26 10:09:30 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  |       def initialize s={} | 
					
						
							| 
									
										
										
										
											2015-10-27 12:01:21 +03:00
										 |  |  |         self.set_provider(s) | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  |         self.chef_node_name = s["chef_node_name"] | 
					
						
							| 
									
										
										
										
											2015-11-23 17:21:43 +03:00
										 |  |  |         self.id = s["_id"] || s['id'] | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  |         self.remote_user = s["remote_user"] | 
					
						
							|  |  |  |         self.project = s["project"] | 
					
						
							|  |  |  |         self.deploy_env = s["deploy_env"] | 
					
						
							|  |  |  |         self.public_ip = s["public_ip"] | 
					
						
							|  |  |  |         self.private_ip = s["private_ip"] | 
					
						
							|  |  |  |         self.created_at = s["created_at"] | 
					
						
							|  |  |  |         self.created_by = s["created_by"] | 
					
						
							|  |  |  |         self.key = s["key"] | 
					
						
							|  |  |  |         self.reserved_by = s["reserved_by"] | 
					
						
							| 
									
										
										
										
											2015-07-30 02:14:45 +03:00
										 |  |  |         self.stack = s["stack"] | 
					
						
							| 
									
										
										
										
											2015-08-04 13:20:35 +03:00
										 |  |  |         self.run_list = s["run_list"] || [] | 
					
						
							| 
									
										
										
										
											2015-11-23 17:21:43 +03:00
										 |  |  |         self.last_operation = s["last_operation"] | 
					
						
							| 
									
										
										
										
											2015-08-05 18:26:21 +03:00
										 |  |  |         self | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  |       def validate! | 
					
						
							| 
									
										
										
										
											2015-11-03 11:46:54 +03:00
										 |  |  |         # remove it after updating from .types to validators | 
					
						
							|  |  |  |         validate_fields_types | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  |         super | 
					
						
							|  |  |  |         true | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  |       def to_hash_without_id | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           "chef_node_name" => self.chef_node_name, | 
					
						
							|  |  |  |           "remote_user" => self.remote_user, | 
					
						
							|  |  |  |           "project" => self.project, | 
					
						
							|  |  |  |           "deploy_env" => self.deploy_env, | 
					
						
							|  |  |  |           "private_ip" => self.private_ip, | 
					
						
							|  |  |  |           "public_ip" => self.public_ip, | 
					
						
							|  |  |  |           "created_at" => self.created_at, | 
					
						
							|  |  |  |           "created_by" => self.created_by, | 
					
						
							|  |  |  |           "key" => self.key, | 
					
						
							| 
									
										
										
										
											2015-07-30 02:14:45 +03:00
										 |  |  |           "reserved_by" => self.reserved_by, | 
					
						
							| 
									
										
										
										
											2015-08-04 12:36:10 +03:00
										 |  |  |           "stack" => stack, | 
					
						
							| 
									
										
										
										
											2015-11-09 18:57:22 +03:00
										 |  |  |           "run_list" => self.run_list, | 
					
						
							| 
									
										
										
										
											2015-11-23 17:21:43 +03:00
										 |  |  |           "last_operation" => self.last_operation | 
					
						
							| 
									
										
										
										
											2015-10-27 12:01:21 +03:00
										 |  |  |         }.merge(provider_hash).delete_if { |k,v| v.nil? } | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  |       def self.build_from_bson s | 
					
						
							|  |  |  |         Server.new(s) | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  |       def info | 
					
						
							|  |  |  |         str = "Instance Name: #{self.chef_node_name}\n" | 
					
						
							|  |  |  |         str << "Instance ID: #{self.id}\n" | 
					
						
							|  |  |  |         str << "Private IP: #{self.private_ip}\n" | 
					
						
							|  |  |  |         str << "Public IP: #{self.public_ip}\n" unless self.public_ip.nil? | 
					
						
							|  |  |  |         str << "Remote user: #{self.remote_user}\n" | 
					
						
							|  |  |  |         str << "Project: #{self.project} - #{self.deploy_env}\n" | 
					
						
							|  |  |  |         str << "Created by: #{self.created_by}" | 
					
						
							|  |  |  |         str | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  |       def static? | 
					
						
							| 
									
										
										
										
											2015-10-27 12:01:21 +03:00
										 |  |  |         self.provider == Provider::Static::PROVIDER | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2014-10-22 15:01:55 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-23 17:21:43 +03:00
										 |  |  |       def set_last_operation(operation_type, user) | 
					
						
							| 
									
										
										
										
											2015-11-20 15:15:06 +03:00
										 |  |  |         raise ArgumentError unless OperationType.supported_type?(operation_type) | 
					
						
							| 
									
										
										
										
											2015-11-23 17:21:43 +03:00
										 |  |  |         self.last_operation = { | 
					
						
							|  |  |  |           'type' => operation_type, | 
					
						
							|  |  |  |           'date' => Time.now, | 
					
						
							|  |  |  |           'user' => user | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2015-11-09 18:57:22 +03:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | end |