Merge pull request #8531 from sivel/rax-cdb-dedupe-docfrag

rax_cdb* modules: Dedupe code and switch to shared doc fragments
This commit is contained in:
Michael DeHaan 2014-08-08 20:59:11 -04:00
commit 19c26df51b
3 changed files with 54 additions and 183 deletions

View file

@ -14,35 +14,18 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>. # along with Ansible. If not, see <http://www.gnu.org/licenses/>.
# This is a DOCUMENTATION stub specific to this module, it extends
# a documentation fragment located in ansible.utils.module_docs_fragments
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
module: rax_cdb module: rax_cdb
short_description: create / delete or resize a Rackspace Cloud Databases instance short_description: create/delete or resize a Rackspace Cloud Databases instance
description: description:
- creates / deletes or resize a Rackspace Cloud Databases instance - creates / deletes or resize a Rackspace Cloud Databases instance
and optionally waits for it to be 'running'. The name option needs to be unique since and optionally waits for it to be 'running'. The name option needs to be
it's used to identify the instance. unique since it's used to identify the instance.
version_added: "1.8" version_added: "1.8"
options: options:
api_key:
description:
- Rackspace API key (overrides I(credentials))
aliases:
- password
credentials:
description:
- File to find the Rackspace credentials in (ignored if I(api_key) and
I(username) are provided)
default: null
aliases:
- creds_file
region:
description:
- Region to create an instance in
default: DFW
username:
description:
- Rackspace username (overrides I(credentials))
name: name:
description: description:
- Name of the databases server instance - Name of the databases server instance
@ -69,15 +52,8 @@ options:
description: description:
- how long before wait gives up, in seconds - how long before wait gives up, in seconds
default: 300 default: 300
requirements: [ "pyrax" ]
author: Simon JAILLET author: Simon JAILLET
notes: extends_documentation_fragment: rackspace
- The following environment variables can be used, C(RAX_USERNAME),
C(RAX_API_KEY), C(RAX_CREDS_FILE), C(RAX_CREDENTIALS), C(RAX_REGION).
- C(RAX_CREDENTIALS) and C(RAX_CREDS_FILE) points to a credentials file
appropriate for pyrax. See U(https://github.com/rackspace/pyrax/blob/master/docs/getting_started.md#authenticating)
- 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 = ''' EXAMPLES = '''
@ -97,25 +73,11 @@ EXAMPLES = '''
register: rax_db_server register: rax_db_server
''' '''
import sys
from types import NoneType
try: try:
import pyrax import pyrax
HAS_PYRAX = True
except ImportError: except ImportError:
print("failed=True msg='pyrax is required for this module'") HAS_PYRAX = False
sys.exit(1)
NON_CALLABLES = (basestring, bool, dict, int, list, NoneType)
def to_dict(obj):
instance = {}
for key in dir(obj):
value = getattr(obj, key)
if (isinstance(value, NON_CALLABLES) and not key.startswith('_')):
instance[key] = value
return instance
def find_instance(name): def find_instance(name):
@ -168,45 +130,31 @@ def save_instance(module, name, flavor, volume, wait, wait_timeout):
if instance.volume.size != volume: if instance.volume.size != volume:
action = 'resize' action = 'resize'
if instance.volume.size > volume: if instance.volume.size > volume:
module.fail_json( module.fail_json(changed=False, action=action,
changed=False, msg='The new volume size must be larger than '
action=action, 'the current volume size',
msg='The new volume size must be larger than the' cdb=rax_to_dict(instance))
' current volume size',
cdb=to_dict(instance)
)
instance.resize_volume(volume) instance.resize_volume(volume)
changed = True changed = True
if int(instance.flavor.id) != flavor: if int(instance.flavor.id) != flavor:
action = 'resize' action = 'resize'
pyrax.utils.wait_until( pyrax.utils.wait_until(instance, 'status', 'ACTIVE',
instance, attempts=wait_timeout)
'status',
'ACTIVE',
attempts=wait_timeout
)
instance.resize(flavor) instance.resize(flavor)
changed = True changed = True
if wait: if wait:
pyrax.utils.wait_until( pyrax.utils.wait_until(instance, 'status', 'ACTIVE',
instance, attempts=wait_timeout)
'status',
'ACTIVE',
attempts=wait_timeout
)
if wait and instance.status != 'ACTIVE': if wait and instance.status != 'ACTIVE':
module.fail_json( module.fail_json(changed=changed, action=action,
changed=changed, cdb=rax_to_dict(instance),
action=action, msg='Timeout waiting for "%s" databases instance to '
cdb=to_dict(instance), 'be created' % name)
msg='Timeout waiting for "%s" databases instance to be '
'created' % name
)
module.exit_json(changed=changed, action=action, cdb=to_dict(instance)) module.exit_json(changed=changed, action=action, cdb=rax_to_dict(instance))
def delete_instance(module, name, wait, wait_timeout): def delete_instance(module, name, wait, wait_timeout):
@ -228,23 +176,17 @@ def delete_instance(module, name, wait, wait_timeout):
changed = True changed = True
if wait: if wait:
pyrax.utils.wait_until( pyrax.utils.wait_until(instance, 'status', 'SHUTDOWN',
instance, attempts=wait_timeout)
'status',
'SHUTDOWN',
attempts=wait_timeout
)
if wait and instance.status != 'SHUTDOWN': if wait and instance.status != 'SHUTDOWN':
module.fail_json( module.fail_json(changed=changed, action='delete',
changed=changed, cdb=rax_to_dict(instance),
action='delete', msg='Timeout waiting for "%s" databases instance to '
cdb=to_dict(instance), 'be deleted' % name)
msg='Timeout waiting for "%s" databases instance to be '
'deleted' % name
)
module.exit_json(changed=changed, action='delete', cdb=to_dict(instance)) module.exit_json(changed=changed, action='delete',
cdb=rax_to_dict(instance))
def rax_cdb(module, state, name, flavor, volume, wait, wait_timeout): def rax_cdb(module, state, name, flavor, volume, wait, wait_timeout):
@ -274,6 +216,9 @@ def main():
required_together=rax_required_together(), required_together=rax_required_together(),
) )
if not HAS_PYRAX:
module.fail_json(msg='pyrax is required for this module')
name = module.params.get('name') name = module.params.get('name')
flavor = module.params.get('flavor') flavor = module.params.get('flavor')
volume = module.params.get('volume') volume = module.params.get('volume')
@ -289,5 +234,5 @@ def main():
from ansible.module_utils.basic import * from ansible.module_utils.basic import *
from ansible.module_utils.rax import * from ansible.module_utils.rax import *
### invoke the module # invoke the module
main() main()

View file

@ -14,6 +14,8 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>. # along with Ansible. If not, see <http://www.gnu.org/licenses/>.
# This is a DOCUMENTATION stub specific to this module, it extends
# a documentation fragment located in ansible.utils.module_docs_fragments
DOCUMENTATION = ''' DOCUMENTATION = '''
module: rax_cdb_database module: rax_cdb_database
short_description: 'create / delete a database in the Cloud Databases' short_description: 'create / delete a database in the Cloud Databases'
@ -21,25 +23,6 @@ description:
- create / delete a database in the Cloud Databases. - create / delete a database in the Cloud Databases.
version_added: "1.8" version_added: "1.8"
options: options:
api_key:
description:
- Rackspace API key (overrides I(credentials))
aliases:
- password
credentials:
description:
- File to find the Rackspace credentials in (ignored if I(api_key) and
I(username) are provided)
default: null
aliases:
- creds_file
region:
description:
- Region to create an instance in
default: DFW
username:
description:
- Rackspace username (overrides I(credentials))
cdb_id: cdb_id:
description: description:
- The databases server UUID - The databases server UUID
@ -61,16 +44,8 @@ options:
- Indicate desired state of the resource - Indicate desired state of the resource
choices: ['present', 'absent'] choices: ['present', 'absent']
default: present default: present
requirements:
- "pyrax"
author: Simon JAILLET author: Simon JAILLET
notes: extends_documentation_fragment: rackspace
- The following environment variables can be used, C(RAX_USERNAME),
C(RAX_API_KEY), C(RAX_CREDS_FILE), C(RAX_CREDENTIALS), C(RAX_REGION).
- C(RAX_CREDENTIALS) and C(RAX_CREDS_FILE) points to a credentials file
appropriate for pyrax. See U(https://github.com/rackspace/pyrax/blob/master/docs/getting_started.md#authenticating)
- 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 = ''' EXAMPLES = '''
@ -87,25 +62,11 @@ EXAMPLES = '''
register: rax_db_database register: rax_db_database
''' '''
import sys
from types import NoneType
try: try:
import pyrax import pyrax
HAS_PYRAX = True
except ImportError: except ImportError:
print("failed=True msg='pyrax is required for this module'") HAS_PYRAX = False
sys.exit(1)
NON_CALLABLES = (basestring, bool, dict, int, list, NoneType)
def to_dict(obj):
instance = {}
for key in dir(obj):
value = getattr(obj, key)
if (isinstance(value, NON_CALLABLES) and not key.startswith('_')):
instance[key] = value
return instance
def find_database(instance, name): def find_database(instance, name):
@ -145,11 +106,8 @@ def save_database(module, cdb_id, name, character_set, collate):
else: else:
changed = True changed = True
module.exit_json( module.exit_json(changed=changed, action='create',
changed=changed, database=rax_to_dict(database))
action='create',
database=to_dict(database)
)
def delete_database(module, cdb_id, name): def delete_database(module, cdb_id, name):
@ -207,6 +165,9 @@ def main():
required_together=rax_required_together(), required_together=rax_required_together(),
) )
if not HAS_PYRAX:
module.fail_json(msg='pyrax is required for this module')
cdb_id = module.params.get('cdb_id') cdb_id = module.params.get('cdb_id')
name = module.params.get('name') name = module.params.get('name')
character_set = module.params.get('character_set') character_set = module.params.get('character_set')
@ -221,5 +182,5 @@ def main():
from ansible.module_utils.basic import * from ansible.module_utils.basic import *
from ansible.module_utils.rax import * from ansible.module_utils.rax import *
### invoke the module # invoke the module
main() main()

