Пример #1
0
 def test_0002_modify_memory(self):
     logged_in_org = self.client.get_org()
     org = Org(self.client, resource=logged_in_org)
     vdc_resource = org.get_vdc(self.config['vcd']['vdc'])
     vdc = VDC(self.client, resource=vdc_resource)
     assert self.config['vcd']['vdc'] == vdc.get_resource().get('name')
     vapp_resource = vdc.get_vapp(self.config['vcd']['vapp'])
     vapp = VApp(self.client, resource=vapp_resource)
     vm_resource = vapp.get_vm(self.config['vcd']['vm'])
     vm = VM(self.client, resource=vm_resource)
     task = vm.modify_memory(self.config['vcd']['memory'])
     task = self.client.get_task_monitor().wait_for_status(
                         task=task,
                         timeout=60,
                         poll_frequency=2,
                         fail_on_statuses=None,
                         expected_target_statuses=[
                             TaskStatus.SUCCESS,
                             TaskStatus.ABORTED,
                             TaskStatus.ERROR,
                             TaskStatus.CANCELED],
                         callback=None)
     assert task.get('status') == TaskStatus.SUCCESS.value
     vm.reload()
     assert vm.get_memory() == self.config['vcd']['memory']
def delete_vm(client):
    print("================= Vdc delete request ===================")
    vdc_name = "pcp_vdc_02"
    target_vm_name = "pcp_vm"
    org_resource = client.get_org()
    org = Org(client, resource=org_resource)
    print("Org name: ", org.get_name())
    print("Vdc name: ", vdc_name)

    vdc_resource = org.get_vdc(vdc_name)
    vdc = VDC(client, name=vdc_name, resource=vdc_resource)

    vapp_resource = vdc.get_vapp(vapp_name)
    vapp = VApp(client, name=vapp_name, resource=vapp_resource)

    delete_vapp_vm_resp = vapp.delete_vms(target_vm_name)
    task = client.get_task_monitor().wait_for_status(
        task=delete_vapp_vm_resp,
        timeout=60,
        poll_frequency=2,
        fail_on_statuses=None,
        expected_target_statuses=[
            TaskStatus.SUCCESS, TaskStatus.ABORTED, TaskStatus.ERROR,
            TaskStatus.CANCELED
        ],
        callback=None)

    st = task.get('status')
    if st == TaskStatus.SUCCESS.value:
        message = 'delete vdc status : {0} '.format(st)
        logging.info(message)
    else:
        raise errors.VCDVdcDeleteError(etree.tostring(task, pretty_print=True))
Пример #3
0
    def test_060_attach_disk_to_vm_in_vapp(self):
        logged_in_org = self.client.get_org()
        org = Org(self.client, resource=logged_in_org)
        vdc_resource = org.get_vdc(self.config['vcd']['vdc'])
        vdc = VDC(self.client, resource=vdc_resource)
        assert self.config['vcd']['vdc'] == vdc.get_resource().get('name')

        vapp_resource = vdc.get_vapp(self.config['vcd']['vapp'])
        assert self.config['vcd']['vapp'] == vapp_resource.get('name')
        vapp = VApp(self.client, resource=vapp_resource)

        disk = vdc.get_disk(self.config['vcd']['idisk_name'])

        result = vapp.attach_disk_to_vm(disk_href=disk.get('href'),
                                        vm_name=self.config['vcd']['vm'])
        task = self.client.get_task_monitor().wait_for_status(
                            task=result,
                            timeout=60,
                            poll_frequency=2,
                            fail_on_statuses=None,
                            expected_target_statuses=[
                                TaskStatus.SUCCESS,
                                TaskStatus.ABORTED,
                                TaskStatus.ERROR,
                                TaskStatus.CANCELED],
                            callback=None)
        assert task.get('status') == TaskStatus.SUCCESS.value
Пример #4
0
    def test_080_update_disk(self):
        logged_in_org = self.client.get_org()
        org = Org(self.client, resource=logged_in_org)
        vdc_resource = org.get_vdc(self.config['vcd']['vdc'])
        vdc = VDC(self.client, resource=vdc_resource)

        result = vdc.update_disk(
            name=self.config['vcd']['idisk_name'],
            new_name=self.config['vcd']['idisk_new_name'],
            new_size=self.config['vcd']['idisk_new_size'],
            new_description=self.config['vcd']['idisk_new_description'],
            new_storage_profile_name=self.config['vcd']['idisk_new_sp_name'],
            new_iops=self.config['vcd']['idisk_new_iops'])

        task = self.client.get_task_monitor().wait_for_status(
            task=result,
            timeout=30,
            poll_frequency=2,
            fail_on_statuses=None,
            expected_target_statuses=[
                TaskStatus.SUCCESS, TaskStatus.ABORTED, TaskStatus.ERROR,
                TaskStatus.CANCELED
            ],
            callback=None)

        assert task.get('status') == TaskStatus.SUCCESS.value
Пример #5
0
 def test_03_get_vdc_access(self):
     logged_in_org = self.client.get_org()
     org = Org(self.client, resource=logged_in_org)
     vdc_resource = org.get_vdc(self.config['vcd']['vdc'])
     vdc = VDC(self.client, resource=vdc_resource)
     control_access = vdc.get_access_settings()
     assert len(control_access.AccessSettings.AccessSetting) == 2
    def update(self):
        logging.info("__INIT__update[Vdc]")
        res = vdc_pb2.UpdateVdcResult()
        res.updated = False
        context = self.context
        logged_in_org = self.client.get_org()
        org = Org(self.client, resource=logged_in_org)

        #Vdc details
        name = self.name
        is_enabled = self.is_enabled

        try:
            vdc_resource = org.get_vdc(name)
            vdc = VDC(self.client, name=name, resource=vdc_resource)
            result = vdc.enable_vdc(is_enabled)
            res.updated = True
        except Exception as e:
            error_message = '__ERROR_update[Vdc] failed for Vdc {0}. __ErrorMessage__ {1}'.format(
                self.name, str(e))
            logging.warn(error_message)
            context.set_code(grpc.StatusCode.INVALID_ARGUMENT)
            context.set_details(error_message)
            return res

        logging.info("__DONE__update[Vdc]")
        return res
Пример #7
0
 def test_100_instantiate_vapp_identical(self):
     logged_in_org = self.client.get_org()
     org = Org(self.client, resource=logged_in_org)
     v = org.get_vdc(self.config['vcd']['vdc'])
     vdc = VDC(self.client, href=v.get('href'))
     assert self.config['vcd']['vdc'] == vdc.get_resource().get('name')
     result = vdc.instantiate_vapp(
         self.config['vcd']['vapp'],
         self.config['vcd']['catalog'],
         self.config['vcd']['template'],
         network=self.config['vcd']['network'],
         fence_mode='bridged',
         deploy=True,
         power_on=False,
         identical=True)
     task = self.client.get_task_monitor().wait_for_status(
         task=result.Tasks.Task[0],
         timeout=60,
         poll_frequency=2,
         fail_on_statuses=None,
         expected_target_statuses=[
             TaskStatus.SUCCESS, TaskStatus.ABORTED, TaskStatus.ERROR,
             TaskStatus.CANCELED
         ],
         callback=None)
     assert task.get('status') == TaskStatus.SUCCESS.value
     vdc.reload()
     vapp_resource = vdc.get_vapp(self.config['vcd']['vapp'])
     vm = vapp_resource.xpath(
         '//vcloud:VApp/vcloud:Children/vcloud:Vm', namespaces=NSMAP)
     assert len(vm) > 0
     assert vm[0].get('name') == self.config['vcd']['vm']
Пример #8
0
 def test_001_instantiate_vapp(self):
     logged_in_org = self.client.get_org()
     org = Org(self.client, resource=logged_in_org)
     v = org.get_vdc(self.config['vcd']['vdc'])
     vdc = VDC(self.client, href=v.get('href'))
     assert self.config['vcd']['vdc'] == vdc.get_resource().get('name')
     result = vdc.instantiate_vapp(
         self.config['vcd']['vapp'],
         self.config['vcd']['catalog'],
         self.config['vcd']['template'],
         network='net2',
         fence_mode='natRouted',
         deploy=False,
         power_on=False)
     task = self.client.get_task_monitor().wait_for_status(
         task=result.Tasks.Task[0],
         timeout=60,
         poll_frequency=2,
         fail_on_statuses=None,
         expected_target_statuses=[
             TaskStatus.SUCCESS, TaskStatus.ABORTED, TaskStatus.ERROR,
             TaskStatus.CANCELED
         ],
         callback=None)
     assert task.get('status') == TaskStatus.SUCCESS.value
Пример #9
0
 def test_1002_deploy_vm(self):
     logged_in_org = self.client.get_org()
     org = Org(self.client, resource=logged_in_org)
     v = org.get_vdc(self.config['vcd']['vdc'])
     vdc = VDC(self.client, href=v.get('href'))
     assert self.config['vcd']['vdc'] == vdc.get_resource().get('name')
     vapp_resource = vdc.get_vapp(self.config['vcd']['vapp'])
     assert vapp_resource.get('name') == self.config['vcd']['vapp']
     vapp = VApp(self.client, resource=vapp_resource)
     vm_resource = vapp.get_vm(self.config['vcd']['vm'])
     vm = VM(self.client, resource=vm_resource)
     result = vm.deploy()
     # result = vm.shutdown()
     task = self.client.get_task_monitor().wait_for_status(
         task=result,
         timeout=60,
         poll_frequency=2,
         fail_on_statuses=None,
         expected_target_statuses=[
             TaskStatus.SUCCESS,
             TaskStatus.ABORTED,
             TaskStatus.ERROR,
             TaskStatus.CANCELED],
         callback=None)
     assert task.get('status') == TaskStatus.SUCCESS.value
Пример #10
0
 def test_001_list_edge_gateways(self):
     logged_in_org = self.client.get_org()
     org = Org(self.client, resource=logged_in_org)
     v = org.get_vdc(self.config['vcd']['vdc'])
     vdc = VDC(self.client, resource=v)
     edge_gateways = vdc.list_edge_gateways()
     assert len(edge_gateways) > 0
def create_disk(client):
    logging.info('INIT create_disk')

    logged_in_org = client.get_org()
    org = Org(client, resource=logged_in_org)
    v = org.get_vdc('OVD2')
    if v is None:
        raise errors.VDCNotFoundError(vappInfo.vdc)
    vdc = VDC(client, href=v.get('href'))

    #task=vdc.delete_disk('disk01')

    result = vdc.add_disk('disk02', "100")
    logging.info('DONE create_disk %s', result)

    task = client.get_task_monitor().wait_for_status(
        task=result.Tasks.Task[0],
        timeout=60,
        poll_frequency=2,
        fail_on_status=None,
        expected_target_statuses=[
            TaskStatus.SUCCESS, TaskStatus.ABORTED, TaskStatus.ERROR,
            TaskStatus.CANCELED
        ],
        callback=task_callback)
    st = task.get('status')
    if st == TaskStatus.SUCCESS.value:
        logging.info("__LOG__ created DISK")
        #cresult.created = True
    else:
        raise errors.VCDDiskCreationError(
            etree.tostring(task, pretty_print=True))
Пример #12
0
 def test_0002_add_vm(self):
     logged_in_org = self.client.get_org()
     org = Org(self.client, resource=logged_in_org)
     vdc_resource = org.get_vdc(self.config['vcd']['vdc'])
     vdc = VDC(self.client, href=vdc_resource.get('href'))
     assert self.config['vcd']['vdc'] == vdc.get_resource().get('name')
     vapp_resource = vdc.get_vapp(self.config['vcd']['vapp'])
     assert vapp_resource.get('name') == self.config['vcd']['vapp']
     vapp = VApp(self.client, resource=vapp_resource)
     catalog_item = org.get_catalog_item(self.config['vcd']['catalog'],
                                         self.config['vcd']['template'])
     source_vapp_resource = self.client.get_resource(
         catalog_item.Entity.get('href'))
     spec = {'source_vm_name': self.config['vcd']['vm'],
             'vapp': source_vapp_resource}
     spec['target_vm_name'] = self.config['vcd']['hostname']
     spec['hostname'] = self.config['vcd']['hostname']
     spec['network'] = self.config['vcd']['network']
     spec['ip_allocation_mode'] = self.config['vcd']['ip_allocation_mode']
     spec['storage_profile'] = vdc.get_storage_profile(
         self.config['vcd']['storage_profile'])
     vms = [spec]
     result = vapp.add_vms(vms)
     task = self.client.get_task_monitor().wait_for_status(
                         task=result,
                         timeout=60,
                         poll_frequency=2,
                         fail_on_statuses=None,
                         expected_target_statuses=[
                             TaskStatus.SUCCESS,
                             TaskStatus.ABORTED,
                             TaskStatus.ERROR,
                             TaskStatus.CANCELED],
                         callback=None)
     assert task.get('status') == TaskStatus.SUCCESS.value
    def read(self, request):
        logging.info("__INIT__read[VappVm]")
        res = vapp_vm_pb2.ReadVappVmResult()
        res.present = False
        org_resource = self.client.get_org()
        org = Org(self.client, resource=org_resource)
        try:
            vdc_resource = org.get_vdc(request.target_vdc)
            vdc = VDC(
                self.client, name=request.target_vdc, resource=vdc_resource)

            vapp_resource = vdc.get_vapp(request.target_vapp)
            vapp = VApp(
                self.client, name=request.target_vapp, resource=vapp_resource)
            read_vapp_vm_resp = vapp.get_vm(request.target_vm_name)
            vm = VM(client=self.client, href=None, resource=read_vapp_vm_resp)

            res.present = True
        except Exception as e:
            errmsg = '__ERROR_read[VappVm] failed for VappVm {0}. __ErrorMessage__ {1}'
            logging.warn(errmsg.format(request.target_vm_name, str(e)))

            return res

        logging.info("__DONE__read[VappVm]")

        return res
Пример #14
0
 def test_1006_snapshot_create(self):
     logged_in_org = self.client.get_org()
     org = Org(self.client, resource=logged_in_org)
     vdc_resource = org.get_vdc(self.config['vcd']['vdc'])
     vdc = VDC(self.client, resource=vdc_resource)
     assert self.config['vcd']['vdc'] == vdc.get_resource().get('name')
     vapp_resource = vdc.get_vapp(self.config['vcd']['vapp'])
     assert vapp_resource.get('name') == self.config['vcd']['vapp']
     vapp = VApp(self.client, resource=vapp_resource)
     vm_resource = vapp.get_vm(self.config['vcd']['vm'])
     assert vm_resource.get('name') == self.config['vcd']['vm']
     vm = VM(self.client, resource=vm_resource)
     task = vm.snapshot_create(memory=False, quiesce=False)
     task = self.client.get_task_monitor().wait_for_status(
                         task=task,
                         timeout=120,
                         poll_frequency=2,
                         fail_on_statuses=None,
                         expected_target_statuses=[
                             TaskStatus.SUCCESS,
                             TaskStatus.ABORTED,
                             TaskStatus.ERROR,
                             TaskStatus.CANCELED],
                         callback=None)
     assert task.get('status') == TaskStatus.SUCCESS.value
Пример #15
0
 def test_06_unshare_vdc_access(self):
     logged_in_org = self.client.get_org()
     org = Org(self.client, resource=logged_in_org)
     vdc_resource = org.get_vdc(self.config['vcd']['vdc'])
     vdc = VDC(self.client, resource=vdc_resource)
     control_access = vdc.unshare_from_org_members()
     assert control_access.IsSharedToEveryone.text == 'false'
Пример #16
0
 def test_get_vdc(self):
     org_to_use = self.client.get_org_by_name(
         self.config['vcd']['org_to_use'])
     org = Org(self.client, href=org_to_use.get('href'))
     resource = org.get_vdc(self.config['vcd']['new_vdc'])
     assert resource is not None
     vdc = VDC(self.client, resource=resource)
     assert self.config['vcd']['new_vdc'] == vdc.get_resource().get('name')
Пример #17
0
 def test_05_share_vdc_access(self):
     logged_in_org = self.client.get_org()
     org = Org(self.client, resource=logged_in_org)
     vdc_resource = org.get_vdc(self.config['vcd']['vdc'])
     vdc = VDC(self.client, resource=vdc_resource)
     control_access = vdc.share_with_org_members()
     assert control_access.IsSharedToEveryone.text == 'true'
     assert control_access.EveryoneAccessLevel.text == 'ReadOnly'
Пример #18
0
 def test_01_remove_all_vdc_access(self):
     logged_in_org = self.client.get_org()
     org = Org(self.client, resource=logged_in_org)
     vdc_resource = org.get_vdc(self.config['vcd']['vdc'])
     vdc = VDC(self.client, resource=vdc_resource)
     vdc.share_with_org_members()
     control_access = vdc.remove_access_settings(remove_all=True)
     self.assertFalse(hasattr(control_access, 'AccessSettings'))
    def get_vapp_resource(self, vdc_name, vapp_name):
        org_resource = Org(self.client, resource=self.client.get_org())
        vdc_resource = VDC(
            self.client, resource=org_resource.get_vdc(vdc_name))
        vapp_resource_href = vdc_resource.get_resource_href(
            name=vapp_name, entity_type=EntityType.VAPP)

        return self.client.get_resource(vapp_resource_href)
