Fix up docs and add ability to insert files

Files can be inserted during server creation (like a fully formed
authorized_keys file). This code allows that to happen.

Docs were updated for formatting, location, and to add the new entry for
files.
This commit is contained in:
Jesse Keating 2013-03-31 00:05:14 -07:00
parent 1cf08e215a
commit 0bd80421d4

46
rax
View file

@ -46,34 +46,42 @@ options:
default: null default: null
flavor: flavor:
description: description:
- flavor to use for the instance - flavor to use for the instance
required: false required: false
default: null default: null
image: image:
description: description:
- image to use for the instance - image to use for the instance
required: false required: false
default: null default: null
meta:
description:
- A hash of metadata to associate with the instance
default: null
key_name: key_name:
description: description:
- key pair to use on the instance - key pair to use on the instance
required: false required: false
default: null default: null
aliases: ['keypair'] aliases: ['keypair']
files:
description:
- Files to insert into the instance. remotefilename:localcontent
default: null
region: region:
description: description:
- Region to create an instance in - Region to create an instance in
required: false required: false
default: null default: null
wait: wait:
description: description:
- wait for the instance to be in state 'running' before returning - wait for the instance to be in state 'running' before returning
required: false required: false
default: "no" default: "no"
choices: [ "yes", "no" ] choices: [ "yes", "no" ]
wait_timeout: wait_timeout:
description: description:
- how long before wait gives up, in seconds - how long before wait gives up, in seconds
default: 300 default: 300
examples: examples:
- code: 'local_action: rax creds_file=~/.raxpub service=cloudservers name=rax-test1 flavor=5 image=b11d9567-e412-4255-96b9-bd63ab23bcfe wait=yes state=present' - code: 'local_action: rax creds_file=~/.raxpub service=cloudservers name=rax-test1 flavor=5 image=b11d9567-e412-4255-96b9-bd63ab23bcfe wait=yes state=present'
@ -99,8 +107,8 @@ except ImportError:
SUPPORTEDSERVICES = ['cloudservers', 'cloudfiles', 'cloud_blockstorage', SUPPORTEDSERVICES = ['cloudservers', 'cloudfiles', 'cloud_blockstorage',
'cloud_databases', 'cloud_loadbalancers'] 'cloud_databases', 'cloud_loadbalancers']
def cloudservers(module, state, name, flavor, image, meta, key_name, wait, def cloudservers(module, state, name, flavor, image, meta, key_name, files,
wait_timeout): wait, wait_timeout):
# Check our args (this could be done better) # Check our args (this could be done better)
for arg in (state, name, flavor, image): for arg in (state, name, flavor, image):
if not arg: if not arg:
@ -124,14 +132,22 @@ def cloudservers(module, state, name, flavor, image, meta, key_name, wait,
# act on the state # act on the state
if state in ('active', 'present'): if state in ('active', 'present'):
# See if we already have any servers:
if not servers: if not servers:
# Handle the file contents
for rpath in files.keys():
lpath = os.path.expanduser(files[rpath])
try:
fileobj = open(lpath, 'r')
files[rpath] = fileobj
except Exception, e:
module.fail_json(msg = 'Failed to load %s' % lpath)
try: try:
servers = [pyrax.cloudservers.servers.create(name=name, servers = [pyrax.cloudservers.servers.create(name=name,
image=image, image=image,
flavor=flavor, flavor=flavor,
key_name=key_name, key_name=key_name,
meta=meta)] meta=meta,
files=files)]
changed = True changed = True
except Exception, e: except Exception, e:
module.fail_json(msg = '%s' % e.message) module.fail_json(msg = '%s' % e.message)
@ -188,10 +204,11 @@ def main():
'deleted', 'absent']), 'deleted', 'absent']),
creds_file = dict(), creds_file = dict(),
name = dict(), name = dict(),
key_name = dict(aliases = ['keypair']),
flavor = dict(), flavor = dict(),
image = dict(), image = dict(),
meta = dict(type='dict', default={}), meta = dict(type='dict', default={}),
key_name = dict(aliases = ['keypair']),
files = dict(type='dict', default={}),
region = dict(), region = dict(),
wait = dict(type='bool', choices=BOOLEANS), wait = dict(type='bool', choices=BOOLEANS),
wait_timeout = dict(default=300), wait_timeout = dict(default=300),
@ -202,10 +219,11 @@ def main():
state = module.params.get('state') state = module.params.get('state')
creds_file = module.params.get('creds_file') creds_file = module.params.get('creds_file')
name = module.params.get('name') name = module.params.get('name')
key_name = module.params.get('key_name')
flavor = module.params.get('flavor') flavor = module.params.get('flavor')
image = module.params.get('image') image = module.params.get('image')
meta = module.params.get('meta') meta = module.params.get('meta')
key_name = module.params.get('key_name')
files = module.params.get('files')
region = module.params.get('region') region = module.params.get('region')
wait = module.params.get('wait') wait = module.params.get('wait')
wait_timeout = int(module.params.get('wait_timeout')) wait_timeout = int(module.params.get('wait_timeout'))
@ -233,8 +251,8 @@ def main():
# Act based on service # Act based on service
if service == 'cloudservers': if service == 'cloudservers':
cloudservers(module, state, name, flavor, image, meta, key_name, wait, cloudservers(module, state, name, flavor, image, meta, key_name, files,
wait_timeout) wait, wait_timeout)
elif service in ['cloudfiles', 'cloud_blockstorage', elif service in ['cloudfiles', 'cloud_blockstorage',
'cloud_databases', 'cloud_loadbalancers']: 'cloud_databases', 'cloud_loadbalancers']:
module.fail_json(msg = 'Service %s is not supported at this time' % module.fail_json(msg = 'Service %s is not supported at this time' %