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 API2_0
module Handler
class Filter
class Filter < RequestHandler
def initialize provider
@provider = provider
def available_images provider
Devops::Db.connector.available_images(provider)
end
def available_images
Devops::Db.connector.available_images(@provider)
def add_images images, provider
Devops::Db.connector.add_available_images(images, provider)
end
def add_images images
Devops::Db.connector.add_available_images(images, @provider)
end
def delete_images images
Devops::Db.connector.delete_available_images(images, @provider)
def delete_images images, provider
Devops::Db.connector.delete_available_images(images, provider)
end
end

View File

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

View File

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

View File

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

View File

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

View File

@ -23,11 +23,10 @@ module Devops
# [
# "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")
provider = params[: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
hash = {}
@ -45,14 +44,13 @@ module Devops
# ] -> array of image ids to add to filter
#
# * *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")
provider = params[:provider]
check_provider(provider)
images = create_object_from_json_body(Array)
halt_response("Request body should not be an empty array") if images.empty?
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
@ -68,14 +66,13 @@ module Devops
# ] -> array of image ids to delete from filter
#
# * *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")
provider = params[:provider]
check_provider(provider)
images = create_object_from_json_body(Array)
halt_response("Request body should not be an empty array") if images.empty?
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

View File

@ -1,26 +1,42 @@
module Devops
module Version2_0
module API2_0
module Routes
module StackRoutes
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
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], &Devops::Version2_0::Handler::Stack.create_stack
app.post_with_headers "/stack", :headers => [:accept] do
check_privileges("stack", "w")
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['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"
end
@ -28,4 +44,4 @@ module Devops
end
end
end
end
end

View File

@ -1,24 +1,39 @@
module Devops
module Version2_0
module API2_0
module Routes
module StackTemplateRoutes
def self.registered(app)
app.after %r{\A/stack_template(/[\w]+)?\z} do
statistic
app.get_with_headers '/stack_templates', :headers => [:accept] do
check_privileges('stack_template', 'r')
json Devops::API2_0::Handler::StackTemplate.new(request, params).stack_templates.map(&:to_hash)
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], &Devops::Version2_0::Handler::StackTemplate.create_stack_template
app.post_with_headers "/stack_template", :headers => [:accept] do
check_privileges('stack_template', 'w')
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['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
@ -28,4 +43,4 @@ module Devops
end
end
end
end
end

View File

@ -1,5 +1,5 @@
module Devops
module Version2_0
module API2_0
module Routes
module StackTemplatePresetRoutes
@ -14,8 +14,10 @@ module Devops
# * *Returns* : array of hashes
# [ {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
#
@ -27,8 +29,10 @@ module Devops
# * *Returns* : hash
# {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
#
@ -50,7 +54,13 @@ module Devops
# 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"
end

View File

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

View File

@ -9,7 +9,7 @@ class DevopsConfig
class << self
def read 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
config = {:url_prefix => ""}
if File.exists? config_file

View File

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

View File

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