コード例 #1
0
ファイル: vcd_vapp.py プロジェクト: westsouthnight/pyvcloud
 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
コード例 #2
0
def create(ctx, name, description, catalog, template, network, memory, cpu,
           disk_size, ip_allocation_mode, vm_name, hostname, storage_profile,
           accept_all_eulas):
    try:
        client = ctx.obj['client']
        vdc_href = ctx.obj['profiles'].get('vdc_href')
        vdc = VDC(client, href=vdc_href)
        if catalog is None and template is None:
            vapp_resource = vdc.create_vapp(
                name,
                description=description,
                network=network,
                accept_all_eulas=accept_all_eulas)
        else:
            vapp_resource = vdc.instantiate_vapp(
                name,
                catalog,
                template,
                network=network,
                memory=memory,
                cpu=cpu,
                disk_size=disk_size,
                deploy=True,
                power_on=True,
                accept_all_eulas=accept_all_eulas,
                cust_script=None,
                ip_allocation_mode=ip_allocation_mode,
                vm_name=vm_name,
                hostname=hostname,
                storage_profile=storage_profile)
        stdout(vapp_resource.Tasks.Task[0], ctx)
    except Exception as e:
        stderr(e, ctx)
コード例 #3
0
ファイル: vcd_vapp.py プロジェクト: eulerjiang/pyvcloud
 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_status=None,
         expected_target_statuses=[
             TaskStatus.SUCCESS, TaskStatus.ABORTED, TaskStatus.ERROR,
             TaskStatus.CANCELED
         ],
         callback=None)
     assert task.get('status') == TaskStatus.SUCCESS.value
     # vdc.reload()
     vdc.resource = vdc.client.get_resource(vdc.href)
     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']
コード例 #4
0
    def instantiate_vapp(cls):
        """Instantiates the test template in the test catalog.

        This template will be used to create the test vApp. if the vApp already
        exists then skips creating it.

        :raises: Exception: if the class variable _ovdc_href is not populated.
        """
        cls._basic_check()
        if cls._ovdc_href is None:
            raise Exception('OVDC ' + cls._config['vcd']['default_ovdc_name'] +
                            ' doesn\'t exist.')

        try:
            catalog_author_client = Environment.get_client_in_default_org(
                CommonRoles.CATALOG_AUTHOR)
            vdc = VDC(catalog_author_client, href=cls._ovdc_href)
            vapp_name = cls._config['vcd']['default_vapp_name']
            vapp_resource = vdc.get_vapp(vapp_name)
            cls._logger.debug('Reusing existing vApp ' + vapp_name + '.')
            cls._vapp_href = vapp_resource.get('href')
        except EntityNotFoundException as e:
            cls._logger.debug('Instantiating vApp ' + vapp_name + '.')
            vapp_resource = vdc.instantiate_vapp(
                name=vapp_name,
                catalog=cls._config['vcd']['default_catalog_name'],
                template=cls._config['vcd']['default_template_file_name'],
                accept_all_eulas=True)
            catalog_author_client.get_task_monitor()\
                .wait_for_success(task=vapp_resource.Tasks.Task[0])
            cls._vapp_href = vapp_resource.get('href')
        finally:
            catalog_author_client.logout()
コード例 #5
0
ファイル: vcd_vapp.py プロジェクト: vmware/pyvcloud
 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']