Пример #20
0
 def test_1001_remove_all_vapp_access(self):
     logged_in_org = self.client.get_org()
     org = Org(self.client, resource=logged_in_org)
     vdc_resource = org.get_vdc(self.config['vcd']['vdc'])
     vdc = VDC(self.client, resource=vdc_resource)
     vapp_resource = vdc.get_vapp(self.config['vcd']['vapp'])
     vapp = VApp(self.client, resource=vapp_resource)
     control_access = vapp.remove_access_settings(remove_all=True)
     self.assertFalse(hasattr(control_access, 'AccessSettings'))
Пример #21
0
 def test_disable_vdc(self):
     org_to_use = self.client.get_org_by_name(
         self.config['vcd']['org_to_use'])
     org = Org(self.client, href=org_to_use.get('href'))
     resource = org.get_vdc(self.config['vcd']['new_vdc'])
     vdc = VDC(self.client, resource=resource)
     vdc.enable_vdc(False)
     vdc.reload()
     assert vdc.resource.IsEnabled.text == 'false'
Пример #22
0
    def test_010_get_storage_profiles(self):
        logged_in_org = self.client.get_org()
        org = Org(self.client, resource=logged_in_org)
        vdc_resource = org.get_vdc(self.config['vcd']['vdc'])
        vdc = VDC(self.client, resource=vdc_resource)

        profiles = vdc.get_storage_profiles()

        assert len(profiles) > 0
    def get_resource(self):
        vapp = self.params.get('vapp')
        vdc = self.params.get('vdc')
        org_resource = Org(self.client, resource=self.client.get_org())
        vdc_resource = VDC(self.client, resource=org_resource.get_vdc(vdc))
        vapp_resource_href = vdc_resource.get_resource_href(name=vapp, entity_type=EntityType.VAPP)
        vapp_resource = self.client.get_resource(vapp_resource_href)

        return vapp_resource
Пример #24
0
    def test_050_list_isolated_orgvdc_networks(self):
        org_record = self.client.get_org_by_name(
            self.config['vcd']['org_name'])
        org = Org(self.client, href=org_record.get('href'))
        vdc_resource = org.get_vdc(self.config['vcd']['vdc_name'])
        vdc = VDC(self.client, href=vdc_resource.get('href'))

        result = vdc.list_orgvdc_isolated_networks()
        assert len(result) > 0
    def read(self):
        logging.info("__INIT__read[Vdc]")
        res = vdc_pb2.ReadVdcResult()
        res.present = False
        context = self.context
        logged_in_org = self.client.get_org()
        org = Org(self.client, resource=logged_in_org)

        #Vdc details
        name = self.name

        try:
            vdc_resource = org.get_vdc(name)

            res.name = name
            #res.provider_vdc = str(result.provider_vdc)
            res.description = str(vdc_resource.Description)
            res.allocation_model = str(vdc_resource.AllocationModel)

            res.cpu_units = str(vdc_resource.ComputeCapacity.Cpu.Units)
            res.cpu_allocated = int(vdc_resource.ComputeCapacity.Cpu.Allocated)
            res.cpu_limit = int(vdc_resource.ComputeCapacity.Cpu.Limit)

            res.mem_units = str(vdc_resource.ComputeCapacity.Memory.Units)
            res.mem_allocated = int(
                vdc_resource.ComputeCapacity.Memory.Allocated)
            res.mem_limit = int(vdc_resource.ComputeCapacity.Memory.Limit)

            res.nic_quota = int(vdc_resource.NicQuota)
            res.network_quota = int(vdc_resource.NetworkQuota)
            res.vm_quota = int(vdc_resource.VmQuota)

            #res.storage_profiles = str(vdc_resource.VdcStorageProfiles.VdcStorageProfile.get('name'))

            #res.resource_guaranteed_memory = str(result.resource_guaranteed_memory)
            #res.resource_guaranteed_cpu = str(result.resource_guaranteed_cpu)

            res.vcpu_in_mhz = int(vdc_resource.VCpuInMhz2)

            #res.is_thin_provision = str(result.is_thin_provision)
            #res.network_pool_name = str(result.network_pool_name)
            #res.uses_fast_provisioning = str(result.uses_fast_provisioning)
            #res.over_commit_allowed = str(result.over_commit_allowed)
            #res.vm_discovery_enabled = str(result.vm_discovery_enabled)

            res.is_enabled = vdc_resource.IsEnabled
            res.present = True
        except Exception as e:
            error_message = '__ERROR_read[Vdc] failed for Vdc {0}. __ErrorMessage__ {1}'.format(
                self.name, str(e))
            logging.warn(error_message)
            #context.set_code(grpc.StatusCode.INVALID_ARGUMENT)
            #context.set_details(error_message)
            return res
        logging.info("__DONE__read[Vdc]")
        return res
Пример #26
0
 def test_04_remove_vdc_access(self):
     logged_in_org = self.client.get_org()
     org = Org(self.client, resource=logged_in_org)
     vdc_resource = org.get_vdc(self.config['vcd']['vdc'])
     vdc = VDC(self.client, resource=vdc_resource)
     control_access = vdc.remove_access_settings(
         access_settings_list=[
             {'name': self.config['vcd']['access_user'], 'type': 'user'}
         ])
     assert len(control_access.AccessSettings.AccessSetting) == 1
Пример #27
0
    def test_020_get_all_disks(self):
        logged_in_org = self.client.get_org()
        org = Org(self.client, resource=logged_in_org)
        vdc_resource = org.get_vdc(self.config['vcd']['vdc'])
        vdc = VDC(self.client, resource=vdc_resource)

        disks = vdc.get_disks()

        assert len(disks) > 0
        assert disks[0].get('name') == self.config['vcd']['idisk_name']
Пример #28
0
    def test_030_get_disk_by_name(self):
        logged_in_org = self.client.get_org()
        org = Org(self.client, resource=logged_in_org)
        vdc_resource = org.get_vdc(self.config['vcd']['vdc'])
        vdc = VDC(self.client, resource=vdc_resource)

        fetched_disk = vdc.get_disk(name=self.config['vcd']['idisk_name'])

        assert fetched_disk is not None
        assert fetched_disk.get('name') == self.config['vcd']['idisk_name']
    def delete(self, request):
        logging.info("__INIT__delete[VappVm]")
        res = vapp_vm_pb2.DeleteVappVmResult()
        res.deleted = False
        org_resource = self.client.get_org()
        org = Org(self.client, resource=org_resource)
        try:
            vdc_resource = org.get_vdc(request.target_vdc)
            vdc = VDC(
                self.client, name=request.target_vdc, resource=vdc_resource)

            vapp_resource = vdc.get_vapp(request.target_vapp)
            vapp = VApp(
                self.client, name=request.target_vapp, resource=vapp_resource)

            # Before deleting power_off vm
            # self.power_off(request.target_vdc, request.target_vapp)

            # Before deleting undeploy vm
            self.undeploy(request)

            vms = [request.target_vm_name]
            delete_vapp_vm_resp = vapp.delete_vms(vms)
            task = self.client.get_task_monitor().wait_for_status(
                task=delete_vapp_vm_resp,
                timeout=60,
                poll_frequency=2,
                fail_on_statuses=None,
                expected_target_statuses=[
                    TaskStatus.SUCCESS, TaskStatus.ABORTED, TaskStatus.ERROR,
                    TaskStatus.CANCELED
                ],
                callback=None)

            st = task.get('status')
            if st != TaskStatus.SUCCESS.value:
                raise errors.VappVmDeleteError(
                    etree.tostring(task, pretty_print=True))

            message = 'delete vapp_vm status : {0} '.format(st)
            logging.info(message)
            res.deleted = True

        except Exception as e:
            res.deleted = False
            errmsg = '__ERROR_delete[VappVm] failed for VappVm {0}. __ErrorMessage__ {1}'
            logging.warn(errmsg.format(request.target_vm_name, str(e)))
            self.context.set_code(grpc.StatusCode.INVALID_ARGUMENT)
            self.context.set_details(errmsg)

            return res

        logging.info("__DONE__delete[VappVm]")

        return res
Пример #30
0
    def test_040_get_disk_by_id(self):
        logged_in_org = self.client.get_org()
        org = Org(self.client, resource=logged_in_org)
        vdc_resource = org.get_vdc(self.config['vcd']['vdc'])
        vdc = VDC(self.client, resource=vdc_resource)

        disks = vdc.get_disks()
        assert len(disks) > 0

        fetched_disk = vdc.get_disk(disk_id=disks[0].get('id'))
        assert fetched_disk is not None
    def get_source_resource(self):
        source_catalog_name = self.params.get('source_catalog_name')
        source_template_name = self.params.get('source_template_name')
        source_vdc = self.params.get('source_vdc')
        source_vapp = self.params.get('source_vapp')
        org_resource = Org(self.client, resource=self.client.get_org())
        source_vapp_resource = None

        if source_vapp:
            source_vdc_resource = VDC(
                self.client, resource=org_resource.get_vdc(source_vdc))
            source_vapp_resource_href = source_vdc_resource.get_resource_href(
                name=source_vapp, entity_type=EntityType.VAPP)
            source_vapp_resource = self.client.get_resource(
                source_vapp_resource_href)

        if source_catalog_name:
            catalog_item = org_resource.get_catalog_item(
                source_catalog_name, source_template_name)
            source_vapp_resource = self.client.get_resource(
                catalog_item.Entity.get('href'))

        return source_vapp_resource
Пример #32
0
 def test_0008_shutdown_vm(self):
     logged_in_org = self.client.get_org()
     org = Org(self.client, resource=logged_in_org)
     v = org.get_vdc(self.config['vcd']['vdc'])
     vdc = VDC(self.client, href=v.get('href'))
     assert self.config['vcd']['vdc'] == vdc.get_resource().get('name')
     vapp_resource = vdc.get_vapp(self.config['vcd']['vapp'])
     assert vapp_resource.get('name') == self.config['vcd']['vapp']
     vapp = VApp(self.client, resource=vapp_resource)
     vm_resource = vapp.get_vm(self.config['vcd']['vm'])
     vm = VM(self.client, resource=vm_resource)
     result = vm.shutdown()
     task = self.client.get_task_monitor().wait_for_status(
         task=result,
         timeout=60,
         poll_frequency=2,
         fail_on_statuses=None,
         expected_target_statuses=[
             TaskStatus.SUCCESS, TaskStatus.ABORTED, TaskStatus.ERROR,
             TaskStatus.CANCELED
         ],
         callback=None)
     assert task.get('status') == TaskStatus.SUCCESS.value
Пример #33
0
def main():
    argument_spec = vcd_fetch_vapps_argument_spec()
    response = dict(msg=dict(type='str'), vapps=[])
    module = VcdAnsibleModule(argument_spec=argument_spec,
                              supports_check_mode=True)

    try:
        vdc = module.params['vdc']
        client = module.client
        org_resource = client.get_org()
        org = Org(client, resource=org_resource)
        vdc_resource = org.get_vdc(vdc)
        vdc = VDC(client, resource=vdc_resource)
        vapps = vdc.list_resources(EntityType.VAPP)

        for vapp in vapps:
            response['vapps'].append(vapp.get('name'))

    except Exception as error:
        response['msg'] = error.__str__()
        module.fail_json(**response)

    module.exit_json(**response)
Пример #34
0
    def test_010_create_disk(self):
        logged_in_org = self.client.get_org()
        org = Org(self.client, resource=logged_in_org)
        vdc_resource = org.get_vdc(self.config['vcd']['vdc'])
        vdc = VDC(self.client, resource=vdc_resource)

        result = vdc.create_disk(
            name=self.config['vcd']['idisk_name'],
            size=self.config['vcd']['idisk_size'],
            description=self.config['vcd']['idisk_description'])

        task = self.client.get_task_monitor().wait_for_status(
            task=result.Tasks.Task[0],
            timeout=30,
            poll_frequency=2,
            fail_on_status=None,
            expected_target_statuses=[
                TaskStatus.SUCCESS, TaskStatus.ABORTED, TaskStatus.ERROR,
                TaskStatus.CANCELED
            ],
            callback=None)

        assert task.get('status') == TaskStatus.SUCCESS.value
Пример #35
0
 def test_0002_modify_memory(self):
     logged_in_org = self.client.get_org()
     org = Org(self.client, resource=logged_in_org)
     vdc_resource = org.get_vdc(self.config['vcd']['vdc'])
     vdc = VDC(self.client, resource=vdc_resource)
     assert self.config['vcd']['vdc'] == vdc.get_resource().get('name')
     vapp_resource = vdc.get_vapp(self.config['vcd']['vapp'])
     vapp = VApp(self.client, resource=vapp_resource)
     vm_resource = vapp.get_vm(self.config['vcd']['vm'])
     vm = VM(self.client, resource=vm_resource)
     task = vm.modify_memory(self.config['vcd']['memory'])
     task = self.client.get_task_monitor().wait_for_status(
         task=task,
         timeout=60,
         poll_frequency=2,
         fail_on_statuses=None,
         expected_target_statuses=[
             TaskStatus.SUCCESS, TaskStatus.ABORTED, TaskStatus.ERROR,
             TaskStatus.CANCELED
         ],
         callback=None)
     assert task.get('status') == TaskStatus.SUCCESS.value
     vm.reload()
     assert vm.get_memory() == self.config['vcd']['memory']
Пример #36
0
 def test_1006_snapshot_create(self):
     logged_in_org = self.client.get_org()
     org = Org(self.client, resource=logged_in_org)
     vdc_resource = org.get_vdc(self.config['vcd']['vdc'])
     vdc = VDC(self.client, resource=vdc_resource)
     assert self.config['vcd']['vdc'] == vdc.get_resource().get('name')
     vapp_resource = vdc.get_vapp(self.config['vcd']['vapp'])
     assert vapp_resource.get('name') == self.config['vcd']['vapp']
     vapp = VApp(self.client, resource=vapp_resource)
     vm_resource = vapp.get_vm(self.config['vcd']['vm'])
     assert vm_resource.get('name') == self.config['vcd']['vm']
     vm = VM(self.client, resource=vm_resource)
     task = vm.snapshot_create(memory=False, quiesce=False)
     task = self.client.get_task_monitor().wait_for_status(
         task=task,
         timeout=120,
         poll_frequency=2,
         fail_on_statuses=None,
         expected_target_statuses=[
             TaskStatus.SUCCESS, TaskStatus.ABORTED, TaskStatus.ERROR,
             TaskStatus.CANCELED
         ],
         callback=None)
     assert task.get('status') == TaskStatus.SUCCESS.value
Пример #37
0
 def test_001_instantiate_vapp(self):
     logged_in_org = self.client.get_org()
     org = Org(self.client, resource=logged_in_org)
     v = org.get_vdc(self.config['vcd']['vdc'])
     vdc = VDC(self.client, href=v.get('href'))
     assert self.config['vcd']['vdc'] == vdc.get_resource().get('name')
     result = vdc.instantiate_vapp(self.config['vcd']['vapp'],
                                   self.config['vcd']['catalog'],
                                   self.config['vcd']['template'],
                                   network='net2',
                                   fence_mode='natRouted',
                                   deploy=False,
                                   power_on=False)
     task = self.client.get_task_monitor().wait_for_status(
         task=result.Tasks.Task[0],
         timeout=60,
         poll_frequency=2,
         fail_on_status=None,
         expected_target_statuses=[
             TaskStatus.SUCCESS, TaskStatus.ABORTED, TaskStatus.ERROR,
             TaskStatus.CANCELED
         ],
         callback=None)
     assert task.get('status') == TaskStatus.SUCCESS.value
Пример #38
0
 def test_0002_add_vm(self):
     logged_in_org = self.client.get_org()
     org = Org(self.client, resource=logged_in_org)
     vdc_resource = org.get_vdc(self.config['vcd']['vdc'])
     vdc = VDC(self.client, href=vdc_resource.get('href'))
     assert self.config['vcd']['vdc'] == vdc.get_resource().get('name')
     vapp_resource = vdc.get_vapp(self.config['vcd']['vapp'])
     assert vapp_resource.get('name') == self.config['vcd']['vapp']
     vapp = VApp(self.client, resource=vapp_resource)
     catalog_item = org.get_catalog_item(self.config['vcd']['catalog'],
                                         self.config['vcd']['template'])
     source_vapp_resource = self.client.get_resource(
         catalog_item.Entity.get('href'))
     spec = {
         'source_vm_name': self.config['vcd']['vm'],
         'vapp': source_vapp_resource
     }
     spec['target_vm_name'] = self.config['vcd']['hostname']
     spec['hostname'] = self.config['vcd']['hostname']
     spec['network'] = self.config['vcd']['network']
     spec['ip_allocation_mode'] = self.config['vcd']['ip_allocation_mode']
     spec['storage_profile'] = vdc.get_storage_profile(
         self.config['vcd']['storage_profile'])
     vms = [spec]
     result = vapp.add_vms(vms)
     task = self.client.get_task_monitor().wait_for_status(
         task=result,
         timeout=60,
         poll_frequency=2,
         fail_on_statuses=None,
         expected_target_statuses=[
             TaskStatus.SUCCESS, TaskStatus.ABORTED, TaskStatus.ERROR,
             TaskStatus.CANCELED
         ],
         callback=None)
     assert task.get('status') == TaskStatus.SUCCESS.value
