fluke/devops-service/providers/provider.rb
Tim Lianov 03dc3d8d99 v3
2018-04-04 22:44:39 +03:00

91 lines
2.1 KiB
Ruby

require "fog"
require_relative "category_provider"
require_relative "category_cloud_provider"
module Provider
@@providers = {}
def self.register _class
provider = _class.instance
@@providers[_class::PROVIDER] = provider
DevopsLogger.logger.info("Added provider: " + _class::PROVIDER)
provider.accounts.each do |account|
provider.create_connector DevopsConfig.config, account
DevopsLogger.logger.info("Connector for provider '#{_class::PROVIDER}' and account '#{account.account_name}' has been initialized")
end
end
def self.providers
@@providers.keys
end
def self.provider provider_name
provider = @@providers[provider_name]
raise Devops::Exception::RecordNotFound.new "Provider with name '#{provider_name}' not found" if provider.nil?
provider
end
def self.all
@@providers.values
end
def self.get_connector provider_name, account
Provider.provider(provider_name).connector(account)
end
def self.create_category_provider hash
Provider.provider(hash["name"]).create_category_provider(hash)
end
class AbstractProvider
include Singleton
@@account_class
def self.account_class pname, _class
@@account_class = _class
@@account_class.all.each do |account|
@@providers[pname].create_connector DevopsConfig.config, account
DevopsLogger.logger.info("Connector for provider '#{pname}' and account '#{account.account_name}' has been initialized")
end
end
def connectors
@connectors ||= {}
end
def connector account_name
con = connectors[account_name]
raise Devops::Exception::RecordNotFound.new "Account with name '#{account_name}' not found" if con.nil?
con
end
def add_connector account_name, conn
connectors[account_name] = conn
end
def delete_connector account_name
connectors.delete(account_name)
end
def create_connector config, account
raise "override me"
end
def create_account hash
raise "override me"
end
def create_category_provider hash
raise "override me"
end
def accounts
@@account_class.all
end
end
end