This commit is contained in:
amartynov 2015-07-27 11:14:01 +03:00
parent e05e5e8ada
commit 5d41044272
13 changed files with 134 additions and 160 deletions

View File

@ -1,22 +1,20 @@
require_relative "request_handler"
module Devops module Devops
module API2_0 module API2_0
module Handler module Handler
class Filter class Filter < RequestHandler
def initialize provider def available_images provider
@provider = provider Devops::Db.connector.available_images(provider)
end end
def available_images def add_images images, provider
Devops::Db.connector.available_images(@provider) Devops::Db.connector.add_available_images(images, provider)
end end
def add_images images def delete_images images, provider
Devops::Db.connector.add_available_images(images, @provider) Devops::Db.connector.delete_available_images(images, provider)
end
def delete_images images
Devops::Db.connector.delete_available_images(images, @provider)
end end
end end

View File

@ -1,7 +1,7 @@
require_relative "request_handler" require_relative "request_handler"
module Devops module Devops
module Version2_0 module API2_0
module Handler module Handler
class Report < RequestHandler class Report < RequestHandler

View File

@ -1,57 +1,33 @@
require 'db/mongo/models/stack/stack_factory' require 'db/mongo/models/stack/stack_factory'
require_relative "request_handler"
module Devops module Devops
module Version2_0 module API2_0
module Handler module Handler
class Stack class Stack < RequestHandler
def self.get_stacks def stacks
lambda { Devops::Db.connector.stacks
check_privileges("stack", "r")
stacks = settings.mongo.stacks
json stacks.map(&:to_hash)
}
end end
def self.get_stacks_for_provider def stacks_for_provider
lambda { Devops::Db.connector.stacks(@params[:provider])
check_privileges("stack", "r")
check_provider(params[:provider])
stacks = settings.mongo.stacks(params[:provider])
json stacks.map(&:to_hash)
}
end end
def self.create_stack def create_stack object
lambda {
check_privileges("stack", "w")
object = create_object_from_json_body
stack_model = Model::StackFactory.create(object['provider'], object) stack_model = Model::StackFactory.create(object['provider'], object)
settings.mongo.stack_insert(stack_model) Devops::Db.connector.stack_insert(stack_model)
stack_model
create_response "Created", stack_model.to_hash, 201
}
end end
def self.get_stack def stack id
lambda { Devops::Db.connector.stack(id)
check_privileges("stack", "r")
stack = settings.mongo.stack(params[:stack_id])
json stack.to_hash
}
end end
def self.delete_stack def delete_stack id
lambda { stack = self.stack(id)
check_privileges("stack", "w")
stack = settings.mongo.stack(params[:stack_id])
stack.delete_stack_in_cloud! stack.delete_stack_in_cloud!
settings.mongo.stack_delete(params[:stack_id]) Devops::Db.connector.stack_delete(id)
create_response("Stack '#{params[:stack_id]}' has been removed")
}
end end
end end

View File

@ -1,54 +1,31 @@
require 'db/mongo/models/stack_template/stack_template_factory' require 'db/mongo/models/stack_template/stack_template_factory'
require_relative "request_handler"
module Devops module Devops
module Version2_0 module API2_0
module Handler module Handler
class StackTemplate class StackTemplate < RequestHandler
def self.get_stack_templates def stack_templates
lambda { Devops::Db.connector.stack_templates
check_privileges('stack_template', 'r')
stack_templates = settings.mongo.stack_templates
json stack_templates.map(&:to_hash)
}
end end
def self.get_stack_templates_for_provider def stack_templates_for_provider provider
lambda { Devops::Db.connector.stack_templates(provider)
check_privileges('stack_template', 'r')
check_provider(params[:provider])
stack_templates = settings.mongo.stack_templates(params[:provider])
json stack_templates.map(&:to_hash)
}
end end
def self.create_stack_template def create_stack_template body
lambda { template_model = Model::StackTemplateFactory.create(body['provider'], body)
check_privileges('stack_template', 'w') Devops::Db.connector.stack_template_insert(template_model)
template_model
attrs = create_object_from_json_body
template_model = Model::StackTemplateFactory.create(attrs['provider'], attrs)
settings.mongo.stack_template_insert(template_model)
create_response 'Created', template_model.to_hash, 201
}
end end
def self.get_stack_template def get_stack_template id
lambda { Devops::Db.connector.stack_template(id)
check_privileges('stack_template', 'r')
stack_template = settings.mongo.stack_template(params[:stack_template_id])
json stack_template.to_hash
}
end end
def self.delete_stack_template def delete_stack_template id
lambda { Devops::Db.connector.stack_template_delete id
check_privileges('stack_template', 'w')
settings.mongo.stack_template_delete params[:stack_template_id]
create_response("Template '#{params[:stack_template_id]}' has been removed")
}
end end
end end