Пример #39
0
    def test_008_update_disk_storage_profile(self):
        logged_in_org = self.client.get_org()

        org = Org(self.client, resource=logged_in_org)
        v = org.get_vdc(self.config['vcd']['vdc'])
        vdc = VDC(self.client, href=v.get('href'))

        taskObj = vdc.update_disk(self.config['vcd']['disk'], "3072",
                                  "DiskUpdated", "3 GB Disk", "*", "200")

        task = self.client.get_task_monitor().wait_for_status(
            task=taskObj,
            timeout=30,
            poll_frequency=2,
            fail_on_status=None,
            expected_target_statuses=[
                TaskStatus.SUCCESS, TaskStatus.ABORTED, TaskStatus.ERROR,
                TaskStatus.CANCELED
            ],
            callback=None)
        assert task.get('status') == TaskStatus.SUCCESS.value

        print(("Updating VDC disk: " +
               str(etree.tostring(task, pretty_print=True), "utf-8")))
Пример #40
0
    def create_cluster_thread(self):
        network_name = self.body['network']
        try:
            clusters = load_from_metadata(self.client_tenant,
                                          name=self.cluster_name)
            if len(clusters) != 0:
                raise Exception('Cluster already exists.')
            org_resource = self.client_tenant.get_org()
            org = Org(self.client_tenant, resource=org_resource)
            vdc_resource = org.get_vdc(self.body['vdc'])
            vdc = VDC(self.client_tenant, resource=vdc_resource)
            template = self.get_template()
            self.update_task(TaskStatus.RUNNING,
                             self.op,
                             message='Creating cluster vApp %s(%s)' %
                             (self.cluster_name, self.cluster_id))
            vapp_resource = vdc.create_vapp(self.cluster_name,
                                            description='cluster %s' %
                                            self.cluster_name,
                                            network=network_name,
                                            fence_mode='bridged')
            t = self.client_tenant.get_task_monitor().wait_for_status(
                task=vapp_resource.Tasks.Task[0],
                timeout=60,
                poll_frequency=2,
                fail_on_status=None,
                expected_target_statuses=[
                    TaskStatus.SUCCESS, TaskStatus.ABORTED, TaskStatus.ERROR,
                    TaskStatus.CANCELED
                ],
                callback=None)
            assert t.get('status').lower() == TaskStatus.SUCCESS.value
            tags = {}
            tags['cse.cluster.id'] = self.cluster_id
            tags['cse.version'] = pkg_resources.require(
                'container-service-extension')[0].version
            tags['cse.template'] = template['name']
            vapp = VApp(self.client_tenant, href=vapp_resource.get('href'))
            for k, v in tags.items():
                t = vapp.set_metadata('GENERAL', 'READWRITE', k, v)
                self.client_tenant.get_task_monitor().\
                    wait_for_status(
                        task=t,
                        timeout=600,
                        poll_frequency=5,
                        fail_on_status=None,
                        expected_target_statuses=[TaskStatus.SUCCESS],
                        callback=None)
            self.update_task(TaskStatus.RUNNING,
                             self.op,
                             message='Creating master node for %s(%s)' %
                             (self.cluster_name, self.cluster_id))
            vapp.reload()
            add_nodes(1,
                      template,
                      TYPE_MASTER,
                      self.config,
                      self.client_tenant,
                      org,
                      vdc,
                      vapp,
                      self.body,
                      wait=True)

            self.update_task(TaskStatus.RUNNING,
                             self.op,
                             message='Initializing cluster %s(%s)' %
                             (self.cluster_name, self.cluster_id))

            vapp.reload()
            init_cluster(self.config, vapp, template)

            master_ip = get_master_ip(self.config, vapp, template)
            t = vapp.set_metadata('GENERAL', 'READWRITE', 'cse.master.ip',
                                  master_ip)
            self.client_tenant.get_task_monitor().\
                wait_for_status(
                    task=t,
                    timeout=600,
                    poll_frequency=5,
                    fail_on_status=None,
                    expected_target_statuses=[TaskStatus.SUCCESS],
                    callback=None)

            if self.body['node_count'] > 0:

                self.update_task(TaskStatus.RUNNING,
                                 self.op,
                                 message='Creating %s node(s) for %s(%s)' %
                                 (self.body['node_count'], self.cluster_name,
                                  self.cluster_id))
                add_nodes(self.body['node_count'],
                          template,
                          TYPE_NODE,
                          self.config,
                          self.client_tenant,
                          org,
                          vdc,
                          vapp,
                          self.body,
                          wait=True)
                self.update_task(TaskStatus.RUNNING,
                                 self.op,
                                 message='Adding %s node(s) to %s(%s)' %
                                 (self.body['node_count'], self.cluster_name,
                                  self.cluster_id))
                vapp.reload()
                join_cluster(self.config, vapp, template)

            self.update_task(TaskStatus.SUCCESS,
                             self.op,
                             message='Created cluster %s(%s)' %
                             (self.cluster_name, self.cluster_id))

        except Exception as e:
            LOGGER.error(traceback.format_exc())
            self.update_task(TaskStatus.ERROR, self.op, error_message=str(e))
Пример #41
0
    print("User now exists: {0}".format(user_resource.get('name')))

# Ensure the user is enabled.  We could also do so when creating the user
# but this approach will also fix an existing user who is disabled.
user_dict = to_dict(user_resource)
if user_dict.get('IsEnabled') == 'true':
    print("User is enabled: {0}".format(user_dict.get('name')))
else:
    print("User is not enabled, enabling...")
    org.update_user(user_name=user_dict.get('name'), is_enabled=True)
    print("User is now enabled: {0}".format(user_dict.get('name')))

# Ensure VDC exists.  If we create it reload the org as it affects
# org resource contents and future calls might fail otherwise.
try:
    vdc_resource = org.get_vdc(cfg.vdc['vdc_name'])
    vdc = VDC(client, resource=vdc_resource)
    print("VDC already exists: {0}".format(vdc.name))
except Exception:
    print("VDC does not exist, creating: {0}".format(cfg.vdc['vdc_name']))
    vdc_kwargs = cfg.vdc
    # Vet the netpool and pvcd arguments as either can be '*' in which 
    # case we need to find default values. 
    _fill_in_pvdc_default(client, vdc_kwargs)
    _fill_in_netpool_default(client, vdc_kwargs)
    # Now create the VDC.  
    admin_vdc_resource = org.create_org_vdc(**vdc_kwargs)
    # The 'admin_vdc_resource' is not a task but an AdminVdc entity.  Tasks
    # are two levels down.
    handle_task(client, admin_vdc_resource.Tasks.Task[0])
    org.reload()
Пример #42
0
config.read(CONF_PATH)

host = config['Main']['Host']
org = config['Main']['Org']
user = config['Main']['User']
password = config['Main']['Password']
vdc = config['Main']['Vdc']

db = ialab_db(config)
ldap = ldapConnection(config)
client = login(user, org, password)

org_resource = client.get_org()
org = Org(client, resource=org_resource)

vdc_resource = org.get_vdc(vdc)
vdc = VDC(client, resource=vdc_resource)

users = org.list_users()
for user in users:
    name = user.attrib['name']
    fullName = user.attrib['fullName']
    href = user.attrib['href']

    if db.checkIalabUserExistsByID(href) == False:
        print(name)
        db.insertIalabUser(name, href, fullName)
        ldapUsers = ldap.getUserByUsername(name)
        for ldapUser in ldapUsers:
            ldap_username = ldapUser[0]
            for email in ldapUser[1]:
Пример #43
0
    def org_info(self):
        response = dict()
        response['changed'] = False
        response['json'] = list()
        ##
        org_details = dict()
        org_name = self.params.get('org')
        resource = self.client.get_org_by_name(org_name)
        org = Org(self.client, resource=resource)
        org_admin_resource = org.client.get_resource(org.href_admin)
        #org_details['token'] = str(self.client.get_xvcloud_authorization_token())
        org_details['href'] = str(org.href_admin)
        org_details['name'] = str(org_admin_resource['FullName'])
        org_details['description'] = str(org_admin_resource['Description'])
        org_details['enabled'] = str(org_admin_resource['IsEnabled'])
        org_details['users'] = list()
        org_details['vdcs'] = list()

        ## Users/UserReference
        for user in org_admin_resource['Users']['UserReference']:
            org_details['users'].append({
                'name': user.get('name'),
                'href': user.get('href')
            })
        ## Vdcs/Vdc
        for vdc in org_admin_resource['Vdcs']['Vdc']:
            vdc_resources = self.client.get_resource(vdc.get('href'))
            ## ResourceEntities/ResourceEntity
            vapps = list()
            try:
                vdc_resources['ResourceEntities']['ResourceEntity']
            except AttributeError:
                vapps = list()
            else:
                for vapp in vdc_resources['ResourceEntities'][
                        'ResourceEntity']:
                    if "vApp+" in vapp.get('type'):
                        vapp_resourses = self.client.get_resource(
                            vapp.get('href'))
                        vms = list()
                        try:
                            vapp_resourses['Children']
                        except AttributeError:
                            vms = list()
                        else:
                            for vm in vapp_resourses['Children']['Vm']:
                                vm_info = self.vm_info(name=vm.get('name'),
                                                       vapp=vapp.get('name'))
                                vms = vm_info['json']
                            if len(vms) > 0:
                                vapps.append({
                                    'href': str(vapp.get('href')),
                                    'name': str(vapp.get('name')),
                                    'vms': vms
                                })
            ## AvailableNetworks/Network
            nets = list()
            for net in vdc_resources['AvailableNetworks']['Network']:
                nets.append({
                    'href': str(net.get('href')),
                    'name': str(net.get('name'))
                })
            ## VdcStorageProfiles/VdcStorageProfile
            storages = list()

            for storage in vdc_resources['VdcStorageProfiles'][
                    'VdcStorageProfile']:
                storage_resources = self.client.get_resource(
                    str(storage.get('href')))
                storages.append({
                    'href':
                    str(storage.get('href')),
                    'name':
                    str(storage.get('name')),
                    'units':
                    str(storage_resources['Units']),
                    'total':
                    str(storage_resources['Limit']),
                    'used':
                    str(storage_resources['StorageUsedMB']),
                    'free':
                    str(storage_resources['Limit'] -
                        storage_resources['StorageUsedMB'])
                })

            vdc_name = vdc.get('name')
            vdc_resource = org.get_vdc(vdc_name)
            vdcenter = VDC(self.client, name=vdc_name, resource=vdc_resource)
            gateways = vdcenter.list_edge_gateways()

            org_details['vdcs'].append({
                'name': vdc.get('name'),
                'href': vdc.get('href'),
                'cpu': {
                    'units':
                    str(vdc_resources['ComputeCapacity']['Cpu']['Units']),
                    'total':
                    str(vdc_resources['ComputeCapacity']['Cpu']['Limit']),
                    'used':
                    str(vdc_resources['ComputeCapacity']['Cpu']['Used']),
                    'free':
                    str(vdc_resources['ComputeCapacity']['Cpu']['Limit'] -
                        vdc_resources['ComputeCapacity']['Cpu']['Used'])
                },
                'ram': {
                    'units':
                    str(vdc_resources['ComputeCapacity']['Memory']['Units']),
                    'total':
                    str(vdc_resources['ComputeCapacity']['Memory']['Limit']),
                    'used':
                    str(vdc_resources['ComputeCapacity']['Memory']['Used']),
                    'free':
                    str(vdc_resources['ComputeCapacity']['Memory']['Limit'] -
                        vdc_resources['ComputeCapacity']['Memory']['Used'])
                },
                'vapps': vapps,
                'networks': nets,
                'storages': storages,
                'gateways': gateways
            })
        ## Networks/Network
        ## Catalogs/CatalogReference
        response['json'] = org_details
        ##
        response['changed'] = True
        return response
class Vdc(VcdAnsibleModule):
    def __init__(self, **kwargs):
        super(Vdc, self).__init__(**kwargs)
        logged_in_org = self.client.get_org()
        self.org = Org(self.client, resource=logged_in_org)

    def manage_states(self):
        state = self.params.get('state')
        if state == 'present':
            return self.create()

        if state == 'absent':
            return self.delete()

        if state == 'update':
            return self.update()

    def create(self):
        vdc_name = self.params.get('vdc_name')
        is_enabled = self.params.get('is_enabled')
        provider_vdc_name = self.params.get('provider_vdc_name')
        description = self.params.get('description')
        allocation_model = self.params.get('allocation_model')
        storage_profiles = json.loads(self.params.get('storage_profiles'))
        cpu_units = self.params.get('cpu_units')
        cpu_allocated = self.params.get('cpu_allocated')
        cpu_limit = self.params.get('cpu_limit')
        mem_units = self.params.get('mem_units')
        mem_allocated = self.params.get('mem_allocated')
        mem_limit = self.params.get('mem_limit')
        nic_quota = self.params.get('nic_quota')
        network_quota = self.params.get('network_quota')
        vm_quota = self.params.get('vm_quota')
        resource_guaranteed_memory = self.params.get(
            'resource_guaranteed_memory')
        resource_guaranteed_cpu = self.params.get('resource_guaranteed_cpu')
        vcpu_in_mhz = self.params.get('vcpu_in_mhz')
        is_thin_provision = self.params.get('is_thin_provision')
        network_pool_name = self.params.get('network_pool_name')
        uses_fast_provisioning = self.params.get('uses_fast_provisioning')
        over_commit_allowed = self.params.get('over_commit_allowed')
        vm_discovery_enabled = self.params.get('vm_discovery_enabled')
        storage_profiles = storage_profiles if type(
            storage_profiles) is list else [storage_profiles]
        response = dict()
        response['changed'] = False

        try:
            self.org.get_vdc(vdc_name)
        except EntityNotFoundException:
            create_vdc_task = self.org.create_org_vdc(
                vdc_name=vdc_name,
                provider_vdc_name=provider_vdc_name,
                description=description,
                allocation_model=allocation_model,
                storage_profiles=storage_profiles,
                cpu_units=cpu_units,
                cpu_allocated=cpu_allocated,
                cpu_limit=cpu_limit,
                mem_units=mem_units,
                mem_allocated=mem_allocated,
                mem_limit=mem_limit,
                nic_quota=nic_quota,
                network_quota=network_quota,
                vm_quota=vm_quota,
                resource_guaranteed_memory=resource_guaranteed_memory,
                resource_guaranteed_cpu=resource_guaranteed_cpu,
                vcpu_in_mhz=vcpu_in_mhz,
                is_thin_provision=is_thin_provision,
                network_pool_name=network_pool_name,
                uses_fast_provisioning=uses_fast_provisioning,
                over_commit_allowed=over_commit_allowed,
                vm_discovery_enabled=vm_discovery_enabled,
                is_enabled=is_enabled)

            self.execute_task(create_vdc_task.Tasks.Task[0])
            response['msg'] = 'VDC {} has been created.'.format(vdc_name)
            response['changed'] = True
        else:
            response['warnings'] = 'VDC {} is already present.'.format(
                vdc_name)

        return response

    def update(self):
        vdc_name = self.params.get('vdc_name')
        is_enabled = self.params.get('is_enabled')
        response = dict()
        response['changed'] = False

        vdc_resource = self.org.get_vdc(vdc_name)
        vdc = VDC(self.client, name=vdc_name, resource=vdc_resource)
        vdc.enable_vdc(enable=is_enabled)
        response['msg'] = 'VDC {} has been updated.'.format(vdc_name)
        response['changed'] = True

        return response

    def delete(self):
        vdc_name = self.params.get('vdc_name')
        response = dict()
        response['changed'] = False

        try:
            vdc_resource = self.org.get_vdc(vdc_name)
        except EntityNotFoundException:
            response['warnings'] = 'VDC {} is not present.'.format(vdc_name)
        else:
            vdc = VDC(self.client, name=vdc_name, resource=vdc_resource)
            vdc.enable_vdc(enable=False)
            delete_vdc_task = vdc.delete_vdc()
            self.execute_task(delete_vdc_task)
            response['msg'] = 'VDC {} has been deleted.'.format(vdc_name)
            response['changed'] = True

        return response
