lib/connection.rb in forj-0.0.34 vs lib/connection.rb in forj-0.0.35

- old
+ new

@@ -23,57 +23,86 @@ include YamlParse # # Connection module # -module Connection - def compute - begin - credentials = get_credentials - Fog::Compute.new({ - :provider => 'HP', - :hp_access_key => credentials['access_key'], - :hp_secret_key => credentials['secret_key'], - :hp_auth_uri => credentials['auth_uri'], - :hp_tenant_id => credentials['tenant_id'], - :hp_avl_zone => credentials['availability_zone'], + +class ForjConnection + + attr_accessor :oCompute + attr_accessor :oNetwork + + def initialize(oConfig) + + sAccountName = oConfig.get('account_name') + @provider='HP' # TODO: Support multiple provider. (Generic Provider object required) + sAccountName = oConfig.get('provider') if not sAccountName + sAccountName = 'hpcloud' if not sAccountName + + @credentials = get_credentials(sAccountName) + oSSLError=SSLErrorMgt.new + + # Trying to get Compute object + + Logging.debug("compute: Connecting to '%s' - Project '%s'" % [@provider, @credentials['tenant_id']]) + begin + @oCompute=Fog::Compute.new({ + :provider => @provider, + :hp_access_key => @credentials['access_key'], + :hp_secret_key => @credentials['secret_key'], + :hp_auth_uri => @credentials['auth_uri'], + :hp_tenant_id => @credentials['tenant_id'], + :hp_avl_zone => @credentials['availability_zone'], :version => 'v2' - }) - rescue => e - Logging.error(e.message) - end - end + }) + rescue => e + if not oSSLError.ErrorDetected(e.message,e.backtrace) + retry + end + Logging.fatal(1, 'Unable to connect.') + end - def network - begin - credentials = get_credentials - Fog::HP::Network.new({ - :hp_access_key => credentials['access_key'], - :hp_secret_key => credentials['secret_key'], - :hp_auth_uri => credentials['auth_uri'], - :hp_tenant_id => credentials['tenant_id'], - :hp_avl_zone => credentials['availability_zone'] - }) - rescue => e - Logging.error(e.message) - end - end + # Trying to get Network object + Logging.debug("HP network: Connecting to '%s' - Project '%s'" % [@provider, @credentials['tenant_id']]) + begin + @oNetwork=Fog::HP::Network.new({ + :hp_access_key => @credentials['access_key'], + :hp_secret_key => @credentials['secret_key'], + :hp_auth_uri => @credentials['auth_uri'], + :hp_tenant_id => @credentials['tenant_id'], + :hp_avl_zone => @credentials['availability_zone'] + }) + rescue => e + if not oSSLError.ErrorDetected(e.message,e.backtrace) + retry + end + Logging.fatal(1, 'Unable to connect.') + end + + end + end -def get_credentials - home = File.expand_path('~') - creds = '%s/.hpcloud/accounts/hp' % [home] +def get_credentials(sAccountName) + # TODO: Should support forj credentials. not hpcloud credentials. + + raise 'Internal Error: Missing sAccountName' if not sAccountName + + creds = File.expand_path('~/.hpcloud/accounts/%s' % [sAccountName]) + if not File.exists?(creds) + Logging.fatal(1, "'%s' was not configured. Did you executed 'forj setup %s'? Please do it and retry." % [sAccountName, sAccountName]) + end template = YAML.load_file(creds) credentials = Hash.new begin credentials['access_key'] = template[:credentials][:account_id] credentials['secret_key'] = template[:credentials][:secret_key] credentials['auth_uri'] = template[:credentials][:auth_uri] credentials['tenant_id'] = template[:credentials][:tenant_id] credentials['availability_zone'] = template[:regions][:compute] rescue => e + Logging.error("%s\n%s" % [e.message, e.backtrace.join("\n")]) puts 'your credentials are not configured, delete the file %s and run forj setup again' % [creds] - Logging.error(e.message) end credentials end