#\789: add provider account without validation
This commit is contained in:
parent
68a7666761
commit
71f0eb779b
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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/
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
13
devops-service/providers/connection_factory.rb
Normal file
13
devops-service/providers/connection_factory.rb
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
module Provider
|
||||||
|
class ConnectionFactory
|
||||||
|
|
||||||
|
def init
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
def connection account_name
|
||||||
|
@connections[account_name]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
@ -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
|
||||||
|
|||||||
13
devops-service/providers/ec2_connection_factory.rb
Normal file
13
devops-service/providers/ec2_connection_factory.rb
Normal 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
|
||||||
Loading…
Reference in New Issue
Block a user