sinatra modules
This commit is contained in:
parent
cbf48145cd
commit
79e2811e0c
@ -20,11 +20,6 @@ else
|
||||
end
|
||||
|
||||
config[:devops_dir] = File.join(ENV["HOME"], ".devops") if config[:devops_dir].nil?
|
||||
puts "Devops home: #{config[:devops_dir]}"
|
||||
unless File.exists?(config[:devops_dir])
|
||||
FileUtils.mkdir_p config[:devops_dir]
|
||||
puts "Directory '#{config[:devops_dir]}' has been created"
|
||||
end
|
||||
|
||||
config[:report_dir_v2] = File.expand_path(File.join(config[:devops_dir], "report", "v2")) unless config[:report_dir_v2]
|
||||
[
|
||||
|
||||
@ -21,13 +21,32 @@ require "routes/v2.0/user"
|
||||
class DevopsService < Sinatra::Base
|
||||
|
||||
helpers Sinatra::Streaming
|
||||
helpers Sinatra::Version2_0::Helpers
|
||||
helpers Devops::Version2_0::Helpers
|
||||
|
||||
register Sinatra::Version2_0::Core::ProviderRoutes
|
||||
register Sinatra::Version2_0::Core::UserRoutes
|
||||
register Devops::Version2_0::Core::ProviderRoutes
|
||||
register Devops::Version2_0::Core::BootstrapTemplatesRoutes
|
||||
register Devops::Version2_0::Core::UserRoutes
|
||||
register Devops::Version2_0::Core::FilterRoutes
|
||||
register Devops::Version2_0::Core::FlavorRoutes
|
||||
register Devops::Version2_0::Core::GroupRoutes
|
||||
register Devops::Version2_0::Core::ImageRoutes
|
||||
register Devops::Version2_0::Core::KeyRoutes
|
||||
register Devops::Version2_0::Core::NetworkRoutes
|
||||
register Devops::Version2_0::Core::ProjectRoutes
|
||||
register Devops::Version2_0::Core::ScriptRoutes
|
||||
register Devops::Version2_0::Core::ServerRoutes
|
||||
register Devops::Version2_0::Core::StatusRoutes
|
||||
register Devops::Version2_0::Core::TagRoutes
|
||||
|
||||
def initialize config
|
||||
super()
|
||||
puts "Devops home: #{config[:devops_dir]}"
|
||||
unless File.exists?(config[:devops_dir])
|
||||
FileUtils.mkdir_p config[:devops_dir]
|
||||
puts "Directory '#{config[:devops_dir]}' has been created"
|
||||
end
|
||||
self.class.set :devops_home, config[:devops_dir]
|
||||
|
||||
self.class.set :config, config
|
||||
@@config = config
|
||||
root = File.dirname(__FILE__)
|
||||
@ -57,7 +76,7 @@ class DevopsService < Sinatra::Base
|
||||
|
||||
use Rack::Auth::Basic do |username, password|
|
||||
begin
|
||||
mongo.user_auth(username, password)
|
||||
settings.mongo.user_auth(username, password)
|
||||
true
|
||||
rescue RecordNotFound => e
|
||||
false
|
||||
@ -70,6 +89,7 @@ class DevopsService < Sinatra::Base
|
||||
disable :dump_errors
|
||||
disable :show_exceptions
|
||||
set :logging, Logger::INFO
|
||||
puts "TODO2"
|
||||
end
|
||||
|
||||
configure :development do
|
||||
@ -77,6 +97,7 @@ class DevopsService < Sinatra::Base
|
||||
disable :raise_errors
|
||||
# disable :dump_errors
|
||||
set :show_exceptions, :after_handler
|
||||
puts "TODO1"
|
||||
end
|
||||
|
||||
not_found do
|
||||
|
||||
@ -2,10 +2,9 @@ require "json"
|
||||
require 'sinatra/base'
|
||||
require "sinatra/json"
|
||||
|
||||
|
||||
require "providers/provider_factory"
|
||||
|
||||
module Sinatra
|
||||
module Devops
|
||||
module Version2_0
|
||||
module Helpers
|
||||
|
||||
|
||||
@ -1,17 +1,15 @@
|
||||
require "json"
|
||||
require "routes/v2.0/base_routes"
|
||||
require "providers/provider_factory"
|
||||
require "commands/bootstrap_templates"
|
||||
|
||||
module Devops
|
||||
module Version2_0
|
||||
class BootstrapTemplatesRoutes < BaseRoutes
|
||||
module Core
|
||||
module BootstrapTemplatesRoutes
|
||||
|
||||
include BootstrapTemplatesCommands
|
||||
extend BootstrapTemplatesCommands
|
||||
|
||||
def initialize wrapper
|
||||
super wrapper
|
||||
puts "Bootstrap templates routes initialized"
|
||||
end
|
||||
def self.registered(app)
|
||||
|
||||
# Get list of available bootstrap templates
|
||||
#
|
||||
@ -24,12 +22,16 @@ module Version2_0
|
||||
# [
|
||||
# "omnibus"
|
||||
# ]
|
||||
get "/templates" do
|
||||
app.get "/templates" do
|
||||
check_headers :accept
|
||||
check_privileges("templates", "r")
|
||||
json get_templates
|
||||
json BootstrapTemplatesRoutes.get_templates
|
||||
end
|
||||
|
||||
puts "Bootstrap templates routes initialized"
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
@ -1,14 +1,12 @@
|
||||
require "routes/v2.0/base_routes"
|
||||
|
||||
module Devops
|
||||
module Version2_0
|
||||
class FilterRoutes < BaseRoutes
|
||||
module Core
|
||||
module FilterRoutes
|
||||
|
||||
def initialize wrapper
|
||||
super wrapper
|
||||
puts "Filter routes initialized"
|
||||
end
|
||||
def self.registered(app)
|
||||
|
||||
before "/filter/:provider/image" do
|
||||
app.before "/filter/:provider/image" do
|
||||
check_headers :accept, :content_type
|
||||
check_privileges("filter", "w")
|
||||
check_provider(params[:provider])
|
||||
@ -17,7 +15,7 @@ module Version2_0
|
||||
check_array(@images, "Request body should contains an array with strings")
|
||||
end
|
||||
|
||||
after "/filter/:provider/image" do
|
||||
app.after "/filter/:provider/image" do
|
||||
statistic
|
||||
end
|
||||
|
||||
@ -39,11 +37,11 @@ module Version2_0
|
||||
# [
|
||||
# "36dc7618-4178-4e29-be43-286fbfe90f50"
|
||||
# ]
|
||||
get "/filter/:provider/images" do
|
||||
app.get "/filter/:provider/images" do
|
||||
check_headers :accept
|
||||
check_privileges("filter", "r")
|
||||
check_provider(params[:provider])
|
||||
json BaseRoutes.mongo.available_images(params[:provider])
|
||||
json settings.mongo.available_images(params[:provider])
|
||||
end
|
||||
|
||||
# Add image ids to filter for :provider
|
||||
@ -59,8 +57,8 @@ module Version2_0
|
||||
# ] -> array of image ids to add to filter
|
||||
#
|
||||
# * *Returns* : list of images filters for :provider
|
||||
put "/filter/:provider/image" do
|
||||
create_response("Updated", {:images => BaseRoutes.mongo.add_available_images(@images, params[:provider])})
|
||||
app.put "/filter/:provider/image" do
|
||||
create_response("Updated", {:images => settings.mongo.add_available_images(@images, params[:provider])})
|
||||
end
|
||||
|
||||
# Delete image ids from filter for :provider
|
||||
@ -76,9 +74,14 @@ module Version2_0
|
||||
# ] -> array of image ids to delete from filter
|
||||
#
|
||||
# * *Returns* : list of images filters for :provider
|
||||
delete "/filter/:provider/image" do
|
||||
create_response("Deleted", {:images => BaseRoutes.mongo.delete_available_images(@images, params[:provider])})
|
||||
app.delete "/filter/:provider/image" do
|
||||
create_response("Deleted", {:images => settings.mongo.delete_available_images(@images, params[:provider])})
|
||||
end
|
||||
|
||||
puts "Filter routes initialized"
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -1,14 +1,12 @@
|
||||
require "json"
|
||||
require "routes/v2.0/base_routes"
|
||||
require "providers/provider_factory"
|
||||
|
||||
module Devops
|
||||
module Version2_0
|
||||
class FlavorRoutes < BaseRoutes
|
||||
module Core
|
||||
module FlavorRoutes
|
||||
|
||||
def initialize wrapper
|
||||
super wrapper
|
||||
puts "Flavor routes initialized"
|
||||
end
|
||||
def self.registered(app)
|
||||
|
||||
# Get list of flavors for :provider
|
||||
#
|
||||
@ -37,7 +35,7 @@ module Version2_0
|
||||
# "disk": 20
|
||||
# }
|
||||
# ]
|
||||
get "/flavors/:provider" do
|
||||
app.get "/flavors/:provider" do
|
||||
check_headers :accept
|
||||
check_privileges("flavor", "r")
|
||||
check_provider(params[:provider])
|
||||
@ -45,5 +43,10 @@ module Version2_0
|
||||
json p.flavors
|
||||
end
|
||||
|
||||
puts "Flavor routes initialized"
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -1,16 +1,13 @@
|
||||
# encoding: UTF-8
|
||||
require "json"
|
||||
require "routes/v2.0/base_routes"
|
||||
require "providers/provider_factory"
|
||||
|
||||
module Devops
|
||||
module Version2_0
|
||||
class GroupRoutes < BaseRoutes
|
||||
|
||||
def initialize wrapper
|
||||
super wrapper
|
||||
puts "Group routes initialized"
|
||||
end
|
||||
module Core
|
||||
module GroupRoutes
|
||||
|
||||
def self.registered(app)
|
||||
# Get security groups for :provider
|
||||
#
|
||||
# * *Request*
|
||||
@ -49,7 +46,7 @@ module Version2_0
|
||||
# }
|
||||
# }
|
||||
# TODO: vpc support for ec2
|
||||
get "/groups/:provider" do
|
||||
app.get "/groups/:provider" do
|
||||
check_headers :accept
|
||||
check_privileges("group", "r")
|
||||
check_provider(params[:provider])
|
||||
@ -57,5 +54,10 @@ module Version2_0
|
||||
json p.groups(params)
|
||||
end
|
||||
|
||||
puts "Group routes initialized"
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -1,18 +1,15 @@
|
||||
require "providers/provider_factory"
|
||||
require "routes/v2.0/base_routes"
|
||||
require "commands/image"
|
||||
|
||||
module Devops
|
||||
module Version2_0
|
||||
class ImageRoutes < BaseRoutes
|
||||
module Core
|
||||
module ImageRoutes
|
||||
|
||||
include ImageCommands
|
||||
extend ImageCommands
|
||||
|
||||
def initialize wrapper
|
||||
super wrapper
|
||||
puts "Image routes initialized"
|
||||
end
|
||||
|
||||
after %r{\A/image(/[\w]+)?\z} do
|
||||
def self.registered(app)
|
||||
app.after %r{\A/image(/[\w]+)?\z} do
|
||||
statistic
|
||||
end
|
||||
|
||||
@ -35,11 +32,11 @@ module Version2_0
|
||||
# "id": "36dc7618-4178-4e29-be43-286fbfe90f50"
|
||||
# }
|
||||
# ]
|
||||
get "/images" do
|
||||
app.get "/images" do
|
||||
check_headers :accept
|
||||
check_privileges("image", "r")
|
||||
check_provider(params[:provider]) if params[:provider]
|
||||
images = BaseRoutes.mongo.images(params[:provider])
|
||||
images = settings.mongo.images(params[:provider])
|
||||
json(images.map {|i| i.to_hash})
|
||||
end
|
||||
|
||||
@ -67,11 +64,11 @@ module Version2_0
|
||||
# "status": "ACTIVE"
|
||||
# }
|
||||
# ]
|
||||
get "/images/provider/:provider" do
|
||||
app.get "/images/provider/:provider" do
|
||||
check_headers :accept
|
||||
check_privileges("image", "r")
|
||||
check_provider(params[:provider])
|
||||
json get_images(BaseRoutes.mongo, params[:provider])
|
||||
json get_images(settings.mongo, params[:provider])
|
||||
end
|
||||
|
||||
# Get devops image by id
|
||||
@ -89,10 +86,10 @@ module Version2_0
|
||||
# "bootstrap_template": null,
|
||||
# "id": "36dc7618-4178-4e29-be43-286fbfe90f50"
|
||||
# }
|
||||
get "/image/:image_id" do
|
||||
app.get "/image/:image_id" do
|
||||
check_headers :accept
|
||||
check_privileges("image", "r")
|
||||
json BaseRoutes.mongo.image(params[:image_id])
|
||||
json settings.mongo.image(params[:image_id])
|
||||
end
|
||||
|
||||
# Create devops image
|
||||
@ -113,11 +110,11 @@ module Version2_0
|
||||
#
|
||||
# * *Returns* :
|
||||
# 201 - Created
|
||||
post "/image" do
|
||||
app.post "/image" do
|
||||
check_headers
|
||||
check_privileges("image", "w")
|
||||
image = create_object_from_json_body
|
||||
BaseRoutes.mongo.image_insert Image.new(image)
|
||||
settings.mongo.image_insert Image.new(image)
|
||||
create_response "Created", nil, 201
|
||||
end
|
||||
|
||||
@ -139,13 +136,13 @@ module Version2_0
|
||||
#
|
||||
# * *Returns* :
|
||||
# 200 - Updated
|
||||
put "/image/:image_id" do
|
||||
app.put "/image/:image_id" do
|
||||
check_headers
|
||||
check_privileges("image", "w")
|
||||
BaseRoutes.mongo.image params[:image_id]
|
||||
settings.mongo.image params[:image_id]
|
||||
image = Image.new(create_object_from_json_body)
|
||||
image.id = params[:image_id]
|
||||
BaseRoutes.mongo.image_update image
|
||||
settings.mongo.image_update image
|
||||
create_response("Image '#{params[:image_id]}' has been updated")
|
||||
end
|
||||
|
||||
@ -158,10 +155,10 @@ module Version2_0
|
||||
#
|
||||
# * *Returns* :
|
||||
# 200 - Deleted
|
||||
delete "/image/:image_id" do
|
||||
app.delete "/image/:image_id" do
|
||||
check_headers
|
||||
check_privileges("image", "w")
|
||||
projects = BaseRoutes.mongo.projects_by_image params[:image_id]
|
||||
projects = settings.mongo.projects_by_image params[:image_id]
|
||||
unless projects.empty?
|
||||
ar = []
|
||||
projects.each do |p|
|
||||
@ -170,9 +167,14 @@ module Version2_0
|
||||
raise DependencyError.new "Deleting is forbidden: Image is used in #{ar.join(", ")}"
|
||||
end
|
||||
|
||||
r = BaseRoutes.mongo.image_delete params[:image_id]
|
||||
r = settings.mongo.image_delete params[:image_id]
|
||||
create_response("Image '#{params[:image_id]}' has been removed")
|
||||
end
|
||||
|
||||
puts "Image routes initialized"
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -3,15 +3,13 @@ require "db/exceptions/invalid_record"
|
||||
require "db/mongo/models/key"
|
||||
require "fileutils"
|
||||
|
||||
module Devops
|
||||
module Version2_0
|
||||
class KeyRoutes < BaseRoutes
|
||||
module Core
|
||||
module KeyRoutes
|
||||
|
||||
def initialize wrapper
|
||||
super wrapper
|
||||
puts "Key routes initialized"
|
||||
end
|
||||
|
||||
before %r{\A/key(/[\w]+)?\z} do
|
||||
def self.registered(app)
|
||||
app.before %r{\A/key(/[\w]+)?\z} do
|
||||
if request.delete?
|
||||
check_headers :accept
|
||||
else
|
||||
@ -20,7 +18,7 @@ module Version2_0
|
||||
check_privileges("key", "w")
|
||||
end
|
||||
|
||||
after %r{\A/key(/[\w]+)?\z} do
|
||||
app.after %r{\A/key(/[\w]+)?\z} do
|
||||
statistic
|
||||
end
|
||||
|
||||
@ -38,10 +36,10 @@ module Version2_0
|
||||
# "id": "devops"
|
||||
# }
|
||||
# ]
|
||||
get "/keys" do
|
||||
app.get "/keys" do
|
||||
check_headers :accept
|
||||
check_privileges("key", "r")
|
||||
keys = BaseRoutes.mongo.keys.map {|i| i.to_hash}
|
||||
keys = settings.mongo.keys.map {|i| i.to_hash}
|
||||
keys.each {|k| k.delete("path")} # We should not return path to the key
|
||||
json keys
|
||||
end
|
||||
@ -62,7 +60,7 @@ module Version2_0
|
||||
#
|
||||
# * *Returns* :
|
||||
# 201 - Created
|
||||
post "/key" do
|
||||
app.post "/key" do
|
||||
key = create_object_from_json_body
|
||||
fname = check_filename(key["file_name"], "Parameter 'file_name' must be a not empty string")
|
||||
kname = check_string(key["key_name"], "Parameter 'key_name' should be a not empty string")
|
||||
@ -75,7 +73,7 @@ module Version2_0
|
||||
end
|
||||
|
||||
key = Key.new({"path" => file_name, "id" => kname})
|
||||
BaseRoutes.mongo.key_insert key
|
||||
settings.mongo.key_insert key
|
||||
create_response("Created", nil, 201)
|
||||
end
|
||||
|
||||
@ -88,23 +86,28 @@ module Version2_0
|
||||
#
|
||||
# * *Returns* :
|
||||
# 200 - Deleted
|
||||
delete "/key/:key" do
|
||||
servers = BaseRoutes.mongo.servers_by_key params[:key]
|
||||
app.delete "/key/:key" do
|
||||
servers = settings.mongo.servers_by_key params[:key]
|
||||
unless servers.empty?
|
||||
s_str = servers.map{|s| s.id}.join(", ")
|
||||
raise DependencyError.new "Deleting is forbidden: Key is used in servers: #{s_str}"
|
||||
end
|
||||
|
||||
k = BaseRoutes.mongo.key params[:key]
|
||||
k = settings.mongo.key params[:key]
|
||||
begin
|
||||
FileUtils.rm(k.path)
|
||||
rescue
|
||||
logger.error "Missing key file for #{params[:key]} - #{k.filename}"
|
||||
end
|
||||
r = BaseRoutes.mongo.key_delete params[:key]
|
||||
r = settings.mongo.key_delete params[:key]
|
||||
return [500, r["err"].inspect] unless r["err"].nil?
|
||||
create_response("Key '#{params[:key]}' removed")
|
||||
end
|
||||
|
||||
puts "Key routes initialized"
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -1,16 +1,13 @@
|
||||
# encoding: UTF-8
|
||||
require "json"
|
||||
require "routes/v2.0/base_routes"
|
||||
require "providers/provider_factory"
|
||||
|
||||
module Devops
|
||||
module Version2_0
|
||||
class NetworkRoutes < BaseRoutes
|
||||
|
||||
def initialize wrapper
|
||||
super wrapper
|
||||
puts "Network routes initialized"
|
||||
end
|
||||
module Core
|
||||
module NetworkRoutes
|
||||
|
||||
def self.registered(app)
|
||||
# Get list of networks for :provider
|
||||
#
|
||||
# * *Request*
|
||||
@ -37,7 +34,7 @@ module Version2_0
|
||||
# "id": "b14f8df9-ac27-48e2-8d65-f7ef78dc2654"
|
||||
# }
|
||||
# ]
|
||||
get "/networks/:provider" do
|
||||
app.get "/networks/:provider" do
|
||||
check_headers :accept
|
||||
check_privileges("network", "r")
|
||||
check_provider(params[:provider])
|
||||
@ -45,5 +42,10 @@ module Version2_0
|
||||
json p.networks_detail
|
||||
end
|
||||
|
||||
puts "Network routes initialized"
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -7,32 +7,30 @@ require "commands/status"
|
||||
require "commands/server"
|
||||
require "workers/project_test_worker"
|
||||
|
||||
module Devops
|
||||
module Version2_0
|
||||
class ProjectRoutes < BaseRoutes
|
||||
module Core
|
||||
module ProjectRoutes
|
||||
|
||||
include DeployCommands
|
||||
include StatusCommands
|
||||
include ServerCommands
|
||||
extend DeployCommands
|
||||
extend StatusCommands
|
||||
extend ServerCommands
|
||||
|
||||
def initialize wrapper
|
||||
super wrapper
|
||||
puts "Project routes initialized"
|
||||
end
|
||||
|
||||
before "/project/:id/user" do
|
||||
def self.registered(app)
|
||||
app.before "/project/:id/user" do
|
||||
check_headers :accept, :content_type
|
||||
check_privileges("project", "w")
|
||||
body = create_object_from_json_body
|
||||
@users = check_array(body["users"], "Parameter 'users' must be a not empty array of strings")
|
||||
@deploy_env = check_string(body["deploy_env"], "Parameter 'deploy_env' must be a not empty string", true)
|
||||
@project = BaseRoutes.mongo.project(params[:id])
|
||||
@project = settings.mongo.project(params[:id])
|
||||
end
|
||||
|
||||
after %r{\A/project(/[\w]+(/(user|deploy))?)?\z} do
|
||||
app.after %r{\A/project(/[\w]+(/(user|deploy))?)?\z} do
|
||||
statistic
|
||||
end
|
||||
|
||||
after "/project/:id/:env/run_list" do
|
||||
app.after "/project/:id/:env/run_list" do
|
||||
statistic
|
||||
end
|
||||
|
||||
@ -49,7 +47,7 @@ module Version2_0
|
||||
# [
|
||||
# {"name" : "project_1"}
|
||||
# ]
|
||||
get "/projects" do
|
||||
app.get "/projects" do
|
||||
check_headers :accept
|
||||
check_privileges("project", "r")
|
||||
fields = []
|
||||
@ -58,7 +56,7 @@ module Version2_0
|
||||
fields.push k if params["fields"].include?(k)
|
||||
end
|
||||
end
|
||||
json BaseRoutes.mongo.projects(nil, nil, fields).map {|p| p.to_hash}
|
||||
json settings.mongo.projects(nil, nil, fields).map {|p| p.to_hash}
|
||||
end
|
||||
|
||||
# Get project by id
|
||||
@ -93,10 +91,10 @@ module Version2_0
|
||||
# ],
|
||||
# "name": "project_1"
|
||||
# }
|
||||
get "/project/:project" do
|
||||
app.get "/project/:project" do
|
||||
check_headers :accept
|
||||
check_privileges("project", "r")
|
||||
json BaseRoutes.mongo.project(params[:project])
|
||||
json settings.mongo.project(params[:project])
|
||||
end
|
||||
|
||||
# Get project servers
|
||||
@ -125,11 +123,11 @@ module Version2_0
|
||||
# "id": "nstance id"
|
||||
# }
|
||||
# ]
|
||||
get "/project/:project/servers" do
|
||||
app.get "/project/:project/servers" do
|
||||
check_headers :accept
|
||||
check_privileges("project", "r")
|
||||
BaseRoutes.mongo.project(params[:project])
|
||||
json BaseRoutes.mongo.servers(params[:project], params[:deploy_env]).map{|s| s.to_hash}
|
||||
settings.mongo.project(params[:project])
|
||||
json settings.mongo.servers(params[:project], params[:deploy_env]).map{|s| s.to_hash}
|
||||
end
|
||||
|
||||
# Create project and chef roles
|
||||
@ -168,16 +166,16 @@ module Version2_0
|
||||
# * *Returns* :
|
||||
# 201 - Created
|
||||
# TODO: multi project
|
||||
post "/project" do
|
||||
app.post "/project" do
|
||||
check_headers :accept, :content_type
|
||||
check_privileges("project", "w")
|
||||
body = create_object_from_json_body
|
||||
check_string(body["name"], "Parameter 'name' must be a not empty string")
|
||||
check_array(body["deploy_envs"], "Parameter 'deploy_envs' must be a not empty array of objects", Hash)
|
||||
p = Project.new(body)
|
||||
halt_response("Project '#{p.id}' already exist") if BaseRoutes.mongo.is_project_exists?(p)
|
||||
halt_response("Project '#{p.id}' already exist") if settings.mongo.is_project_exists?(p)
|
||||
p.add_authorized_user [request.env['REMOTE_USER']]
|
||||
BaseRoutes.mongo.project_insert p
|
||||
settings.mongo.project_insert p
|
||||
roles_res = ""
|
||||
if p.multi?
|
||||
logger.info "Project '#{p.id}' with type 'multi' created"
|
||||
@ -226,13 +224,13 @@ module Version2_0
|
||||
# * *Returns* :
|
||||
# 200 - Updated
|
||||
# TODO: multi project
|
||||
put "/project/:id" do
|
||||
app.put "/project/:id" do
|
||||
check_headers
|
||||
check_privileges("project", "w")
|
||||
project = Project.new(create_object_from_json_body)
|
||||
project.id = params[:id]
|
||||
old_project = BaseRoutes.mongo.project params[:id]
|
||||
BaseRoutes.mongo.project_update project
|
||||
old_project = settings.mongo.project params[:id]
|
||||
settings.mongo.project_update project
|
||||
roles = create_new_roles(old_project, project, logger)
|
||||
info = "Project '#{project.id}' has been updated." + create_roles_response(roles)
|
||||
create_response(info)
|
||||
@ -256,11 +254,11 @@ module Version2_0
|
||||
# * *Returns* :
|
||||
# 200 - Updated
|
||||
# TODO: multi project
|
||||
put "/project/:id/user" do
|
||||
users = BaseRoutes.mongo.users(@users).map{|u| u.id}
|
||||
app.put "/project/:id/user" do
|
||||
users = settings.mongo.users(@users).map{|u| u.id}
|
||||
buf = @users - users
|
||||
@project.add_authorized_user users, @deploy_env
|
||||
BaseRoutes.mongo.project_update(@project)
|
||||
settings.mongo.project_update(@project)
|
||||
info = "Users '#{users.join("', '")}' have been added to '#{params[:id]}' project's authorized users"
|
||||
info << ", invalid users: '#{buf.join("', '")}'" unless buf.empty?
|
||||
create_response(info)
|
||||
@ -284,9 +282,9 @@ module Version2_0
|
||||
# * *Returns* :
|
||||
# 200 - Updated
|
||||
# TODO: multi project
|
||||
delete "/project/:id/user" do
|
||||
app.delete "/project/:id/user" do
|
||||
@project.remove_authorized_user @users, @deploy_env
|
||||
BaseRoutes.mongo.project_update @project
|
||||
settings.mongo.project_update @project
|
||||
info = "Users '#{@users.join("', '")}' have been removed from '#{params[:id]}' project's authorized users"
|
||||
create_response(info)
|
||||
end
|
||||
@ -307,15 +305,15 @@ module Version2_0
|
||||
# * *Returns* :
|
||||
# 200 - Updated
|
||||
# TODO: multi project
|
||||
put "/project/:id/:env/run_list" do
|
||||
app.put "/project/:id/:env/run_list" do
|
||||
check_headers :accept, :content_type
|
||||
check_privileges("project", "w")
|
||||
list = create_object_from_json_body(Array)
|
||||
check_array(list, "Body must contains not empty array of strings")
|
||||
project = BaseRoutes.mongo.project(params[:id])
|
||||
project = settings.mongo.project(params[:id])
|
||||
env = project.deploy_env params[:env]
|
||||
env.run_list = list
|
||||
BaseRoutes.mongo.project_update project
|
||||
settings.mongo.project_update project
|
||||
create_response("Updated environment '#{env.identifier}' with run_list '#{env.run_list.inspect}' in project '#{project.id}'")
|
||||
end
|
||||
|
||||
@ -333,22 +331,22 @@ module Version2_0
|
||||
#
|
||||
# * *Returns* :
|
||||
# 200 - Deleted
|
||||
delete "/project/:id" do
|
||||
app.delete "/project/:id" do
|
||||
check_headers :accept, :content_type
|
||||
check_privileges("project", "w")
|
||||
servers = BaseRoutes.mongo.servers params[:id]
|
||||
servers = settings.mongo.servers params[:id]
|
||||
raise DependencyError.new "Deleting #{params[:id]} is forbidden: Project has servers" if !servers.empty?
|
||||
body = create_object_from_json_body(Hash, true)
|
||||
deploy_env = unless body.nil?
|
||||
check_string(body["deploy_env"], "Parameter 'deploy_env' should be a not empty string", true)
|
||||
end
|
||||
info = if deploy_env.nil?
|
||||
BaseRoutes.mongo.project_delete(params[:id])
|
||||
settings.mongo.project_delete(params[:id])
|
||||
"Project '#{params[:id]}' is deleted"
|
||||
else
|
||||
project = BaseRoutes.mongo.project(params[:id])
|
||||
project = settings.mongo.project(params[:id])
|
||||
project.remove_env params[:deploy_env]
|
||||
BaseRoutes.mongo.project_update project
|
||||
settings.mongo.project_update project
|
||||
"Project '#{params[:id]}'. Deploy environment '#{params[:deploy_env]}' has been deleted"
|
||||
end
|
||||
create_response(info)
|
||||
@ -369,14 +367,14 @@ module Version2_0
|
||||
# }
|
||||
#
|
||||
# * *Returns* : text stream
|
||||
post "/project/:id/deploy" do
|
||||
app.post "/project/:id/deploy" do
|
||||
check_headers :content_type
|
||||
check_privileges("project", "x")
|
||||
obj = create_object_from_json_body
|
||||
check_string(obj["deploy_env"], "Parameter 'deploy_env' should be a not empty string", true)
|
||||
check_array(obj["servers"], "Parameter 'servers' should be a not empty array of strings", String, true)
|
||||
project = BaseRoutes.mongo.project(params[:id])
|
||||
servers = BaseRoutes.mongo.servers(params[:id], obj["deploy_env"], obj["servers"], true)
|
||||
project = settings.mongo.project(params[:id])
|
||||
servers = settings.mongo.servers(params[:id], obj["deploy_env"], obj["servers"], true)
|
||||
keys = {}
|
||||
if obj.key?("trace")
|
||||
stream() do |out|
|
||||
@ -387,14 +385,14 @@ module Version2_0
|
||||
logger.debug "Deploy server: #{s.inspect}"
|
||||
|
||||
begin
|
||||
BaseRoutes.mongo.check_project_auth s.project, s.deploy_env, request.env['REMOTE_USER']
|
||||
settings.mongo.check_project_auth s.project, s.deploy_env, request.env['REMOTE_USER']
|
||||
rescue InvalidPrivileges, RecordNotFound => e
|
||||
out << e.message + "\n"
|
||||
status.push 2
|
||||
next
|
||||
end
|
||||
unless keys.key? s.key
|
||||
k = BaseRoutes.mongo.key s.key
|
||||
k = settings.mongo.key s.key
|
||||
keys[s.key] = k.path
|
||||
end
|
||||
status.push(deploy_server(out, s, keys[s.key]))
|
||||
@ -410,7 +408,7 @@ module Version2_0
|
||||
uri = URI.parse(request.url)
|
||||
servers.each do |s|
|
||||
project = begin
|
||||
BaseRoutes.mongo.check_project_auth s.project, s.deploy_env, request.env['REMOTE_USER']
|
||||
settings.mongo.check_project_auth s.project, s.deploy_env, request.env['REMOTE_USER']
|
||||
rescue InvalidPrivileges, RecordNotFound => e
|
||||
next
|
||||
end
|
||||
@ -490,10 +488,10 @@ module Version2_0
|
||||
# },
|
||||
# "message": "Test project 'project_1' and environment 'prod'"
|
||||
# }
|
||||
post "/project/test/:id/:env" do
|
||||
app.post "/project/test/:id/:env" do
|
||||
check_headers :accept, :content_type
|
||||
check_privileges("project", "r")
|
||||
project = BaseRoutes.mongo.project(params[:id])
|
||||
project = settings.mongo.project(params[:id])
|
||||
env = project.deploy_env params[:env]
|
||||
logger.info "Test project '#{project.id}' and environment '#{env.identifier}'"
|
||||
|
||||
@ -512,7 +510,10 @@ module Version2_0
|
||||
json files
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
puts "Project routes initialized"
|
||||
end
|
||||
|
||||
def create_roles project_id, envs, logger
|
||||
all_roles = KnifeCommands.roles
|
||||
return " Can't get roles list" if all_roles.nil?
|
||||
@ -553,6 +554,9 @@ module Version2_0
|
||||
info
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@ -1,18 +1,14 @@
|
||||
# encoding: UTF-8
|
||||
|
||||
require 'sinatra/base'
|
||||
|
||||
require "json"
|
||||
require "routes/v2.0/base_routes"
|
||||
require "providers/provider_factory"
|
||||
|
||||
module Sinatra
|
||||
module Devops
|
||||
module Version2_0
|
||||
module Core
|
||||
module ProviderRoutes
|
||||
|
||||
def self.registered(app)
|
||||
puts "Provider routes initialized"
|
||||
|
||||
# Get devops providers
|
||||
#
|
||||
@ -31,6 +27,8 @@ module Sinatra
|
||||
check_privileges("provider", "r")
|
||||
json ::Provider::ProviderFactory.providers
|
||||
end
|
||||
|
||||
puts "Provider routes initialized"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -1,19 +1,16 @@
|
||||
require "providers/provider_factory"
|
||||
require "routes/v2.0/base_routes"
|
||||
require "fileutils"
|
||||
require "commands/status"
|
||||
|
||||
module Devops
|
||||
module Version2_0
|
||||
class ScriptRoutes < BaseRoutes
|
||||
module Core
|
||||
module ScriptRoutes
|
||||
|
||||
include StatusCommands
|
||||
extend StatusCommands
|
||||
|
||||
def initialize wrapper
|
||||
super wrapper
|
||||
puts "Script routes initialized"
|
||||
end
|
||||
|
||||
before "/script/:script_name" do
|
||||
def self.registered(app)
|
||||
app.before "/script/:script_name" do
|
||||
check_headers :accept
|
||||
check_privileges("script", "w")
|
||||
file_name = params[:script_name]
|
||||
@ -25,7 +22,7 @@ module Version2_0
|
||||
end
|
||||
end
|
||||
|
||||
after %r{\A/script/((command|run)/)?[\w]+\z} do
|
||||
app.after %r{\A/script/((command|run)/)?[\w]+\z} do
|
||||
statistic
|
||||
end
|
||||
|
||||
@ -40,7 +37,7 @@ module Version2_0
|
||||
# [
|
||||
# "script_1"
|
||||
# ]
|
||||
get "/scripts" do
|
||||
app.get "/scripts" do
|
||||
check_headers :accept
|
||||
check_privileges("script", "r")
|
||||
res = []
|
||||
@ -56,7 +53,7 @@ module Version2_0
|
||||
# command to run
|
||||
#
|
||||
# * *Returns* : text stream
|
||||
post "/script/command/:node_name" do
|
||||
app.post "/script/command/:node_name" do
|
||||
check_privileges("script", "x")
|
||||
user = request.env['REMOTE_USER']
|
||||
s = BaseRoutes.mongo.server_by_chef_node_name params[:node_name]
|
||||
@ -94,7 +91,7 @@ module Version2_0
|
||||
# }
|
||||
#
|
||||
# * *Returns* : text stream
|
||||
post "/script/run/:script_name" do
|
||||
app.post "/script/run/:script_name" do
|
||||
check_headers :content_type
|
||||
check_privileges("script", "x")
|
||||
file_name = params[:script_name]
|
||||
@ -159,7 +156,7 @@ module Version2_0
|
||||
#
|
||||
# * *Returns* :
|
||||
# 201 - Created
|
||||
put "/script/:script_name" do
|
||||
app.put "/script/:script_name" do
|
||||
File.open(@file, "w") {|f| f.write(request.body.read)}
|
||||
create_response("File '#{params[:script_name]}' created", nil, 201)
|
||||
end
|
||||
@ -173,9 +170,15 @@ module Version2_0
|
||||
#
|
||||
# * *Returns* :
|
||||
# 200 - Deleted
|
||||
delete "/script/:script_name" do
|
||||
app.delete "/script/:script_name" do
|
||||
FileUtils.rm(@file)
|
||||
create_response("File '#{params[:script_name]}' deleted")
|
||||
end
|
||||
|
||||
puts "Script routes initialized"
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -3,7 +3,6 @@ require "json"
|
||||
require "chef"
|
||||
require "commands/knife_commands"
|
||||
require 'rufus-scheduler'
|
||||
require "routes/v2.0/base_routes"
|
||||
require "providers/provider_factory"
|
||||
require "db/mongo/models/deploy_env"
|
||||
require "commands/status"
|
||||
@ -12,7 +11,10 @@ require "commands/bootstrap_templates"
|
||||
require "workers/create_server_worker"
|
||||
require "workers/bootstrap_worker"
|
||||
|
||||
module Devops
|
||||
module Version2_0
|
||||
module Core
|
||||
module ServerRoutes
|
||||
|
||||
class ExpireHandler
|
||||
include ServerCommands
|
||||
@ -25,37 +27,31 @@ module Version2_0
|
||||
def call(job)
|
||||
@logger.info("Removing node '#{@server.chef_node_name}' form project '#{@server.project}' and env '#{@server.deploy_env}'")
|
||||
begin
|
||||
delete_server(@server, BaseRoutes.mongo, @logger)
|
||||
delete_server(@server, settings.mongo, @logger)
|
||||
rescue => e
|
||||
logger.error "ExpiredHandler error: " + e.message
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class ServerRoutes < BaseRoutes
|
||||
extend StatusCommands
|
||||
extend ServerCommands
|
||||
extend BootstrapTemplatesCommands
|
||||
|
||||
include StatusCommands
|
||||
include ServerCommands
|
||||
include BootstrapTemplatesCommands
|
||||
scheduler = Rufus::Scheduler.new
|
||||
|
||||
def initialize wrapper
|
||||
super wrapper
|
||||
puts "Server routes initialized"
|
||||
end
|
||||
|
||||
before %r{\A/server/[\w]+/(pause|unpouse|reserve|unreserve)\z} do
|
||||
def self.registered(app)
|
||||
app.before %r{\A/server/[\w]+/(pause|unpouse|reserve|unreserve)\z} do
|
||||
check_headers :accept, :content_type
|
||||
check_privileges("server", "w")
|
||||
body = create_object_from_json_body(Hash, true)
|
||||
@key = (body.nil? ? nil : body["key"])
|
||||
end
|
||||
|
||||
after %r{\A/server(/[\w]+)?\z | \A/server/(add|bootstrap)\z | \A/server/[\w]+/(un)?pause\z} do
|
||||
app.after %r{\A/server(/[\w]+)?\z | \A/server/(add|bootstrap)\z | \A/server/[\w]+/(un)?pause\z} do
|
||||
statistic
|
||||
end
|
||||
|
||||
scheduler = Rufus::Scheduler.new
|
||||
|
||||
# Get devops servers list
|
||||
#
|
||||
# * *Request*
|
||||
@ -72,7 +68,7 @@ module Version2_0
|
||||
# "chef_node_name": "chef name"
|
||||
# }
|
||||
# ]
|
||||
get "/servers" do
|
||||
app.get "/servers" do
|
||||
check_headers :accept
|
||||
check_privileges("server", "r")
|
||||
fields = []
|
||||
@ -82,7 +78,7 @@ module Version2_0
|
||||
end
|
||||
end
|
||||
reserved = (params.key?("reserved") ? true : nil)
|
||||
json BaseRoutes.mongo.servers(nil, nil, nil, reserved, fields).map {|s| s.to_hash}
|
||||
json settings.mongo.servers(nil, nil, nil, reserved, fields).map {|s| s.to_hash}
|
||||
end
|
||||
|
||||
# Get chef nodes list
|
||||
@ -98,7 +94,7 @@ module Version2_0
|
||||
# "chef_node_name": "chef name"
|
||||
# }
|
||||
# ]
|
||||
get "/servers/chef" do
|
||||
app.get "/servers/chef" do
|
||||
check_headers :accept
|
||||
check_privileges("server", "r")
|
||||
json KnifeCommands.chef_node_list
|
||||
@ -140,7 +136,7 @@ module Version2_0
|
||||
# "private_ip": "172.17.0.1"
|
||||
# }
|
||||
# ]
|
||||
get "/servers/:provider" do
|
||||
app.get "/servers/:provider" do
|
||||
check_headers :accept
|
||||
check_privileges("server", "r")
|
||||
json ::Provider::ProviderFactory.get(params[:provider]).servers
|
||||
@ -161,7 +157,7 @@ module Version2_0
|
||||
# "chef_node_name": "chef name"
|
||||
# }
|
||||
# ]
|
||||
get "/server/:name" do
|
||||
app.get "/server/:name" do
|
||||
check_headers :accept
|
||||
check_privileges("server", "r")
|
||||
json get_server(params[:name], params[:key]).to_hash
|
||||
@ -181,15 +177,15 @@ module Version2_0
|
||||
#
|
||||
# * *Returns* :
|
||||
# 200 - Deleted
|
||||
delete "/server/:id" do
|
||||
app.delete "/server/:id" do
|
||||
check_headers
|
||||
check_privileges("server", "w")
|
||||
body = create_object_from_json_body(Hash, true)
|
||||
key = (body.nil? ? nil : body["key"])
|
||||
s = get_server(params[:id], key)
|
||||
### Authorization
|
||||
BaseRoutes.mongo.check_project_auth s.project, s.deploy_env, request.env['REMOTE_USER']
|
||||
info, r = delete_server(s, BaseRoutes.mongo, logger)
|
||||
settings.mongo.check_project_auth s.project, s.deploy_env, request.env['REMOTE_USER']
|
||||
info, r = delete_server(s, settings.mongo, logger)
|
||||
create_response(info, r)
|
||||
end
|
||||
|
||||
@ -213,7 +209,7 @@ module Version2_0
|
||||
# }
|
||||
#
|
||||
# * *Returns* : text stream
|
||||
post "/server" do
|
||||
app.post "/server" do
|
||||
check_headers :content_type
|
||||
check_privileges("server", "w")
|
||||
body = create_object_from_json_body
|
||||
@ -227,9 +223,9 @@ module Version2_0
|
||||
halt_response("Parameter 'force' should be a null or true") unless force.nil? or force == true
|
||||
groups = check_array(body["groups"], "Parameter 'groups' should be null or not empty array of string", String, true)
|
||||
key_name = check_string(body["key"], "Parameter 'key' should be null or not empty string", true)
|
||||
new_key = BaseRoutes.mongo.key(key_name) unless key_name.nil?
|
||||
new_key = settings.mongo.key(key_name) unless key_name.nil?
|
||||
|
||||
p = BaseRoutes.mongo.check_project_auth(project_name, env_name, user)
|
||||
p = settings.mongo.check_project_auth(project_name, env_name, user)
|
||||
env = p.deploy_env(env_name)
|
||||
|
||||
provider = ::Provider::ProviderFactory.get(env.provider)
|
||||
@ -239,13 +235,13 @@ module Version2_0
|
||||
halt_response("Invalid security groups '#{buf.join("', '")}' for provider '#{provider.name}'") if buf.empty?
|
||||
end
|
||||
|
||||
servers = extract_servers(provider, p, env, body, user, BaseRoutes.mongo)
|
||||
servers = extract_servers(provider, p, env, body, user, settings.mongo)
|
||||
if body.key?("trace")
|
||||
stream() do |out|
|
||||
begin
|
||||
status = []
|
||||
servers.each do |s|
|
||||
res = create_server_proc.call(out, s, provider, BaseRoutes.mongo)
|
||||
res = create_server_proc.call(out, s, provider, settings.mongo)
|
||||
status.push res
|
||||
end
|
||||
out << create_status(status)
|
||||
@ -284,10 +280,10 @@ module Version2_0
|
||||
#
|
||||
# * *Returns* :
|
||||
# 200 - Paused
|
||||
post "/server/:node_name/pause" do
|
||||
app.post "/server/:node_name/pause" do
|
||||
s = get_server(params[:node_name], @key)
|
||||
## Authorization
|
||||
BaseRoutes.mongo.check_project_auth s.project, s.deploy_env, request.env['REMOTE_USER']
|
||||
settings.mongo.check_project_auth s.project, s.deploy_env, request.env['REMOTE_USER']
|
||||
provider = ::Provider::ProviderFactory.get(s.provider)
|
||||
r = provider.pause_server s
|
||||
if r.nil?
|
||||
@ -311,10 +307,10 @@ module Version2_0
|
||||
#
|
||||
# * *Returns* :
|
||||
# 200 - Unpaused
|
||||
post "/server/:node_name/unpause" do
|
||||
app.post "/server/:node_name/unpause" do
|
||||
s = get_server(params[:node_name], @key)
|
||||
## Authorization
|
||||
BaseRoutes.mongo.check_project_auth s.project, s.deploy_env, request.env['REMOTE_USER']
|
||||
settings.mongo.check_project_auth s.project, s.deploy_env, request.env['REMOTE_USER']
|
||||
provider = ::Provider::ProviderFactory.get(s.provider)
|
||||
r = provider.unpause_server s
|
||||
if r.nil?
|
||||
@ -338,13 +334,13 @@ module Version2_0
|
||||
#
|
||||
# * *Returns* :
|
||||
# 200 - Reserved
|
||||
post "/server/:node_name/reserve" do
|
||||
app.post "/server/:node_name/reserve" do
|
||||
s = get_server(params[:node_name], params[:key])
|
||||
user = request.env['REMOTE_USER']
|
||||
BaseRoutes.mongo.check_project_auth s.project, s.deploy_env, user
|
||||
settings.mongo.check_project_auth s.project, s.deploy_env, user
|
||||
halt_response(400, "Server '#{params[:node_name]}' already reserved") unless s.reserved_by.nil?
|
||||
s.reserved_by = user
|
||||
BaseRoutes.mongo.server_update(s)
|
||||
settings.mongo.server_update(s)
|
||||
create_response("Server '#{params[:node_name]}' has been reserved")
|
||||
end
|
||||
|
||||
@ -362,12 +358,12 @@ module Version2_0
|
||||
#
|
||||
# * *Returns* :
|
||||
# 200 - Unreserved
|
||||
post "/server/:node_name/unreserve" do
|
||||
app.post "/server/:node_name/unreserve" do
|
||||
s = get_server(params[:node_name], params[:key])
|
||||
BaseRoutes.mongo.check_project_auth s.project, s.deploy_env, request.env['REMOTE_USER']
|
||||
settings.mongo.check_project_auth s.project, s.deploy_env, request.env['REMOTE_USER']
|
||||
halt_response(400, "Server '#{params[:node_name]}' is not reserved") if s.reserved_by.nil?
|
||||
s.reserved_by = nil
|
||||
BaseRoutes.mongo.server_update(s)
|
||||
settings.mongo.server_update(s)
|
||||
create_response("Server '#{params[:node_name]}' has been unreserved")
|
||||
end
|
||||
|
||||
@ -388,7 +384,7 @@ module Version2_0
|
||||
#
|
||||
# * *Returns* : text stream
|
||||
# TODO: check bootstrap template name
|
||||
post "/server/bootstrap" do
|
||||
app.post "/server/bootstrap" do
|
||||
check_headers
|
||||
check_privileges("server", "w")
|
||||
body = create_object_from_json_body(Hash, true)
|
||||
@ -400,9 +396,9 @@ module Version2_0
|
||||
halt_response(validator.message) unless validator.valid?
|
||||
end
|
||||
t = check_string(body["bootstrap_template"], "Parameter 'bootstrap_template' should be a not empty string", true)
|
||||
s = BaseRoutes.mongo.server_by_instance_id(id)
|
||||
s = settings.mongo.server_by_instance_id(id)
|
||||
|
||||
p = BaseRoutes.mongo.check_project_auth s.project, s.deploy_env, request.env['REMOTE_USER']
|
||||
p = settings.mongo.check_project_auth s.project, s.deploy_env, request.env['REMOTE_USER']
|
||||
d = p.deploy_env s.deploy_env
|
||||
|
||||
provider = ::Provider::ProviderFactory.get(s.provider)
|
||||
@ -422,12 +418,12 @@ module Version2_0
|
||||
if body.key?("trace")
|
||||
stream() do |out|
|
||||
begin
|
||||
cert = BaseRoutes.mongo.key s.key
|
||||
cert = settings.mongo.key s.key
|
||||
logger.debug "Bootstrap certificate path: #{cert.path}"
|
||||
bootstrap s, out, cert.path, logger
|
||||
str = nil
|
||||
r = if check_server(s)
|
||||
BaseRoutes.mongo.server_set_chef_node_name s
|
||||
settings.mongo.server_set_chef_node_name s
|
||||
str = "Server with id '#{s.id}' is bootstraped"
|
||||
logger.info str
|
||||
0
|
||||
@ -482,7 +478,7 @@ module Version2_0
|
||||
# * *Returns* :
|
||||
# 200 - Added
|
||||
# TODO: should be refactored
|
||||
post "/server/add" do
|
||||
app.post "/server/add" do
|
||||
check_headers
|
||||
check_privileges("server", "w")
|
||||
body = create_object_from_json_body
|
||||
@ -492,11 +488,11 @@ module Version2_0
|
||||
remote_user = check_string(body["remote_user"], "Parameter 'remote_user' must be a not empty string")
|
||||
private_ip = check_string(body["private_ip"], "Parameter 'private_ip' must be a not empty string")
|
||||
public_ip = check_string(body["public_ip"], "Parameter 'public_ip' should be a not empty string", true)
|
||||
p = BaseRoutes.mongo.check_project_auth project, deploy_env, request.env['REMOTE_USER']
|
||||
p = settings.mongo.check_project_auth project, deploy_env, request.env['REMOTE_USER']
|
||||
|
||||
d = p.deploy_env(deploy_env)
|
||||
|
||||
cert = BaseRoutes.mongo.key(key)
|
||||
cert = settings.mongo.key(key)
|
||||
provider = ::Provider::ProviderFactory.get("static")
|
||||
s = Server.new
|
||||
s.provider = provider.name
|
||||
@ -508,17 +504,20 @@ module Version2_0
|
||||
s.static = true
|
||||
s.id = "static_#{cert.id}-#{Time.now.to_i}"
|
||||
s.key = cert.id
|
||||
BaseRoutes.mongo.server_insert s
|
||||
settings.mongo.server_insert s
|
||||
create_response("Server '#{s.id}' has been added")
|
||||
end
|
||||
|
||||
private
|
||||
puts "Server routes initialized"
|
||||
end
|
||||
|
||||
|
||||
def get_server id, key
|
||||
key == "instance" ? BaseRoutes.mongo.server_by_instance_id(id) : BaseRoutes.mongo.server_by_chef_node_name(id)
|
||||
key == "instance" ? settings.mongo.server_by_instance_id(id) : settings.mongo.server_by_chef_node_name(id)
|
||||
end
|
||||
|
||||
def check_chef_node_name name, provider
|
||||
BaseRoutes.mongo.server_by_chef_node_name name
|
||||
settings.mongo.server_by_chef_node_name name
|
||||
halt(400, "Server with name '#{name}' already exist")
|
||||
rescue RecordNotFound => e
|
||||
# server not found - OK
|
||||
@ -532,3 +531,5 @@ module Version2_0
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -1,21 +1,24 @@
|
||||
require "json"
|
||||
require "routes/v2.0/base_routes"
|
||||
require "sidekiq"
|
||||
|
||||
module Devops
|
||||
module Version2_0
|
||||
class StatusRoutes < BaseRoutes
|
||||
module Core
|
||||
module StatusRoutes
|
||||
|
||||
def initialize wrapper
|
||||
super wrapper
|
||||
puts "Status routes initialized"
|
||||
end
|
||||
|
||||
get "/status/:id" do
|
||||
def self.registered(app)
|
||||
app.get "/status/:id" do
|
||||
r = Sidekiq.redis do |connection|
|
||||
connection.hget("devops", params[:id])
|
||||
end
|
||||
return [404, "Job with id '#{params[:id]}' not found"] if r.nil?
|
||||
r
|
||||
end
|
||||
|
||||
puts "Status routes initialized"
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -1,14 +1,12 @@
|
||||
require "commands/knife_commands"
|
||||
|
||||
module Devops
|
||||
module Version2_0
|
||||
class TagRoutes < BaseRoutes
|
||||
module Core
|
||||
module TagRoutes
|
||||
|
||||
def initialize wrapper
|
||||
super wrapper
|
||||
puts "Tag routes initialized"
|
||||
end
|
||||
|
||||
before "/tags/:node_name" do
|
||||
def self.registered(app)
|
||||
app.before "/tags/:node_name" do
|
||||
if request.get?
|
||||
check_headers :accept
|
||||
check_privileges("server", "r")
|
||||
@ -23,7 +21,7 @@ module Version2_0
|
||||
@chef_node_name = server.chef_node_name
|
||||
end
|
||||
|
||||
after "/tags/:node_name" do
|
||||
app.after "/tags/:node_name" do
|
||||
statistic
|
||||
end
|
||||
|
||||
@ -38,7 +36,7 @@ module Version2_0
|
||||
# [
|
||||
# "tag_1"
|
||||
# ]
|
||||
get "/tags/:node_name" do
|
||||
app.get "/tags/:node_name" do
|
||||
json(KnifeCommands.tags_list(@chef_node_name))
|
||||
end
|
||||
|
||||
@ -56,7 +54,7 @@ module Version2_0
|
||||
#
|
||||
# * *Returns* :
|
||||
# 200
|
||||
post "/tags/:node_name" do
|
||||
app.post "/tags/:node_name" do
|
||||
tagsStr = @tags.join(" ")
|
||||
cmd = KnifeCommands.tags_create(@chef_node_name, tagsStr)
|
||||
halt_response("Error: Cannot add tags #{tagsStr} to server #{@chef_node_name}", 500) unless cmd[1]
|
||||
@ -77,11 +75,17 @@ module Version2_0
|
||||
#
|
||||
# * *Returns* :
|
||||
# 200
|
||||
delete "/tags/:node_name" do
|
||||
app.delete "/tags/:node_name" do
|
||||
tagsStr = @tags.join(" ")
|
||||
cmd = KnifeCommands.tags_delete(@chef_node_name, tagsStr)
|
||||
halt_response("Cannot delete tags #{tagsStr} from server #{@chef_node_name}: #{cmd[0]}", 500) unless cmd[1]
|
||||
create_response("Deleted tags for #{@chef_node_name}: #{tagsStr}")
|
||||
end
|
||||
|
||||
puts "Tag routes initialized"
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
require "db/exceptions/invalid_record"
|
||||
require "db/mongo/models/user"
|
||||
|
||||
module Sinatra
|
||||
module Devops
|
||||
module Version2_0
|
||||
module Core
|
||||
module UserRoutes
|
||||
|
||||
Loading…
Reference in New Issue
Block a user