| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  | module Devops | 
					
						
							| 
									
										
										
										
											2015-07-17 20:22:29 +03:00
										 |  |  |   module API2_0 | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |     module Routes | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |       module ServerRoutes | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |         def self.registered(app) | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           # Get devops servers list | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : GET | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #   - params : | 
					
						
							|  |  |  |           #     - fields - show server fields, available values: project, deploy_env, provider, remote_user, private_ip, public_ip, created_at, created_by, static, key, reserved_by | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   [ | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "id": "instance id", | 
					
						
							|  |  |  |           #       "chef_node_name": "chef name" | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           #   ] | 
					
						
							| 
									
										
										
										
											2015-07-17 20:22:29 +03:00
										 |  |  |           app.get_with_headers "/servers", :headers => [:accept] do | 
					
						
							|  |  |  |             check_privileges("server", "r") | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |             json Devops::API2_0::Handler::Server.new(request).servers | 
					
						
							| 
									
										
										
										
											2015-07-17 20:22:29 +03:00
										 |  |  |           end | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           # Get chef nodes list | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : GET | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   [ | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "chef_node_name": "chef name" | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           #   ] | 
					
						
							| 
									
										
										
										
											2015-07-17 20:22:29 +03:00
										 |  |  |           app.get_with_headers "/servers/chef", :headers => [:accept] do | 
					
						
							|  |  |  |             check_privileges("server", "r") | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |             json Devops::API2_0::Handler::Server.new(request).chef_servers | 
					
						
							| 
									
										
										
										
											2015-07-17 20:22:29 +03:00
										 |  |  |           end | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           # Get provider servers list | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : GET | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   -ec2 | 
					
						
							|  |  |  |           #   [ | 
					
						
							|  |  |  |           #      { | 
					
						
							|  |  |  |           #       "state": "running", | 
					
						
							|  |  |  |           #       "name": "name", | 
					
						
							|  |  |  |           #       "image": "ami-83e4bcea", | 
					
						
							|  |  |  |           #       "flavor": "m1.small", | 
					
						
							|  |  |  |           #       "keypair": "ssh key", | 
					
						
							|  |  |  |           #       "instance_id": "i-8441bfd4", | 
					
						
							|  |  |  |           #       "dns_name": "ec2-204-236-199-49.compute-1.amazonaws.com", | 
					
						
							|  |  |  |           #       "zone": "us-east-1d", | 
					
						
							|  |  |  |           #       "private_ip": "10.215.217.210", | 
					
						
							|  |  |  |           #       "public_ip": "204.236.199.49", | 
					
						
							|  |  |  |           #       "launched_at": "2014-04-25 07:56:33 UTC" | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           #   ] | 
					
						
							|  |  |  |           #   -openstack | 
					
						
							|  |  |  |           #   [ | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "state": "ACTIVE", | 
					
						
							|  |  |  |           #       "name": "name", | 
					
						
							|  |  |  |           #       "image": "image id", | 
					
						
							|  |  |  |           #       "flavor": null, | 
					
						
							|  |  |  |           #       "keypair": "ssh key", | 
					
						
							|  |  |  |           #       "instance_id": "instance id", | 
					
						
							|  |  |  |           #       "private_ip": "172.17.0.1" | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           #   ] | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |           app.get_with_headers "/servers/:provider", :headers => [:accept] do |provider| | 
					
						
							| 
									
										
										
										
											2015-07-17 20:22:29 +03:00
										 |  |  |             check_privileges("server", "r") | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |             json Devops::API2_0::Handler::Server.new(request).provider_servers(provider) | 
					
						
							| 
									
										
										
										
											2015-07-17 20:22:29 +03:00
										 |  |  |           end | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-28 14:16:56 +03:00
										 |  |  |           app.get_with_headers "/servers/provider/:provider/:account", :headers => [:accept] do |provider, account| | 
					
						
							|  |  |  |             check_privileges("server", "r") | 
					
						
							|  |  |  |             json Devops::API2_0::Handler::Server.new(request).provider_servers_with_account(provider, account) | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           # Get server info by :name | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : GET | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #   - parameters: | 
					
						
							|  |  |  |           #     key=instance -> search server by instance_id rather then chef_node_name | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   [ | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "chef_node_name": "chef name" | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           #   ] | 
					
						
							| 
									
										
										
										
											2015-02-19 11:27:56 +03:00
										 |  |  |           hash = {} | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           hash["GET"] = lambda {|id| | 
					
						
							|  |  |  |             check_privileges("server", "r") | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |             json Devops::API2_0::Handler::Server.new(request).server(id).to_hash | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           } | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           # Delete devops server | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : DELETE | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "key": "instance", -> search server by instance_id rather then chef_node_name | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   200 - Deleted | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           hash["DELETE"] = lambda {|id| | 
					
						
							|  |  |  |             check_privileges("server", "w") | 
					
						
							| 
									
										
										
										
											2016-02-02 11:43:13 +03:00
										 |  |  |             json Devops::API2_0::Handler::Server.new(request).delete(id) | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           } | 
					
						
							| 
									
										
										
										
											2015-02-19 11:27:56 +03:00
										 |  |  |           app.multi_routes "/server/:id", {:headers => [:accept, :content_type]}, hash | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-02 13:09:53 +03:00
										 |  |  |           # Run deploy command on reserved server | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : POST | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "names": [],  -> array of servers names to run chef-client | 
					
						
							|  |  |  |           #       "tags": [],   -> array of tags to apply on each server before running chef-client | 
					
						
							|  |  |  |           #       "build_number": "", -> string, build number to deploy | 
					
						
							|  |  |  |           #       "run_list": [],   -> array of strings to set run_list for chef-client | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : text stream | 
					
						
							|  |  |  |           app.post_with_headers "/server/:node_name/deploy", :headers => [:content_type, :accept] do |node_name| | 
					
						
							|  |  |  |             check_privileges("server", "x") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if request["HTTP_X_STREAM"] | 
					
						
							|  |  |  |               stream() do |out| | 
					
						
							|  |  |  |                 status = [] | 
					
						
							|  |  |  |                 begin | 
					
						
							|  |  |  |                   status = Devops::API2_0::Handler::Server.new(request).deploy_stream(node_name, out) | 
					
						
							|  |  |  |                   out << create_status(status) | 
					
						
							|  |  |  |                 rescue DeployInfoError => e | 
					
						
							|  |  |  |                   msg = "Can not get deploy info: " + e.message | 
					
						
							|  |  |  |                   DevopsLogger.logger.error "msg:\n#{e.backtrace.join('\n')}" | 
					
						
							|  |  |  |                   out.puts msg | 
					
						
							|  |  |  |                 rescue IOError => e | 
					
						
							|  |  |  |                   logger.error e.message | 
					
						
							|  |  |  |                   break | 
					
						
							|  |  |  |                 end | 
					
						
							|  |  |  |               end # stream | 
					
						
							|  |  |  |             else | 
					
						
							|  |  |  |               files = begin | 
					
						
							|  |  |  |                 Devops::API2_0::Handler::Server.new(request).deploy(node_name) | 
					
						
							|  |  |  |               rescue DeployInfoError => e | 
					
						
							|  |  |  |                 msg = "Can not get deploy info: " + e.message | 
					
						
							|  |  |  |                 DevopsLogger.logger.error "#{msg}:\n#{e.backtrace.join("\n")}" | 
					
						
							|  |  |  |                 out << "\nError - " | 
					
						
							|  |  |  |                 out.puts msg | 
					
						
							|  |  |  |               end | 
					
						
							|  |  |  |               sleep 1
 | 
					
						
							|  |  |  |               json files | 
					
						
							|  |  |  |             end | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           # Create devops server | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : POST | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							| 
									
										
										
										
											2015-08-03 15:09:04 +03:00
										 |  |  |           #     - X-Stream: true -> return output in text stream | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "project": "project name", -> mandatory parameter | 
					
						
							|  |  |  |           #       "deploy_env": "env",       -> mandatory parameter | 
					
						
							|  |  |  |           #       "name": "server_name",     -> if null, name will be generated | 
					
						
							|  |  |  |           #       "without_bootstrap": null, -> do not install chef on instance if true | 
					
						
							|  |  |  |           #       "force": null,             -> do not delete server on error | 
					
						
							|  |  |  |           #       "groups": [],              -> specify special security groups, overrides value from project env | 
					
						
							| 
									
										
										
										
											2015-08-03 15:09:04 +03:00
										 |  |  |           #       "key": "ssh key"           -> specify ssh key for server, overrides value from project env | 
					
						
							| 
									
										
										
										
											2016-01-27 15:44:59 +03:00
										 |  |  |           #       "private_ip": null         -> should be string like "172.31.31.203" if present | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           #     } | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : text stream | 
					
						
							| 
									
										
										
										
											2015-08-03 15:09:04 +03:00
										 |  |  |           app.post_with_headers "/server", :headers => [:accept, :content_type] do | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |             check_privileges("server", "w") | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |             handler = Devops::API2_0::Handler::Server.new(request) | 
					
						
							| 
									
										
										
										
											2015-09-28 16:35:38 +03:00
										 |  |  |             if request["X-Stream"] or request["HTTP_X_STREAM"] | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |               stream() do |out| | 
					
						
							|  |  |  |                 begin | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |                   status = handler.create_server_stream out | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |                   out << create_status(status) | 
					
						
							|  |  |  |                 rescue IOError => e | 
					
						
							|  |  |  |                   logger.error e.message | 
					
						
							|  |  |  |                 end | 
					
						
							|  |  |  |               end | 
					
						
							|  |  |  |             else | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |               json handler.create_server | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |             end | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           # Pause devops server by name | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : POST | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "key": "instance", -> search server by instance_id rather then chef_node_name | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   200 - Paused | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           app.post_with_headers "/server/:node_name/pause", :headers => [:accept, :content_type] do |node_name| | 
					
						
							|  |  |  |             check_privileges("server", "w") | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |             info = Devops::API2_0::Handler::Server.new(request).pause_server(node_name) | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |             create_response(info) | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           # Unpause devops server by name | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : POST | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "key": "instance", -> search server by instance_id rather then chef_node_name | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   200 - Unpaused | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           app.post_with_headers "/server/:node_name/unpause", :headers => [:accept, :content_type] do |node_name| | 
					
						
							|  |  |  |             check_privileges("server", "w") | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |             info = Devops::API2_0::Handler::Server.new(request).unpause_server(node_name) | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |             create_response(info) | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           # Reserve devops server | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : POST | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "key": "instance", -> search server by instance_id rather then chef_node_name | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   200 - Reserved | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           app.post_with_headers "/server/:node_name/reserve", :headers => [:accept, :content_type] do |node_name| | 
					
						
							|  |  |  |             check_privileges("server", "w") | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |             Devops::API2_0::Handler::Server.new(request).reserve_server(node_name) | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |             create_response("Server '#{node_name}' has been reserved") | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2014-05-23 17:36:16 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           # Unreserve devops server | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : POST | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "key": "instance", -> search server by instance_id rather then chef_node_name | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   200 - Unreserved | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           app.post_with_headers "/server/:node_name/unreserve", :headers => [:accept, :content_type] do |node_name| | 
					
						
							|  |  |  |             check_privileges("server", "w") | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |             Devops::API2_0::Handler::Server.new(request).unreserve_server(node_name) | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |             create_response("Server '#{node_name}' has been unreserved") | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2014-05-23 17:36:16 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           # Bootstrap devops server | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : POST | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							| 
									
										
										
										
											2015-08-03 15:09:04 +03:00
										 |  |  |           #     - X-Stream: true -> return output in text stream | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "instance_id": "instance id", -> mandatory parameter | 
					
						
							|  |  |  |           #       "name": "server_name", -> if null, name will be generated | 
					
						
							|  |  |  |           #       "run_list": [], -> specify list of roles and recipes | 
					
						
							|  |  |  |           #       "bootstrap_template": "template" -> specify ssh key for server, overrides value from project env | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : text stream | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           app.post_with_headers "/server/bootstrap", :headers => [:accept, :content_type] do | 
					
						
							|  |  |  |             check_privileges("server", "w") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |             handler = Devops::API2_0::Handler::Server.new(request) | 
					
						
							| 
									
										
										
										
											2015-08-03 15:09:04 +03:00
										 |  |  |             if request["X-Stream"] | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |               stream() do |out| | 
					
						
							|  |  |  |                 begin | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |                   status = handler.bootstrap_server_stream out | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |                   out << create_status(status) | 
					
						
							|  |  |  |                 rescue IOError => e | 
					
						
							|  |  |  |                   logger.error e.message | 
					
						
							|  |  |  |                 end | 
					
						
							|  |  |  |               end | 
					
						
							|  |  |  |             else | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |               json handler.bootstrap_server() | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |             end | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-22 13:56:16 +03:00
										 |  |  |           # Unbootstrap devops server | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : POST | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "key": "instance", -> search server by instance_id rather then chef_node_name | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : 200 | 
					
						
							|  |  |  |           app.post_with_headers "/server/:id/unbootstrap", :headers => [:accept, :content_type] do |id| | 
					
						
							|  |  |  |             check_privileges("server", "w") | 
					
						
							|  |  |  |             info = Devops::API2_0::Handler::Server.new(request).unbootstrap_server(id) | 
					
						
							|  |  |  |             create_response("Unbootstrap", info) | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           # Add external server to devops | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : POST | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "project": "project name", -> mandatory parameter | 
					
						
							|  |  |  |           #       "deploy_env": "env",       -> mandatory parameter | 
					
						
							|  |  |  |           #       "key": "ssh key",          -> mandatory parameter | 
					
						
							|  |  |  |           #       "remote_user": "ssh user", -> mandatory parameter | 
					
						
							|  |  |  |           #       "private_ip": "ip",         -> mandatory parameter | 
					
						
							|  |  |  |           #       "public_ip": "ip" | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   200 - Added | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           app.post_with_headers "/server/add", :headers => [:accept, :content_type] do | 
					
						
							|  |  |  |             check_privileges("server", "w") | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |             info = Devops::API2_0::Handler::Server.new(request).add_server() | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |             create_response(info) | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-16 10:01:43 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |           # Add list of external servers to devops and bootstrap them | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : POST | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "project": "project name", -> required | 
					
						
							|  |  |  |           #       "deploy_env": "env",       -> required | 
					
						
							|  |  |  |           #       "key": "ssh key",          -> required | 
					
						
							|  |  |  |           #       "remote_user": "ssh user", -> required | 
					
						
							|  |  |  |           #       "ips_with_names": multiline string like, required | 
					
						
							|  |  |  |           #           127.0.0.1:node1 | 
					
						
							|  |  |  |           #           127.0.0.2:node2 | 
					
						
							|  |  |  |           #       "private_ip": "ip",         -> required | 
					
						
							|  |  |  |           #       "public_ip": "ip" | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   ["report1", "report2"] | 
					
						
							|  |  |  |           app.post_with_headers "/server/add_and_bootstrap_servers", :headers => [:accept, :content_type] do | 
					
						
							|  |  |  |             check_privileges("server", "w") | 
					
						
							|  |  |  |             json Devops::API2_0::Handler::Server.new(request).add_and_bootstrap_servers() | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-03 18:01:50 +03:00
										 |  |  |           hash = {} | 
					
						
							| 
									
										
										
										
											2015-09-15 17:14:26 +03:00
										 |  |  |           # Add instance tags | 
					
						
							| 
									
										
										
										
											2015-08-03 18:01:50 +03:00
										 |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : PUT | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "tags": {"tag name": "tag value"} | 
					
						
							|  |  |  |           #       "key": "instance", -> search server by instance_id rather then chef_node_name | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   200 - Added | 
					
						
							|  |  |  |           hash["PUT"] = lambda {|id| | 
					
						
							|  |  |  |             check_privileges("server", "w") | 
					
						
							|  |  |  |             Devops::API2_0::Handler::Server.new(request).set_tags(id) | 
					
						
							| 
									
										
										
										
											2015-08-04 12:36:10 +03:00
										 |  |  |             create_response("Added") | 
					
						
							| 
									
										
										
										
											2015-08-03 18:01:50 +03:00
										 |  |  |           } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-15 17:14:26 +03:00
										 |  |  |           # Delete instance tags | 
					
						
							| 
									
										
										
										
											2015-08-03 18:01:50 +03:00
										 |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : DELETE | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "tags": {"tag name": "tag value"} | 
					
						
							|  |  |  |           #       "key": "instance", -> search server by instance_id rather then chef_node_name | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   200 - Deleted | 
					
						
							|  |  |  |           hash["DELETE"] = lambda {|id| | 
					
						
							|  |  |  |             check_privileges("server", "w") | 
					
						
							|  |  |  |             Devops::API2_0::Handler::Server.new(request).unset_tags(id) | 
					
						
							| 
									
										
										
										
											2015-08-04 12:36:10 +03:00
										 |  |  |             create_response("Deleted") | 
					
						
							| 
									
										
										
										
											2015-08-03 18:01:50 +03:00
										 |  |  |           } | 
					
						
							|  |  |  |           app.multi_routes "/server/:id/tags", {:headers => [:content_type]}, hash | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-04 12:36:10 +03:00
										 |  |  |           # Set run_list to server | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : PATCH | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "run_list": [ | 
					
						
							|  |  |  |           #         "role[role_1]", | 
					
						
							|  |  |  |           #         "recipe[recipe_1]" | 
					
						
							|  |  |  |           #       ], | 
					
						
							|  |  |  |           #       "key": "instance", -> search server by instance_id rather then chef_node_name | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   200 - Updated | 
					
						
							| 
									
										
										
										
											2015-10-09 15:08:39 +03:00
										 |  |  |           app.put_with_headers "/server/:id/run_list", :headers => [:accept, :content_type] do |node_name| | 
					
						
							| 
									
										
										
										
											2015-08-04 12:36:10 +03:00
										 |  |  |             check_privileges("server", "w") | 
					
						
							| 
									
										
										
										
											2015-10-09 15:02:20 +03:00
										 |  |  |             Devops::API2_0::Handler::Server.new(request).set_run_list(node_name) | 
					
						
							| 
									
										
										
										
											2015-08-04 12:36:10 +03:00
										 |  |  |             create_response("Run list has been changed") | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-12 16:18:17 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |           # Delete list of servers | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : POST | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "servers_ids": [ "server1", "server2"] | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   { | 
					
						
							|  |  |  |           #     "server1": "report_1", | 
					
						
							|  |  |  |           #     "server2": "report_2" | 
					
						
							|  |  |  |           #    } | 
					
						
							|  |  |  |           app.post_with_headers "/server/delete_list", :headers => [:accept, :content_type] do | 
					
						
							|  |  |  |             check_privileges("server", "w") | 
					
						
							|  |  |  |             json Devops::API2_0::Handler::Server.new(request).delete_list | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           puts "Server routes initialized" | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  |   end | 
					
						
							|  |  |  | end |