コード例 #6
0
ファイル: vapp.py プロジェクト: vmware/vca-cli
def create(ctx, name, description, catalog, template, network, memory, cpu,
           disk_size, ip_allocation_mode, vm_name, hostname, storage_profile,
           accept_all_eulas):
    try:
        restore_session(ctx, vdc_required=True)
        client = ctx.obj['client']
        vdc_href = ctx.obj['profiles'].get('vdc_href')
        vdc = VDC(client, href=vdc_href)
        if catalog is None and template is None:
            vapp_resource = vdc.create_vapp(
                name,
                description=description,
                network=network,
                accept_all_eulas=accept_all_eulas)
        else:
            vapp_resource = vdc.instantiate_vapp(
                name,
                catalog,
                template,
                description=description,
                network=network,
                memory=memory,
                cpu=cpu,
                disk_size=disk_size,
                deploy=True,
                power_on=True,
                accept_all_eulas=accept_all_eulas,
                cust_script=None,
                ip_allocation_mode=ip_allocation_mode,
                vm_name=vm_name,
                hostname=hostname,
                storage_profile=storage_profile)
        stdout(vapp_resource.Tasks.Task[0], ctx)
    except Exception as e:
        stderr(e, ctx)
コード例 #7
0
ファイル: vcd_vapp.py プロジェクト: westsouthnight/pyvcloud
    def test_110_instantiate_vapp_custom_disk_size(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,
            disk_size=self.config['vcd']['disk_size_new'])
        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.resource = vdc.client.get_resource(vdc.href)
        vapp_resource = vdc.get_vapp(self.config['vcd']['vapp'])
        vms = vapp_resource.xpath(
            '//vcloud:VApp/vcloud:Children/vcloud:Vm', namespaces=NSMAP)
        assert len(vms) > 0

        items = vms[0].xpath(
            '//ovf:VirtualHardwareSection/ovf:Item',
            namespaces={
                'ovf': NSMAP['ovf']
            })
        assert len(items) > 0

        found_disk = False
        for item in items:
            if item['{' + NSMAP['rasd'] + '}ResourceType'] == 17:  # NOQA
                found_disk = True
                assert item['{' + NSMAP['rasd'] + '}VirtualQuantity'] == \
                    (self.config['vcd']['disk_size_new'] * 1024 * 1024)
                break

        # this check makes sure that the vm isn't disk-less
        assert found_disk

        # cleanup
        self.test_100_delete_vapp()
コード例 #8
0
def create(ctx, catalog, template, name, network, memory, cpu,
           ip_allocation_mode):
    try:
        cust_script = None
        client = ctx.obj['client']
        vdc_href = ctx.obj['profiles'].get('vdc_href')
        vdc = VDC(client, href=vdc_href)
        vapp_resource = vdc.instantiate_vapp(
            name,
            catalog,
            template,
            network=network,
            memory=memory,
            cpu=cpu,
            deploy=True,
            power_on=True,
            cust_script=cust_script,
            ip_allocation_mode=ip_allocation_mode)
        stdout(vapp_resource.Tasks.Task[0], ctx)
    except Exception as e:
        stderr(e, ctx)
コード例 #9
0
ファイル: environment.py プロジェクト: anusuyar/pyvcloud
    def instantiate_vapp(cls):
        """Instantiates the test template in the test catalog to create the
            test vApp. If the vApp already exists then skips creating it.

        :return: Nothing

        :raises: Exception: If the class variable _ovdc_href is not populated.
        """
        cls._basic_check()
        if cls._ovdc_href is None:
            raise Exception('OVDC ' + cls._config['vcd']['default_ovdc_name'] +
                            ' doesn\'t exist.')

        try:
            # TODO : use vApp author - see VCDA-603
            catalog_author_client = Environment.get_client_in_default_org(
                CommonRoles.CATALOG_AUTHOR)
            vdc = VDC(catalog_author_client, href=cls._ovdc_href)
            vapp_name = cls._config['vcd']['default_vapp_name']
            vapp_resource = vdc.get_vapp(vapp_name)
            print('Reusing existing vApp ' + vapp_name + '.')
            cls._vapp_href = vapp_resource.get('href')
            # TODO : Change to ResourceNotFoundException -- see VCDA-603
        except Exception as e:
            if 'not found' in str(e):
                print('Instantiating vApp ' + vapp_name + '.')
                vapp_resource = vdc.instantiate_vapp(
                    name=vapp_name,
                    catalog=cls._config['vcd']['default_catalog_name'],
                    template=cls._config['vcd']['default_template_file_name'],
                    accept_all_eulas=True)
                catalog_author_client.get_task_monitor()\
                    .wait_for_success(task=vapp_resource.Tasks.Task[0])
                cls._vapp_href = vapp_resource.get('href')
        finally:
            catalog_author_client.logout()
