fluke/devops-service/app/api3/handlers/provider.rb

87 lines
3.0 KiB
Ruby
Raw Normal View History

2018-04-04 22:44:39 +03:00
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