forked from ansible/ansible
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request ansible#4865 from claco/rax_queue
Add rax_queue module to create/delete Rackspace Cloud Queues
- Loading branch information
Showing
1 changed file
with
162 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,162 @@ | ||
#!/usr/bin/python -tt | ||
# This file is part of Ansible | ||
# | ||
# Ansible is free software: you can redistribute it and/or modify | ||
# it under the terms of the GNU General Public License as published by | ||
# the Free Software Foundation, either version 3 of the License, or | ||
# (at your option) any later version. | ||
# | ||
# Ansible is distributed in the hope that it will be useful, | ||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
# GNU General Public License for more details. | ||
# | ||
# You should have received a copy of the GNU General Public License | ||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>. | ||
|
||
DOCUMENTATION = ''' | ||
--- | ||
module: rax_queue | ||
short_description: create / delete a queue in Rackspace Public Cloud | ||
description: | ||
- creates / deletes a Rackspace Public Cloud queue. | ||
version_added: "1.5" | ||
options: | ||
api_key: | ||
description: | ||
- Rackspace API key (overrides C(credentials)) | ||
credentials: | ||
description: | ||
- File to find the Rackspace credentials in (ignored if C(api_key) and | ||
C(username) are provided) | ||
default: null | ||
aliases: ['creds_file'] | ||
name: | ||
description: | ||
- Name to give the queue | ||
default: null | ||
region: | ||
description: | ||
- Region to create the load balancer in | ||
default: DFW | ||
state: | ||
description: | ||
- Indicate desired state of the resource | ||
choices: ['present', 'absent'] | ||
default: present | ||
username: | ||
description: | ||
- Rackspace username (overrides C(credentials)) | ||
requirements: [ "pyrax" ] | ||
author: Christopher H. Laco, Matt Martz | ||
notes: | ||
- 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 = ''' | ||
- name: Build a Queue | ||
gather_facts: False | ||
hosts: local | ||
connection: local | ||
tasks: | ||
- name: Queue create request | ||
local_action: | ||
module: rax_queue | ||
credentials: ~/.raxpub | ||
client_id: unique-client-name | ||
name: my-queue | ||
region: DFW | ||
state: present | ||
register: my_queue | ||
''' | ||
|
||
import sys | ||
import os | ||
|
||
|
||
try: | ||
import pyrax | ||
except ImportError: | ||
print("failed=True msg='pyrax is required for this module'") | ||
sys.exit(1) | ||
|
||
|
||
def cloud_queue(module, state, name): | ||
for arg in (state, name): | ||
if not arg: | ||
module.fail_json(msg='%s is required for rax_queue' % arg) | ||
|
||
changed = False | ||
queues = [] | ||
instance = {} | ||
|
||
cq = pyrax.queues | ||
|
||
for queue in cq.list(): | ||
if name != queue.name: | ||
continue | ||
|
||
queues.append(queue) | ||
|
||
if len(queues) > 1: | ||
module.fail_json(msg='Multiple Queues were matched by name') | ||
|
||
if state == 'present': | ||
if not queues: | ||
try: | ||
queue = cq.create(name) | ||
changed = True | ||
except Exception, e: | ||
module.fail_json(msg='%s' % e.message) | ||
else: | ||
queue = queues[0] | ||
|
||
instance = dict(name=queue.name) | ||
result = dict(changed=changed, queue=instance) | ||
module.exit_json(**result) | ||
|
||
elif state == 'absent': | ||
if queues: | ||
queue = queues[0] | ||
try: | ||
queue.delete() | ||
changed = True | ||
except Exception, e: | ||
module.fail_json(msg='%s' % e.message) | ||
|
||
module.exit_json(changed=changed, queue=instance) | ||
|
||
|
||
def main(): | ||
argument_spec = rax_argument_spec() | ||
argument_spec.update( | ||
dict( | ||
name=dict(), | ||
state=dict(default='present', choices=['present', 'absent']), | ||
) | ||
) | ||
|
||
module = AnsibleModule( | ||
argument_spec=argument_spec, | ||
required_together=rax_required_together() | ||
) | ||
|
||
name = module.params.get('name') | ||
state = module.params.get('state') | ||
|
||
setup_rax_module(module, pyrax) | ||
|
||
cloud_queue(module, state, name) | ||
|
||
|
||
# import module snippets | ||
from ansible.module_utils.basic import * | ||
from ansible.module_utils.rax import * | ||
|
||
### invoke the module | ||
main() |