Пример #45
0
class Vapp(VcdAnsibleModule):
    def __init__(self, **kwargs):
        super(Vapp, self).__init__(**kwargs)
        logged_in_org = self.client.get_org()
        self.org = Org(self.client, resource=logged_in_org)
        vdc_resource = self.org.get_vdc(self.params.get('vdc'))
        self.vdc = VDC(self.client, href=vdc_resource.get('href'))

    def manage_states(self):
        state = self.params.get('state')
        if state == "present":
            return self.create()

        if state == "absent":
            return self.delete()

    def manage_operations(self):
        state = self.params.get('operation')
        if state == "poweron":
            return self.power_on()

        if state == "poweroff":
            return self.power_off()

        if state == "deploy":
            return self.deploy()

        if state == "undeploy":
            return self.undeploy()

    def create(self):
        params = self.params
        vapp_name = params.get('vapp_name')
        catalog_name = params.get('catalog_name')
        template_name = params.get('template_name')
        description = params.get('description')
        network = params.get('network')
        fence_mode = params.get('fence_mode')
        ip_allocation_mode = params.get('ip_allocation_mode')
        deploy = params.get('deploy')
        power_on = params.get('power_on')
        accept_all_eulas = params.get('accept_all_eulas')
        memory = params.get('memory')
        cpu = params.get('cpu')
        disk_size = params.get('disk_size')
        vmpassword = params.get('vmpassword')
        cust_script = params.get('cust_script')
        vm_name = params.get('vm_name')
        hostname = params.get('hostname')
        ip_address = params.get('ip_address')
        storage_profile = params.get('storage_profile')
        network_adapter_type = params.get('network_adapter_type')
        response = dict()
        response['changed'] = False

        try:
            self.vdc.get_vapp(vapp_name)
        except EntityNotFoundException:
            create_vapp_task = self.vdc.instantiate_vapp(
                name=vapp_name,
                catalog=catalog_name,
                template=template_name,
                description=description,
                network=network,
                fence_mode=fence_mode,
                ip_allocation_mode=ip_allocation_mode,
                deploy=deploy,
                power_on=power_on,
                accept_all_eulas=accept_all_eulas,
                memory=memory,
                cpu=cpu,
                disk_size=disk_size,
                password=vmpassword,
                cust_script=cust_script,
                vm_name=vm_name,
                hostname=hostname,
                ip_address=ip_address,
                storage_profile=storage_profile,
                network_adapter_type=network_adapter_type)
            self.execute_task(create_vapp_task.Tasks.Task[0])
            response['msg'] = 'Vapp {} has been created.'.format(vapp_name)
            response['changed'] = True
        else:
            response['warnings'] = "Vapp {} is already present.".format(
                vapp_name)

        return response

    def delete(self):
        vapp_name = self.params.get('vapp_name')
        force = self.params.get('force')
        response = dict()
        response['changed'] = False

        try:
            self.vdc.get_vapp(vapp_name)
        except EntityNotFoundException:
            response['warnings'] = "Vapp {} is not present.".format(vapp_name)
        else:
            delete_vapp_task = self.vdc.delete_vapp(name=vapp_name,
                                                    force=force)
            self.execute_task(delete_vapp_task)
            response['msg'] = 'Vapp {} has been deleted.'.format(vapp_name)
            response['changed'] = True

        return response

    def power_on(self):
        vapp_name = self.params.get('vapp_name')
        response = dict()
        response['changed'] = False

        try:
            vapp_resource = self.vdc.get_vapp(vapp_name)
            vapp = VApp(self.client, name=vapp_name, resource=vapp_resource)
            power_on_vapp_task = vapp.power_on()
            self.execute_task(power_on_vapp_task)
            response['msg'] = 'Vapp {} has been powered on.'.format(vapp_name)
            response['changed'] = True
        except OperationNotSupportedException:
            response['warnings'] = 'Vapp {} is already powered on.'.format(
                vapp_name)

        return response

    def power_off(self):
        vapp_name = self.params.get('vapp_name')
        response = dict()
        response['changed'] = False

        try:
            vapp_resource = self.vdc.get_vapp(vapp_name)
            vapp = VApp(self.client, name=vapp_name, resource=vapp_resource)
            power_off_vapp_task = vapp.power_off()
            self.execute_task(power_off_vapp_task)
            response['msg'] = 'Vapp {} has been powered off.'.format(vapp_name)
            response['changed'] = True
        except OperationNotSupportedException:
            response['warnings'] = 'Vapp {} is already powered off.'.format(
                vapp_name)

        return response

    def deploy(self):
        vapp_name = self.params.get('vapp_name')
        response = dict()
        response['changed'] = False

        try:
            vapp_resource = self.vdc.get_vapp(vapp_name)
            vapp = VApp(self.client, name=vapp_name, resource=vapp_resource)
            deploy_vapp_task = vapp.deploy()
            self.execute_task(deploy_vapp_task)
            response['msg'] = 'Vapp {} has been deployed.'.format(vapp_name)
            response['changed'] = True
        except OperationNotSupportedException:
            response['warnings'] = 'Vapp {} is already deployed.'.format(
                vapp_name)

        return response

    def undeploy(self):
        vapp_name = self.params.get('vapp_name')
        response = dict()
        response['changed'] = False

        try:
            vapp_resource = self.vdc.get_vapp(vapp_name)
            vapp = VApp(self.client, name=vapp_name, resource=vapp_resource)
            undeploy_vapp_task = vapp.undeploy()
            self.execute_task(undeploy_vapp_task)
            response['msg'] = 'Vapp {} has been undeployed.'.format(vapp_name)
            response['changed'] = True
        except OperationNotSupportedException:
            response['warnings'] = 'Vapp {} is already undeployed.'.format(
                vapp_name)

        return response
def create(client, context, vappInfo):
    logging.debug('__INIT__vapp_create [ {0} ]'.format(vappInfo))
    cresult = vapp_pb2.CreateVAppResult()
    cresult.created = False
    #cresult.in_vapp_info=vapp_pb2.CreateVAppInfo()
    cresult.in_vapp_info.CopyFrom(vappInfo)
    try:
        logged_in_org = client.get_org()
        org = Org(client, resource=logged_in_org)
        v = org.get_vdc(vappInfo.vdc)
        if v is None:
            raise errors.VDCNotFoundError(vappInfo.vdc)
        vdc = VDC(client, href=v.get('href'))

        logging.info("__LOG__vapp_create_calling instantiate_vapp............")

        network = None
        memory = None
        storage_profile = None
        accept_all_eulas = False
        power_on = False
        if vappInfo.network:
            network = vappInfo.network
        if vappInfo.memory:
            memory = vappInfo.memory
        if vappInfo.storage_profile:
            storage_profile = vappInfo.storage_profile
        if vappInfo.accept_all_eulas:
            accept_all_eulas = vappInfo.accept_all_eulas
        if vappInfo.power_on:
            power_on = vappInfo.power_on

        logging.info(
            "__LOG__ CREATE VAPP Params - MEMORY = [%s] NETWORK = [%s] storage_profile =[%s] ",
            memory, network, storage_profile)

        result = vdc.instantiate_vapp(name=vappInfo.name,
                                      catalog=vappInfo.catalog_name,
                                      template=vappInfo.template_name,
                                      network=network,
                                      memory=memory,
                                      cpu=vappInfo.cpu,
                                      power_on=power_on,
                                      storage_profile=storage_profile,
                                      accept_all_eulas=accept_all_eulas)

        task = client.get_task_monitor().wait_for_status(
            task=result.Tasks.Task[0],
            timeout=60,
            poll_frequency=2,
            fail_on_statuses=None,
            expected_target_statuses=[
                TaskStatus.SUCCESS, TaskStatus.ABORTED, TaskStatus.ERROR,
                TaskStatus.CANCELED
            ],
            callback=task_callback)

        st = task.get('status')
        if st == TaskStatus.SUCCESS.value:
            cresult.created = True
        else:
            raise errors.VCDVappCreationError(
                etree.tostring(task, pretty_print=True))

        vapp = vdc.get_vapp(vappInfo.name)
        if vappInfo.power_on is True:
            logging.info("Powering on [Vapp %v]".format(vappInfo.name))
            vapp.power_on()
        else:
            logging.info("Powering off [Vapp %v]".format(vappInfo.name))
            vapp.undeploy()

    except Exception as e:

        error_message = 'ERROR.. Not Created VApp {0}  {1}'.format(
            vappInfo.name, str(e))
        logging.warn(error_message, e)
        context.set_code(grpc.StatusCode.INVALID_ARGUMENT)
        context.set_details(error_message)
    return cresult
Пример #47
0
    # Create an Instance of Org by specifying org's href
    org = Org(client, href=(o.attrib['href']))

    cprint("\nList of all VDCs in the Organization {}".format(o.get('name')),
           'yellow')
    vdclist = org.list_vdcs()
    vdctable = PrettyTable(["Organization", "VDC name", "VDC href"])
    for i in range(len(vdclist)):
        vdctable.add_row(
            [o.get('name'), vdclist[i]['name'], vdclist[i]['href']])
    print(vdctable)

    # Iterate over VDCs to retrieve data about Edges, Org Networks, vAPPs and VMs
    for vdc in vdclist:
        # print("\nFetching VDC {}".format(vdc['name']))
        vdc_resource = org.get_vdc(vdc['name'])
        vdc_instance = VDC(client, resource=vdc_resource)

        cprint("\nList of all Tenant Edges in the VDC {}".format(vdc['name']),
               'yellow')
        edgelist = vdc_instance.list_edge_gateways()
        edgetable = PrettyTable(
            ["Organization", "VDC name", "Edge name", "Edge href"])
        for j in range(len(edgelist)):
            edgetable.add_row([
                o.get('name'), vdc['name'], edgelist[j]['name'],
                edgelist[j]['href']
            ])
        print(edgetable)

        # Retrieve VDC Org Networks ---------------------------------------------------------------
Пример #48
0
class OrgVdcNetwork(VcdAnsibleModule):
    def __init__(self, **kwargs):
        super(OrgVdcNetwork, self).__init__(**kwargs)
        self.vdc_name = self.params.get('vdc_name')
        self.org_name = self.params.get('org_name')
        org_resource = self.client.get_org_by_name(self.org_name)
        self.org = Org(self.client, resource=org_resource)
        vdc_resource = self.org.get_vdc(self.vdc_name)
        self.vdc = VDC(self.client, name=self.vdc_name, resource=vdc_resource)

    def manage_states(self):
        state = self.params.get('state')
        if state == "present":
            return self.create_org_vdc_network()

        if state == "absent":
            return self.delete_org_vdc_network()

    def create_org_vdc_network(self):
        direct = self.params.get('direct')
        isolated = self.params.get('isolated')
        routed = self.params.get('routed')

        if direct:
            return self.create_org_vdc_direct_network()
        elif isolated:
            return self.create_org_vdc_isolated_network()
        elif routed:
            return self.create_org_vdc_routed_network()

        raise ValueError("Bool 'direct', 'isolated' or 'routed' is missing")

    def create_org_vdc_direct_network(self):
        response = dict()
        response['changed'] = False
        network_name = self.params.get('network_name')
        parent_network_name = self.params.get('parent_network_name')
        description = self.params.get('description')
        shared = self.params.get('shared')

        try:
            self.vdc.get_direct_orgvdc_network(network_name)
        except EntityNotFoundException:
            create_task = self.vdc.create_directly_connected_vdc_network(
                network_name,
                parent_network_name,
                description=description,
                is_shared=shared)
            self.execute_task(create_task.Tasks.Task[0])
            msg = 'Org VDC Direct Network {0} has been created'
            response['msg'] = msg.format(network_name)
            response['changed'] = True
        else:
            msg = 'Org VDC Direct Network {0} is already present'
            response['warnings'] = msg.format(network_name)

        return response

    def create_org_vdc_isolated_network(self):
        response = dict()
        response['changed'] = False
        network_name = self.params.get('network_name')
        network_cidr = self.params.get('network_cidr')
        description = self.params.get('description')
        shared = self.params.get('shared')
        primary_dns_ip = self.params.get('primary_dns_ip')
        secondary_dns_ip = self.params.get('secondary_dns_ip')
        dns_suffix = self.params.get('dns_suffix')
        ip_range_start = self.params.get('ip_range_start')
        ip_range_end = self.params.get('ip_range_end')
        dhcp_enabled = self.params.get('dhcp_enabled')
        default_lease_time = self.params.get('default_lease_time')
        max_lease_time = self.params.get('max_lease_time')
        dhcp_ip_range_start = self.params.get('dhcp_ip_range_start')
        dhcp_ip_range_end = self.params.get('dhcp_ip_range_end')

        try:
            self.vdc.get_isolated_orgvdc_network(network_name)
        except EntityNotFoundException:
            create_task = self.vdc.create_isolated_vdc_network(
                network_name,
                network_cidr,
                description=description,
                primary_dns_ip=primary_dns_ip,
                secondary_dns_ip=secondary_dns_ip,
                dns_suffix=dns_suffix,
                ip_range_start=ip_range_start,
                ip_range_end=ip_range_end,
                is_dhcp_enabled=dhcp_enabled,
                default_lease_time=default_lease_time,
                max_lease_time=max_lease_time,
                dhcp_ip_range_start=dhcp_ip_range_start,
                dhcp_ip_range_end=dhcp_ip_range_end,
                is_shared=shared)
            self.execute_task(create_task.Tasks.Task[0])
            msg = 'Org VDC Isolated Network {0} has been created'
            response['msg'] = msg.format(network_name)
            response['changed'] = True

        else:
            msg = 'Org VDC Isolated Network {0} is already present'
            response['warnings'] = msg.format(network_name)

        return response

    def create_org_vdc_routed_network(self):
        response = dict()
        response['changed'] = False
        network_name = self.params.get('network_name')
        gateway_name = self.params.get('gateway_name')
        network_cidr = self.params.get('network_cidr')
        description = self.params.get('description')
        shared = self.params.get('shared')
        primary_dns_ip = self.params.get('primary_dns_ip')
        secondary_dns_ip = self.params.get('secondary_dns_ip')
        dns_suffix = self.params.get('dns_suffix')
        ip_range_start = self.params.get('ip_range_start')
        ip_range_end = self.params.get('ip_range_end')
        guest_vx_vlan_allowed = self.params.get('guest_vx_vlan_allowed')
        sub_interface = self.params.get('sub_interface')
        distributed_interface = self.params.get('distributed_interface')
        retain_net_info_across_deployments = self.params.get(
            'retain_net_info_across_deployments')

        try:
            self.vdc.get_routed_orgvdc_network(network_name)
        except EntityNotFoundException:
            create_task = self.vdc.create_routed_vdc_network(
                network_name,
                gateway_name,
                network_cidr,
                description=description,
                primary_dns_ip=primary_dns_ip,
                secondary_dns_ip=secondary_dns_ip,
                dns_suffix=dns_suffix,
                ip_range_start=ip_range_start,
                ip_range_end=ip_range_end,
                is_shared=shared,
                guest_vx_vlan_allowed=guest_vx_vlan_allowed,
                sub_interface=sub_interface,
                distributed_interface=distributed_interface,
                retain_net_info_across_deployments=
                retain_net_info_across_deployments)
            self.execute_task(create_task.Tasks.Task[0])
            msg = 'Org VDC Routed Network {0} has been created'
            response['msg'] = msg.format(network_name)
            response['changed'] = True

        else:
            msg = 'Org VDC Routed Network {0} is already present'
            response['warnings'] = msg.format(network_name)

        return response

    def delete_org_vdc_network(self):
        response = dict()
        response['changed'] = False
        direct = self.params.get('direct')
        isolated = self.params.get('isolated')
        routed = self.params.get('routed')

        if direct:
            return self.delete_org_vdc_direct_network()

        if isolated:
            return self.delete_org_vdc_isolated_network()

        if routed:
            return self.delete_org_vdc_routed_network()

        raise ValueError("Bool 'direct', 'isolated' or 'routed' is missing")

    def delete_org_vdc_direct_network(self):
        response = dict()
        response['changed'] = False
        network_name = self.params.get('network_name')
        force = self.params.get('force')

        try:
            self.vdc.get_direct_orgvdc_network(network_name)
        except EntityNotFoundException:
            msg = "Org VDC Direct Network {0} is not present"
            response['warnings'] = msg.format(network_name)
        else:
            delete_task = self.vdc.delete_direct_orgvdc_network(network_name,
                                                                force=force)
            self.execute_task(delete_task)
            msg = 'Org VDC Direct Network {} has been deleted'
            response['msg'] = msg.format(network_name)
            response['changed'] = True

        return response

    def delete_org_vdc_isolated_network(self):
        response = dict()
        response['changed'] = False
        network_name = self.params.get('network_name')
        force = self.params.get('force')

        try:
            self.vdc.get_isolated_orgvdc_network(network_name)
        except EntityNotFoundException:
            msg = "Org VDC Direct Network {0} is not present"
            response['warnings'] = msg.format(network_name)
        else:
            delete_task = self.vdc.delete_isolated_orgvdc_network(network_name,
                                                                  force=force)
            self.execute_task(delete_task)
            msg = 'Org VDC Direct Network {} has been deleted'
            response['msg'] = msg.format(network_name)
            response['changed'] = True

        return response

    def delete_org_vdc_routed_network(self):
        response = dict()
        response['changed'] = False
        network_name = self.params.get('network_name')
        force = self.params.get('force')

        try:
            self.vdc.get_routed_orgvdc_network(network_name)
        except EntityNotFoundException:
            msg = "Org VDC Direct Network {0} is not present"
            response['warnings'] = msg.format(network_name)
        else:
            delete_task = self.vdc.delete_routed_orgvdc_network(network_name,
                                                                force=force)
            self.execute_task(delete_task)
            msg = 'Org VDC Direct Network {} has been deleted'
            response['msg'] = msg.format(network_name)
            response['changed'] = True

        return response
