87 lines
3.0 KiB
Ruby
87 lines
3.0 KiB
Ruby
require "app/api3/parsers/provider"
|
|
require_relative "request_handler"
|
|
require "commands/image"
|
|
|
|
module Devops
|
|
module API3
|
|
module Handler
|
|
class Provider < RequestHandler
|
|
|
|
set_parser Devops::API3::Parser::ProviderParser
|
|
|
|
extend ImageCommands
|
|
|
|
def flavors provider, account
|
|
::Provider.get_connector(provider, account).flavors
|
|
end
|
|
|
|
def networks provider, account
|
|
p = ::Provider.get_connector(provider, account)
|
|
available_keys = ["vpc-id"]
|
|
p.networks_detail(@request.params.select{|k,v| available_keys.include?(k)})
|
|
end
|
|
|
|
def security_groups provider, account
|
|
available_keys = ["vpc-id"]
|
|
::Provider.get_connector(provider, account).security_groups(@request.params.select{|k,v| available_keys.include?(k)})
|
|
end
|
|
|
|
def images provider, account
|
|
Provider.get_available_provider_images(provider, account)
|
|
end
|
|
|
|
def available_providers
|
|
DevopsConfig.config[:providers] || DevopsConfig.config["providers"] || []
|
|
end
|
|
|
|
def providers
|
|
::Provider.providers
|
|
end
|
|
|
|
def accounts provider
|
|
provider_object = ::Provider.provider(provider)
|
|
provider_object.accounts
|
|
end
|
|
|
|
def add_account provider
|
|
provider_object = ::Provider.provider(provider)
|
|
body = parser.account
|
|
body["provider"] = provider
|
|
account = provider_object.create_account(body)
|
|
account.save!
|
|
DevopsLogger.logger.info("Added #{provider} account '#{account.account_name}'")
|
|
provider_object.create_connector(DevopsConfig.config, account)
|
|
DevopsLogger.logger.info("Connector for provider '#{provider}' and account '#{account.account_name}' has been created")
|
|
account
|
|
rescue Mongoid::Errors::Validations => e
|
|
raise Devops::Exception::ValidationError.create_from_db_exception(e)
|
|
end
|
|
|
|
def delete_account name, provider
|
|
provider_object = ::Provider.provider(provider)
|
|
account = provider_object.account(name)
|
|
provider_object.delete_connector(name)
|
|
DevopsLogger.logger.info("Connector for provider '#{provider}' and account '#{account.account_name}' has been removed")
|
|
|
|
account_hash = account.to_hash
|
|
account.delete
|
|
DevopsLogger.logger.info("Removed #{provider} account '#{account.account_name}'")
|
|
account_hash
|
|
rescue Mongoid::Errors::DocumentNotFound
|
|
raise Devops::Exception::RecordNotFound.new("Account '#{name}' not found")
|
|
end
|
|
|
|
def account_vpcs provider, name
|
|
provider_object = ::Provider.provider(provider)
|
|
account = provider_object.account(name)
|
|
p = ::Provider.get_connector(provider, name)
|
|
p.describe_vpcs
|
|
rescue Mongoid::Errors::DocumentNotFound
|
|
raise Devops::Exception::RecordNotFound.new("Account '#{name}' not found")
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|
|
end
|