added new module object to vca
This commit is contained in:
parent
aca83b15e5
commit
e45b71d6cd
1 changed files with 153 additions and 15 deletions
|
@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue