91 lines
2.1 KiB
Ruby
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
|