View File

@ -1,39 +1,25 @@
require 'json' require 'json'
require 'lib/stack_template_presets/factory' require 'lib/stack_template_presets/factory'
require_relative "request_handler"
module Devops module Devops
module Version2_0 module API2_0
module Handler module Handler
class StackTemplatePreset class StackTemplatePreset < RequestHandler
def self.get_presets def templates
lambda { Devops::StackTemplatePresetsFactory.list
# check_privileges("stack_template_presets", "r")
json Devops::StackTemplatePresetsFactory.list.map(&:to_hash)
}
end end
def self.get_preset def template id
lambda { Devops::StackTemplatePresetsFactory.get(id)
# check_privileges("stack_template_presets", "r")
json Devops::StackTemplatePresetsFactory.get(params['id']).to_hash
}
end end
def self.build_stack_template def build_stack_template id, body
lambda { provider, stack_id, parameters = body.fetch('provider'), body.fetch('stack'), body.fetch('parameters')
# check_privileges("stack_template_presets", "r")
check_privileges('stack_template', 'w')
attrs = create_object_from_json_body preset = Devops::StackTemplatePresetsFactory.get(id)
preset.create_stack_from_preset(provider, stack_id, parameters)
provider, stack_id, parameters = attrs.fetch('provider'), attrs.fetch('stack'), attrs.fetch('parameters')
preset = Devops::StackTemplatePresetsFactory.get(attrs.fetch('id'))
stack = preset.create_stack_from_preset(provider, stack_id, parameters)
create_response 'Created', stack.to_hash, 201
}
end end
end end

View File

@ -23,11 +23,10 @@ module Devops
# [ # [
# "36dc7618-4178-4e29-be43-286fbfe90f50" # "36dc7618-4178-4e29-be43-286fbfe90f50"
# ] # ]
app.get_with_headers "/filter/:provider/images", :headers => [:accept] do#, &Devops::API2_0::Handler::Filter.get_filters app.get_with_headers "/filter/:provider/images", :headers => [:accept] do |provider|
check_privileges("filter", "r") check_privileges("filter", "r")
provider = params[:provider]
check_provider(provider) check_provider(provider)
json Devops::API2_0::Handler::Filter.new(provider).available_images json Devops::API2_0::Handler::Filter.new(request, params).available_images(provider)
end end
hash = {} hash = {}
@ -45,14 +44,13 @@ module Devops
# ] -> array of image ids to add to filter # ] -> array of image ids to add to filter
# #
# * *Returns* : list of images filters for :provider # * *Returns* : list of images filters for :provider
hash["PUT"] = lambda { #Devops::API2_0::Handler::Filter.add_filter hash["PUT"] = lambda { |provider|
check_privileges("filter", "w") check_privileges("filter", "w")
provider = params[:provider]
check_provider(provider) check_provider(provider)
images = create_object_from_json_body(Array) images = create_object_from_json_body(Array)
halt_response("Request body should not be an empty array") if images.empty? halt_response("Request body should not be an empty array") if images.empty?
check_array(images, "Request body should contains an array with strings") check_array(images, "Request body should contains an array with strings")
create_response("Updated", {:images => Devops::API2_0::Handler::Filter.new(provider).add_images(images)}) create_response("Updated", {:images => Devops::API2_0::Handler::Filter.new(request, params).add_images(images, provider)})
} }
# Delete image ids from filter for :provider # Delete image ids from filter for :provider
@ -68,14 +66,13 @@ module Devops
# ] -> array of image ids to delete from filter # ] -> array of image ids to delete from filter
# #
# * *Returns* : list of images filters for :provider # * *Returns* : list of images filters for :provider
hash["DELETE"] = lambda {#Devops::API2_0::Handler::Filter.delete_filter hash["DELETE"] = lambda { |provider|
check_privileges("filter", "w") check_privileges("filter", "w")
provider = params[:provider]
check_provider(provider) check_provider(provider)
images = create_object_from_json_body(Array) images = create_object_from_json_body(Array)
halt_response("Request body should not be an empty array") if images.empty? halt_response("Request body should not be an empty array") if images.empty?
check_array(images, "Request body should contains an array with strings") check_array(images, "Request body should contains an array with strings")
create_response("Deleted", {:images => Devops::API2_0::Handler::Filter.new(provider).delete_images(images)}) create_response("Deleted", {:images => Devops::API2_0::Handler::Filter.new(request, params).delete_images(images, provider)})
} }
app.multi_routes "/filter/:provider/image", {:headers => [:accept, :content_type]}, hash app.multi_routes "/filter/:provider/image", {:headers => [:accept, :content_type]}, hash

