#\789: add provider account without validation

This commit is contained in:
amartynov 2015-10-26 12:04:01 +03:00
parent 68a7666761
commit 71f0eb779b
12 changed files with 83 additions and 20 deletions

View File

@ -10,7 +10,7 @@ module Devops
module Handler module Handler
class Provider < RequestHandler class Provider < RequestHandler
set_parser Devops::API2_0::Parser::CloudAccountsParser set_parser Devops::API2_0::Parser::ProviderParser
def providers def providers
::Provider::ProviderFactory.providers ::Provider::ProviderFactory.providers
@ -21,6 +21,8 @@ module Devops
end end
def add_account provider def add_account provider
account = ::Provider::ProviderFactory.get(provider).create_account(parser.account)
Devops::Db.connector.provider_accounts_insert(account)
end end
def delete_account name, provider def delete_account name, provider

View File

@ -3,7 +3,11 @@ require_relative "request_parser"
module Devops module Devops
module API2_0 module API2_0
module Parser module Parser
class CloudAccountsParser < RequestParser class ProviderParser < RequestParser
def account
create_object_from_json_body
end
end end
end end

View File

@ -67,33 +67,40 @@ module Devops
json Devops::API2_0::Handler::Provider.new(request).accounts(provider) json Devops::API2_0::Handler::Provider.new(request).accounts(provider)
end end
hash = {} # Create provider account for :provider
hash["PUT"] = lambda { |provider| #
# * *Request*
# - method : POST
# - headers :
# - Accept: application/json
# - Content-Type: application/json
# - body :
# {
#
#
# }
#
# * *Returns* : 201
app.post_with_headers "/provider/:provider/account", :headers => [:accept, :content_type] do |provider|
check_privileges("provider", "w") check_privileges("provider", "w")
check_provider(provider) check_provider(provider)
create_response("Updated", {:images => Devops::API2_0::Handler::Provider.new(request).add_account(provider)}) create_response("Updated", {:account => Devops::API2_0::Handler::Provider.new(request).add_account(provider)}, 201)
} end
# Delete image ids from filter for :provider # Delete account with name :account_name for :provider
# #
# * *Request* # * *Request*
# - method : DELETE # - method : DELETE
# - headers : # - headers :
# - Accept: application/json # - Accept: application/json
# - Content-Type: application/json # - Content-Type: application/json
# - body :
# [
# "image_id"
# ] -> array of image ids to delete from filter
# #
# * *Returns* : list of images filters for :provider # * *Returns* : 200
hash["DELETE"] = lambda { |provider, account_name| app.delete_with_headers "/provider/:provider/account/:account_name", :headers => [:accept, :content_type] do |provider, account_name|
check_privileges("provider", "w") check_privileges("provider", "w")
check_provider(provider) check_provider(provider)
create_response("Deleted", {:images => Devops::API2_0::Handler::Provider.new(request).delete_account(provider)}) create_response("Deleted", {:account => Devops::API2_0::Handler::Provider.new(request).delete_account(provider)})
} end
app.multi_routes "/provider/:provider/account/:account_name", {:headers => [:accept, :content_type]}, hash
puts "Provider routes initialized" puts "Provider routes initialized"
end end

View File

@ -17,7 +17,9 @@ module Connectors
def insert(record) def insert(record)
begin begin
record.validate! record.validate!
collection.insert(record.to_mongo_hash) hash = record.to_mongo_hash
hash["created_at"] = Time.now.to_i
collection.insert(hash)
record record
rescue Mongo::OperationFailure => e rescue Mongo::OperationFailure => e
if e.message =~ /^11000/ if e.message =~ /^11000/

View File

@ -7,6 +7,8 @@ module Devops
module Model module Model
class MongoModel class MongoModel
attr_accessor :created_at
# multi_json sends argument to 'to_json' method # multi_json sends argument to 'to_json' method
def to_json arg=nil def to_json arg=nil
JSON.pretty_generate self.to_hash JSON.pretty_generate self.to_hash
@ -76,6 +78,7 @@ module Devops
# :empty - can param be empty? (false) # :empty - can param be empty? (false)
# :nil - can param be nil? (false) # :nil - can param be nil? (false)
# :value_type - type of array element (String) # :value_type - type of array element (String)
# TODO: @deprecated
def self.types types def self.types types
define_method :validate_fields_types do define_method :validate_fields_types do
t = types.keys t = types.keys

