#789: provider accounts list
This commit is contained in:
parent
daf6ac639c
commit
68a7666761
@ -1,15 +1,31 @@
|
|||||||
|
require "app/api2/parsers/provider"
|
||||||
require "providers/provider_factory"
|
require "providers/provider_factory"
|
||||||
require_relative "request_handler"
|
require_relative "request_handler"
|
||||||
|
require "db/mongo/models/provider_accounts/static_provider_account"
|
||||||
|
require "db/mongo/models/provider_accounts/openstack_provider_account"
|
||||||
|
require "db/mongo/models/provider_accounts/ec2_provider_account"
|
||||||
|
|
||||||
module Devops
|
module Devops
|
||||||
module API2_0
|
module API2_0
|
||||||
module Handler
|
module Handler
|
||||||
class Provider < RequestHandler
|
class Provider < RequestHandler
|
||||||
|
|
||||||
|
set_parser Devops::API2_0::Parser::CloudAccountsParser
|
||||||
|
|
||||||
def providers
|
def providers
|
||||||
::Provider::ProviderFactory.providers
|
::Provider::ProviderFactory.providers
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def accounts provider
|
||||||
|
::Provider::ProviderFactory.get(provider).accounts
|
||||||
|
end
|
||||||
|
|
||||||
|
def add_account provider
|
||||||
|
end
|
||||||
|
|
||||||
|
def delete_account name, provider
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
12
devops-service/app/api2/parsers/provider.rb
Normal file
12
devops-service/app/api2/parsers/provider.rb
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
require_relative "request_parser"
|
||||||
|
|
||||||
|
module Devops
|
||||||
|
module API2_0
|
||||||
|
module Parser
|
||||||
|
class CloudAccountsParser < RequestParser
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
@ -26,6 +26,75 @@ module Devops
|
|||||||
json Devops::API2_0::Handler::Provider.new(request).providers
|
json Devops::API2_0::Handler::Provider.new(request).providers
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Get list of provider accounts
|
||||||
|
#
|
||||||
|
# * *Request*
|
||||||
|
# - method : GET
|
||||||
|
# - headers :
|
||||||
|
# - Accept: application/json
|
||||||
|
#
|
||||||
|
# * *Returns* : array of strings
|
||||||
|
# - ec2:
|
||||||
|
# {
|
||||||
|
# "account_name": "",
|
||||||
|
# "description": "",
|
||||||
|
# "access_key_id" : "",
|
||||||
|
# "ssh_key": "",
|
||||||
|
# "certificate" : "path to file",
|
||||||
|
# "availability_zone": ""
|
||||||
|
#
|
||||||
|
# }
|
||||||
|
# - openstack:
|
||||||
|
# {
|
||||||
|
# "account_name": "",
|
||||||
|
# "description": "",
|
||||||
|
# "username": "",
|
||||||
|
# "auth_url": "",
|
||||||
|
# "tenant": "",
|
||||||
|
# "ssh_key": "",
|
||||||
|
# "certificate" : "path to file"
|
||||||
|
# }
|
||||||
|
# - static:
|
||||||
|
# {
|
||||||
|
# "account_name": "",
|
||||||
|
# "description": "",
|
||||||
|
# "ssh_key": "",
|
||||||
|
# "certificate" : "path to file"
|
||||||
|
# }
|
||||||
|
app.get_with_headers "/provider/:provider/accounts", :headers => [:accept] do |provider|
|
||||||
|
check_privileges("provider", "r")
|
||||||
|
check_provider(provider)
|
||||||
|
json Devops::API2_0::Handler::Provider.new(request).accounts(provider)
|
||||||
|
end
|
||||||
|
|
||||||
|
hash = {}
|
||||||
|
hash["PUT"] = lambda { |provider|
|
||||||
|
check_privileges("provider", "w")
|
||||||
|
check_provider(provider)
|
||||||
|
create_response("Updated", {:images => Devops::API2_0::Handler::Provider.new(request).add_account(provider)})
|
||||||
|
}
|
||||||
|
|
||||||
|
# Delete image ids from filter for :provider
|
||||||
|
#
|
||||||
|
# * *Request*
|
||||||
|
# - method : DELETE
|
||||||
|
# - headers :
|
||||||
|
# - Accept: application/json
|
||||||
|
# - Content-Type: application/json
|
||||||
|
# - body :
|
||||||
|
# [
|
||||||
|
# "image_id"
|
||||||
|
# ] -> array of image ids to delete from filter
|
||||||
|
#
|
||||||
|
# * *Returns* : list of images filters for :provider
|
||||||
|
hash["DELETE"] = lambda { |provider, account_name|
|
||||||
|
check_privileges("provider", "w")
|
||||||
|
check_provider(provider)
|
||||||
|
create_response("Deleted", {:images => Devops::API2_0::Handler::Provider.new(request).delete_account(provider)})
|
||||||
|
}
|
||||||
|
|
||||||
|
app.multi_routes "/provider/:provider/account/:account_name", {:headers => [:accept, :content_type]}, hash
|
||||||
|
|
||||||
puts "Provider routes initialized"
|
puts "Provider routes initialized"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
30
devops-service/db/mongo/connectors/provider_accounts.rb
Normal file
30
devops-service/db/mongo/connectors/provider_accounts.rb
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
module Connectors
|
||||||
|
class ProviderAccounts < Base
|
||||||
|
|
||||||
|
include Helpers::InsertCommand,
|
||||||
|
Helpers::DeleteCommand
|
||||||
|
|
||||||
|
def initialize(db)
|
||||||
|
super(db)
|
||||||
|
end
|
||||||
|
|
||||||
|
def provider_accounts provider
|
||||||
|
c = Provider::ProviderFactory.get_account_class(provider)
|
||||||
|
collection.find({provider: provider}).to_a.map{|bson| c.build_from_bson(bson)}
|
||||||
|
end
|
||||||
|
|
||||||
|
def collection_name
|
||||||
|
'provider_accounts'
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def model_from_bson(bson)
|
||||||
|
c = Provider::ProviderFactory.get_account_class(bson["provider"])
|
||||||
|
raise InvalidRecord.new "Invalid provider '#{bson["provider"]}' for account '#{bson["_id"]}'" if c.nil?
|
||||||
|
c.build_from_bson(bson)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
require "providers/provider_factory"
|
#require "providers/provider_factory"
|
||||||
require "exceptions/invalid_record"
|
require "exceptions/invalid_record"
|
||||||
require "json"
|
require "json"
|
||||||
require 'db/validators/all'
|
require 'db/validators/all'
|
||||||
|
|||||||
@ -0,0 +1,33 @@
|
|||||||
|
require "db/mongo/models/provider_accounts/provider_account"
|
||||||
|
|
||||||
|
module Devops
|
||||||
|
module Model
|
||||||
|
class Ec2ProviderAccount < ProviderAccount
|
||||||
|
|
||||||
|
attr_accessor :access_key_id, :availability_zone
|
||||||
|
|
||||||
|
def initialize a={}
|
||||||
|
super(a)
|
||||||
|
self.availability_zone = a["availability_zone"]
|
||||||
|
self.access_key_id = a["access_key_id"]
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_list_hash
|
||||||
|
s = super
|
||||||
|
s["availability_zone"] = self.availability_zone
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_mongo_hash
|
||||||
|
s = super
|
||||||
|
s["availability_zone"] = self.availability_zone
|
||||||
|
s["access_key_id"] = self.access_key_id
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.build_from_bson a
|
||||||
|
a["account_name"] = a["_id"]
|
||||||
|
Ec2ProviderAccount.new a
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
require "db/mongo/models/provider_accounts/provider_account"
|
||||||
|
|
||||||
|
module Devops
|
||||||
|
module Model
|
||||||
|
class OpenstackProviderAccount < ProviderAccount
|
||||||
|
|
||||||
|
attr_accessor :username, :auth_url, :tenant, :api_key
|
||||||
|
|
||||||
|
def initialize a={}
|
||||||
|
super(a)
|
||||||
|
self.username = a["username"]
|
||||||
|
self.auth_url = a["auth_url"]
|
||||||
|
self.tenant = a["tenant"]
|
||||||
|
self.api_key = a["api_key"]
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_list_hash
|
||||||
|
s = super
|
||||||
|
s["username"] = self.username
|
||||||
|
s["auth_url"] = self.auth_url
|
||||||
|
s["tenant"] = self.tenant
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_mongo_hash
|
||||||
|
s = super
|
||||||
|
s["username"] = self.username
|
||||||
|
s["auth_url"] = self.auth_url
|
||||||
|
s["tenant"] = self.tenant
|
||||||
|
s["api_key"] = self.api_key
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.build_from_bson a
|
||||||
|
a["account_name"] = a["_id"]
|
||||||
|
OpenstackProviderAccount.new a
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
@ -0,0 +1,46 @@
|
|||||||
|
require "db/mongo/models/mongo_model"
|
||||||
|
require "db/mongo/models/model_with_provider"
|
||||||
|
|
||||||
|
module Devops
|
||||||
|
module Model
|
||||||
|
class ProviderAccount < MongoModel
|
||||||
|
|
||||||
|
include ModelWithProvider
|
||||||
|
|
||||||
|
attr_accessor :account_name, :description, :ssh_key, :certificate
|
||||||
|
|
||||||
|
def initialize a={}
|
||||||
|
self.account_name = a["account_name"]
|
||||||
|
self.description = a["description"]
|
||||||
|
self.ssh_key = a["ssh_key"]
|
||||||
|
self.provider = a["provider"]
|
||||||
|
self.certificate = a["certificate"]
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_list_hash
|
||||||
|
to_hash
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_hash
|
||||||
|
{
|
||||||
|
"account_name" => self.account_name,
|
||||||
|
"description" => self.description,
|
||||||
|
"ssh_key" => self.ssh_key,
|
||||||
|
"provider" => self.provider,
|
||||||
|
"certificate" => self.certificate
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_mongo_hash
|
||||||
|
{
|
||||||
|
"_id" => self.account_name,
|
||||||
|
"description" => self.description,
|
||||||
|
"ssh_key" => self.ssh_key,
|
||||||
|
"provider" => self.provider,
|
||||||
|
"certificate" => self.certificate
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
require "db/mongo/models/provider_accounts/provider_account"
|
||||||
|
|
||||||
|
module Devops
|
||||||
|
module Model
|
||||||
|
class StaticProviderAccount < ProviderAccount
|
||||||
|
|
||||||
|
def self.build_from_bson a
|
||||||
|
a["account_name"] = a["_id"]
|
||||||
|
StaticProviderAccount.new a
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
@ -32,7 +32,8 @@ class MongoConnector
|
|||||||
:user_update, :create_root_user, :check_user_privileges] => :users_connector,
|
:user_update, :create_root_user, :check_user_privileges] => :users_connector,
|
||||||
[: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
|
||||||
)
|
)
|
||||||
|
|
||||||
def initialize(db, host, port=27017, user=nil, password=nil)
|
def initialize(db, host, port=27017, user=nil, password=nil)
|
||||||
@ -46,6 +47,10 @@ class MongoConnector
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def provider_accounts_connector
|
||||||
|
@provider_accounts_connector ||= Connectors::ProviderAccounts.new(@db)
|
||||||
|
end
|
||||||
|
|
||||||
def images_connector
|
def images_connector
|
||||||
@image_connector ||= Connectors::Image.new(@db)
|
@image_connector ||= Connectors::Image.new(@db)
|
||||||
end
|
end
|
||||||
|
|||||||
@ -6,6 +6,10 @@ module Provider
|
|||||||
|
|
||||||
attr_accessor :ssh_key, :certificate_path, :connection_options, :run_list
|
attr_accessor :ssh_key, :certificate_path, :connection_options, :run_list
|
||||||
|
|
||||||
|
def accounts
|
||||||
|
Devops::Db.connector.provider_accounts(self.name)
|
||||||
|
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
|
||||||
|
|||||||
@ -47,5 +47,18 @@ module Provider
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.get_account_class provider
|
||||||
|
case(provider)
|
||||||
|
when ::Provider::Static::PROVIDER
|
||||||
|
::Devops::Model::StaticProviderAccount
|
||||||
|
when ::Provider::Ec2::PROVIDER
|
||||||
|
::Devops::Model::Ec2ProviderAccount
|
||||||
|
when ::Provider::Openstack::PROVIDER
|
||||||
|
::Devops::Model::OpenstackProviderAccount
|
||||||
|
else
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user