Module: CloudFlock::App::Rackspace

Includes:
ConsoleGlitter
Included in:
Common, FilesMigrate
Defined in:
lib/cloudflock/app/common/rackspace.rb

Overview

Public: The Rackspace module provides common methods for CLI interaction pertaining to interaction with the Rackspace API.

Instance Method Summary collapse

Instance Method Details

#define_rackspace_apiObject

Public: Gather information necessary to manage Rackspace cloud assets via API.

Returns a Hash containing information necessary to establish an API session.



15
16
17
18
19
20
21
22
# File 'lib/cloudflock/app/common/rackspace.rb', line 15

def define_rackspace_api
  {
    provider:           'rackspace',
    rackspace_username: UI.prompt('Rackspace Cloud Username'),
    rackspace_api_key:  UI.prompt('Rackspace Cloud API key'),
    rackspace_region:   define_rackspace_region
  }
end

#define_rackspace_cloudservers_region(api) ⇒ Object

Public: Wrap define_rackspace_service_region, specifying ‘cloudServersOpenStack’ as the service type.

api - Authenticated Fog API instance.

Returns a Hash.



39
40
41
# File 'lib/cloudflock/app/common/rackspace.rb', line 39

def define_rackspace_cloudservers_region(api)
  api.merge(define_rackspace_service_region(api, 'cloudServersOpenStack'))
end

#define_rackspace_files_region(api) ⇒ Object

Public: Wrap define_rackspace_service_region, specifying ‘cloudFiles’ as the service type.

api - Authenticated Fog API instance.

Returns a Hash.



49
50
51
# File 'lib/cloudflock/app/common/rackspace.rb', line 49

def define_rackspace_files_region(api)
  api.merge(define_rackspace_service_region(api, 'cloudFiles'))
end

#define_rackspace_regionObject

Public: Determine which Rackspace public endpoint should be used.

Returns a String.



27
28
29
30
31
# File 'lib/cloudflock/app/common/rackspace.rb', line 27

def define_rackspace_region
  countries = [/^u[sk]$/i]
  region = UI.prompt('Account Region (us, uk)', valid_answers: countries)
  Fog::Rackspace.const_get(region.upcase + '_AUTH_ENDPOINT')
end

#define_rackspace_service_region(api, service) ⇒ Object

Public: Have the user select from a list of regions available to their Rackspace account.

api - Authenticated Fog API instance. service - String describing the service to be used (e.g. ‘cloudFiles’,

'cloudServersOpenStack').

Returns a Hash containing a :rackspace_region => String mapping.



61
62
63
64
65
66
67
68
69
# File 'lib/cloudflock/app/common/rackspace.rb', line 61

def define_rackspace_service_region(api, service)
  identity = Fog::Identity.new(api)
  regions = identity.service_catalog.display_service_regions(service)
  regions = regions.split(', ').map { |e| e.gsub(/^:/, '') }

  region = UI.prompt("Target Region (#{regions.join(', ')})",
                     valid_answers: regions)
  { rackspace_region: region }
end