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
 | 