View file

@ -14,6 +14,8 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>. # along with Ansible. If not, see <http://www.gnu.org/licenses/>.
# This is a DOCUMENTATION stub specific to this module, it extends
# a documentation fragment located in ansible.utils.module_docs_fragments
DOCUMENTATION = ''' DOCUMENTATION = '''
--- ---
module: rax_cdb_user module: rax_cdb_user
@ -22,25 +24,6 @@ description:
- create / delete a database in the Cloud Databases. - create / delete a database in the Cloud Databases.
version_added: "1.8" version_added: "1.8"
options: options:
api_key:
description:
- Rackspace API key (overrides I(credentials))
aliases:
- password
credentials:
description:
- File to find the Rackspace credentials in (ignored if I(api_key) and
I(username) are provided)
default: null
aliases:
- creds_file
region:
description:
- Region to create an instance in
default: DFW
username:
description:
- Rackspace username (overrides I(credentials))
cdb_id: cdb_id:
description: description:
- The databases server UUID - The databases server UUID
@ -68,15 +51,8 @@ options:
- Indicate desired state of the resource - Indicate desired state of the resource
choices: ['present', 'absent'] choices: ['present', 'absent']
default: present default: present
requirements: [ "pyrax" ]
author: Simon JAILLET author: Simon JAILLET
notes: extends_documentation_fragment: rackspace
- The following environment variables can be used, C(RAX_USERNAME),
C(RAX_API_KEY), C(RAX_CREDS_FILE), C(RAX_CREDENTIALS), C(RAX_REGION).
- C(RAX_CREDENTIALS) and C(RAX_CREDS_FILE) points to a credentials file
appropriate for pyrax. See U(https://github.com/rackspace/pyrax/blob/master/docs/getting_started.md#authenticating)
- 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 = ''' EXAMPLES = '''
@ -95,25 +71,11 @@ EXAMPLES = '''
register: rax_db_user register: rax_db_user
''' '''
import sys
from types import NoneType
try: try:
import pyrax import pyrax
HAS_PYRAX = True
except ImportError: except ImportError:
print("failed=True msg='pyrax is required for this module'") HAS_PYRAX = False
sys.exit(1)
NON_CALLABLES = (basestring, bool, dict, int, list, NoneType)
def to_dict(obj):
instance = {}
for key in dir(obj):
value = getattr(obj, key)
if (isinstance(value, NON_CALLABLES) and not key.startswith('_')):
instance[key] = value
return instance
def find_user(instance, name): def find_user(instance, name):
@ -177,7 +139,7 @@ def save_user(module, cdb_id, name, password, databases, host):
else: else:
changed = True changed = True
module.exit_json(changed=changed, action=action, user=to_dict(user)) module.exit_json(changed=changed, action=action, user=rax_to_dict(user))
def delete_user(module, cdb_id, name): def delete_user(module, cdb_id, name):
@ -236,6 +198,9 @@ def main():
required_together=rax_required_together(), required_together=rax_required_together(),
) )
if not HAS_PYRAX:
module.fail_json(msg='pyrax is required for this module')
cdb_id = module.params.get('cdb_id') cdb_id = module.params.get('cdb_id')
name = module.params.get('db_username') name = module.params.get('db_username')
password = module.params.get('db_password') password = module.params.get('db_password')
@ -251,5 +216,5 @@ def main():
from ansible.module_utils.basic import * from ansible.module_utils.basic import *
from ansible.module_utils.rax import * from ansible.module_utils.rax import *
### invoke the module # invoke the module
main() main()