コード例 #10
0
ファイル: tenant-onboard.py プロジェクト: relent0r/pyvcloud
                    name=network['network_name'],
                    type=FenceMode.ISOLATED.value)
                if len(new_network_list) > 0:
                    print("Isolated network is visible in VDC: {0}".format(
                        network['network_name']))
                    network_exists = True
                else:
                    print("Isolated network is not visible yet: {0}".format(
                        network['network_name']))
                    time.sleep(3)

# Check for vApps and create them if they don't exist.  We have to
# reload the VDC object so it has all the links to current vApps.
vdc.reload()
for vapp_cfg in cfg.vapps:
    try:
        vapp = vdc.get_vapp(vapp_cfg['name'])
        print("vApp exists: {0}".format(vapp_cfg['name']))
    except Exception:
        print("vApp does not exist: name={0}".format(vapp_cfg['name']))
        vapp_resource = vdc.instantiate_vapp(**vapp_cfg)
        print("vApp instantiated")
        # We don't track the task as instantiating a vApp takes a while.
        # Uncomment below if you want to ensure the vApps are available.
        # handle_task(client, vapp_resource.Tasks.Task[0])

# Log out.
print("All done!")
client.logout()

コード例 #11
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):
        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
コード例 #12
0
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
コード例 #13
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":
            catalog_name = self.params.get('catalog_name')
            if catalog_name:
                return self.instantiate()
            else:
                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 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
        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

        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 list_vms(self):
        vapp_name = self.params.get('vapp_name')
        vapp_resource = self.vdc.get_vapp(vapp_name)
        vapp = VApp(self.client, name=vapp_name, resource=vapp_resource)
        response = dict()
        response['msg'] = []
        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:
                vm_details['ip_address'] = None
            response['msg'].append(vm_details)
        return response

    def list_networks(self):
        vapp_name = self.params.get('vapp_name')
        vapp_resource = self.vdc.get_vapp(vapp_name)
        vapp = VApp(self.client, name=vapp_name, resource=vapp_resource)
        response = dict()
        response['msg'] = []
        for network in vapp.get_all_networks():
            response['msg'].append(network.get('{'+NSMAP['ovf']+'}name'))
        return response
