280 lines
12 KiB
Ruby
280 lines
12 KiB
Ruby
module Devops
|
|
module API3
|
|
module Routes
|
|
module ProjectRoutes
|
|
|
|
def self.registered(app)
|
|
|
|
app.define_policy :read_projects, "Get projects list or project details"
|
|
app.define_policy :create_projects, "Create projects"
|
|
app.define_policy :delete_projects, "Delete projects"
|
|
app.define_policy :update_projects, "Update projects"
|
|
|
|
app.get_with_headers "/project_types" do
|
|
check_policy(:read_projects)
|
|
json Devops::API3::Handler::Project.new(request).project_types
|
|
end
|
|
|
|
app.get_with_headers "/projects" do
|
|
check_policy(:read_projects)
|
|
json Devops::API3::Handler::Project.new(request).projects.map(&:to_hash_list)
|
|
end
|
|
|
|
hash = {}
|
|
hash["GET"] = lambda {|project|
|
|
check_policy(:read_projects)
|
|
json Devops::API3::Handler::Project.new(request).project(project).to_hash
|
|
}
|
|
|
|
hash["PUT"] = lambda { |project|
|
|
check_policy(:create_projects)
|
|
r = Devops::API3::Handler::Project.new(request).update_project project
|
|
create_response("Project '#{project}' has been updated.", {id: project})
|
|
}
|
|
|
|
hash["DELETE"] = lambda {|project|
|
|
check_policy(:delete_projects)
|
|
info = Devops::API3::Handler::Project.new(request).delete_project(project)
|
|
create_response(info, {id: project})
|
|
}
|
|
app.multi_routes "/project/:project", hash
|
|
|
|
app.post_with_headers "/project/:project/users/add" do |project|
|
|
check_policy(:update_projects)
|
|
users = Devops::API3::Handler::Project.new(request).add_project_users(project)
|
|
create_response("Project '#{project}' has been updated.", project_users: users, id: project)
|
|
end
|
|
|
|
app.post_with_headers "/project/:project/users/delete" do |project|
|
|
check_policy(:update_projects)
|
|
users = Devops::API3::Handler::Project.new(request).delete_project_users(project)
|
|
create_response("Project '#{project}' has been updated.", project_users: users, id: project)
|
|
end
|
|
|
|
app.post_with_headers "/project/:id/description" do |project|
|
|
check_policy(:create_projects)
|
|
Devops::API3::Handler::Project.new(request).set_project_description(project)
|
|
create_response("Project description has been updated", {id: project})
|
|
end
|
|
|
|
app.post_with_headers "/project/:id/run_list/add" do |project|
|
|
check_policy(:create_projects)
|
|
rl = Devops::API3::Handler::Project.new(request).add_project_run_list(project)
|
|
create_response("Project run_list has been updated", {id: project, run_list: rl})
|
|
end
|
|
|
|
app.put_with_headers "/project/:id/run_list" do |project|
|
|
check_policy(:create_projects)
|
|
rl = Devops::API3::Handler::Project.new(request).set_project_run_list(project)
|
|
create_response("Project run_list has been updated", {id: project, run_list: rl})
|
|
end
|
|
|
|
app.post_with_headers "/project/:id/run_list/delete" do |project|
|
|
check_policy(:create_projects)
|
|
rl = Devops::API3::Handler::Project.new(request).delete_project_run_list(project)
|
|
create_response("Project run_list has been updated", {id: project, run_list: rl})
|
|
end
|
|
|
|
app.post_with_headers "/project/:project/environment/:env/users/add" do |project, env|
|
|
check_policy(:update_projects)
|
|
users = Devops::API3::Handler::Project.new(request).add_project_env_users(project, env)
|
|
create_response("Project '#{project}' and environment '#{env}' has been updated.", users: users)
|
|
end
|
|
|
|
app.post_with_headers "/project/:project/environment/:env/users/delete" do |project, env|
|
|
check_policy(:update_projects)
|
|
users = Devops::API3::Handler::Project.new(request).delete_project_env_users(project, env)
|
|
create_response("Project '#{project}' and environment '#{env}' has been updated.", users: users)
|
|
end
|
|
|
|
app.get_with_headers "/project/:project/environment/:env/servers" do |project_id, env|
|
|
check_policy(:read_projects)
|
|
json Devops::API3::Handler::Project.new(request).project_env_servers(project_id, env).map(&:to_hash)
|
|
end
|
|
|
|
app.get_with_headers "/project/:project/servers" do |project_id|
|
|
check_policy(:read_projects)
|
|
json Devops::API3::Handler::Project.new(request).project_servers(project_id).map(&:to_hash)
|
|
end
|
|
|
|
# Deletes project servers
|
|
#
|
|
# * *Request*
|
|
# - method : DELETE
|
|
# - 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
|
|
# "environment": null # set to env's identifier to delete that env's servers
|
|
# }
|
|
#
|
|
# * *Returns* :
|
|
# 200 -
|
|
# {
|
|
# "to_delete": ['server1', 'server2'],
|
|
# "deleted": ['server1'],
|
|
# "failed": ['server2']
|
|
# }
|
|
app.post_with_headers "/project/:project/environment/:env/servers/delete" do |project_id, env|
|
|
check_policy(:update_projects)
|
|
json Devops::API3::Handler::Project.new(request).delete_project_env_servers(project_id, env)
|
|
end
|
|
|
|
app.get_with_headers "/project/:project/environment/:env/stacks" do |project, env|
|
|
check_policy(:read_projects)
|
|
json Devops::API3::Handler::Project.new(request, env).project_env_stacks(project, env).map(&:to_hash)
|
|
end
|
|
|
|
app.get_with_headers "/project/:project/environments" do |project|
|
|
check_policy(:read_projects)
|
|
json Devops::API3::Handler::Project.new(request).project_environments(project).map(&:to_hash)
|
|
end
|
|
|
|
app.post_with_headers "/project/:project/environment" do |project|
|
|
check_policy(:create_projects)
|
|
res, env = Devops::API3::Handler::Project.new(request).add_environment(project)
|
|
create_response(res, {environment: env.to_hash}, 200)
|
|
end
|
|
|
|
app.get_with_headers "/project/:project/environment/:env/categories" do |project, env|
|
|
check_policy(:read_projects)
|
|
json Devops::API3::Handler::Project.new(request).project_environment_categories(project, env).map(&:to_hash)
|
|
end
|
|
|
|
app.post_with_headers "/project/:project/environment/:env/category" do |project, env|
|
|
check_policy(:update_projects)
|
|
res, cat = Devops::API3::Handler::Project.new(request).add_category(project, env)
|
|
create_response(res, {category: cat.to_hash}, 200)
|
|
end
|
|
|
|
app.get_with_headers "/project/:project/environment/:env/category/:id" do |project, env, category|
|
|
check_policy(:read_projects)
|
|
json Devops::API3::Handler::Project.new(request).show_category(project, env, category).to_hash
|
|
end
|
|
|
|
app.delete_with_headers "/project/:project/environment/:env/category/:id" do |project, env, category|
|
|
check_policy(:update_projects)
|
|
res = Devops::API3::Handler::Project.new(request).delete_category(project, env, category)
|
|
create_response(res, {category: category}, 200)
|
|
end
|
|
|
|
environment_hash = {}
|
|
environment_hash["GET"] = lambda{|project, env|
|
|
check_policy(:read_projects)
|
|
json Devops::API3::Handler::Project.new(request).project_environment(project, env).to_hash
|
|
}
|
|
|
|
environment_hash["PUT"] = lambda{|id, environment|
|
|
check_policy(:update_projects)
|
|
begin
|
|
res = Devops::API3::Handler::Project.new(request).update_environment(id, environment)
|
|
create_response(res, nil, 200)
|
|
rescue InvalidRecord => e
|
|
halt_response(e.message)
|
|
end
|
|
}
|
|
|
|
environment_hash["DELETE"] = lambda{|id, environment|
|
|
check_policy(:delete_projects)
|
|
begin
|
|
res = Devops::API3::Handler::Project.new(request).delete_environment(id, environment)
|
|
create_response(res, nil, 200)
|
|
rescue InvalidRecord => e
|
|
halt_response(e.message)
|
|
end
|
|
}
|
|
app.multi_routes "/project/:id/environment/:environment", environment_hash
|
|
|
|
app.put_with_headers "/project/:id/environment/:environment/update/:field" do |project_id, environment, field|
|
|
check_policy(:create_projects)
|
|
res = Devops::API3::Handler::Project.new(request).update_environment_field(project_id, environment, field)
|
|
create_response(res, nil, 200)
|
|
end
|
|
|
|
app.post_with_headers "/project" do
|
|
check_policy(:create_projects)
|
|
begin
|
|
res = Devops::API3::Handler::Project.new(request).create_project
|
|
res = "Created. " + res
|
|
create_response(res, nil, 201)
|
|
rescue InvalidRecord => e
|
|
halt_response(e.message)
|
|
end
|
|
end
|
|
|
|
=begin
|
|
# Set components to project
|
|
#
|
|
# * *Request*
|
|
# - method : POST
|
|
# - headers :
|
|
# - Accept: application/json
|
|
# - Content-Type: application/json
|
|
# - body :
|
|
# components: {
|
|
# "some_id": {
|
|
# "filename" : "some.war"
|
|
# }
|
|
# }
|
|
#
|
|
# * *Returns* :
|
|
# 200 - Updated
|
|
app.post_with_headers "/project/:id/components", :headers => [:accept, :content_type] do |id|
|
|
check_privileges("project", "w")
|
|
res = Devops::API3::Handler::Project.new(request).set_project_components(id)
|
|
create_response(res)
|
|
end
|
|
=end
|
|
|
|
|
|
app.post_with_headers "/project/:id/environment/:env/run_list" do |project, environment|
|
|
check_policy(:create_projects)
|
|
info = Devops::API3::Handler::Project.new(request).set_project_env_run_list(project, environment)
|
|
create_response(info)
|
|
end
|
|
|
|
app.post_with_headers "/project/:id/deploy" do |project|
|
|
check_policy(:create_projects)
|
|
handler = Devops::API3::Handler::Project.new(request)
|
|
if request["X-Stream"]
|
|
stream() do |out|
|
|
begin
|
|
status = handler.deploy_project_stream out, project
|
|
out << create_status(status)
|
|
rescue IOError => e
|
|
logger.error e.message
|
|
end
|
|
end
|
|
else
|
|
json handler.deploy_project project
|
|
end
|
|
end
|
|
|
|
app.post_with_headers "/project/:project/archive" do |project|
|
|
check_policy(:create_projects)
|
|
info = Devops::API3::Handler::Project.new(request).archive_project(project)
|
|
create_response(info, id: project)
|
|
end
|
|
|
|
app.post_with_headers "/project/:project/unarchive" do |project|
|
|
check_policy(:create_projects)
|
|
info = Devops::API3::Handler::Project.new(request).unarchive_project(project)
|
|
create_response(info, id: project)
|
|
end
|
|
|
|
app.post_with_headers "/project/test/:id/:env" do |project, environment|
|
|
check_policy(:test_projects)
|
|
json Devops::API3::Handler::Project.new(request).test_project(project, environment)
|
|
end
|
|
|
|
puts "Project routes initialized"
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|