Пример #49
0
def install_cse(ctx, config_file_name, template_name, no_capture, update,
                amqp_install, ext_install):
    check_config(config_file_name)
    click.secho('Installing CSE on vCD from file: %s, template: %s' %
                (config_file_name, template_name))
    config = get_config(config_file_name)
    client = Client(config['vcd']['host'],
                    api_version=config['vcd']['api_version'],
                    verify_ssl_certs=config['vcd']['verify'],
                    log_file='cse-install.log',
                    log_headers=True,
                    log_bodies=True)
    client.set_credentials(
        BasicLoginCredentials(config['vcd']['username'], 'System',
                              config['vcd']['password']))
    click.echo(
        'Connected to vCloud Director as system '
        'administrator (%s:%s): %s' %
        (config['vcd']['host'], config['vcd']['port'], bool_to_msg(True)))
    click.secho('Installing  \'%s\' service broker' % config['broker']['type'])
    if config['broker']['type'] == 'default':
        orgs = client.get_org_list()
        org_href = None
        for org in [o for o in orgs.Org if hasattr(orgs, 'Org')]:
            if org.get('name') == config['broker']['org']:
                org_href = org.get('href')
        org = Org(client, href=org_href)
        click.echo('Find org \'%s\': %s' % (org.get_name(), bool_to_msg(True)))
        vdc_resource = org.get_vdc(config['broker']['vdc'])
        click.echo('Find vdc \'%s\': %s' %
                   (vdc_resource.get('name'), bool_to_msg(True)))
        try:
            catalog = org.get_catalog(config['broker']['catalog'])
        except Exception:
            click.secho('Creating catalog %s ' % config['broker']['catalog'],
                        nl=False,
                        fg='green')
            catalog = org.create_catalog(config['broker']['catalog'],
                                         'CSE catalog')
            org.share_catalog(config['broker']['catalog'])
            click.secho('done', fg='blue')
            catalog = org.get_catalog(config['broker']['catalog'])
        click.echo(
            'Find catalog \'%s\': %s' %
            (config['broker']['catalog'], bool_to_msg(catalog is not None)))
        for template in config['broker']['templates']:
            if template_name == '*' or template['name'] == template_name:
                click.secho('Processing template: %s' % template['name'])
                k8s_template = None
                try:
                    k8s_template = org.get_catalog_item(
                        config['broker']['catalog'], template['catalog_item'])
                    click.echo(
                        'Find template \'%s\', \'%s\': %s' %
                        (config['broker']['catalog'], template['catalog_item'],
                         bool_to_msg(k8s_template is not None)))
                except Exception:
                    pass
                try:
                    if k8s_template is None or update:
                        if update:
                            click.secho('Updating template')
                        else:
                            click.secho('Creating template')
                        create_template(ctx, config, client, org, vdc_resource,
                                        catalog, no_capture, template)
                        k8s_template = org.get_catalog_item(
                            config['broker']['catalog'],
                            template['catalog_item'])
                        if update:
                            click.echo('Updated template \'%s\', \'%s\': %s' %
                                       (config['broker']['catalog'],
                                        template['catalog_item'],
                                        bool_to_msg(k8s_template is not None)))
                        else:
                            click.echo('Find template \'%s\', \'%s\': %s' %
                                       (config['broker']['catalog'],
                                        template['catalog_item'],
                                        bool_to_msg(k8s_template is not None)))
                except Exception:
                    LOGGER.error(traceback.format_exc())
                    click.echo('Can\'t create or update template \'%s\' '
                               '\'%s\': %s' %
                               (template['name'], config['broker']['catalog'],
                                template['catalog_item']))
        configure_amqp_settings(ctx, client, config, amqp_install)
        register_extension(ctx, client, config, ext_install)
        click.secho('Start CSE with: \'cse run %s\'' % config_file_name)
    def get_storage_profile(self, profile_name):
        target_vdc = self.params.get('target_vdc')
        org_resource = Org(self.client, resource=self.client.get_org())
        vdc_resource = VDC(self.client, resource=org_resource.get_vdc(target_vdc))

        return vdc_resource.get_storage_profile(profile_name)
class Vdc(VcdAnsibleModule):
    def __init__(self, **kwargs):
        super(Vdc, self).__init__(**kwargs)
        self.org = Org(self.client, resource=self.get_vdc_org_resource())

    def manage_states(self):
        state = self.params.get('state')
        if state == 'present':
            return self.create()

        if state == 'absent':
            return self.delete()

        if state == 'update':
            return self.update()

    def manage_operations(self):
        operation = self.params.get('operation')
        if operation == 'add_storage_profile':
            return self.add_storage_profile()

        if operation == 'update_storage_profile':
            return self.update_storage_profile()

        if operation == 'delete_storage_profile':
            return self.delete_storage_profile()

        if operation == 'list_storage_profiles':
            return self.get_storage_profiles()

    def get_vdc_org_resource(self):
        if self.params.get('vdc_org_name'):
            return self.client.get_org_by_name(self.params.get('vdc_org_name'))

        return self.client.get_org()

    def get_vdc(self):
        try:
            vdc_name = self.params['vdc_name']
            vdc_resource = self.org.get_vdc(vdc_name)
            assert vdc_resource is not None
        except AssertionError:
            msg = "{0} is not found"
            raise EntityNotFoundException(msg.format(vdc_name))

        return VDC(self.client, name=vdc_name, resource=vdc_resource)

    def create(self):
        vdc_name = self.params['vdc_name']
        is_enabled = self.params['is_enabled']
        provider_vdc_name = self.params['provider_vdc_name']
        description = self.params['description'] or ''
        allocation_model = self.params['allocation_model'] or 'AllocationVApp'
        storage_profiles = self.params['storage_profiles']
        cpu_units = self.params['cpu_units'] or "MHz"
        cpu_allocated = self.params['cpu_allocated'] or 0
        cpu_limit = self.params['cpu_limit'] or 0
        mem_units = self.params['mem_units'] or 'MB'
        mem_allocated = self.params['mem_allocated'] or 0
        mem_limit = self.params['mem_limit'] or 0
        nic_quota = self.params['nic_quota'] or 0
        network_quota = self.params['network_quota'] or 0
        vm_quota = self.params['vm_quota'] or 0
        resource_guaranteed_memory = self.params[
            'resource_guaranteed_memory'] or 1.0
        resource_guaranteed_cpu = self.params['resource_guaranteed_cpu'] or 1.0
        vcpu_in_mhz = self.params['vcpu_in_mhz']
        is_thin_provision = self.params['is_thin_provision']
        network_pool_name = self.params['network_pool_name']
        uses_fast_provisioning = self.params['uses_fast_provisioning']
        over_commit_allowed = self.params['over_commit_allowed']
        vm_discovery_enabled = self.params['vm_discovery_enabled']
        response = dict()
        response['changed'] = False
        response['msg'] = self.params["description"] or "None"

        try:
            self.get_vdc()
        except EntityNotFoundException:
            create_vdc_task = self.org.create_org_vdc(
                vdc_name=vdc_name,
                provider_vdc_name=provider_vdc_name,
                description=description,
                allocation_model=allocation_model,
                storage_profiles=storage_profiles,
                cpu_units=cpu_units,
                cpu_allocated=cpu_allocated,
                cpu_limit=cpu_limit,
                mem_units=mem_units,
                mem_allocated=mem_allocated,
                mem_limit=mem_limit,
                nic_quota=nic_quota,
                network_quota=network_quota,
                vm_quota=vm_quota,
                resource_guaranteed_memory=resource_guaranteed_memory,
                resource_guaranteed_cpu=resource_guaranteed_cpu,
                vcpu_in_mhz=vcpu_in_mhz,
                is_thin_provision=is_thin_provision,
                network_pool_name=network_pool_name,
                uses_fast_provisioning=uses_fast_provisioning,
                over_commit_allowed=over_commit_allowed,
                vm_discovery_enabled=vm_discovery_enabled,
                is_enabled=is_enabled)
            self.execute_task(create_vdc_task.Tasks.Task[0])
            response['msg'] = 'VDC {} has been created'.format(vdc_name)
            response['changed'] = True
        else:
            response['warnings'] = 'VDC {} is already present'.format(vdc_name)

        return response

    def update(self):
        vdc_name = self.params['vdc_name']
        description = self.params['description']
        allocation_model = self.params['allocation_model']
        cpu_units = self.params['cpu_units']
        cpu_allocated = self.params['cpu_allocated']
        cpu_limit = self.params['cpu_limit']
        mem_units = self.params['mem_units']
        mem_allocated = self.params['mem_allocated']
        mem_limit = self.params['mem_limit']
        nic_quota = self.params['nic_quota']
        network_quota = self.params['network_quota']
        vm_quota = self.params['vm_quota']
        resource_guaranteed_memory = self.params['resource_guaranteed_memory']
        resource_guaranteed_cpu = self.params['resource_guaranteed_cpu']
        vcpu_in_mhz = self.params['vcpu_in_mhz']
        is_thin_provision = self.params['is_thin_provision']
        is_enabled = self.params['is_enabled']
        response = dict()
        response['changed'] = False

        try:
            self.get_vdc()
            update_org_vdc_task = self.org.update_org_vdc(
                vdc_name, description, allocation_model, cpu_units,
                cpu_allocated, cpu_limit, mem_units, mem_allocated, mem_limit,
                nic_quota, network_quota, vm_quota, resource_guaranteed_memory,
                resource_guaranteed_cpu, vcpu_in_mhz, is_thin_provision,
                is_enabled)
            self.execute_task(update_org_vdc_task)
            response['msg'] = 'VDC {} has been updated'.format(vdc_name)
            response['changed'] = True
        except OperationNotSupportedException:
            msg = "VDC {} may already in desired state"
            response['warnings'] = msg.format(vdc_name)
        except EntityNotFoundException:
            response['warnings'] = 'VDC {} is not present.'.format(vdc_name)

        return response

    def delete(self):
        vdc_name = self.params['vdc_name']
        response = dict()
        response['changed'] = False

        try:
            vdc = self.get_vdc()
            vdc.enable_vdc(enable=False)
            delete_vdc_task = vdc.delete_vdc()
            self.execute_task(delete_vdc_task)
            response['msg'] = 'VDC {} has been deleted.'.format(vdc_name)
            response['changed'] = True
        except EntityNotFoundException:
            response['warnings'] = 'VDC {} is not present.'.format(vdc_name)
        except OperationNotSupportedException:
            pass

        return response

    def get_storage_profiles(self):
        vdc_name = self.params['vdc_name']
        response = dict()
        response['changed'] = False

        try:
            vdc = self.get_vdc()
            response['msg'] = [
                storage_profile.get("name")
                for storage_profile in vdc.get_storage_profiles()
            ]
        except EntityNotFoundException:
            msg = 'VDC {} is not present'
            response['warnings'] = msg.format(vdc_name)

        return response

    def _update_response(self, response, msg, warning):
        vdc_name = self.params['vdc_name']
        if response['msg']:
            response['msg'] = msg.format(response['msg'], vdc_name)

        if response['warnings']:
            response['warnings'] = warning.format(response['warnings'])

        return response

    def add_storage_profile(self):
        vdc_name = self.params['vdc_name']
        profiles = self.params['storage_profiles']
        response = dict()
        response['changed'] = False
        response['msg'] = list()
        response['warnings'] = list()
        storage_profiles = self.get_storage_profiles()['msg']
        msg = 'VDC Storage profile(s) {0} are added'
        warning = 'VDC Storage profile(s) {0} are already present'

        try:
            vdc = self.get_vdc()
            for profile in profiles:
                name = profile['name']
                if name not in storage_profiles:
                    enabled = profile['enabled']
                    default = profile['default']
                    kwargs = {
                        'enabled': True if enabled == 'true' else False,
                        'default': True if default == 'true' else False,
                        'limit_in_mb': profile['limit']
                    }
                    task = vdc.add_storage_profile(name, **kwargs)
                    self.execute_task(task)
                    response['msg'].append(profile['name'])
                    continue
                response['warnings'].append(name)
            response = self._update_response(response, msg, warning)
        except EntityNotFoundException:
            msg = 'VDC {} is not present'
            response['warnings'] = msg.format(vdc_name)

        return response

    def update_storage_profile(self):
        vdc_name = self.params['vdc_name']
        profiles = self.params['storage_profiles']
        response = dict()
        response['changed'] = False
        response['msg'] = list()
        response['warnings'] = list()
        storage_profiles = self.get_storage_profiles()['msg']
        msg = 'Storage profile(s) {0} are updated'
        warning = 'VDC Storage profile(s) {0} are not found'

        try:
            vdc = self.get_vdc()
            for profile in profiles:
                name = profile['name']
                if name in storage_profiles:
                    enabled = True if profile['enabled'] == 'true' else False
                    kwargs = {
                        'default': profile.get('default', None),
                        'limit_in_mb': profile.get('limit', None)
                    }
                    vdc.update_storage_profile(name, enabled, **kwargs)
                    response['msg'].append(name)
                    continue
                response['warnings'].append(name)
            response = self._update_response(response, msg, warning)
        except EntityNotFoundException:
            msg = 'VDC {} is not present'
            response['warnings'] = msg.format(vdc_name)

        return response

    def delete_storage_profile(self):
        vdc_name = self.params['vdc_name']
        profiles = self.params['storage_profiles']
        response = dict()
        response['msg'] = list()
        response['warnings'] = list()
        response['changed'] = False
        storage_profiles = self.get_storage_profiles()['msg']
        msg = 'Storage profile(s) {0} are deleted'
        warning = 'VDC Storage profile(s) {0} are not found'

        try:
            vdc = self.get_vdc()
            for profile in profiles:
                name = profile.get("name")
                if name in storage_profiles:
                    remove_vdc_task = vdc.remove_storage_profile(name)
                    self.execute_task(remove_vdc_task)
                    response['msg'].append(name)
                    continue
                response['warnings'].append(name)
            response = self._update_response(response, msg, warning)
        except EntityNotFoundException:
            msg = 'VDC {} is not present'
            response['warnings'] = msg.format(vdc_name)

        return response
