| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  | module Devops | 
					
						
							|  |  |  |   module Version2_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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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-02-19 11:27:56 +03:00
										 |  |  |           app.get_with_headers "/projects", :headers => [:accept], &Devops::Version2_0::Handler::Project.get_projects | 
					
						
							| 
									
										
										
										
											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 = {} | 
					
						
							|  |  |  |           hash["GET"] = Devops::Version2_0::Handler::Project.get_project | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-19 11:27:56 +03:00
										 |  |  |           # Update project and create chef roles | 
					
						
							| 
									
										
										
										
											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 : | 
					
						
							|  |  |  |           #     { | 
					
						
							|  |  |  |           #       "deploy_envs": [ | 
					
						
							|  |  |  |           #         { | 
					
						
							| 
									
										
										
										
											2015-02-19 11:27:56 +03:00
										 |  |  |           #           "identifier": "dev", | 
					
						
							| 
									
										
										
										
											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
										 |  |  |           #   200 - Updated | 
					
						
							|  |  |  |           hash["PUT"] = Devops::Version2_0::Handler::Project.update_project | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							|  |  |  |           hash["DELETE"] = Devops::Version2_0::Handler::Project.delete_project | 
					
						
							|  |  |  |           app.multi_routes "/project/:id", {}, hash | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           # 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" | 
					
						
							|  |  |  |           #     } | 
					
						
							|  |  |  |           #   ] | 
					
						
							|  |  |  |           app.get_with_headers "/project/:project/servers", :headers => [:accept], &Devops::Version2_0::Handler::Project.get_project_servers | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           # Create project and chef roles | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *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 | 
					
						
							|  |  |  |           app.post_with_headers "/project", :headers => [:accept, :content_type], &Devops::Version2_0::Handler::Project.create_project | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04: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-02-19 11:27:56 +03:00
										 |  |  |           users_hash["PUT"] = Devops::Version2_0::Handler::Project.update_project_users | 
					
						
							| 
									
										
										
										
											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-02-19 11:27:56 +03:00
										 |  |  |           users_hash["DELETE"] = Devops::Version2_0::Handler::Project.delete_project_users | 
					
						
							|  |  |  |           app.multi_routes "/project/:id/user", {}, users_hash | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  |           # Set run_list to project environment | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : PUT | 
					
						
							|  |  |  |           #   - headers : | 
					
						
							|  |  |  |           #     - Accept: application/json | 
					
						
							|  |  |  |           #     - Content-Type: application/json | 
					
						
							|  |  |  |           #   - body : | 
					
						
							|  |  |  |           #     [ | 
					
						
							|  |  |  |           #       "role[role_1]", | 
					
						
							|  |  |  |           #       "recipe[recipe_1]" | 
					
						
							|  |  |  |           #     ] | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Returns* : | 
					
						
							|  |  |  |           #   200 - Updated | 
					
						
							| 
									
										
										
										
											2015-02-19 11:27:56 +03:00
										 |  |  |           app.put_with_headers "/project/:id/:env/run_list", :headers => [:accept, :content_type], &Devops::Version2_0::Handler::Project.set_project_env_run_list | 
					
						
							| 
									
										
										
										
											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 : | 
					
						
							|  |  |  |           #     - 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-02-19 11:27:56 +03:00
										 |  |  |           app.post_with_headers "/project/:id/deploy", :headers => [:content_type], &Devops::Version2_0::Handler::Project.deploy_project | 
					
						
							| 
									
										
										
										
											2014-12-15 14:26:54 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |           # Test project environment | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # Run tests: | 
					
						
							|  |  |  |           #   - run server | 
					
						
							|  |  |  |           #   - bootstrap server | 
					
						
							|  |  |  |           #   - delete server | 
					
						
							|  |  |  |           # | 
					
						
							|  |  |  |           # * *Request* | 
					
						
							|  |  |  |           #   - method : DELETE | 
					
						
							|  |  |  |           #   - 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-02-19 11:27:56 +03:00
										 |  |  |           app.post_with_headers "/project/test/:id/:env", :headers => [:accept, :content_type], &Devops::Version2_0::Handler::Project.test_project | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							|  |  |  | 
 |