summaryrefslogtreecommitdiffstats
path: root/lib/ansible/module_utils/vca.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ansible/module_utils/vca.py')
-rw-r--r--lib/ansible/module_utils/vca.py337
1 files changed, 0 insertions, 337 deletions
diff --git a/lib/ansible/module_utils/vca.py b/lib/ansible/module_utils/vca.py
deleted file mode 100644
index 62cd82d29f..0000000000
--- a/lib/ansible/module_utils/vca.py
+++ /dev/null
@@ -1,337 +0,0 @@
-#
-# 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/>.
-
-import os
-import traceback
-
-PYVCLOUD_IMP_ERR = None
-try:
- from pyvcloud.vcloudair import VCA
- HAS_PYVCLOUD = True
-except ImportError:
- PYVCLOUD_IMP_ERR = traceback.format_exc()
- HAS_PYVCLOUD = False
-
-from ansible.module_utils.basic import AnsibleModule, missing_required_lib
-
-SERVICE_MAP = {'vca': 'ondemand', 'vchs': 'subscription', 'vcd': 'vcd'}
-LOGIN_HOST = {'vca': 'vca.vmware.com', 'vchs': 'vchs.vmware.com'}
-
-DEFAULT_SERVICE_TYPE = 'vca'
-DEFAULT_VERSION = '5.7'
-
-
-class VcaError(Exception):
-
- def __init__(self, msg, **kwargs):
- self.kwargs = kwargs
- super(VcaError, self).__init__(msg)
-
-
-def vca_argument_spec():
- return dict(
- username=dict(type='str', aliases=['user'], required=True),
- password=dict(type='str', aliases=['pass', 'passwd'], required=True, no_log=True),
- 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'),
- validate_certs=dict(type='bool', default=True, aliases=['verify_certs'])
- )
-
-
-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(missing_required_lib('pyvcloud'),
- exception=PYVCLOUD_IMP_ERR)
-
- 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' % gateway_name)
- self._gateway = _gateway
- return _gateway
-
- @property
- def vdc(self):
- if self._vdc is not None:
- return self._vdc
- vdc_name = self.params['vdc_name']
- _vdc = self.vca.get_vdc(vdc_name)
- if not _vdc:
- raise VcaError('vca instance has no vdc named %s' % vdc_name)
- self._vdc = _vdc
- return _vdc
-
- def get_vapp(self, vapp_name):
- vapp = self.vca.get_vapp(self.vdc, vapp_name)
- if not vapp:
- raise VcaError('vca instance has no vapp named %s' % vapp_name)
- return vapp
-
- def get_vm(self, vapp_name, vm_name):
- vapp = self.get_vapp(vapp_name)
- children = vapp.me.get_Children()
- vms = [vm for vm in children.get_Vm() if vm.name == vm_name]
- try:
- return vms[0]
- except IndexError:
- raise VcaError('vapp has no vm named %s' % vm_name)
-
- def create_instance(self):
- service_type = self.params.get('service_type', DEFAULT_SERVICE_TYPE)
- if service_type == 'vcd':
- host = self.params['host']
- else:
- host = LOGIN_HOST[service_type]
- username = self.params['username']
-
- version = self.params.get('api_version')
- if service_type == 'vchs':
- version = '5.6'
-
- verify = self.params.get('validate_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']
-
- login_org = None
- if service_type == 'vcd':
- login_org = self.params['org']
-
- if not self.vca.login(password=password, org=login_org):
- 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 as 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 org 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 org for service_type vcd')
-
- 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']
-VCD_REQ_ARGS = []
-
-
-def _validate_module(module):
- if not HAS_PYVCLOUD:
- module.fail_json(msg=missing_required_lib("pyvcloud"),
- exception=PYVCLOUD_IMP_ERR)
-
- service_type = module.params.get('service_type', DEFAULT_SERVICE_TYPE)
-
- if service_type == 'vca':
- for arg in VCA_REQ_ARGS:
- if module.params.get(arg) is None:
- module.fail_json(msg="argument %s is mandatory when service type "
- "is vca" % arg)
-
- if service_type == 'vchs':
- for arg in VCHS_REQ_ARGS:
- if module.params.get(arg) is None:
- module.fail_json(msg="argument %s is mandatory when service type "
- "is vchs" % arg)
-
- if service_type == 'vcd':
- for arg in VCD_REQ_ARGS:
- if module.params.get(arg) is None:
- module.fail_json(msg="argument %s is mandatory when service type "
- "is vcd" % arg)
-
-
-def serialize_instances(instance_list):
- instances = []
- for i in instance_list:
- instances.append(dict(apiUrl=i['apiUrl'], instance_id=i['id']))
- return instances
-
-
-def _vca_login(vca, password, instance):
- if not vca.login(password=password):
- raise VcaError("Login Failed: Please check username or password",
- error=vca.response.content)
-
- if not vca.login_to_instance_sso(instance=instance):
- s_json = serialize_instances(vca.instances)
- raise VcaError("Login to Instance failed: Seems like instance_id provided "
- "is wrong .. Please check", valid_instances=s_json)
-
- return vca
-
-
-def _vchs_login(vca, password, service, org):
- if not vca.login(password=password):
- raise VcaError("Login Failed: Please check username or password",
- error=vca.response.content)
-
- if not vca.login_to_org(service, org):
- raise VcaError("Failed to login to org, Please check the orgname",
- error=vca.response.content)
-
-
-def _vcd_login(vca, password, org):
- # TODO: this function needs to be refactored
- if not vca.login(password=password, org=org):
- raise VcaError("Login Failed: Please check username or password "
- "or host parameters")
-
- if not vca.login(password=password, org=org):
- raise VcaError("Failed to get the token",
- error=vca.response.content)
-
- if not vca.login(token=vca.token, org=org, org_url=vca.vcloud_session.org_url):
- raise VcaError("Failed to login to org", error=vca.response.content)
-
-
-def vca_login(module):
- service_type = module.params.get('service_type')
- username = module.params.get('username')
- password = module.params.get('password')
- instance = module.params.get('instance_id')
- org = module.params.get('org')
- vdc_name = module.params.get('vdc_name')
- service = module.params.get('service_id')
- version = module.params.get('api_version')
- verify = module.params.get('validate_certs')
-
- _validate_module(module)
-
- if not vdc_name and service_type == 'vchs':
- vdc_name = module.params.get('service_id')
-
- if not org and service_type == 'vchs':
- org = vdc_name or service
-
- if service_type == 'vcd':
- host = module.params.get('host')
- else:
- host = LOGIN_HOST[service_type]
-
- username = os.environ.get('VCA_USER', username)
- password = os.environ.get('VCA_PASS', password)
-
- if not username or not password:
- msg = "Either the username or password is not set, please check args"
- module.fail_json(msg=msg)
-
- if service_type == 'vchs':
- version = '5.6'
- elif service_type == 'vcd' and not version:
- version = '5.6'
-
- vca = VCA(host=host, username=username,
- service_type=SERVICE_MAP[service_type],
- version=version, verify=verify)
-
- try:
- if service_type == 'vca':
- _vca_login(vca, password, instance)
- elif service_type == 'vchs':
- _vchs_login(vca, password, service, org)
- elif service_type == 'vcd':
- _vcd_login(vca, password, org)
- except VcaError as e:
- module.fail_json(msg=e.message, **e.kwargs)
-
- return vca