View File

@ -8,6 +8,7 @@ module Devops
def initialize a={} def initialize a={}
super(a) super(a)
self.provider = Provider::Ec2::PROVIDER
self.availability_zone = a["availability_zone"] self.availability_zone = a["availability_zone"]
self.access_key_id = a["access_key_id"] self.access_key_id = a["access_key_id"]
end end
@ -15,18 +16,25 @@ module Devops
def to_list_hash def to_list_hash
s = super s = super
s["availability_zone"] = self.availability_zone s["availability_zone"] = self.availability_zone
s
end end
def to_mongo_hash def to_mongo_hash
s = super s = super
s["availability_zone"] = self.availability_zone s["availability_zone"] = self.availability_zone
s["access_key_id"] = self.access_key_id s["access_key_id"] = self.access_key_id
s
end end
def self.build_from_bson a def self.build_from_bson a
a["account_name"] = a["_id"] a["account_name"] = a["_id"]
Ec2ProviderAccount.new a Ec2ProviderAccount.new a
end end
# TODO: remove
def validate_fields_types
end
end end
end end
end end

View File

@ -15,6 +15,7 @@ module Devops
self.ssh_key = a["ssh_key"] self.ssh_key = a["ssh_key"]
self.provider = a["provider"] self.provider = a["provider"]
self.certificate = a["certificate"] self.certificate = a["certificate"]
self.created_at = a["created_at"]
end end
def to_list_hash def to_list_hash
@ -27,7 +28,8 @@ module Devops
"description" => self.description, "description" => self.description,
"ssh_key" => self.ssh_key, "ssh_key" => self.ssh_key,
"provider" => self.provider, "provider" => self.provider,
"certificate" => self.certificate "certificate" => self.certificate,
"created_at" => self.created_at
} }
end end

View File

@ -33,7 +33,7 @@ class MongoConnector
[:keys, :key, :key_insert, :key_delete] => :keys_connector, [:keys, :key, :key_insert, :key_delete] => :keys_connector,
[:save_report, :report, :reports, :set_report_status, :set_report_server_data] => :reports_connector, [:save_report, :report, :reports, :set_report_status, :set_report_server_data] => :reports_connector,
[:insert_statistic, :search_statistic] => :statistics_connector, [:insert_statistic, :search_statistic] => :statistics_connector,
[:provider_accounts] => :provider_accounts_connector [:provider_accounts, :provider_accounts_insert] => :provider_accounts_connector
) )
def initialize(db, host, port=27017, user=nil, password=nil) def initialize(db, host, port=27017, user=nil, password=nil)

View File

@ -10,6 +10,10 @@ module Provider
Devops::Db.connector.provider_accounts(self.name) Devops::Db.connector.provider_accounts(self.name)
end end
def create_account hash
raise "override me"
end
def create_default_chef_node_name s def create_default_chef_node_name s
"#{self.ssh_key}-#{s.project}-#{s.deploy_env}-#{Time.now.to_i}" "#{self.ssh_key}-#{s.project}-#{s.deploy_env}-#{Time.now.to_i}"
end end

View File

@ -0,0 +1,13 @@
module Provider
class ConnectionFactory
def init
end
def connection account_name
@connections[account_name]
end
end
end

View File

@ -1,5 +1,6 @@
require "exceptions/conflict_exception" require "exceptions/conflict_exception"
require "providers/base_provider" require "providers/base_provider"
require "db/mongo/models/provider_accounts/ec2_provider_account"
module Provider module Provider
# Provider for Amazon EC2 # Provider for Amazon EC2
@ -33,6 +34,10 @@ module Provider
super and !(empty_param?(o[:aws_access_key_id]) or empty_param?(o[:aws_secret_access_key])) super and !(empty_param?(o[:aws_access_key_id]) or empty_param?(o[:aws_secret_access_key]))
end end
def create_account hash
Devops::Model::Ec2ProviderAccount.new(hash)
end
def name def name
PROVIDER PROVIDER
end end

View File

@ -0,0 +1,13 @@
require_relative "connection_factory"
module Provider
class Ec2ConnectionFactory < ConnectionFactory
def init
end
def connection account_name
@connections
end
end
end