Пример #52
0
class Vapp(VcdAnsibleModule):
    def __init__(self, **kwargs):
        super(Vapp, self).__init__(**kwargs)
        logged_in_org = self.client.get_org()
        self.org = Org(self.client, resource=logged_in_org)
        vdc_resource = self.org.get_vdc(self.params.get('vdc'))
        self.vdc = VDC(self.client, href=vdc_resource.get('href'))

    def manage_states(self):
        state = self.params.get('state')
        if state == "present":
            return self.create()

        if state == "absent":
            return self.delete()

    def manage_operations(self):
        state = self.params.get('operation')
        if state == "poweron":
            return self.power_on()

        if state == "poweroff":
            return self.power_off()

        if state == "deploy":
            return self.deploy()

        if state == "undeploy":
            return self.undeploy()

        if state == "list_vms":
            return self.list_vms()

        if state == "list_networks":
            return self.list_networks()

    def get_vapp(self):
        vapp_name = self.params.get('vapp_name')
        vapp_resource = self.vdc.get_vapp(vapp_name)

        return VApp(self.client, name=vapp_name, resource=vapp_resource)

    def instantiate(self):
        params = self.params
        vapp_name = params.get('vapp_name')
        catalog_name = params.get('catalog_name')
        template_name = params.get('template_name')
        description = params.get('description')
        network = params.get('network')
        fence_mode = params.get('fence_mode')
        ip_allocation_mode = params.get('ip_allocation_mode')
        deploy = params.get('deploy')
        power_on = params.get('power_on')
        accept_all_eulas = params.get('accept_all_eulas')
        memory = params.get('memory')
        cpu = params.get('cpu')
        disk_size = params.get('disk_size')
        vmpassword = params.get('vmpassword')
        cust_script = params.get('cust_script')
        vm_name = params.get('vm_name')
        hostname = params.get('hostname')
        ip_address = params.get('ip_address')
        storage_profile = params.get('storage_profile')
        network_adapter_type = params.get('network_adapter_type')
        response = dict()
        response['changed'] = False

        try:
            self.vdc.get_vapp(vapp_name)
        except EntityNotFoundException:
            create_vapp_task = self.vdc.instantiate_vapp(
                name=vapp_name,
                catalog=catalog_name,
                template=template_name,
                description=description,
                network=network,
                fence_mode=fence_mode,
                ip_allocation_mode=ip_allocation_mode,
                deploy=deploy,
                power_on=power_on,
                accept_all_eulas=accept_all_eulas,
                memory=memory,
                cpu=cpu,
                disk_size=disk_size,
                password=vmpassword,
                cust_script=cust_script,
                vm_name=vm_name,
                hostname=hostname,
                ip_address=ip_address,
                storage_profile=storage_profile,
                network_adapter_type=network_adapter_type)
            self.execute_task(create_vapp_task.Tasks.Task[0])
            response['msg'] = 'Vapp {} has been created.'.format(vapp_name)
            response['changed'] = True
        else:
            response['warnings'] = "Vapp {} is already present.".format(vapp_name)

        return response

    def create(self):
        params = self.params
        catalog_name = params.get('catalog_name')

        # vapp initialization if catalog has been provided
        if catalog_name:
            return self.instantiate()

        vapp_name = params.get('vapp_name')
        description = params.get('description')
        network = params.get('network')
        fence_mode = params.get('fence_mode')
        accept_all_eulas = params.get('accept_all_eulas')
        response = dict()
        response['changed'] = False

        try:
            self.vdc.get_vapp(vapp_name)
        except EntityNotFoundException:
            create_vapp_task = self.vdc.create_vapp(
                name=vapp_name,
                description=description,
                network=network,
                fence_mode=fence_mode,
                accept_all_eulas=accept_all_eulas)
            self.execute_task(create_vapp_task.Tasks.Task[0])
            response['msg'] = 'Vapp {} has been created.'.format(vapp_name)
            response['changed'] = True
        else:
            response['warnings'] = "Vapp {} is already present.".format(vapp_name)

        return response

    def delete(self):
        vapp_name = self.params.get('vapp_name')
        force = self.params.get('force')
        response = dict()
        response['changed'] = False

        try:
            self.vdc.get_vapp(vapp_name)
        except EntityNotFoundException:
            response['warnings'] = "Vapp {} is not present.".format(vapp_name)
        else:
            delete_vapp_task = self.vdc.delete_vapp(name=vapp_name, force=force)
            self.execute_task(delete_vapp_task)
            response['msg'] = 'Vapp {} has been deleted.'.format(vapp_name)
            response['changed'] = True

        return response

    def power_on(self):
        vapp_name = self.params.get('vapp_name')
        response = dict()
        response['changed'] = False

        vapp = self.get_vapp()
        try:
            if not vapp.is_powered_on():
                vapp_resource = self.vdc.get_vapp(vapp_name)
                vapp = VApp(self.client, name=vapp_name, resource=vapp_resource)
                power_on_vapp_task = vapp.power_on()
                self.execute_task(power_on_vapp_task)
                response['msg'] = 'Vapp {} has been powered on.'.format(vapp_name)
                response['changed'] = True
            else:
                response['warnings'] = 'Vapp {} is already powered on.'.format(vapp_name)
        except OperationNotSupportedException:
            response['warnings'] = 'Operation is not supported. You may have no VM(s) in {}'.format(vapp_name)

        return response

    def power_off(self):
        vapp_name = self.params.get('vapp_name')
        response = dict()
        response['changed'] = False

        vapp = self.get_vapp()
        try:
            if not vapp.is_powered_off():
                vapp_resource = self.vdc.get_vapp(vapp_name)
                vapp = VApp(self.client, name=vapp_name, resource=vapp_resource)
                power_off_vapp_task = vapp.power_off()
                self.execute_task(power_off_vapp_task)
                response['msg'] = 'Vapp {} has been powered off.'.format(vapp_name)
                response['changed'] = True
            else:
                response['warnings'] = 'Vapp {} is already powered off.'.format(vapp_name)
        except OperationNotSupportedException:
            response['warnings'] = 'Operation is not supported. You may have no VM(s) in {}'.format(vapp_name)

        return response

    def deploy(self):
        vapp_name = self.params.get('vapp_name')
        response = dict()
        response['changed'] = False

        vapp = self.get_vapp()
        if not vapp.is_deployed():
            vapp_resource = self.vdc.get_vapp(vapp_name)
            vapp = VApp(self.client, name=vapp_name, resource=vapp_resource)
            deploy_vapp_task = vapp.deploy()
            self.execute_task(deploy_vapp_task)
            response['msg'] = 'Vapp {} has been deployed.'.format(vapp_name)
            response['changed'] = True
        else:
            response['warnings'] = 'Vapp {} is already deployed.'.format(vapp_name)

        return response

    def undeploy(self):
        vapp_name = self.params.get('vapp_name')
        response = dict()
        response['changed'] = False

        vapp = self.get_vapp()
        if vapp.is_deployed():
            vapp_resource = self.vdc.get_vapp(vapp_name)
            vapp = VApp(self.client, name=vapp_name, resource=vapp_resource)
            undeploy_vapp_task = vapp.undeploy()
            self.execute_task(undeploy_vapp_task)
            response['msg'] = 'Vapp {} has been undeployed.'.format(vapp_name)
            response['changed'] = True
        else:
            response['warnings'] = 'Vapp {} is already undeployed.'.format(vapp_name)

        return response

    def list_vms(self):
        vapp = self.get_vapp()
        response = dict()
        response['msg'] = list()

        for vm in vapp.get_all_vms():
            vm_details = dict()
            vm_details['name'] = vm.get('name')
            vm_details['status'] = VM_STATUSES[vm.get('status')]
            vm_details['deployed'] = vm.get('deployed') == 'true'

            try:
                vm_details['ip_address'] = vapp.get_primary_ip(vm.get('name'))
            except Exception:
                vm_details['ip_address'] = None

            response['msg'].append(vm_details)

        return response

    def list_networks(self):
        vapp = self.get_vapp()
        response = dict()
        response['msg'] = list()

        for network in vapp.get_all_networks():
            response['msg'].append(network.get('{' + NSMAP['ovf'] + '}name'))

        return response
Пример #53
0
class CatalogItem(VcdAnsibleModule):
    def __init__(self, **kwargs):
        super(CatalogItem, self).__init__(**kwargs)
        logged_in_org = self.client.get_org()
        self.org = Org(self.client, resource=logged_in_org)

    def manage_states(self):
        state = self.params.get('state')
        if state == "present":
            return self.upload()

        if state == "absent":
            return self.delete()

    def manage_operations(self):
        operation = self.params.get('operation')
        if operation == "capturevapp":
            return self.capture_vapp()

        if operation == "list_vms":
            return self.list_vms()

    def is_present(self):
        params = self.params
        catalog_name = params.get('catalog_name')
        item_name = params.get('item_name')

        try:
            self.org.get_catalog_item(catalog_name, item_name)
        except EntityNotFoundException:
            return False

        return True

    def upload(self):
        params = self.params
        catalog_name = params.get('catalog_name')
        item_name = params.get('item_name')
        file_name = params.get('file_name')
        chunk_size = params.get('chunk_size')
        response = dict()
        response['changed'] = False
        item_details = {
            "catalog_name": catalog_name,
            "item_name": item_name,
            "file_name": file_name,
            "chunk_size": chunk_size
        }

        if self.is_present():
            response['warnings'] = "Catalog Item {} is already present.".format(item_name)
            return response

        if file_name.endswith(".ova") or file_name.endswith(".ovf"):
            self.org.upload_ovf(**item_details)
            self.ova_check_resolved()

        if not file_name.endswith(".ova"):
            self.org.upload_media(**item_details)

        response['msg'] = "Catalog item {} is uploaded.".format(item_name)
        response['changed'] = True

        return response

    def delete(self):
        params = self.params
        catalog_name = params.get('catalog_name')
        item_name = params.get('item_name')
        response = dict()
        response['changed'] = False

        if not self.is_present():
            response['warnings'] = "Catalog Item {} is not present.".format(item_name)
            return response

        self.org.delete_catalog_item(name=catalog_name, item_name=item_name)
        response['msg'] = "Catalog Item {} has been deleted.".format(item_name)
        response['changed'] = True

        return response

    def capture_vapp(self):
        params = self.params
        vapp_name = params.get('vapp_name')
        vdc_name = params.get('vdc_name')
        catalog_name = params.get('catalog_name')
        item_name = params.get('item_name')
        desc = params.get('description')
        customize_on_instantiate = params.get('customize_on_instantiate')
        overwrite = params.get('overwrite')
        client = self.client
        response = dict()
        response['changed'] = False

        v = self.org.get_vdc(vdc_name)
        vdc = VDC(client, href=v.get('href'))
        vapp = vdc.get_vapp(vapp_name)
        catalog = self.org.get_catalog(catalog_name)
        self.org.capture_vapp(
            catalog_resource=catalog,
            vapp_href=vapp.get('href'),
            catalog_item_name=item_name,
            description=desc,
            customize_on_instantiate=customize_on_instantiate,
            overwrite=overwrite)
        self.ova_check_resolved()
        response['msg'] = "Catalog Item {} has been captured".format(item_name)
        response['changed'] = True

        return response

    def ova_check_resolved(self):
        params = self.params
        catalog_name = params.get('catalog_name')
        item_name = params.get('item_name')
        response = False

        source_ova_item = self.org.get_catalog_item(catalog_name, item_name)
        self.check_resolved(source_ova_item, catalog_name, item_name)
        response = True

        return response

    def check_resolved(self, source_ova_item, catalog_name, item_name):
        client = self.client
        item_id = source_ova_item.get('id')

        while True:
            q = client.get_typed_query(
                'catalogItem',
                query_result_format=QueryResultFormat.ID_RECORDS,
                qfilter='id==%s' % item_id
            )
            records = list(q.execute())
            if records[0].get('status') == 'RESOLVED':
                break
            else:
                time.sleep(5)
                # TODO might have to check when status goes to other state than resolved

    def list_vms(self):
        params = self.params
        catalog_name = params.get('catalog_name')
        item_name = params.get('item_name')
        response = dict()
        result = list()
        response['changed'] = False

        catalog_item = self.org.get_catalog_item(catalog_name, item_name)
        vapp_template_resource = self.client.get_resource(
            catalog_item.Entity.get('href'))
        vapp_template = VApp(self.client, name=item_name, resource=vapp_template_resource)

        for vm in vapp_template.get_all_vms():
            result.append(vm.get('name'))

        response['msg'] = result
        response['changed'] = False

        return response
Пример #54
0
socket.setdefaulttimeout(10)

# load config
with open('config.json', 'r') as f:
    config = json.load(f)

client = Client(config['url'])
client.set_highest_supported_version()
client.set_credentials(
    BasicLoginCredentials(config['user'], config['org'], config['password']))

print("Fetching Org...")
org = Org(client, resource=client.get_org())

print("Fetching VDC...")
vdc = VDC(client, resource=org.get_vdc(config['vdc']))

print("Fetching vApp...")
vapp_resource = vdc.get_vapp(config['vapp'])
vapp = VApp(client, resource=vapp_resource)

print("Validating VMs...")
vms = vapp.get_all_vms()

names = map(lambda vm: vm.get('name'), vms)
names = list(names)

services = config['services']
for service in services:
    name = service['vm']
    index = names.index(name)
