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 |