diff --git a/library/cloud/rax b/library/cloud/rax index 2b38c546409..eea61c27a34 100644 --- a/library/cloud/rax +++ b/library/cloud/rax @@ -32,10 +32,18 @@ options: - Indicate desired state of the resource choices: ['present', 'active', 'absent', 'deleted'] default: present - creds_file: + credentials: description: - - File to find the Rackspace Public Cloud credentials in + - File to find the Rackspace credentials in (ignored if C(api_key) and + C(username) are provided) default: null + aliases: ['creds_file'] + api_key: + description: + - Rackspace API key (overrides C(credentials)) + username: + description: + - Rackspace username (overrides C(credentials)) name: description: - Name to give the instance @@ -64,7 +72,7 @@ options: region: description: - Region to create an instance in - default: null + default: DFW wait: description: - wait for the instance to be in state 'running' before returning @@ -77,16 +85,19 @@ options: requirements: [ "pyrax" ] author: Jesse Keating notes: - - Two environment variables can be used, RAX_CREDS and RAX_REGION. - - RAX_CREDS points to a credentials file appropriate for pyrax - - RAX_REGION defines a Rackspace Public Cloud region (DFW, ORD, LON, ...) + - The following environment variables can be used, C(RAX_USERNAME), + C(RAX_API_KEY), C(RAX_CREDS), C(RAX_CREDENTIALS), C(RAX_REGION). + - C(RAX_CREDENTIALS) and C(RAX_CREDS) points to a credentials file + appropriate for pyrax + - C(RAX_USERNAME) and C(RAX_API_KEY) obviate the use of a credentials file + - C(RAX_REGION) defines a Rackspace Public Cloud region (DFW, ORD, LON, ...) ''' EXAMPLES = ''' # Create a server - local_action: module: rax - creds_file: ~/.raxpub + credentials: ~/.raxpub service: cloudservers name: rax-test1 flavor: 5 @@ -208,7 +219,9 @@ def main(): service = dict(default='cloudservers', choices=SUPPORTEDSERVICES), state = dict(default='present', choices=['active', 'present', 'deleted', 'absent']), - creds_file = dict(), + credentials = dict(aliases = ['creds_file']), + api_key=dict(), + username=dict(), name = dict(), flavor = dict(), image = dict(), @@ -223,7 +236,9 @@ def main(): service = module.params.get('service') state = module.params.get('state') - creds_file = module.params.get('creds_file') + credentials = module.params.get('credentials') + api_key = module.params.get('api_key') + username = module.params.get('username') name = module.params.get('name') flavor = module.params.get('flavor') image = module.params.get('image') @@ -234,24 +249,27 @@ def main(): wait = module.params.get('wait') wait_timeout = int(module.params.get('wait_timeout')) - # Setup the credentials file - if not creds_file: - try: - creds_file = os.environ['RAX_CREDS_FILE'] - except KeyError, e: - module.fail_json(msg = 'Unable to load %s' % e.message) + # Setup the credentials and region + try: + username = username or os.environ.get('RAX_USERNAME') + api_key = api_key or os.environ.get('RAX_API_KEY') + credentials = credentials or os.environ.get('RAX_CREDENTIALS') or \ + os.environ.get('RAX_CREDS_FILE') + region = region or os.environ.get('RAX_REGION') - # Define the region - if not region: - try: - region = os.environ['RAX_REGION'] - except KeyError, e: - module.fail_json(msg = 'Unable to load %s' % e.message) + except KeyError, e: + module.fail_json(msg = 'Unable to load %s' % e.message) # setup the auth try: pyrax.set_setting("identity_type", "rackspace") - pyrax.set_credential_file(creds_file, region=region) + if api_key and username: + pyrax.set_credentials(username, api_key=api_key, region=region) + elif credentials: + credentials = os.path.expanduser(credentials) + pyrax.set_credential_file(credentials, region=region) + else: + raise Exception('No credentials supplied!') except Exception, e: module.fail_json(msg = '%s' % e.message)