50 lines
1.7 KiB
Ruby
50 lines
1.7 KiB
Ruby
require "app/api2/parsers/provider"
|
|
require "providers/provider_factory"
|
|
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 API2_0
|
|
module Handler
|
|
class Provider < RequestHandler
|
|
|
|
set_parser Devops::API2_0::Parser::ProviderParser
|
|
|
|
def providers
|
|
::Provider::ProviderFactory.providers
|
|
end
|
|
|
|
def accounts provider
|
|
::Provider::ProviderFactory.get(provider).accounts
|
|
end
|
|
|
|
def add_account provider
|
|
account = ::Provider::ProviderFactory.get(provider).create_account(parser.account)
|
|
certificate_content = account.certificate
|
|
cert_name = "#{account.account_name}.pem"
|
|
certificate_path = File.join(Devops::Api2.settings.keys_dir, cert_name)
|
|
if File.exists?(certificate_path)
|
|
raise ConflictException.new("File '#{cert_name}' already exists")
|
|
end
|
|
File.open(certificate_path, "w") do |f|
|
|
f << certificate_content
|
|
end
|
|
File.chmod(0600, certificate_path)
|
|
DevopsLogger.logger.info("File '#{certificate_path}' for provider account '#{account.account_name}' has been created")
|
|
key = Devops::Model::Key.new({"id" => account.ssh_key, "path" => certificate_path, "scope" => Devops::Model::Key::SYSTEM})
|
|
Devops::Db.connector.key_insert key
|
|
account.certificate = certificate_path
|
|
Devops::Db.connector.provider_accounts_insert(account)
|
|
account
|
|
end
|
|
|
|
def delete_account name, provider
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|
|
end
|