コード例 #14
0
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
コード例 #15
0
def create_template(ctx, config, client, org, vdc_resource, catalog,
                    no_capture, template):
    ctx.obj = {}
    ctx.obj['client'] = client
    try:
        source_ova_item = org.get_catalog_item(config['broker']['catalog'],
                                               template['source_ova_name'])
    except Exception:
        source_ova_item = upload_source_ova(config, client, org, template)
    click.secho('Find source ova \'%s\': %s' %
                (template['source_ova_name'],
                 bool_to_msg(source_ova_item is not None)))
    if source_ova_item is None:
        return None
    item_id = source_ova_item.get('id')
    flag = False
    while True:
        q = client.get_typed_query(
            'adminCatalogItem',
            query_result_format=QueryResultFormat.ID_RECORDS,
            qfilter='id==%s' % item_id)
        records = list(q.execute())
        if records[0].get('status') == 'RESOLVED':
            if flag:
                click.secho('done', fg='blue')
            break
        else:
            if flag:
                click.secho('.', nl=False, fg='green')
            else:
                click.secho('Waiting for upload to complete...',
                            nl=False,
                            fg='green')
                flag = True
            time.sleep(5)
    vdc = VDC(client, resource=vdc_resource)
    try:
        vapp_resource = vdc.get_vapp(template['temp_vapp'])
    except Exception:
        vapp_resource = None
    if vapp_resource is None:
        click.secho('Creating vApp template \'%s\'' % template['temp_vapp'],
                    fg='green')

        init_script = get_data_file('init-%s.sh' % template['name'])
        vapp_resource = vdc.instantiate_vapp(
            template['temp_vapp'],
            catalog.get('name'),
            template['source_ova_name'],
            network=config['broker']['network'],
            fence_mode='bridged',
            ip_allocation_mode=config['broker']['ip_allocation_mode'],
            deploy=True,
            power_on=True,
            memory=template['mem'],
            cpu=template['cpu'],
            password=None,
            cust_script=init_script,
            accept_all_eulas=True,
            vm_name=template['temp_vapp'],
            hostname=template['temp_vapp'],
            storage_profile=config['broker']['storage_profile'])
        stdout(vapp_resource.Tasks.Task[0], ctx)
        vapp = VApp(client, resource=vapp_resource)
        vapp.reload()
        vs = get_vsphere(config, vapp, template['temp_vapp'])
        vs.connect()
        moid = vapp.get_vm_moid(template['temp_vapp'])
        vm = vs.get_vm_by_moid(moid)
        vs.wait_until_tools_ready(vm,
                                  sleep=5,
                                  callback=wait_for_tools_ready_callback)
        click.secho('Customizing vApp template \'%s\'' % template['temp_vapp'],
                    fg='green')
        vapp.reload()
        password_auto = vapp.get_admin_password(template['temp_vapp'])
        cust_script = get_data_file('cust-%s.sh' % template['name'])

        result = vs.execute_script_in_guest(
            vm,
            'root',
            password_auto,
            cust_script,
            target_file=None,
            wait_for_completion=True,
            wait_time=10,
            get_output=True,
            delete_script=True,
            callback=wait_for_guest_execution_callback)
        click.secho('Result: %s' % result, fg='green')
        result_stdout = result[1].content.decode()
        result_stderr = result[2].content.decode()
        click.secho('stderr:')
        if len(result_stderr) > 0:
            click.secho(result_stderr, err=True)
        click.secho('stdout:')
        if len(result_stdout) > 0:
            click.secho(result_stdout, err=False)
        if result[0] != 0:
            raise Exception('Failed customizing VM')

    if not no_capture:
        capture_as_template(ctx, config, vapp_resource, org, catalog, template)
        if template['cleanup']:
            click.secho('Deleting vApp template \'%s\' ' %
                        template['temp_vapp'],
                        fg='green')
            vdc.reload()
            task = vdc.delete_vapp(template['temp_vapp'], force=True)
            stdout(task, ctx)
コード例 #16
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
コード例 #17
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
コード例 #18
0
ファイル: tenant-onboard.py プロジェクト: vmware/pyvcloud
                    name=network['network_name'],
                    type=FenceMode.ISOLATED.value)
                if len(new_network_list) > 0:
                    print("Isolated network is visible in VDC: {0}".format(
                        network['network_name']))
                    network_exists = True
                else:
                    print("Isolated network is not visible yet: {0}".format(
                        network['network_name']))
                    time.sleep(3)

# Check for vApps and create them if they don't exist.  We have to
# reload the VDC object so it has all the links to current vApps.
vdc.reload()
for vapp_cfg in cfg.vapps:
    try:
        vapp = vdc.get_vapp(vapp_cfg['name'])
        print("vApp exists: {0}".format(vapp_cfg['name']))
    except Exception:
        print("vApp does not exist: name={0}".format(vapp_cfg['name']))
        vapp_resource = vdc.instantiate_vapp(**vapp_cfg)
        print("vApp instantiated")
        # We don't track the task as instantiating a vApp takes a while.
        # Uncomment below if you want to ensure the vApps are available.
        # handle_task(client, vapp_resource.Tasks.Task[0])

# Log out.
print("All done!")
client.logout()