| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  | module Devops | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |   module API2_0 | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  |     module Routes | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |       module ProjectRoutes | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |         def self.registered(app) | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-31 15:08:40 +03:00
										 |  |  |           # Get project types | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : GET | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   [ | 
					
						
							|  |  |  |           #     "type" | 
					
						
							|  |  |  |           #   ] | 
					
						
							|  |  |  |           app.get_with_headers "/project_types", :headers => [:accept] do | 
					
						
							|  |  |  |             check_privileges("project", "r") | 
					
						
							|  |  |  |             json Devops::API2_0::Handler::Project.new(request).project_types | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           # Get projects list | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : GET | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #   - params : | 
					
						
							|  |  |  |           #     - fields - show project fields, available values: deploy_envs, type | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   [ | 
					
						
							|  |  |  |           #     {"name" : "project_1"} | 
					
						
							|  |  |  |           #   ] | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           app.get_with_headers "/projects", :headers => [:accept] do | 
					
						
							|  |  |  |             check_privileges("project", "r") | 
					
						
							| 
									
										
										
										
											2015-10-23 21:17:04 +03:00
										 |  |  |             projects = Devops::API2_0::Handler::Project.new(request).projects | 
					
						
							|  |  |  |             json projects.map(&:to_hash) | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           end | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           # Get project by id | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : GET | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   { | 
					
						
							|  |  |  |           #     "deploy_envs": [ | 
					
						
							|  |  |  |           #       { | 
					
						
							|  |  |  |           #         "flavor": "flavor", | 
					
						
							|  |  |  |           #         "identifier": "prod", | 
					
						
							|  |  |  |           #         "image": "image id", | 
					
						
							|  |  |  |           #         "run_list": [ | 
					
						
							|  |  |  |           #           "role[project_1-prod]" | 
					
						
							|  |  |  |           #         ], | 
					
						
							|  |  |  |           #         "subnets": [ | 
					
						
							|  |  |  |           #           "private" | 
					
						
							|  |  |  |           #         ], | 
					
						
							|  |  |  |           #         "expires": null, | 
					
						
							|  |  |  |           #         "provider": "openstack", | 
					
						
							|  |  |  |           #         "groups": [ | 
					
						
							|  |  |  |           #           "default" | 
					
						
							|  |  |  |           #         ], | 
					
						
							|  |  |  |           #         "users": [ | 
					
						
							|  |  |  |           #           "user" | 
					
						
							|  |  |  |           #         ] | 
					
						
							|  |  |  |           #       } | 
					
						
							|  |  |  |           #     ], | 
					
						
							|  |  |  |           #     "name": "project_1" | 
					
						
							|  |  |  |           #   } | 
					
						
							| 
									
										
										
										
											2015-02-19 11:27:56 +03:00
										 |  |  |           hash = {} | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           hash["GET"] = lambda {|project| | 
					
						
							|  |  |  |             check_privileges("project", "r") | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |             json Devops::API2_0::Handler::Project.new(request).project(project) | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           } | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-15 13:06:25 +03:00
										 |  |  |           # Update project | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							| 
									
										
										
										
											2015-02-19 11:27:56 +03:00
										 |  |  |           #   - method : PUT | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     { | 
					
						
							| 
									
										
										
										
											2016-03-01 22:05:25 +03:00
										 |  |  |           #       "run_list": [], | 
					
						
							|  |  |  |           #       "description": "Description", | 
					
						
							|  |  |  |           #       "named_tasks": [{ | 
					
						
							|  |  |  |           #         "name": "restart", | 
					
						
							|  |  |  |           #         "run_list": ["role[restart_service]"] | 
					
						
							|  |  |  |           #       }] | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           #     } | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							| 
									
										
										
										
											2015-02-19 11:27:56 +03:00
										 |  |  |           #   200 - Updated | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           hash["PUT"] = lambda { |project| | 
					
						
							|  |  |  |             check_privileges("project", "w") | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |             r = Devops::API2_0::Handler::Project.new(request).update_project project | 
					
						
							| 
									
										
										
										
											2015-09-15 13:06:25 +03:00
										 |  |  |             create_response("Project '#{project}' has been updated.") | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           } | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-19 11:27:56 +03:00
										 |  |  |           # Delete project | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							| 
									
										
										
										
											2015-02-19 11:27:56 +03:00
										 |  |  |           #   - method : DELETE | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "deploy_env": "env" -> if not null, will be deleted environment only | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   200 - Deleted | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           hash["DELETE"] = lambda {|project| | 
					
						
							|  |  |  |             check_privileges("project", "w") | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |             info = Devops::API2_0::Handler::Project.new(request).delete_project(project) | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |             create_response(info) | 
					
						
							|  |  |  |           } | 
					
						
							| 
									
										
										
										
											2015-02-19 14:16:07 +03:00
										 |  |  |           app.multi_routes "/project/:project", {}, hash | 
					
						
							| 
									
										
										
										
											2015-02-19 11:27:56 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |           # Get project servers | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : GET | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #   - parameters : | 
					
						
							|  |  |  |           #     - deploy_env=:env -> show servers with environment :env | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   [ | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "provider": "openstack", | 
					
						
							|  |  |  |           #       "chef_node_name": "project_1_server", | 
					
						
							|  |  |  |           #       "remote_user": "root", | 
					
						
							|  |  |  |           #       "project": "project_1", | 
					
						
							|  |  |  |           #       "deploy_env": "prod", | 
					
						
							|  |  |  |           #       "private_ip": "10.8.8.8", | 
					
						
							|  |  |  |           #       "public_ip": null, | 
					
						
							|  |  |  |           #       "created_at": "2014-04-23 13:35:18 UTC", | 
					
						
							|  |  |  |           #       "created_by": "user", | 
					
						
							|  |  |  |           #       "static": false, | 
					
						
							|  |  |  |           #       "key": "ssh key", | 
					
						
							|  |  |  |           #       "id": "nstance id" | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           #   ] | 
					
						
							| 
									
										
										
										
											2015-11-13 17:22:55 +03:00
										 |  |  |           servers_routes_hash = {} | 
					
						
							|  |  |  |           servers_routes_hash["GET"] = lambda { |project| | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |             check_privileges("project", "r") | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |             json Devops::API2_0::Handler::Project.new(request).project_servers(project).map(&:to_hash) | 
					
						
							| 
									
										
										
										
											2015-11-13 17:22:55 +03:00
										 |  |  |           } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           # Deletes project servers | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							| 
									
										
										
										
											2015-11-27 22:41:47 +03:00
										 |  |  |           #   - method : DELETE | 
					
						
							| 
									
										
										
										
											2015-11-13 17:22:55 +03:00
										 |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "dry_run": false # set to true if you'd like to just see list of servers to delete | 
					
						
							|  |  |  |           #       "deploy_env": null # set to env's identifier to delete that env's servers | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   200 - | 
					
						
							|  |  |  |           # { | 
					
						
							|  |  |  |           #   "to_delete": ['server1', 'server2'], | 
					
						
							|  |  |  |           #   "deleted": ['server1'], | 
					
						
							|  |  |  |           #   "failed": ['server2'] | 
					
						
							|  |  |  |           # } | 
					
						
							|  |  |  |           servers_routes_hash["DELETE"] = lambda { |project_id| | 
					
						
							|  |  |  |             check_privileges("project", "w") | 
					
						
							|  |  |  |             json Devops::API2_0::Handler::Project.new(request).delete_project_servers(project_id) | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |           app.multi_routes "/project/:project/servers", {}, servers_routes_hash | 
					
						
							| 
									
										
										
										
											2015-02-19 11:27:56 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-22 19:29:42 +03:00
										 |  |  |           # Get project stacks | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : GET | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #   - parameters : | 
					
						
							|  |  |  |           #     - deploy_env=:env -> show stacks with environment :env | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   [ | 
					
						
							|  |  |  |           #     "provider": "openstack", | 
					
						
							|  |  |  |           #     "project": "test_openstack", | 
					
						
							|  |  |  |           #     "deploy_env": "test", | 
					
						
							|  |  |  |           #     "stack_template": "openstack_template", | 
					
						
							|  |  |  |           #     "cloud_stack_id": "4c712026-dcd5-4664-90b8-0915494c1332", | 
					
						
							|  |  |  |           #     "parameters": { | 
					
						
							|  |  |  |           #       "admin_pass": "Pass12", | 
					
						
							|  |  |  |           #       "key_name": "devops", | 
					
						
							|  |  |  |           #       "image": "CirrOS_0.3.1" | 
					
						
							|  |  |  |           #     }, | 
					
						
							|  |  |  |           #     "stack_status": null, | 
					
						
							|  |  |  |           #     "id": "openstack_stack" | 
					
						
							|  |  |  |           #   ] | 
					
						
							| 
									
										
										
										
											2015-07-27 18:27:52 +03:00
										 |  |  |           app.get_with_headers "/project/:project/stacks", :headers => [:accept] do |project| | 
					
						
							|  |  |  |             check_privileges("project", "r") | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |             json Devops::API2_0::Handler::Project.new(request).project_stacks(project).map(&:to_hash) | 
					
						
							| 
									
										
										
										
											2015-07-27 18:27:52 +03:00
										 |  |  |           end | 
					
						
							| 
									
										
										
										
											2015-07-22 19:29:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-14 15:26:36 +03:00
										 |  |  |           # Get project deploy environments | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : GET | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           app.get_with_headers "/project/:project/deploy_envs", :headers => [:accept] do |project| | 
					
						
							|  |  |  |             check_privileges("project", "r") | 
					
						
							|  |  |  |             json Devops::API2_0::Handler::Project.new(request).project_deploy_envs(project) | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-05 14:54:47 +03:00
										 |  |  |           # Add project deploy environment | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : POST | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							| 
									
										
										
										
											2015-10-06 13:50:26 +03:00
										 |  |  |           #   - body : | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "identifier": "prod", | 
					
						
							|  |  |  |           #       "provider": "openstack", | 
					
						
							|  |  |  |           #       "flavor": "m1.small", | 
					
						
							|  |  |  |           #       "image": "image id", | 
					
						
							|  |  |  |           #       "subnets": [ | 
					
						
							|  |  |  |           #         "private" | 
					
						
							|  |  |  |           #       ], | 
					
						
							|  |  |  |           #       "groups": [ | 
					
						
							|  |  |  |           #         "default" | 
					
						
							|  |  |  |           #       ], | 
					
						
							|  |  |  |           #       "users": [ | 
					
						
							|  |  |  |           #         "user" | 
					
						
							|  |  |  |           #       ], | 
					
						
							|  |  |  |           #       "run_list": [ ], | 
					
						
							|  |  |  |           #       "expires": null | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   200 - Added | 
					
						
							| 
									
										
										
										
											2015-10-05 14:54:47 +03:00
										 |  |  |           app.post_with_headers "/project/:project/deploy_env", :headers => [:accept, :content_type] do |project| | 
					
						
							|  |  |  |             check_privileges("project", "w") | 
					
						
							|  |  |  |             res, env = Devops::API2_0::Handler::Project.new(request).add_deploy_env(project) | 
					
						
							|  |  |  |             create_response(res, {environment: env.to_hash}, 200) | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-15 13:06:25 +03:00
										 |  |  |           deploy_env_hash = {} | 
					
						
							| 
									
										
										
										
											2015-09-14 15:26:36 +03:00
										 |  |  |           # Get project deploy environment | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : GET | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							| 
									
										
										
										
											2015-09-15 13:06:25 +03:00
										 |  |  |           deploy_env_hash["GET"] = lambda{|project, env| | 
					
						
							| 
									
										
										
										
											2015-09-14 15:26:36 +03:00
										 |  |  |             check_privileges("project", "r") | 
					
						
							|  |  |  |             json Devops::API2_0::Handler::Project.new(request).project_deploy_env(project, env) | 
					
						
							| 
									
										
										
										
											2015-09-15 13:06:25 +03:00
										 |  |  |           } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-06 13:50:26 +03:00
										 |  |  |           # Update deploy_env, you can send few fields in the body | 
					
						
							| 
									
										
										
										
											2015-09-15 13:06:25 +03:00
										 |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : PUT | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "identifier": "prod", | 
					
						
							|  |  |  |           #       "provider": "openstack", | 
					
						
							|  |  |  |           #       "flavor": "m1.small", | 
					
						
							|  |  |  |           #       "image": "image id", | 
					
						
							|  |  |  |           #       "subnets": [ | 
					
						
							|  |  |  |           #         "private" | 
					
						
							|  |  |  |           #       ], | 
					
						
							|  |  |  |           #       "groups": [ | 
					
						
							|  |  |  |           #         "default" | 
					
						
							|  |  |  |           #       ], | 
					
						
							|  |  |  |           #       "users": [ | 
					
						
							|  |  |  |           #         "user" | 
					
						
							|  |  |  |           #       ], | 
					
						
							|  |  |  |           #       "run_list": [ ], | 
					
						
							|  |  |  |           #       "expires": null | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   200 - Updated | 
					
						
							|  |  |  |           deploy_env_hash["PUT"] = lambda{|id, deploy_env| | 
					
						
							|  |  |  |             check_privileges("project", "w") | 
					
						
							|  |  |  |             begin | 
					
						
							| 
									
										
										
										
											2015-10-06 13:50:26 +03:00
										 |  |  |               res = Devops::API2_0::Handler::Project.new(request).update_deploy_env(id, deploy_env) | 
					
						
							| 
									
										
										
										
											2015-09-15 13:06:25 +03:00
										 |  |  |               create_response(res, nil, 200) | 
					
						
							|  |  |  |             rescue InvalidRecord => e | 
					
						
							|  |  |  |               halt_response(e.message) | 
					
						
							|  |  |  |             end | 
					
						
							|  |  |  |           } | 
					
						
							| 
									
										
										
										
											2015-09-14 15:26:36 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-15 13:06:25 +03:00
										 |  |  |           # Delete deploy_env | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : DELETE | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   200 - Deleted | 
					
						
							|  |  |  |           deploy_env_hash["DELETE"] = lambda{|id, deploy_env| | 
					
						
							|  |  |  |             check_privileges("project", "w") | 
					
						
							|  |  |  |             begin | 
					
						
							|  |  |  |               res = Devops::API2_0::Handler::Project.new(request).delete_deploy_env(id, deploy_env) | 
					
						
							|  |  |  |               create_response(res, nil, 200) | 
					
						
							|  |  |  |             rescue InvalidRecord => e | 
					
						
							|  |  |  |               halt_response(e.message) | 
					
						
							|  |  |  |             end | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |           app.multi_routes "/project/:id/deploy_envs/:deploy_env", {}, deploy_env_hash | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-06 13:50:26 +03:00
										 |  |  |           app.put_with_headers "/project/:id/deploy_env/:deploy_env/:field", :headers => [:accept, :content_type] do |project_id, deploy_env, field| | 
					
						
							|  |  |  |             check_privileges("project", "w") | 
					
						
							|  |  |  |             res = Devops::API2_0::Handler::Project.new(request).update_deploy_env_field(project_id, deploy_env, field) | 
					
						
							|  |  |  |             create_response(res, nil, 200) | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-15 13:06:25 +03:00
										 |  |  |           # Create project | 
					
						
							| 
									
										
										
										
											2015-02-19 11:27:56 +03:00
										 |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : POST | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "deploy_envs": [ | 
					
						
							|  |  |  |           #         { | 
					
						
							| 
									
										
										
										
											2015-02-19 11:27:56 +03:00
										 |  |  |           #           "identifier": "prod", | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           #           "provider": "openstack", | 
					
						
							|  |  |  |           #           "flavor": "m1.small", | 
					
						
							|  |  |  |           #           "image": "image id", | 
					
						
							|  |  |  |           #           "subnets": [ | 
					
						
							|  |  |  |           #             "private" | 
					
						
							|  |  |  |           #           ], | 
					
						
							|  |  |  |           #           "groups": [ | 
					
						
							|  |  |  |           #             "default" | 
					
						
							|  |  |  |           #           ], | 
					
						
							|  |  |  |           #           "users": [ | 
					
						
							|  |  |  |           #             "user" | 
					
						
							|  |  |  |           #           ], | 
					
						
							|  |  |  |           #           "run_list": [ | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           #           ], | 
					
						
							|  |  |  |           #           "expires": null | 
					
						
							|  |  |  |           #         } | 
					
						
							|  |  |  |           #       ], | 
					
						
							|  |  |  |           #       "name": "project_1" | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							| 
									
										
										
										
											2015-02-19 11:27:56 +03:00
										 |  |  |           #   201 - Created | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           app.post_with_headers "/project", :headers => [:accept, :content_type] do | 
					
						
							|  |  |  |             check_privileges("project", "w") | 
					
						
							| 
									
										
										
										
											2015-07-27 18:27:52 +03:00
										 |  |  |             begin | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |               res = Devops::API2_0::Handler::Project.new(request).create_project | 
					
						
							| 
									
										
										
										
											2015-07-27 18:27:52 +03:00
										 |  |  |               res = "Created. " + res | 
					
						
							|  |  |  |               create_response(res, nil, 201) | 
					
						
							|  |  |  |             rescue InvalidRecord => e | 
					
						
							|  |  |  |               halt_response(e.message) | 
					
						
							|  |  |  |             end | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           end | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-15 13:06:25 +03:00
										 |  |  | =begin | 
					
						
							| 
									
										
										
										
											2015-09-14 17:47:11 +03:00
										 |  |  |           # Set components to project | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							| 
									
										
										
										
											2015-09-14 18:55:20 +03:00
										 |  |  |           #   - method : POST | 
					
						
							| 
									
										
										
										
											2015-09-14 17:47:11 +03:00
										 |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     components: { | 
					
						
							|  |  |  |           #       "some_id": { | 
					
						
							|  |  |  |           #         "filename" : "some.war" | 
					
						
							|  |  |  |           #       } | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   200 - Updated | 
					
						
							| 
									
										
										
										
											2015-09-14 18:55:20 +03:00
										 |  |  |           app.post_with_headers "/project/:id/components", :headers => [:accept, :content_type] do |id| | 
					
						
							| 
									
										
										
										
											2015-09-14 17:47:11 +03:00
										 |  |  |             check_privileges("project", "w") | 
					
						
							|  |  |  |             res = Devops::API2_0::Handler::Project.new(request).set_project_components(id) | 
					
						
							|  |  |  |             create_response(res) | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2015-09-15 13:06:25 +03:00
										 |  |  | =end | 
					
						
							| 
									
										
										
										
											2015-08-14 17:47:18 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-19 11:27:56 +03:00
										 |  |  |           users_hash = {} | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           # Add users to project environment | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : PUT | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "users": [ | 
					
						
							|  |  |  |           #         "user1" | 
					
						
							|  |  |  |           #       ], | 
					
						
							|  |  |  |           #       "deploy_env": "env" -> if null, users will be added to all environments | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   200 - Updated | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           users_hash["PUT"] = lambda { |project| | 
					
						
							|  |  |  |             check_privileges("project", "w") | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |             info = Devops::API2_0::Handler::Project.new(request).update_project_users(project) | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |             create_response(info) | 
					
						
							|  |  |  |           } | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           # Delete users from project environment | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : DELETE | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "users": [ | 
					
						
							|  |  |  |           #         "user1" | 
					
						
							|  |  |  |           #       ], | 
					
						
							|  |  |  |           #       "deploy_env": "env" -> if null, users will be deleted from all environments | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   200 - Updated | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           users_hash["DELETE"] = lambda {|project| | 
					
						
							|  |  |  |             check_privileges("project", "w") | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |             info = Devops::API2_0::Handler::Project.new(request).delete_project_users(project) | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |             create_response(info) | 
					
						
							|  |  |  |           } | 
					
						
							| 
									
										
										
										
											2015-02-19 11:27:56 +03:00
										 |  |  |           app.multi_routes "/project/:id/user", {}, users_hash | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-04 12:36:10 +03:00
										 |  |  |           # Set run_list to project | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : PATCH | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     [ | 
					
						
							|  |  |  |           #       "role[role_1]", | 
					
						
							|  |  |  |           #       "recipe[recipe_1]" | 
					
						
							|  |  |  |           #     ] | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   200 - Updated | 
					
						
							|  |  |  |           app.patch_with_headers "/project/:id/run_list", :headers => [:accept, :content_type] do |project| | 
					
						
							|  |  |  |             check_privileges("project", "w") | 
					
						
							|  |  |  |             info = Devops::API2_0::Handler::Project.new(request).set_project_run_list(project) | 
					
						
							|  |  |  |             create_response(info) | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           # Set run_list to project environment | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							| 
									
										
										
										
											2015-08-04 12:36:10 +03:00
										 |  |  |           #   - method : PATCH | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     [ | 
					
						
							|  |  |  |           #       "role[role_1]", | 
					
						
							|  |  |  |           #       "recipe[recipe_1]" | 
					
						
							|  |  |  |           #     ] | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   200 - Updated | 
					
						
							| 
									
										
										
										
											2015-08-04 12:36:10 +03:00
										 |  |  |           app.patch_with_headers "/project/:id/:env/run_list", :headers => [:accept, :content_type] do |project, deploy_env| | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |             check_privileges("project", "w") | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |             info = Devops::API2_0::Handler::Project.new(request).set_project_env_run_list(project, deploy_env) | 
					
						
							| 
									
										
										
										
											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
										 |  |  |           # Run chef-client on reserved project servers | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *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
										 |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "servers": [ | 
					
						
							|  |  |  |           #         "server_1" | 
					
						
							|  |  |  |           #       ], -> deploy servers from list, all servers if null | 
					
						
							|  |  |  |           #       "deploy_env": "env" -> deploy servers with environment 'env' or all project servers if null | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : text stream | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           app.post_with_headers "/project/:id/deploy", :headers => [:content_type] do |project| | 
					
						
							|  |  |  |             check_privileges("project", "x") | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |             handler = Devops::API2_0::Handler::Project.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.deploy_project_stream out, project | 
					
						
							| 
									
										
										
										
											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.deploy_project project | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |             end | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-03 12:46:35 +03:00
										 |  |  |           # Set project to archivated state | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : POST | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           app.post_with_headers "/project/:project/archive", :headers => [:content_type] do |project| | 
					
						
							|  |  |  |             check_privileges("project", "w") | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |             info = Devops::API2_0::Handler::Project.new(request).archive_project(project) | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |             create_response(info) | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2015-03-03 12:46:35 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |           # Set project to normal state | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : POST | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           app.post_with_headers "/project/:project/unarchive", :headers => [:content_type] do |project| | 
					
						
							|  |  |  |             check_privileges("project", "w") | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |             info = Devops::API2_0::Handler::Project.new(request).unarchive_project(project) | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |             create_response(info) | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2015-03-03 12:46:35 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           # Test project environment | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # Run tests: | 
					
						
							|  |  |  |           #   - run server | 
					
						
							|  |  |  |           #   - bootstrap server | 
					
						
							|  |  |  |           #   - delete server | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							| 
									
										
										
										
											2015-09-15 13:06:25 +03:00
										 |  |  |           #   - method : POST | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   200 - | 
					
						
							|  |  |  |           #   { | 
					
						
							|  |  |  |           #     "servers": [ | 
					
						
							|  |  |  |           #       { | 
					
						
							|  |  |  |           #         "id": "132958f0-61c5-4665-8cc3-66e1bacd285b", | 
					
						
							|  |  |  |           #         "create": { | 
					
						
							|  |  |  |           #           "status": true, | 
					
						
							|  |  |  |           #           "time": "155s" | 
					
						
							|  |  |  |           #         }, | 
					
						
							|  |  |  |           #         "chef_node_name": "chef name", | 
					
						
							|  |  |  |           #         "bootstrap": { | 
					
						
							|  |  |  |           #           "status": true, | 
					
						
							|  |  |  |           #           "log": "\nWaiting for SSH...\n" | 
					
						
							|  |  |  |           #           "return_code": 0 | 
					
						
							|  |  |  |           #         }, | 
					
						
							|  |  |  |           #         "delete": { | 
					
						
							|  |  |  |           #           "status": true, | 
					
						
							|  |  |  |           #           "time": "2s" | 
					
						
							|  |  |  |           #           "log": { | 
					
						
							|  |  |  |           #             "chef_node": "Deleted node[chef name]", | 
					
						
							|  |  |  |           #             "chef_client": "Deleted client[chef name]", | 
					
						
							|  |  |  |           #             "server": "Server with id '132958f0-61c5-4665-8cc3-66e1bacd285b' terminated" | 
					
						
							|  |  |  |           #           } | 
					
						
							|  |  |  |           #         }, | 
					
						
							|  |  |  |           #       } | 
					
						
							|  |  |  |           #     ], | 
					
						
							|  |  |  |           #     "project": { | 
					
						
							|  |  |  |           #       "deploy_envs": [ | 
					
						
							|  |  |  |           #         { | 
					
						
							|  |  |  |           #           "flavor": "flavor", | 
					
						
							|  |  |  |           #           "identifier": "prod", | 
					
						
							|  |  |  |           #           "image": "image id", | 
					
						
							|  |  |  |           #           "run_list": [ | 
					
						
							|  |  |  |           #             "role[prod]" | 
					
						
							|  |  |  |           #           ], | 
					
						
							|  |  |  |           #           "subnets": [ | 
					
						
							|  |  |  |           #             "private" | 
					
						
							|  |  |  |           #           ], | 
					
						
							|  |  |  |           #           "expires": null, | 
					
						
							|  |  |  |           #           "provider": "openstack", | 
					
						
							|  |  |  |           #           "groups": [ | 
					
						
							|  |  |  |           #             "default" | 
					
						
							|  |  |  |           #           ], | 
					
						
							|  |  |  |           #           "users": [ | 
					
						
							|  |  |  |           #             "root" | 
					
						
							|  |  |  |           #           ] | 
					
						
							|  |  |  |           #         } | 
					
						
							|  |  |  |           #       ], | 
					
						
							|  |  |  |           #       "name": "prject_1" | 
					
						
							|  |  |  |           #     }, | 
					
						
							|  |  |  |           #     "message": "Test project 'project_1' and environment 'prod'" | 
					
						
							|  |  |  |           #   } | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           app.post_with_headers "/project/test/:id/:env", :headers => [:accept, :content_type] do |project, deploy_env| | 
					
						
							|  |  |  |             check_privileges("project", "r") | 
					
						
							| 
									
										
										
										
											2015-07-30 15:37:43 +03:00
										 |  |  |             json Devops::API2_0::Handler::Project.new(request).test_project(project, deploy_env) | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |           end | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           puts "Project routes initialized" | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-26 15:45:33 +03:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 |