View File

@ -1,26 +1,42 @@
module Devops module Devops
module Version2_0 module API2_0
module Routes module Routes
module StackRoutes module StackRoutes
def self.registered(app) def self.registered(app)
app.after %r{\A/stack_template(/[\w]+)?\z} do
statistic app.get_with_headers '/stacks', :headers => [:accept] do
check_privileges("stack", "r")
json Devops::API2_0::Handler::Stack.new(request, params).stacks.map(&:to_hash)
end end
app.get_with_headers '/stacks', :headers => [:accept], &Devops::Version2_0::Handler::Stack.get_stacks app.get_with_headers '/stacks/provider/:provider', :headers => [:accept] do |provider|
check_privileges("stack", "r")
check_provider(provider)
json Devops::API2_0::Handler::Stack.new(request, params).stacks_for_provider.map(&:to_hash)
end
app.get_with_headers '/stacks/provider/:provider', :headers => [:accept], &Devops::Version2_0::Handler::Stack.get_stacks_for_provider app.post_with_headers "/stack", :headers => [:accept] do
check_privileges("stack", "w")
app.post_with_headers "/stack", :headers => [:accept], &Devops::Version2_0::Handler::Stack.create_stack object = create_object_from_json_body
m = Devops::API2_0::Handler::Stack.new(request, params).create_stack object
create_response "Created", m.to_hash, 201
end
hash = {} hash = {}
hash['GET'] = Devops::Version2_0::Handler::Stack.get_stack hash['GET'] = lambda { |stack_id|
check_privileges("stack", "r")
json Devops::API2_0::Handler::Stack.new(request, params).stack(stack_id).to_hash
}
hash['DELETE'] = Devops::Version2_0::Handler::Stack.delete_stack hash['DELETE'] = lambda { |stack_id|
check_privileges("stack", "w")
Devops::API2_0::Handler::Stack.new(request, params).delete_stack(stack_id)
create_response("Stack '#{stack_id}' has been removed")
}
app.multi_routes '/stack/:stack_id', {}, hash app.multi_routes '/stack/:stack_id', {:headers => [:accept]}, hash
puts "Stack routes initialized" puts "Stack routes initialized"
end end

View File

@ -1,24 +1,39 @@
module Devops module Devops
module Version2_0 module API2_0
module Routes module Routes
module StackTemplateRoutes module StackTemplateRoutes
def self.registered(app) def self.registered(app)
app.after %r{\A/stack_template(/[\w]+)?\z} do app.get_with_headers '/stack_templates', :headers => [:accept] do
statistic check_privileges('stack_template', 'r')
json Devops::API2_0::Handler::StackTemplate.new(request, params).stack_templates.map(&:to_hash)
end end
app.get_with_headers '/stack_templates', :headers => [:accept], &Devops::Version2_0::Handler::StackTemplate.get_stack_templates app.get_with_headers '/stack_templates/provider/:provider', :headers => [:accept] do |provider|
check_privileges('stack_template', 'r')
check_provider(provider)
json Devops::API2_0::Handler::StackTemplate.new(request, params).stack_templates_for_provider(provider).map(&:to_hash)
end
app.get_with_headers '/stack_templates/provider/:provider', :headers => [:accept], &Devops::Version2_0::Handler::StackTemplate.get_stack_templates_for_provider app.post_with_headers "/stack_template", :headers => [:accept] do
check_privileges('stack_template', 'w')
app.post_with_headers "/stack_template", :headers => [:accept], &Devops::Version2_0::Handler::StackTemplate.create_stack_template body = create_object_from_json_body
model = Devops::API2_0::Handler::StackTemplate.new(request, params).create_stack_template(body)
create_response 'Created', model.to_hash, 201
end
hash = {} hash = {}
hash['GET'] = Devops::Version2_0::Handler::StackTemplate.get_stack_template hash['GET'] = lambda {|stack_template_id|
check_privileges('stack_template', 'r')
json Devops::API2_0::Handler::StackTemplate.new(request, params).stack_template(stack_template_id).to_hash
}
hash['DELETE'] = Devops::Version2_0::Handler::StackTemplate.delete_stack_template hash['DELETE'] = lambda {|stack_template_id|
check_privileges('stack_template', 'w')
Devops::API2_0::Handler::StackTemplate.new(request, params).delete_stack_template(stack_template_id)
create_response("Template '#{stack_template_id}' has been removed")
}
app.multi_routes '/stack_template/:stack_template_id', {}, hash app.multi_routes '/stack_template/:stack_template_id', {}, hash

