| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  | require "uri" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require "commands/status" | 
					
						
							|  |  |  | require "commands/bootstrap_templates" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-12 11:37:17 +03:00
										 |  |  | require "lib/executors/server_executor" | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  | require "providers/provider_factory" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require "db/mongo/models/server" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require "workers/create_server_worker" | 
					
						
							|  |  |  | require "workers/bootstrap_worker" | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  | require "app/api2/parsers/server" | 
					
						
							|  |  |  | require_relative "request_handler" | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | module Devops | 
					
						
							| 
									
										
										
										
											2015-07-17 20:22:29 +03:00
										 |  |  |   module API2_0 | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |     module Handler | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |       class Server < RequestHandler | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         set_parser Devops::API2_0::Parser::ServerParser | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |         extend StatusCommands | 
					
						
							|  |  |  |         extend BootstrapTemplatesCommands | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-12 16:39:41 +03:00
										 |  |  |         #scheduler = Rufus::Scheduler.new | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |         def servers | 
					
						
							|  |  |  |           fields, reserved = parser.servers | 
					
						
							| 
									
										
										
										
											2015-08-05 17:30:42 +03:00
										 |  |  |           Devops::Db.connector.servers(nil, nil, nil, reserved, fields).map {|s| s.to_hash} | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-17 20:22:29 +03:00
										 |  |  |         def chef_servers | 
					
						
							| 
									
										
										
										
											2015-08-11 19:47:54 +03:00
										 |  |  |           KnifeFactory.instance.chef_node_list | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-17 20:22:29 +03:00
										 |  |  |         def provider_servers provider | 
					
						
							|  |  |  |           ::Provider::ProviderFactory.get(provider).servers | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |         def server id | 
					
						
							| 
									
										
										
										
											2015-08-05 17:30:42 +03:00
										 |  |  |           get_server_by_key(id, parser.server) | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |         def delete id | 
					
						
							|  |  |  |           s = get_server_by_key(id, parser.instance_key) | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           ### Authorization | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |           Devops::Db.connector.check_project_auth s.project, s.deploy_env, parser.current_user | 
					
						
							| 
									
										
										
										
											2015-08-12 17:14:01 +03:00
										 |  |  |           Devops::Executor::ServerExecutor.new(s, "").delete_server | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-12 11:37:17 +03:00
										 |  |  |         def create_server_stream out | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           status = [] | 
					
						
							| 
									
										
										
										
											2015-08-05 14:05:14 +03:00
										 |  |  |           prepare_create_server do |project, env, user, body| | 
					
						
							| 
									
										
										
										
											2015-08-12 11:37:17 +03:00
										 |  |  |             e = Devops::Executor::ServerExecutor.new(nil, out) | 
					
						
							|  |  |  |             e.project = project | 
					
						
							|  |  |  |             e.deploy_env = env | 
					
						
							|  |  |  |             body["created_by"] = user | 
					
						
							|  |  |  |             res = e.create_server(body) | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |             status.push res | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |           status | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |         def create_server | 
					
						
							|  |  |  |           body = parser.create | 
					
						
							|  |  |  |           user = parser.current_user | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-01 16:54:21 +03:00
										 |  |  |           check_if_server_attrs_are_valid(body, user) | 
					
						
							| 
									
										
										
										
											2015-09-02 11:38:58 +03:00
										 |  |  |           uri = Worker.start_async(CreateServerWorker, @request, | 
					
						
							| 
									
										
										
										
											2015-09-01 16:54:21 +03:00
										 |  |  |             server_attrs: body, | 
					
						
							|  |  |  |             owner: user | 
					
						
							|  |  |  |           ) | 
					
						
							| 
									
										
										
										
											2015-09-02 11:38:58 +03:00
										 |  |  |           [uri] | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |         def pause_server node_name | 
					
						
							|  |  |  |           s = Server.get_server_by_key(node_name, parser.instance_key) | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           ## Authorization | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |           Devops::Db.connector.check_project_auth s.project, s.deploy_env, parser.current_user | 
					
						
							| 
									
										
										
										
											2015-08-14 13:28:03 +03:00
										 |  |  |           provider = s.provider_instance | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           r = provider.pause_server s | 
					
						
							|  |  |  |           if r.nil? | 
					
						
							|  |  |  |             "Server with instance ID '#{s.id}' and node name '#{node_name}' is paused" | 
					
						
							|  |  |  |           else | 
					
						
							|  |  |  |             raise ConflictException.new("Server with instance ID '#{s.id}' and node name '#{node_name}' can not be paused, It in state '#{r}'", 409) | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |         def unpause_server node_name | 
					
						
							|  |  |  |           s = Server.get_server_by_key(node_name, parser.instance_key) | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |            ## Authorization | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |           Devops::Db.connector.check_project_auth s.project, s.deploy_env, parser.current_user | 
					
						
							| 
									
										
										
										
											2015-08-14 13:28:03 +03:00
										 |  |  |           provider = s.provider_instance | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           r = provider.unpause_server s | 
					
						
							|  |  |  |           if r.nil? | 
					
						
							|  |  |  |             "Server with instance ID '#{s.id}' and node name '#{node_name}' is unpaused" | 
					
						
							|  |  |  |           else | 
					
						
							|  |  |  |             raise ConflictException.new("Server with instance ID '#{s.id}' and node name '#{node_name}' can not be unpaused, It in state '#{r}'") | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |         def reserve_server node_name | 
					
						
							|  |  |  |           s = get_server_by_key(node_name, parser.instance_key) | 
					
						
							|  |  |  |           user = parser.current_user | 
					
						
							|  |  |  |           Devops::Db.connector.check_project_auth s.project, s.deploy_env, user | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           raise ConflictException.new("Server '#{node_name}' already reserved") unless s.reserved_by.nil? | 
					
						
							|  |  |  |           s.reserved_by = user | 
					
						
							|  |  |  |           Devops::Db.connector.server_update(s) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |         def unreserve_server node_name | 
					
						
							|  |  |  |           s = get_server_by_key(node_name, parser.instance_key) | 
					
						
							|  |  |  |           Devops::Db.connector.check_project_auth s.project, s.deploy_env, parser.current_user | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           raise ConflictException.new("Server '#{node_name}' is not reserved") if s.reserved_by.nil? | 
					
						
							|  |  |  |           s.reserved_by = nil | 
					
						
							|  |  |  |           Devops::Db.connector.server_update(s) | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # TODO: check bootstrap template name | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |         def bootstrap_server_stream out | 
					
						
							| 
									
										
										
										
											2015-08-10 13:17:04 +03:00
										 |  |  |           s, rl, bt = prepare_bootstrap_server | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           status = [] | 
					
						
							|  |  |  |           cert = Devops::Db.connector.key s.key | 
					
						
							| 
									
										
										
										
											2015-08-10 13:17:04 +03:00
										 |  |  |           DevopsLogger.logger.debug "Bootstrap certificate path: #{cert.path}" | 
					
						
							|  |  |  |           #bootstrap s, out, cert.path, logger | 
					
						
							| 
									
										
										
										
											2015-08-11 19:47:54 +03:00
										 |  |  |           options = { | 
					
						
							|  |  |  |             :bootstrap_template => bt, | 
					
						
							|  |  |  |             :cert_path => cert.path, | 
					
						
							|  |  |  |             :run_list => rl | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |           r = two_phase_bootstrap s, options, out | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           str = nil | 
					
						
							|  |  |  |           r = if check_server(s) | 
					
						
							|  |  |  |             Devops::Db.connector.server_set_chef_node_name s | 
					
						
							|  |  |  |             str = "Server with id '#{s.id}' is bootstraped" | 
					
						
							| 
									
										
										
										
											2015-08-10 13:17:04 +03:00
										 |  |  |             DevopsLogger.logger.info str | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |             0
 | 
					
						
							|  |  |  |           else | 
					
						
							|  |  |  |             str = "Server with id '#{s.id}' is not bootstraped" | 
					
						
							| 
									
										
										
										
											2015-08-10 13:17:04 +03:00
										 |  |  |             DevopsLogger.logger.warn str | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |             1
 | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |           status.push r | 
					
						
							|  |  |  |           out << str | 
					
						
							|  |  |  |           out << "\n" | 
					
						
							|  |  |  |           status | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |         def bootstrap_server | 
					
						
							| 
									
										
										
										
											2015-09-02 12:41:29 +03:00
										 |  |  |           server, rl, bootstrap_template = prepare_bootstrap_server | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           dir = DevopsConfig[:report_dir_v2] | 
					
						
							|  |  |  |           files = [] | 
					
						
							|  |  |  |           uri = URI.parse(@request.url) | 
					
						
							| 
									
										
										
										
											2015-09-02 12:41:29 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |           uri = Worker.start_async(BootstrapWorker, @request, | 
					
						
							|  |  |  |             provider_name: server.provider, | 
					
						
							|  |  |  |             server_attrs: server.to_mongo_hash, | 
					
						
							|  |  |  |             bootstrap_template: bootstrap_template, | 
					
						
							|  |  |  |             owner: parser.current_user | 
					
						
							|  |  |  |           ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           sleep 1
 | 
					
						
							| 
									
										
										
										
											2015-09-02 12:41:29 +03:00
										 |  |  |           [uri] | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |         def prepare_bootstrap_server | 
					
						
							|  |  |  |           body = parser.bootstrap | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           id = body["instance_id"] | 
					
						
							|  |  |  |           name = body["name"] | 
					
						
							| 
									
										
										
										
											2015-08-10 13:01:34 +03:00
										 |  |  |           rl = body["run_list"] | 
					
						
							|  |  |  |           t = body["bootstrap_template"] | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           s = Devops::Db.connector.server_by_instance_id(id) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |           p = Devops::Db.connector.check_project_auth s.project, s.deploy_env, parser.current_user | 
					
						
							| 
									
										
										
										
											2015-08-10 13:01:34 +03:00
										 |  |  |           d = p.deploy_env(s.deploy_env) | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-14 13:28:03 +03:00
										 |  |  |           provider = s.provider_instance | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-14 13:28:03 +03:00
										 |  |  |           check_chef_node_name(name, provider, KnifeFactory.instance) unless name.nil? | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           unless t.nil? | 
					
						
							|  |  |  |             templates = get_templates | 
					
						
							|  |  |  |             halt_response("Invalid bootstrap template '#{t}', available values: #{templates.join(", ")}", 400) unless templates.include?(t) | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |           s.chef_node_name = name || provider.create_default_chef_node_name(s) | 
					
						
							| 
									
										
										
										
											2015-08-10 13:01:34 +03:00
										 |  |  |           return s, rl || d.run_list, t | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |         def add_server | 
					
						
							|  |  |  |           body = parser.add_server | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           project = body["project"] | 
					
						
							|  |  |  |           deploy_env = body["deploy_env"] | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |           p = Devops::Db.connector.check_project_auth project, deploy_env, parser.current_user | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |           d = p.deploy_env(deploy_env) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           cert = Devops::Db.connector.key(body["key"]) | 
					
						
							|  |  |  |           provider = ::Provider::ProviderFactory.get("static") | 
					
						
							|  |  |  |           s = Devops::Model::Server.new | 
					
						
							|  |  |  |           s.provider = provider.name | 
					
						
							|  |  |  |           s.project = project | 
					
						
							|  |  |  |           s.deploy_env = deploy_env | 
					
						
							|  |  |  |           s.remote_user = body["remote_user"] | 
					
						
							|  |  |  |           s.private_ip = body["private_ip"] | 
					
						
							|  |  |  |           s.public_ip = body["public_ip"] | 
					
						
							|  |  |  |           s.id = "static_#{cert.id}-#{Time.now.to_i}" | 
					
						
							|  |  |  |           s.key = cert.id | 
					
						
							|  |  |  |           Devops::Db.connector.server_insert s | 
					
						
							|  |  |  |           "Server '#{s.id}' has been added" | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-03 18:01:50 +03:00
										 |  |  |         def set_tags node_name | 
					
						
							| 
									
										
										
										
											2015-09-15 17:14:26 +03:00
										 |  |  |           tags = parser.tags | 
					
						
							| 
									
										
										
										
											2015-08-03 18:01:50 +03:00
										 |  |  |           prepare_tags do |id, provider| | 
					
						
							| 
									
										
										
										
											2015-09-15 17:14:26 +03:00
										 |  |  |             provider.set_tags id, tags | 
					
						
							| 
									
										
										
										
											2015-08-03 18:01:50 +03:00
										 |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def unset_tags node_name | 
					
						
							| 
									
										
										
										
											2015-09-15 17:14:26 +03:00
										 |  |  |           tags = parser.tags | 
					
						
							| 
									
										
										
										
											2015-08-03 18:01:50 +03:00
										 |  |  |           prepare_tags do |id, provider| | 
					
						
							| 
									
										
										
										
											2015-09-15 17:14:26 +03:00
										 |  |  |             provider.unset_tags id, tags | 
					
						
							| 
									
										
										
										
											2015-08-03 18:01:50 +03:00
										 |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def prepare_tags node_name | 
					
						
							|  |  |  |           s = get_server_by_key(node_name, parser.instance_key) | 
					
						
							| 
									
										
										
										
											2015-08-14 13:28:03 +03:00
										 |  |  |           Devops::Db.connector.check_project_auth s.project, s.deploy_env, parser.current_user | 
					
						
							| 
									
										
										
										
											2015-08-03 18:01:50 +03:00
										 |  |  |           provider = ::Provider::ProviderFactory.get(s.provider) | 
					
						
							|  |  |  |           yield s.id, provider | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-04 12:36:10 +03:00
										 |  |  |         def set_run_list node_name | 
					
						
							|  |  |  |           s = get_server_by_key(node_name, parser.instance_key) | 
					
						
							| 
									
										
										
										
											2015-08-14 13:28:03 +03:00
										 |  |  |           Devops::Db.connector.check_project_auth s.project, s.deploy_env, parser.current_user | 
					
						
							| 
									
										
										
										
											2015-08-04 12:36:10 +03:00
										 |  |  |           Devops::Db.connector.set_server_run_list(s.id, parser.run_list) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |         def get_server_by_key id, key | 
					
						
							| 
									
										
										
										
											2015-05-29 16:57:31 +03:00
										 |  |  |           mongo = Devops::Db.connector | 
					
						
							|  |  |  |           key == "instance" ? mongo.server_by_instance_id(id) : mongo.server_by_chef_node_name(id) | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-14 13:28:03 +03:00
										 |  |  |         def check_chef_node_name name, provider, knife | 
					
						
							|  |  |  |           Devops::Db.connector.server_by_chef_node_name(name) | 
					
						
							|  |  |  |           raise InvalidRecord.new("Server with name '#{name}' already exist") | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |         rescue RecordNotFound => e | 
					
						
							|  |  |  |           # server not found - OK | 
					
						
							|  |  |  |           s = provider.servers.detect {|s| s["name"] == name} | 
					
						
							| 
									
										
										
										
											2015-08-14 13:28:03 +03:00
										 |  |  |           raise InvalidRecord.new("#{provider.name} node with name '#{name}' already exist") unless s.nil? | 
					
						
							|  |  |  |           s = knife.chef_node_list.detect {|n| n == name} | 
					
						
							|  |  |  |           raise InvalidRecord.new("Chef node with name '#{name}' already exist") unless s.nil? | 
					
						
							|  |  |  |           s = knife.chef_client_list.detect {|c| c == name} | 
					
						
							|  |  |  |           raise InvalidRecord.new("Chef client with name '#{name}' already exist") unless s.nil? | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-01 16:54:21 +03:00
										 |  |  |         private | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-01 16:54:21 +03:00
										 |  |  |         def check_if_server_attrs_are_valid(body, user) | 
					
						
							|  |  |  |           key_name = body["key"] | 
					
						
							|  |  |  |           Devops::Db.connector.key(key_name) unless key_name.nil? | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-01 16:54:21 +03:00
										 |  |  |           project = Devops::Db.connector.check_project_auth(body["project"], body["deploy_env"], user) | 
					
						
							|  |  |  |           env = project.deploy_env(body["deploy_env"]) | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-01 16:54:21 +03:00
										 |  |  |           provider = env.provider_instance | 
					
						
							|  |  |  |           server_name = body["name"] | 
					
						
							|  |  |  |           check_chef_node_name(server_name, provider, KnifeFactory.instance) unless server_name.nil? | 
					
						
							|  |  |  |           groups = body["groups"] | 
					
						
							|  |  |  |           unless groups.nil? | 
					
						
							|  |  |  |             buf = groups - provider.groups.keys | 
					
						
							|  |  |  |             halt_response("Invalid security groups '#{buf.join("', '")}' for provider '#{provider.name}'") if buf.empty? | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-01 16:54:21 +03:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 |