| 
									
										
										
										
											2015-02-12 13:01:05 +03:00
										 |  |  | module Connectors | 
					
						
							|  |  |  |   class Server < Base | 
					
						
							|  |  |  |     include Helpers::DeleteCommand, | 
					
						
							|  |  |  |       Helpers::ListCommand | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def initialize(db) | 
					
						
							|  |  |  |       self.collection = db.collection('servers') | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-29 15:40:07 +03:00
										 |  |  |     def servers_find(query, fields=nil) | 
					
						
							| 
									
										
										
										
											2015-02-12 13:01:05 +03:00
										 |  |  |       query_options = fields.nil? ? {} : {fields: fields} | 
					
						
							|  |  |  |       list(query, query_options) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def servers(p=nil, env=nil, names=nil, reserved=nil, fields=:all) | 
					
						
							|  |  |  |       q = {} | 
					
						
							|  |  |  |       q['project'] = p unless p.nil? or p.empty? | 
					
						
							|  |  |  |       q['deploy_env'] = env unless env.nil? or env.empty? | 
					
						
							|  |  |  |       q['chef_node_name'] = {'$in' => names} unless names.nil? or names.class != Array | 
					
						
							|  |  |  |       q['reserved_by'] = {'$ne' => nil} unless reserved.nil? | 
					
						
							|  |  |  |       f = nil | 
					
						
							|  |  |  |       unless fields == :all | 
					
						
							|  |  |  |         f = fields | 
					
						
							|  |  |  |         ['_id', 'chef_node_name'].each do |k| | 
					
						
							|  |  |  |           f.push(k) unless f.include?(k) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |       servers_find(q, f) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-14 13:28:03 +03:00
										 |  |  |     def stack_servers(stack_id, reserver=nil, options={}) | 
					
						
							|  |  |  |       q = {'stack' => stack_id} | 
					
						
							|  |  |  |       q['reserved_by'] = {'$ne' => nil} unless reserved.nil? | 
					
						
							|  |  |  |       list(q, options) | 
					
						
							| 
									
										
										
										
											2015-08-05 15:06:18 +03:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-12 13:01:05 +03:00
										 |  |  |     def servers_by_names(names) | 
					
						
							|  |  |  |       query = {} | 
					
						
							|  |  |  |       query['chef_node_name'] = {'$in' => names} unless names.nil? or names.class != Array | 
					
						
							|  |  |  |       list(query) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def server_by_instance_id(id) | 
					
						
							|  |  |  |       find_server('_id' => id) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def server_by_chef_node_name(name) | 
					
						
							|  |  |  |       find_server('chef_node_name' => name) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def servers_by_key(key_name) | 
					
						
							|  |  |  |       collection.find('key' => key_name).to_a.map { |bson| model_from_bson(bson) } | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def server_insert(server) | 
					
						
							|  |  |  |       #server.validate! | 
					
						
							|  |  |  |       server.created_at = Time.now | 
					
						
							|  |  |  |       collection.insert(server.to_mongo_hash) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # somewhy servers are not validated in previous version of code. I leave this until I know, why. | 
					
						
							|  |  |  |     def server_update(server) | 
					
						
							|  |  |  |       collection.update({'_id' => server.id}, server.to_hash_without_id) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # somewhy servers are not validated in previous version of code. I leave this until I know, why. | 
					
						
							|  |  |  |     def server_set_chef_node_name(server) | 
					
						
							|  |  |  |       collection.update({'_id' => server.id}, {'$set' => {'chef_node_name' => server.chef_node_name}}) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-30 02:29:53 +03:00
										 |  |  |     def stack_servers_delete(stack_id) | 
					
						
							|  |  |  |       collection.remove('stack' => stack_id) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-04 12:36:10 +03:00
										 |  |  |     def set_server_run_list(id, run_list) | 
					
						
							| 
									
										
										
										
											2015-08-14 13:28:03 +03:00
										 |  |  |       collection.update({"_id" => id}, {"$set" => {"run_list" => run_list}}) | 
					
						
							| 
									
										
										
										
											2015-08-04 12:36:10 +03:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-12 13:01:05 +03:00
										 |  |  |     private | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def model_from_bson(bson) | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  |       Devops::Model::Server.build_from_bson(bson) | 
					
						
							| 
									
										
										
										
											2015-02-12 13:01:05 +03:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # couldn't be replaced with ShowCommand (_id doesn't neccesary appear in params) | 
					
						
							|  |  |  |     def find_server(params) | 
					
						
							|  |  |  |       bson = collection.find(params).to_a.first | 
					
						
							|  |  |  |       if bson.nil? | 
					
						
							|  |  |  |         if params.has_key? "_id" | 
					
						
							|  |  |  |           raise RecordNotFound.new("No server by instance id '#{params["_id"]}' found") | 
					
						
							|  |  |  |         elsif params.has_key? "chef_node_name" | 
					
						
							|  |  |  |           raise RecordNotFound.new("No server by node name '#{params["chef_node_name"]}' found") | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |           raise RecordNotFound.new('Invalid params') | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |       model_from_bson(bson) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | end |