View File

@ -1,5 +1,5 @@
module Devops module Devops
module Version2_0 module API2_0
module Routes module Routes
module StackTemplatePresetRoutes module StackTemplatePresetRoutes
@ -14,8 +14,10 @@ module Devops
# * *Returns* : array of hashes # * *Returns* : array of hashes
# [ {id: 'preset id', template_preset_body: 'long body'} ] # [ {id: 'preset id', template_preset_body: 'long body'} ]
# #
app.get_with_headers "/stack_template_presets", :headers => [:accept], &Devops::Version2_0::Handler::StackTemplatePreset.get_presets app.get_with_headers "/stack_template_presets", :headers => [:accept] do
# check_privileges("stack_template_presets", "r")
json Devops::API2_0::Handler::StackTemplatePreset.new(request, params).templates.map(&:to_hash)
end
# Get information about stack_template_preset # Get information about stack_template_preset
# #
@ -27,8 +29,10 @@ module Devops
# * *Returns* : hash # * *Returns* : hash
# {id: 'preset id', template_preset_body: 'long body'} # {id: 'preset id', template_preset_body: 'long body'}
# #
app.get_with_headers "/stack_template_presets/:id", :headers => [:accept], &Devops::Version2_0::Handler::StackTemplatePreset.get_preset app.get_with_headers "/stack_template_presets/:id", :headers => [:accept] do |id|
# check_privileges("stack_template_presets", "r")
json Devops::API2_0::Handler::StackTemplatePreset.new(request, params).template(id).to_hash
end
# Build stack template from preset # Build stack template from preset
# #
@ -50,7 +54,13 @@ module Devops
# template_body: 'long body' # template_body: 'long body'
# } # }
# #
app.post_with_headers "/stack_template_presets/:id/build_stack_template", :headers => [:accept], &Devops::Version2_0::Handler::StackTemplatePreset.build_stack_template app.post_with_headers "/stack_template_presets/:id/build_stack_template", :headers => [:accept] do |id|
# check_privileges("stack_template_presets", "r")
check_privileges('stack_template', 'w')
body = create_object_from_json_body
stack = Devops::API2_0::Handler::StackTemplatePreset.new(request, params).build_stack_template(id, body)
create_response 'Created', stack.to_hash, 201
end
puts "Stack template presets routes initialized" puts "Stack template presets routes initialized"
end end

View File

@ -11,6 +11,10 @@ module Devops
require_relative "api2/handlers/report" require_relative "api2/handlers/report"
require_relative "api2/handlers/deploy" require_relative "api2/handlers/deploy"
require_relative "api2/handlers/script" require_relative "api2/handlers/script"
require_relative "api2/handlers/stack"
require_relative "api2/handlers/stack_template"
require_relative "api2/handlers/stack_template_preset"
=begin =begin
require "routes/v2.0/handlers/bootstrap_templates" require "routes/v2.0/handlers/bootstrap_templates"
require "routes/v2.0/handlers/image" require "routes/v2.0/handlers/image"
@ -19,9 +23,6 @@ module Devops
require "routes/v2.0/handlers/project" require "routes/v2.0/handlers/project"
require "routes/v2.0/handlers/tag" require "routes/v2.0/handlers/tag"
require "routes/v2.0/handlers/server" require "routes/v2.0/handlers/server"
require "routes/v2.0/handlers/stack"
require "routes/v2.0/handlers/stack_template"
require_relative "api2/routes/handlers/stack_template_preset"
=end =end
require 'lib/stubber' require 'lib/stubber'

View File

@ -9,7 +9,7 @@ class DevopsConfig
class << self class << self
def read config_file=nil def read config_file=nil
if config_file.nil? if config_file.nil?
config_file = ENV['DEVOPS_CONFIG'] || ENV['CONFIG'] || File.join(File.dirname(__FILE__), 'config.rb') config_file = ENV['DEVOPS_CONFIG'] || ENV['CONFIG'] || File.join(File.dirname(__FILE__), '../config.rb')
end end
config = {:url_prefix => ""} config = {:url_prefix => ""}
if File.exists? config_file if File.exists? config_file

View File

@ -1,4 +1,3 @@
require "db/exceptions/invalid_record"
require "db/mongo/models/mongo_model" require "db/mongo/models/mongo_model"
module Devops module Devops

View File

@ -1,4 +1,3 @@
require "db/exceptions/invalid_record"
require "db/mongo/models/mongo_model" require "db/mongo/models/mongo_model"
module Devops module Devops