summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Sprygada <psprygada@ansible.com>2015-09-18 13:40:20 -0400
committerPeter Sprygada <psprygada@ansible.com>2015-09-18 13:45:37 -0400
commite45b71d6cd50c5d6857fd9023698629bc2b560d4 (patch)
tree27bef7bb887b9abf03038ff08481b4a013e773e9
parentaca83b15e53efcb28407c18fd5dedcfc61b5b951 (diff)
downloadansible-e45b71d6cd50c5d6857fd9023698629bc2b560d4.tar.gz
added new module object to vca
-rw-r--r--lib/ansible/module_utils/vca.py168
1 files changed, 153 insertions, 15 deletions
diff --git a/lib/ansible/module_utils/vca.py b/lib/ansible/module_utils/vca.py
index f336b76ea0..2d4cd39d5b 100644
--- a/lib/ansible/module_utils/vca.py
+++ b/lib/ansible/module_utils/vca.py
@@ -22,9 +22,9 @@ except ImportError:
SERVICE_MAP = {'vca': 'ondemand', 'vchs': 'subscription', 'vcd': 'vcd'}
LOGIN_HOST = {'vca': 'vca.vmware.com', 'vchs': 'vchs.vmware.com'}
-VCA_REQ_ARGS = ['instance_id', 'vdc_name']
-VCHS_REQ_ARGS = ['service_id']
+
DEFAULT_SERVICE_TYPE = 'vca'
+DEFAULT_VERSION = '5.7'
class VcaError(Exception):
@@ -32,6 +32,153 @@ class VcaError(Exception):
self.kwargs = kwargs
super(VcaError, self).__init__(msg)
+def vca_argument_spec():
+ return dict(
+ username=dict(),
+ password=dict(),
+ org=dict(),
+ service_id=dict(),
+ instance_id=dict(),
+ host=dict(),
+ api_version=dict(default=DEFAULT_VERSION),
+ service_type=dict(default=DEFAULT_SERVICE_TYPE, choices=SERVICE_MAP.keys()),
+ vdc_name=dict(),
+ gateway_name=dict(default='gateway')
+ )
+
+class VcaAnsibleModule(AnsibleModule):
+
+ def __init__(self, *args, **kwargs):
+ argument_spec = vca_argument_spec()
+ argument_spec.update(kwargs.get('argument_spec', dict()))
+ kwargs['argument_spec'] = argument_spec
+
+ super(VcaAnsibleModule, self).__init__(*args, **kwargs)
+
+ if not HAS_PYVCLOUD:
+ self.fail("python module pyvcloud is required for this module")
+
+ self._vca = self.create_instance()
+ self.login()
+
+ self._gateway = None
+ self._vdc = None
+
+ @property
+ def vca(self):
+ return self._vca
+
+ @property
+ def gateway(self):
+ if self._gateway is not None:
+ return self._gateway
+ vdc_name = self.params['vdc_name']
+ gateway_name = self.params['gateway_name']
+ _gateway = self.vca.get_gateway(vdc_name, gateway_name)
+ if not _gateway:
+ raise VcaError('vca instance has no gateway named %s' % name)
+ self._gateway = _gateway
+ return _gateway
+
+ @property
+ def vdc(self):
+ if self._vdc is not None:
+ return self._vdc
+ _vdc = self.vca.get_vdc(self.params['vdc_name'])
+ if not _vdc:
+ raise VcaError('vca instance has no vdc named %s' % name)
+ self._vdc = _vdc
+ return _vdc
+
+ def create_instance(self):
+ service_type = self.params.get('service_type', DEFAULT_SERVICE_TYPE)
+ host = self.params.get('host', LOGIN_HOST.get('service_type'))
+ username = self.params['username']
+
+ version = self.params.get('api_version')
+ if service_type == 'vchs':
+ version = '5.6'
+
+ verify = self.params.get('verify_certs')
+
+ return VCA(host=host, username=username,
+ service_type=SERVICE_MAP[service_type],
+ version=version, verify=verify)
+
+ def login(self):
+ service_type = self.params['service_type']
+ password = self.params['password']
+
+ if not self.vca.login(password=password):
+ self.fail('Login to VCA failed', response=self.vca.response.content)
+
+ try:
+ method_name = 'login_%s' % service_type
+ meth = getattr(self, method_name)
+ meth()
+ except AttributeError:
+ self.fail('no login method exists for service_type %s' % service_type)
+ except VcaError, e:
+ self.fail(e.message, response=self.vca.response.content, **e.kwargs)
+
+ def login_vca(self):
+ instance_id = self.params['instance_id']
+ if not instance_id:
+ raise VcaError('missing required instance_id for service_type vca')
+ self.vca.login_to_instance_sso(instance=instance_id)
+
+ def login_vchs(self):
+ service_id = self.params['service_id']
+ if not service_id:
+ raise VcaError('missing required service_id for service_type vchs')
+
+ org = self.params['org']
+ if not org:
+ raise VcaError('missing required or for service_type vchs')
+
+ self.vca.login_to_org(service_id, org)
+
+ def login_vcd(self):
+ org = self.params['org']
+ if not org:
+ raise VcaError('missing required or for service_type vchs')
+
+ if not self.vca.token:
+ raise VcaError('unable to get token for service_type vcd')
+
+ if not self.vca.vcloud_session.org_url:
+ raise VcaError('unable to get org_url for service_type vcd')
+
+ self.vca.login(token=self.vca.token, org=org,
+ org_url=self.vca.vcloud_session.org_url)
+
+ def save_services_config(self, blocking=True):
+ task = self.gateway.save_services_configuration()
+ if not task:
+ self.fail(msg='unable to save gateway services configuration')
+ if blocking:
+ self.vca.block_until_completed(task)
+
+ def fail(self, msg, **kwargs):
+ self.fail_json(msg=msg, **kwargs)
+
+ def exit(self, **kwargs):
+ self.exit_json(**kwargs)
+
+
+
+# -------------------------------------------------------------
+# 9/18/2015 @privateip
+# All of the functions below here were migrated from the original
+# vca_* modules. All functions below should be considered deprecated
+# and will be removed once all of the vca_* modules have been updated
+# to use the new instance module above
+# -------------------------------------------------------------
+
+VCA_REQ_ARGS = ['instance_id', 'vdc_name']
+VCHS_REQ_ARGS = ['service_id']
+
+
def _validate_module(module):
if not HAS_PYVCLOUD:
module.fail_json("python module pyvcloud is needed for this module")
@@ -63,19 +210,6 @@ def serialize_instances(instance_list):
instances.append(dict(apiUrl=i['apiUrl'], instance_id=i['id']))
return instances
-def vca_argument_spec():
- return dict(
- username = dict(default=None),
- password = dict(default=None),
- org = dict(default=None),
- service_id = dict(default=None),
- instance_id = dict(default=None),
- host = dict(default=None),
- api_version = dict(default='5.7'),
- service_type = dict(default='vca', choices=['vchs', 'vca', 'vcd']),
- vdc_name = dict(default=None),
- )
-
def _vca_login(vca, password, instance):
if not vca.login(password=password):
raise VcaError("Login Failed: Please check username or password",
@@ -163,3 +297,7 @@ def vca_login(module):
return vca
+
+
+
+