109 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| module Connectors
 | |
|   class Server < Base
 | |
|     include Helpers::DeleteCommand,
 | |
|       Helpers::ListCommand
 | |
| 
 | |
| 
 | |
|     def initialize(db)
 | |
|       super(db)
 | |
|     end
 | |
| 
 | |
|     def collection_name
 | |
|       'servers'
 | |
|     end
 | |
| 
 | |
|     def servers_find(query, fields=nil)
 | |
|       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
 | |
| 
 | |
|     def stack_servers(stack_id, reserved=nil, options={})
 | |
|       q = {'stack' => stack_id}
 | |
|       q['reserved_by'] = {'$ne' => nil} unless reserved.nil?
 | |
|       list(q, options)
 | |
|     end
 | |
| 
 | |
|     def servers_by_names(names)
 | |
|       query = {}
 | |
|       query['chef_node_name'] = {'$in' => names} unless names.nil? or names.class != Array
 | |
|       list(query)
 | |
|     end
 | |
| 
 | |
|     def servers_by_project_and_deploy_env project, env
 | |
|       query = {project: project, deploy_env: env}
 | |
|       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.created_at = Time.now
 | |
|       collection.insert(server.to_mongo_hash)
 | |
|     end
 | |
| 
 | |
|     def server_update(server)
 | |
|       collection.update({'_id' => server.id}, server.to_hash_without_id)
 | |
|     end
 | |
| 
 | |
|     def server_set_chef_node_name(server)
 | |
|       collection.update({'_id' => server.id}, {'$set' => {'chef_node_name' => server.chef_node_name}})
 | |
|     end
 | |
| 
 | |
|     def stack_servers_delete(stack_id)
 | |
|       collection.remove('stack' => stack_id)
 | |
|     end
 | |
| 
 | |
|     def set_server_run_list(id, run_list)
 | |
|       collection.update({"_id" => id}, {"$set" => {"run_list" => run_list}})
 | |
|     end
 | |
| 
 | |
|     private
 | |
| 
 | |
|     def model_from_bson(bson)
 | |
|       Devops::Model::Server.build_from_bson(bson)
 | |
|     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
 | 