class VdcNet(VcdAnsibleModule):
    def __init__(self, **kwargs):
        super(VdcNet, self).__init__(**kwargs)
        self.vdc_name = self.params.get('vdc_name')
        self.org_name = self.params.get('org_name')
        self.gateway_name = self.params.get('gateway_name')
        self.network_name = self.params.get('network_name')
        self.description = self.params.get('description')
        self.parent_network_name = self.params.get('parent_network_name')
        self.shared = self.params.get('shared')
        self.gateway_ip = self.params.get('gateway_ip')
        self.netmask = self.params.get('netmask')
        self.network_cidr = self.params.get('network_cidr')
        self.primary_dns_ip = self.params.get('primary_dns_ip')
        self.secondary_dns_ip = self.params.get('secondary_dns_ip')
        self.dns_suffix = self.params.get('dns_suffix')
        self.ip_range_start = self.params.get('ip_range_start')
        self.ip_range_end = self.params.get('ip_range_end')
        self.dhcp_enabled = self.params.get('dhcp_enabled')
        self.default_lease_time = self.params.get('default_lease_time')
        self.max_lease_time = self.params.get('max_lease_time')
        self.dhcp_ip_range_start = self.params.get('dhcp_ip_range_start')
        self.dhcp_ip_range_end = self.params.get('dhcp_ip_range_end')
        self.force = self.params.get('force')
        self.state = self.params.get('state')
        self.direct = self.params.get('direct')
        self.isolated = self.params.get('isolated')
        self.routed = self.params.get('routed')
        self.guest_vlan_allowed = self.params.get('guest_vlan_allowed')
        self.sub_interface = self.params.get('sub_interface')
        self.distributed_interface = self.params.get('distributed_interface')
        self.retain_net_info_across_deployments = self.params.get(
            'retain_net_info_across_deployments')

        org_resource = self.client.get_org_by_name(self.org_name)
        self.org = Org(self.client, resource=org_resource)
        vdc_resource = self.org.get_vdc(self.vdc_name)
        self.vdc = VDC(self.client, name=self.vdc_name, resource=vdc_resource)


    def manage_states(self):
        state = self.params.get('state')
        if state == "present":
            if self.direct:
                return self.create_direct_network()
            elif self.isolated:
                return self.create_isolated_network()
            elif self.routed:
                return self.create_routed_network()
            else:
                raise Exception("Bool 'direct', 'isolated' or 'routed' is missing")

        if state == "absent":
            return self.delete_network()


    def create_direct_network(self):
        response = dict()

        try:
            self.vdc.get_direct_orgvdc_network(self.network_name)

        except EntityNotFoundException:
            create = self.vdc.create_directly_connected_vdc_network(
                self.network_name,
                self.parent_network_name,
                description=self.description,
                is_shared=self.shared)

            self.execute_task(create.Tasks.Task[0])

            response['msg'] = 'Network {0} created'.format(self.network_name)
            response['changed'] = True

        else:
            response['warnings'] = 'Network {0} is already present.'.format(
                self.network_name)

        return response


    def create_isolated_network(self):
        response = dict()

        try:
            self.vdc.get_isolated_orgvdc_network(self.network_name)

        except EntityNotFoundException:
            create = self.vdc.create_isolated_vdc_network(
                self.network_name,
                self.network_cidr,
                description=self.description,
                primary_dns_ip=self.primary_dns_ip,
                secondary_dns_ip=self.secondary_dns_ip,
                dns_suffix=self.dns_suffix,
                ip_range_start=self.ip_range_start,
                ip_range_end=self.ip_range_end,
                is_dhcp_enabled=self.dhcp_enabled,
                default_lease_time=self.default_lease_time,
                max_lease_time=self.max_lease_time,
                dhcp_ip_range_start=self.dhcp_ip_range_start,
                dhcp_ip_range_end=self.dhcp_ip_range_end,
                is_shared=self.shared)

            self.execute_task(create.Tasks.Task[0])

            response['msg'] = 'Network {0} created'.format(self.network_name)
            response['changed'] = True

        else:
            response['warnings'] = 'Network {0} is already present.'.format(
                self.network_name)

        return response


    def create_routed_network(self):
        response = dict()

        try:
            self.vdc.get_routed_orgvdc_network(self.network_name)

        except EntityNotFoundException:
            create = self.vdc.create_routed_vdc_network(
                self.network_name,
                self.gateway_name,
                self.network_cidr,
                description=self.description,
                primary_dns_ip=self.primary_dns_ip,
                secondary_dns_ip=self.secondary_dns_ip,
                dns_suffix=self.dns_suffix,
                ip_range_start=self.ip_range_start,
                ip_range_end=self.ip_range_end,
                is_shared=self.shared,
                guest_vlan_allowed=self.guest_vlan_allowed,
                sub_interface=self.sub_interface,
                distributed_interface=self.distributed_interface,
                retain_net_info_across_deployments=self.retain_net_info_across_deployments)

            self.execute_task(create.Tasks.Task[0])

            response['msg'] = 'Network {0} created'.format(self.network_name)
            response['changed'] = True

        else:
            response['warnings'] = 'Network {0} is already present.'.format(
                self.network_name)

        return response


    def delete_network(self):
        response = dict()

        try:
            if self.direct:
                self.vdc.get_direct_orgvdc_network(self.network_name)
            elif self.isolated:
                self.vdc.get_isolated_orgvdc_network(self.network_name)
            elif self.routed:
                self.vdc.get_routed_orgvdc_network(self.network_name)

        except EntityNotFoundException:
            response['warnings'] = 'Network {} is not present.'.format(
                self.network_name)

        else:
            if self.direct:
                delete = self.vdc.delete_direct_orgvdc_network(
                    self.network_name,
                    force=self.force)
            elif self.isolated:
                delete = self.vdc.delete_isolated_orgvdc_network(
                    self.network_name,
                    force=self.force)
            elif self.routed:
                delete = self.vdc.delete_routed_orgvdc_network(
                    self.network_name,
                    force=self.force)

            self.execute_task(delete)
            response['msg'] = 'Network {} has been deleted.'.format(
                self.network_name)
            response['changed'] = True

        return response
    def create_cluster_thread(self):
        network_name = self.req_spec.get(RequestKey.NETWORK_NAME)
        try:
            clusters = load_from_metadata(self.tenant_client,
                                          name=self.cluster_name)
            if len(clusters) != 0:
                raise ClusterAlreadyExistsError(f"Cluster {self.cluster_name} "
                                                "already exists.")

            org_resource = self.tenant_client.get_org_by_name(
                self.req_spec.get(RequestKey.ORG_NAME))
            org = Org(self.tenant_client, resource=org_resource)
            vdc_resource = org.get_vdc(self.req_spec.get(RequestKey.OVDC_NAME))
            vdc = VDC(self.tenant_client, resource=vdc_resource)
            template = self._get_template()
            self._update_task(
                TaskStatus.RUNNING,
                message=f"Creating cluster vApp {self.cluster_name}"
                        f"({self.cluster_id})")
            try:
                vapp_resource = vdc.create_vapp(
                    self.cluster_name,
                    description=f"cluster {self.cluster_name}",
                    network=network_name,
                    fence_mode='bridged')
            except Exception as e:
                raise ClusterOperationError(
                    "Error while creating vApp:", str(e))

            self.tenant_client.get_task_monitor().wait_for_status(
                vapp_resource.Tasks.Task[0])
            tags = {}
            tags['cse.cluster.id'] = self.cluster_id
            tags['cse.version'] = pkg_resources.require(
                'container-service-extension')[0].version
            tags['cse.template'] = template['name']
            vapp = VApp(self.tenant_client, href=vapp_resource.get('href'))
            for k, v in tags.items():
                task = vapp.set_metadata('GENERAL', 'READWRITE', k, v)
                self.tenant_client.get_task_monitor().wait_for_status(task)
            self._update_task(
                TaskStatus.RUNNING,
                message=f"Creating master node for {self.cluster_name}"
                        f"({self.cluster_id})")
            vapp.reload()

            server_config = get_server_runtime_config()
            try:
                add_nodes(1, template, NodeType.MASTER, server_config,
                          self.tenant_client, org, vdc, vapp, self.req_spec)
            except Exception as e:
                raise MasterNodeCreationError(
                    "Error while adding master node:", str(e))

            self._update_task(
                TaskStatus.RUNNING,
                message=f"Initializing cluster {self.cluster_name}"
                        f"({self.cluster_id})")
            vapp.reload()
            init_cluster(server_config, vapp, template)
            master_ip = get_master_ip(server_config, vapp, template)
            task = vapp.set_metadata('GENERAL', 'READWRITE', 'cse.master.ip',
                                     master_ip)
            self.tenant_client.get_task_monitor().wait_for_status(task)
            if self.req_spec.get(RequestKey.NUM_WORKERS) > 0:
                self._update_task(
                    TaskStatus.RUNNING,
                    message=f"Creating "
                            f"{self.req_spec.get(RequestKey.NUM_WORKERS)} "
                            f"node(s) for "
                            f"{self.cluster_name}({self.cluster_id})")
                try:
                    add_nodes(self.req_spec.get(RequestKey.NUM_WORKERS),
                              template, NodeType.WORKER, server_config,
                              self.tenant_client, org, vdc, vapp,
                              self.req_spec)
                except Exception as e:
                    raise WorkerNodeCreationError(
                        "Error while creating worker node:", str(e))

                self._update_task(
                    TaskStatus.RUNNING,
                    message=f"Adding "
                            f"{self.req_spec.get(RequestKey.NUM_WORKERS)} "
                            f"node(s) to "
                            f"{self.cluster_name}({self.cluster_id})")
                vapp.reload()
                join_cluster(server_config, vapp, template)
            if self.req_spec.get(RequestKey.ENABLE_NFS):
                self._update_task(
                    TaskStatus.RUNNING,
                    message=f"Creating NFS node for {self.cluster_name}"
                            f"({self.cluster_id})")
                try:
                    add_nodes(1, template, NodeType.NFS,
                              server_config, self.tenant_client, org, vdc,
                              vapp, self.req_spec)
                except Exception as e:
                    raise NFSNodeCreationError(
                        "Error while creating NFS node:", str(e))

            self._update_task(
                TaskStatus.SUCCESS,
                message=f"Created cluster {self.cluster_name}"
                        f"({self.cluster_id})")
        except (MasterNodeCreationError, WorkerNodeCreationError,
                NFSNodeCreationError, ClusterJoiningError,
                ClusterInitializationError, ClusterOperationError) as e:
            LOGGER.error(traceback.format_exc())
            error_obj = error_to_json(e)
            stack_trace = \
                ''.join(error_obj[ERROR_MESSAGE_KEY][ERROR_STACKTRACE_KEY])
            self._update_task(
                TaskStatus.ERROR,
                error_message=error_obj[ERROR_MESSAGE_KEY]
                [ERROR_DESCRIPTION_KEY],
                stack_trace=stack_trace)
            raise e
        except Exception as e:
            LOGGER.error(traceback.format_exc())
            error_obj = error_to_json(e)
            stack_trace = \
                ''.join(error_obj[ERROR_MESSAGE_KEY][ERROR_STACKTRACE_KEY])
            self._update_task(
                TaskStatus.ERROR,
                error_message=error_obj[ERROR_MESSAGE_KEY][ERROR_DESCRIPTION_KEY], # noqa: E501
                stack_trace=stack_trace)
        finally:
            self._disconnect_sys_admin()
Пример #57
0
class Vdc(VcdAnsibleModule):
    def __init__(self, **kwargs):
        super(Vdc, self).__init__(**kwargs)
        self.org = Org(self.client, resource=self.get_vdc_org_resource())

    def manage_states(self):
        state = self.params.get('state')
        if state == 'present':
            return self.create()

        if state == 'absent':
            return self.delete()

        if state == 'update':
            return self.update()

    def manage_operations(self):
        operation = self.params.get('operation')
        if operation == 'list_vdcs':
            return self.list_vdcs()

    def get_vdc_org_resource(self):
        if self.params.get('vdc_org_name'):
            return self.client.get_org_by_name(self.params.get('vdc_org_name'))

        return self.client.get_org()

    def create(self):
        vdc_name = self.params.get('vdc_name')
        is_enabled = self.params.get('is_enabled')
        provider_vdc_name = self.params.get('provider_vdc_name')
        description = self.params.get('description')
        allocation_model = self.params.get('allocation_model')
        storage_profiles = self.params.get('storage_profiles')
        cpu_units = self.params.get('cpu_units')
        cpu_allocated = self.params.get('cpu_allocated')
        cpu_limit = self.params.get('cpu_limit')
        mem_units = self.params.get('mem_units')
        mem_allocated = self.params.get('mem_allocated')
        mem_limit = self.params.get('mem_limit')
        nic_quota = self.params.get('nic_quota')
        network_quota = self.params.get('network_quota')
        vm_quota = self.params.get('vm_quota')
        resource_guaranteed_memory = self.params.get(
            'resource_guaranteed_memory')
        resource_guaranteed_cpu = self.params.get('resource_guaranteed_cpu')
        vcpu_in_mhz = self.params.get('vcpu_in_mhz')
        is_thin_provision = self.params.get('is_thin_provision')
        network_pool_name = self.params.get('network_pool_name')
        uses_fast_provisioning = self.params.get('uses_fast_provisioning')
        over_commit_allowed = self.params.get('over_commit_allowed')
        vm_discovery_enabled = self.params.get('vm_discovery_enabled')
        response = dict()
        response['changed'] = False

        if not self.org.get_vdc(vdc_name):
            create_vdc_task = self.org.create_org_vdc(
                vdc_name=vdc_name,
                provider_vdc_name=provider_vdc_name,
                description=description,
                allocation_model=allocation_model,
                storage_profiles=storage_profiles,
                cpu_units=cpu_units,
                cpu_allocated=cpu_allocated,
                cpu_limit=cpu_limit,
                mem_units=mem_units,
                mem_allocated=mem_allocated,
                mem_limit=mem_limit,
                nic_quota=nic_quota,
                network_quota=network_quota,
                vm_quota=vm_quota,
                resource_guaranteed_memory=resource_guaranteed_memory,
                resource_guaranteed_cpu=resource_guaranteed_cpu,
                vcpu_in_mhz=vcpu_in_mhz,
                is_thin_provision=is_thin_provision,
                network_pool_name=network_pool_name,
                uses_fast_provisioning=uses_fast_provisioning,
                over_commit_allowed=over_commit_allowed,
                vm_discovery_enabled=vm_discovery_enabled,
                is_enabled=is_enabled)

            self.execute_task(create_vdc_task.Tasks.Task[0])
            response['msg'] = 'VDC {} has been created.'.format(vdc_name)
            response['changed'] = True
        else:
            response['warnings'] = 'VDC {} is already present.'.format(
                vdc_name)

        return response

    def update(self):
        vdc_name = self.params.get('vdc_name')
        is_enabled = self.params.get('is_enabled')
        response = dict()
        response['changed'] = False

        try:

            vdc_resource = self.org.get_vdc(vdc_name, is_admin_operation=True)
            vdc = VDC(self.client, name=vdc_name, resource=vdc_resource)
            vdc.enable_vdc(enable=is_enabled)
            response['msg'] = 'VDC {} has been updated.'.format(vdc_name)
            response['changed'] = True

        except OperationNotSupportedException:
            m = "VDC {} may already in {} state"
            response['warnings'] = m.format(
                vdc_name, "enabled") if is_enabled else m.format(
                    vdc_name, "disabled")

        return response

    def delete(self):
        vdc_name = self.params.get('vdc_name')
        response = dict()
        response['changed'] = False

        try:

            vdc_resource = self.org.get_vdc(vdc_name, is_admin_operation=True)
            vdc = VDC(self.client, name=vdc_name, resource=vdc_resource)
            vdc.enable_vdc(enable=False)

        except EntityNotFoundException:
            response['warnings'] = 'VDC {} is not present.'.format(vdc_name)
            return

        except OperationNotSupportedException:
            pass

        delete_vdc_task = vdc.delete_vdc()
        self.execute_task(delete_vdc_task)
        response['msg'] = 'VDC {} has been deleted.'.format(vdc_name)
        response['changed'] = True

        return response

    def list_vdcs(self):
        response = dict()
        response['changed'] = False
        response['msg'] = list()

        for vdc in self.org.list_vdcs():
            response['msg'].append(vdc.get('name'))

        return response
Пример #58
0
    org_record = client.get_org_by_name(os.environ['VCLOUD_ORG'])
    org = Org(client, href=org_record.get('href'))
    print("Org already exists: {0}".format(org.get_name()))
except Exception:
    print("Org does not exist, creating: {0}".format(os.environ['VCLOUD_ORG']))
    sys_admin_resource = client.get_admin()
    system = System(client, admin_resource=sys_admin_resource)
    admin_org_resource = system.create_org(os.environ['VCLOUD_ORG'],
                                           "Test Org", True)
    org_record = client.get_org_by_name(os.environ['VCLOUD_ORG'])
    org = Org(client, href=org_record.get('href'))
    print("Org now exists: {0}".format(org.get_name()))

# Ensure VDC exists.
try:
    vdc_resource = org.get_vdc(os.environ['VCLOUD_VDC_NAME'])
    vdc = VDC(client, resource=vdc_resource)
    print("  VDC '{0}' ... OK".format(os.environ['VCLOUD_VDC_NAME']))
except Exception:

    print("  VDC '{0}' ... KO. Exiting.".format(os.environ['VCLOUD_VDC_NAME']))
    exit(0)

# # Fetching catalogs
#try:
#    catalogs_resource = org.list_catalogs()
#    print("Catalogs: {0}".format(catalogs_resource))
#except Exception:
#     print("Catalogs fetch error")

# List catalog items (Templates).
class Vapp(VcdAnsibleModule):
    def __init__(self, **kwargs):
        super(Vapp, self).__init__(**kwargs)
        logged_in_org = self.client.get_org()
        self.org = Org(self.client, resource=logged_in_org)
        vdc_resource = self.org.get_vdc(self.params.get('vdc'))
        self.vdc = VDC(self.client, href=vdc_resource.get('href'))

    def manage_states(self):
        state = self.params.get('state')
        if state == "present":
            return self.create()

        if state == "absent":
            return self.delete()

    def manage_operations(self):
        operation = self.params.get('operation')
        if operation == "poweron":
            return self.power_on()

        if operation == "poweroff":
            return self.power_off()

        if operation == "list_vms":
            return self.list_vms()

        if operation == "list_networks":
            return self.list_networks()

        if operation == "share":
            return self.share()

        if operation == "unshare":
            return self.unshare()

        if operation == "set_meta":
            return self.set_meta()

        if operation == "get_meta":
            return self.get_meta()

        if operation == "remove_meta":
            return self.remove_meta()

        if operation == "add_org_network":
            return self.add_org_network()

        if operation == "delete_org_network":
            return self.delete_org_network()

    def get_vapp(self):
        vapp_name = self.params.get('vapp_name')
        vapp_resource = self.vdc.get_vapp(vapp_name)

        return VApp(self.client, name=vapp_name, resource=vapp_resource)

    def instantiate(self):
        params = self.params
        vapp_name = params.get('vapp_name')
        catalog_name = params.get('catalog_name')
        template_name = params.get('template_name')
        description = params.get('description')
        network = params.get('network')
        fence_mode = params.get('fence_mode')
        ip_allocation_mode = params.get('ip_allocation_mode')
        deploy = params.get('deploy')
        power_on = params.get('power_on')
        accept_all_eulas = params.get('accept_all_eulas')
        memory = params.get('memory')
        cpu = params.get('cpu')
        disk_size = params.get('disk_size')
        vmpassword = params.get('vmpassword')
        cust_script = params.get('cust_script')
        vm_name = params.get('vm_name')
        hostname = params.get('hostname')
        ip_address = params.get('ip_address')
        storage_profile = params.get('storage_profile')
        network_adapter_type = params.get('network_adapter_type')
        response = dict()
        response['changed'] = False

        try:
            self.vdc.get_vapp(vapp_name)
        except EntityNotFoundException:
            create_vapp_task = self.vdc.instantiate_vapp(
                name=vapp_name,
                catalog=catalog_name,
                template=template_name,
                description=description,
                network=network,
                fence_mode=fence_mode,
                ip_allocation_mode=ip_allocation_mode,
                deploy=deploy,
                power_on=power_on,
                accept_all_eulas=accept_all_eulas,
                memory=memory,
                cpu=cpu,
                disk_size=disk_size,
                password=vmpassword,
                cust_script=cust_script,
                vm_name=vm_name,
                hostname=hostname,
                ip_address=ip_address,
                storage_profile=storage_profile,
                network_adapter_type=network_adapter_type)
            self.execute_task(create_vapp_task.Tasks.Task[0])
            msg = 'Vapp {} has been created'
            response['msg'] = msg.format(vapp_name)
            response['changed'] = True
        else:
            msg = "Vapp {} is already present"
            response['warnings'] = msg.format(vapp_name)

        return response

    def create(self):
        params = self.params
        catalog_name = params.get('catalog_name')

        # vapp initialization if catalog has been provided
        if catalog_name:
            return self.instantiate()

        vapp_name = params.get('vapp_name')
        description = params.get('description')
        network = params.get('network')
        fence_mode = params.get('fence_mode')
        accept_all_eulas = params.get('accept_all_eulas')
        response = dict()
        response['changed'] = False

        try:
            self.vdc.get_vapp(vapp_name)
        except EntityNotFoundException:
            create_vapp_task = self.vdc.create_vapp(
                name=vapp_name,
                description=description,
                network=network,
                fence_mode=fence_mode,
                accept_all_eulas=accept_all_eulas)
            self.execute_task(create_vapp_task.Tasks.Task[0])
            msg = 'Vapp {} has been created'
            response['msg'] = msg.format(vapp_name)
            response['changed'] = True
        else:
            msg = "Vapp {} is already present"
            response['warnings'] = msg.format(vapp_name)

        return response

    def delete(self):
        vapp_name = self.params.get('vapp_name')
        force = self.params.get('force')
        response = dict()
        response['changed'] = False

        try:
            self.vdc.get_vapp(vapp_name)
        except EntityNotFoundException:
            response['warnings'] = "Vapp {} is not present.".format(vapp_name)
        else:
            delete_vapp_task = self.vdc.delete_vapp(
                name=vapp_name, force=force)
            self.execute_task(delete_vapp_task)
            response['msg'] = 'Vapp {} has been deleted.'.format(vapp_name)
            response['changed'] = True

        return response

    def power_on(self):
        response = dict()
        response['changed'] = False
        vapp_name = self.params.get('vapp_name')

        try:
            vapp = self.get_vapp()
            deploy_vapp_task = vapp.deploy()
            self.execute_task(deploy_vapp_task)
            msg = 'Vapp {} has been powered on'
            response['msg'] = msg.format(vapp_name)
            response['changed'] = True
        except OperationNotSupportedException as ex:
            response['warnings'] = str(ex)
        except EntityNotFoundException as ex:
            response['warnings'] = str(ex)

        return response

    def power_off(self):
        response = dict()
        response['changed'] = False
        vapp_name = self.params.get('vapp_name')

        try:
            vapp = self.get_vapp()
            undeploy_vapp_task = vapp.undeploy(action="powerOff")
            self.execute_task(undeploy_vapp_task)
            response['msg'] = 'Vapp {} has been powered off'.format(vapp_name)
            response['changed'] = True
        except OperationNotSupportedException as ex:
            response['warnings'] = str(ex)
        except EntityNotFoundException as ex:
            response['warnings'] = str(ex)

        return response

    def list_vms(self):
        response = dict()
        response['msg'] = list()
        response['changed'] = False

        try:
            vapp = self.get_vapp()
            for vm in vapp.get_all_vms():
                try:
                    ip = vapp.get_primary_ip(vm.get('name'))
                except Exception:
                    ip = None
                finally:
                    response['msg'].append({
                        "name": vm.get('name'),
                        "status": VM_STATUSES[vm.get('status')],
                        "deployed": vm.get('deployed') == 'true',
                        "ip_address": ip
                    })
        except EntityNotFoundException as ex:
            response['warnings'] = str(ex)

        return response

    def list_networks(self):
        response = dict()
        response['changed'] = False

        try:
            vapp = self.get_vapp()
            networks = vapp.get_all_networks()
            response['msg'] = [
                network.get('{' + NSMAP['ovf'] + '}name') for network in networks
            ]
        except EntityNotFoundException as ex:
            response['warnings'] = str(ex)

        return response

    def share(self):
        response = dict()
        response['changed'] = False
        access = self.params.get("shared_access")

        try:
            vapp = self.get_vapp()
            vapp.share_with_org_members(everyone_access_level=access)
            msg = "Vapp is shared across org with {0} access"
            response['msg'] = msg.format(access)
            response['changed'] = True
        except EntityNotFoundException as ex:
            response['warnings'] = str(ex)

        return response

    def unshare(self):
        response = dict()
        response['changed'] = False

        try:
            vapp = self.get_vapp()
            vapp.unshare_from_org_members()
            response['msg'] = "Sharing has been stopped for Vapp"
            response['changed'] = True
        except EntityNotFoundException as ex:
            response['warnings'] = str(ex)

        return response

    def set_meta(self):
        response = dict()
        response['changed'] = False
        vapp_name = self.params.get('vapp_name')
        metadata = self.params.get('metadata')
        domain = self.params.get("metadata_domain")
        visibility = self.params.get("metadata_visibility")
        metadata_type = self.params.get("metadata_type")
        metadata_type = "Metadata{0}Value".format(metadata_type)

        try:
            vapp = self.get_vapp()
            domain = MetadataDomain(domain)
            visibility = MetadataVisibility(visibility)
            metadata_type = MetadataValueType(metadata_type)
            set_meta_task = vapp.set_multiple_metadata(metadata,
                                                       domain=domain,
                                                       visibility=visibility,
                                                       metadata_value_type=metadata_type)
            self.execute_task(set_meta_task)
            msg = "Metadata {0} have been set to vApp {1}"
            response["msg"] = msg.format(list(metadata.keys()), vapp_name)
        except EntityNotFoundException as ex:
            response['warnings'] = str(ex)

        return response

    def get_meta(self):
        response = dict()
        response['changed'] = False
        response['msg'] = dict()

        try:
            vapp = self.get_vapp()
            metadata = vapp.get_metadata()
            response['msg'] = {
                 metadata.MetadataEntry.Key.text: metadata.MetadataEntry.TypedValue.Value.text
            }
        except EntityNotFoundException as ex:
            response['warnings'] = str(ex)

        return response

    def remove_meta(self):
        response = dict()
        response['changed'] = False
        vapp_name = self.params.get('vapp_name')
        domain = self.params.get("metadata_domain")
        metadata = self.params.get('metadata')
        domain = MetadataDomain(domain)
        response['msg'] = list()

        try:
            vapp = self.get_vapp()
            for key in metadata:
                remove_meta_task = vapp.remove_metadata(key, domain=domain)
                self.execute_task(remove_meta_task)
            msg = "Metadata {0} have been removed from vApp {1}"
            response["msg"] = msg.format(list(metadata.keys()), vapp_name)
        except EntityNotFoundException as ex:
            response['warnings'] = str(ex)

        return response

    def add_org_network(self):
        response = dict()
        response['changed'] = False
        vapp_name = self.params.get('vapp_name')
        network = self.params.get("network")

        try:
            vapp = self.get_vapp()
            vapp.connect_org_vdc_network(network)
            response['changed'] = True
            msg = "Org Network {0} has been added to vApp {1}"
            response['msg'] = msg.format(network, vapp_name)
        except EntityNotFoundException as ex:
            response['warnings'] = str(ex)
        except InvalidStateException as ex:
            response['warnings'] = str(ex)

        return response

    def delete_org_network(self):
        response = dict()
        response['changed'] = False
        vapp_name = self.params.get('vapp_name')
        network = self.params.get("network")

        try:
            vapp = self.get_vapp()
            vapp.disconnect_org_vdc_network(network)
            response['changed'] = True
            msg = "Org Network {0} has been added to vApp {1}"
            response['msg'] = msg.format(network, vapp_name)
        except EntityNotFoundException as ex:
            response['warnings'] = str(ex)
        except InvalidStateException as ex:
            response['warnings'] = str(ex)

        return response
Пример #60
0
class VdcGW(VcdAnsibleModule):
    def __init__(self, **kwargs):
        super(VdcGW, self).__init__(**kwargs)
        self.vdc_name = self.params.get('vdc_name')
        self.org_name = self.params.get('org_name')
        org_resource = self.client.get_org_by_name(self.org_name)
        self.org = Org(self.client, resource=org_resource)
        vdc_resource = self.org.get_vdc(self.vdc_name)
        self.vdc = VDC(self.client, name=self.vdc_name, resource=vdc_resource)

    def manage_states(self):
        state = self.params.get('state')
        if state == "present":
            return self.create_gw()

        if state == "update":
            return self.update_gw()

        if state == "absent":
            return self.delete_gw()

    def get_gateway(self, gateway_name):
        gateway = self.vdc.get_gateway(gateway_name)
        if gateway is None:
            raise EntityNotFoundException(
                "Edge gateway {0} is not present".format(gateway_name))

        return gateway

    def create_gw(self):
        api_version = self.client.get_api_version()
        if api_version == "30.0":
            return self.create_gateway_api_version_30()

        if api_version == "31.0":
            return self.create_gateway_api_version_31()

        if api_version == "32.0":
            return self.create_gateway_api_version_32()

    def create_gateway_api_version_30(self):
        response = dict()
        response['changed'] = False
        gateway_name = self.params.get('gateway_name')
        description = self.params.get('description')
        external_networks = self.params.get('external_networks')
        gateway_backing_config = self.params.get('gateway_backing_config')
        default_gateway = self.params.get('default_gateway')
        extnw_for_default_gw = self.params.get('extnw_for_default_gw')
        default_gateway_ip = self.params.get('default_gateway_ip')
        default_gw_for_dns_relay = self.params.get('default_gw_for_dns_relay')
        ha_enabled = self.params.get('ha_enabled')
        create_as_advanced_gw = self.params.get('create_as_advanced_gw')
        dr_enabled = self.params.get('dr_enabled')
        configure_ip_settings = self.params.get('configure_ip_settings')
        sub_allocate_ip_pools = self.params.get('sub_allocate_ip_pools')
        ext_net_to_rate_limit = self.params.get('ext_net_to_rate_limit')
        ext_net_to_subnet_with_ip_range = self.params.get(
            'ext_net_to_subnet_with_ip_range')
        ext_net_to_participated_subnet_with_ip_settings = self.params.get(
            'ext_net_to_participated_subnet_with_ip_settings')

        try:
            self.get_gateway(gateway_name)
        except EntityNotFoundException:
            create_task = self.vdc.create_gateway_api_version_30(
                name=gateway_name,
                external_networks=external_networks,
                gateway_backing_config=gateway_backing_config,
                desc=description,
                is_default_gateway=default_gateway,
                selected_extnw_for_default_gw=extnw_for_default_gw,
                default_gateway_ip=default_gateway_ip,
                is_default_gw_for_dns_relay_selected=default_gw_for_dns_relay,
                is_ha_enabled=ha_enabled,
                should_create_as_advanced=create_as_advanced_gw,
                is_dr_enabled=dr_enabled,
                is_ip_settings_configured=configure_ip_settings,
                ext_net_to_participated_subnet_with_ip_settings=ext_net_to_participated_subnet_with_ip_settings,
                is_sub_allocate_ip_pools_enabled=sub_allocate_ip_pools,
                ext_net_to_subnet_with_ip_range=ext_net_to_subnet_with_ip_range,
                ext_net_to_rate_limit=ext_net_to_rate_limit)

            self.execute_task(create_task.Tasks.Task[0])
            msg = "Edge Gateway {0} has been created"
            response['msg'] = msg.format(gateway_name)
            response['changed'] = True
        else:
            msg = "Edge Gateway {0} is already present"
            response['warnings'] = msg.format(gateway_name)

        return response

    def create_gateway_api_version_31(self):
        response = dict()
        response['changed'] = False
        gateway_name = self.params.get('gateway_name')
        description = self.params.get('description')
        external_networks = self.params.get('external_networks')
        gateway_backing_config = self.params.get('gateway_backing_config')
        default_gateway = self.params.get('default_gateway')
        extnw_for_default_gw = self.params.get('extnw_for_default_gw')
        default_gateway_ip = self.params.get('default_gateway_ip')
        default_gw_for_dns_relay = self.params.get('default_gw_for_dns_relay')
        ha_enabled = self.params.get('ha_enabled')
        create_as_advanced_gw = self.params.get('create_as_advanced_gw')
        dr_enabled = self.params.get('dr_enabled')
        configure_ip_settings = self.params.get('configure_ip_settings')
        sub_allocate_ip_pools = self.params.get('sub_allocate_ip_pools')
        ext_net_to_rate_limit = self.params.get('ext_net_to_rate_limit')
        flips_mode = self.params.get('flips_mode')
        ext_net_to_subnet_with_ip_range = self.params.get(
            'ext_net_to_subnet_with_ip_range')
        ext_net_to_participated_subnet_with_ip_settings = self.params.get(
            'ext_net_to_participated_subnet_with_ip_settings')

        try:
            self.get_gateway(gateway_name)
        except EntityNotFoundException:
            create_task = self.vdc.create_gateway_api_version_31(
                name=gateway_name,
                external_networks=external_networks,
                gateway_backing_config=gateway_backing_config,
                desc=description,
                is_default_gateway=default_gateway,
                selected_extnw_for_default_gw=extnw_for_default_gw,
                default_gateway_ip=default_gateway_ip,
                is_default_gw_for_dns_relay_selected=default_gw_for_dns_relay,
                is_ha_enabled=ha_enabled,
                should_create_as_advanced=create_as_advanced_gw,
                is_dr_enabled=dr_enabled,
                is_ip_settings_configured=configure_ip_settings,
                ext_net_to_participated_subnet_with_ip_settings=ext_net_to_participated_subnet_with_ip_settings,
                is_sub_allocate_ip_pools_enabled=sub_allocate_ip_pools,
                ext_net_to_subnet_with_ip_range=ext_net_to_subnet_with_ip_range,
                ext_net_to_rate_limit=ext_net_to_rate_limit,
                is_flips_mode_enabled=flips_mode)

            self.execute_task(create_task.Tasks.Task[0])
            msg = "Edge Gateway {0} has been created"
            response['msg'] = msg.format(gateway_name)
            response['changed'] = True
        else:
            msg = "Edge Gateway {0} is already present"
            response['warnings'] = msg.format(gateway_name)

        return response

    def create_gateway_api_version_32(self):
        response = dict()
        response['changed'] = False
        gateway_name = self.params.get('gateway_name')
        description = self.params.get('description')
        external_networks = self.params.get('external_networks')
        gateway_backing_config = self.params.get('gateway_backing_config')
        default_gateway = self.params.get('default_gateway')
        extnw_for_default_gw = self.params.get('extnw_for_default_gw')
        default_gateway_ip = self.params.get('default_gateway_ip')
        default_gw_for_dns_relay = self.params.get('default_gw_for_dns_relay')
        ha_enabled = self.params.get('ha_enabled')
        create_as_advanced_gw = self.params.get('create_as_advanced_gw')
        dr_enabled = self.params.get('dr_enabled')
        configure_ip_settings = self.params.get('configure_ip_settings')
        sub_allocate_ip_pools = self.params.get('sub_allocate_ip_pools')
        ext_net_to_rate_limit = self.params.get('ext_net_to_rate_limit')
        edge_gateway_type = self.params.get('edge_gateway_type')
        flips_mode = self.params.get('flips_mode')
        ext_net_to_subnet_with_ip_range = self.params.get(
            'ext_net_to_subnet_with_ip_range')
        ext_net_to_participated_subnet_with_ip_settings = self.params.get(
            'ext_net_to_participated_subnet_with_ip_settings')

        try:
            self.get_gateway(gateway_name)
        except EntityNotFoundException:
            create_task = self.vdc.create_gateway_api_version_32(
                name=gateway_name,
                external_networks=external_networks,
                gateway_backing_config=gateway_backing_config,
                desc=description,
                is_default_gateway=default_gateway,
                selected_extnw_for_default_gw=extnw_for_default_gw,
                default_gateway_ip=default_gateway_ip,
                is_default_gw_for_dns_relay_selected=default_gw_for_dns_relay,
                is_ha_enabled=ha_enabled,
                should_create_as_advanced=create_as_advanced_gw,
                is_dr_enabled=dr_enabled,
                is_ip_settings_configured=configure_ip_settings,
                ext_net_to_participated_subnet_with_ip_settings=ext_net_to_participated_subnet_with_ip_settings,
                is_sub_allocate_ip_pools_enabled=sub_allocate_ip_pools,
                ext_net_to_subnet_with_ip_range=ext_net_to_subnet_with_ip_range,
                ext_net_to_rate_limit=ext_net_to_rate_limit,
                is_flips_mode_enabled=flips_mode,
                edgeGatewayType=edge_gateway_type)

            self.execute_task(create_task.Tasks.Task[0])
            msg = "Edge Gateway {0} has been created"
            response['msg'] = msg.format(gateway_name)
            response['changed'] = True
        else:
            msg = "Edge Gateway {0} is already present"
            response['warnings'] = msg.format(gateway_name)

        return response

    def update_gw(self):
        response = dict()
        response['changed'] = False
        gateway_name = self.params.get('gateway_name')
        new_gateway_name = self.params.get('new_gateway_name')
        description = self.params.get('description')
        ha_enabled = self.params.get('ha_enabled')
        edge_gateway_href = None

        try:
            gateway = self.get_gateway(gateway_name)
            for key, value in gateway.items():
                if key == "href":
                    edge_gateway_href = value
                    break
            gateway = Gateway(
                self.client, name=gateway_name, href=edge_gateway_href)
            update_task = gateway.edit_gateway(newname=new_gateway_name,
                                               desc=description, ha=ha_enabled)
            self.execute_task(update_task)
            msg = "Edge Gateway {0} has been updated with {1}"
            response['msg'] = msg.format(gateway_name, new_gateway_name)
            response['changed'] = True
        except EntityNotFoundException:
            msg = 'Edge Gateway {0} is not present'
            response['warnings'] = msg.format(gateway_name)

        return response

    def delete_gw(self):
        response = dict()
        response['changed'] = False
        gateway_name = self.params.get('gateway_name')

        try:
            self.get_gateway(gateway_name)
        except EntityNotFoundException:
            msg = "Edge Gateway {0} is not present"
            response['warnings'] = msg.format(gateway_name)
        else:
            delete_task = self.vdc.delete_gateway(gateway_name)
            self.execute_task(delete_task)
            msg = "Edge Gateway {0} has been deleted"
            response['msg'] = msg.format(gateway_name)
            response['changed'] = True

        return response