Esempio n. 1
0
    def get_test_vapp_with_network(cls, client):
        """Gets the vapp for testing in current vDC.

        :param pyvcloud.vcd.client.Client client: client which will be used to
            create the VDC object.

        :return: the vdc that is backing the organization in which all tests
            will run.

        :rtype: pyvcloud.vcd.vdc.VDC
        """
        if not cls._vapp_href:
            vdc = Environment.get_test_vdc(client)
            try:
                vapp = vdc.get_vapp(VAppConstants.name)
                cls._vapp_href = vapp.get('href')
            except EntityNotFoundException:
                cls._vapp_href = create_vapp_from_template(
                    client,
                    vdc,
                    VAppConstants.name,
                    cls._config['vcd']['default_catalog_name'],
                    cls._config['vcd']['default_template_file_name'],
                    power_on=False,
                    deploy=False)
                vapp = VApp(client, href=cls._vapp_href)
                vapp.create_vapp_network(
                    VAppConstants.network1_name,
                    VAppConstants.network1_cidr,
                    ip_ranges=VAppConstants.network1_ip_ranges)
        return VApp(client, href=cls._vapp_href)
Esempio n. 2
0
    def get_test_vapp_with_network(cls, client):
        """Gets the vapp for testing in current vDC.

        :param pyvcloud.vcd.client.Client client: client which will be used to
            create the VDC object.

        :return: the vdc that is backing the organization in which all tests
            will run.

        :rtype: pyvcloud.vcd.vdc.VDC
        """
        if not cls._vapp_href:
            vdc = Environment.get_test_vdc(client)
            try:
                vapp = vdc.get_vapp(VAppConstants.name)
                cls._vapp_href = vapp.get('href')
            except EntityNotFoundException:
                cls._vapp_href = create_vapp_from_template(
                    client,
                    vdc,
                    VAppConstants.name,
                    cls._config['vcd']['default_catalog_name'],
                    cls._config['vcd']['default_template_file_name'],
                    power_on=False,
                    deploy=False)
                vapp = VApp(client, href=cls._vapp_href)
                task = vapp.create_vapp_network(
                    VAppConstants.network1_name,
                    VAppConstants.network1_cidr,
                    ip_ranges=VAppConstants.network1_ip_ranges)
                client.get_task_monitor().wait_for_success(task=task)
        return VApp(client, href=cls._vapp_href)
Esempio n. 3
0
def create_vapp_network(ctx, vapp_name, name, subnet, description,
                        primary_dns_ip, secondary_dns_ip, dns_suffix,
                        ip_ranges, is_guest_vlan_allowed):
    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)
        vapp_resource = vdc.get_vapp(vapp_name)
        vapp = VApp(client, resource=vapp_resource)
        task = vapp.create_vapp_network(
            name, subnet, description, primary_dns_ip, secondary_dns_ip,
            dns_suffix, ip_ranges, is_guest_vlan_allowed)
        stdout(task, ctx)
    except Exception as e:
        stderr(e, ctx)
Esempio n. 4
0
class VappNetwork(VcdAnsibleModule):
    def __init__(self, **kwargs):
        super(VappNetwork, self).__init__(**kwargs)
        vapp_resource = self.get_resource()
        self.vapp = VApp(self.client, resource=vapp_resource)

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

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

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

    def manage_operations(self):
        operation = self.params.get('operation')
        if operation == "read":
            return self.get_all_networks()

    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

    def get_network(self):
        network_name = self.params.get('network')
        networks = self.vapp.get_all_networks()
        for network in networks:
            if network.get('{' + NSMAP['ovf'] + '}name') == network_name:
                return network
        raise EntityNotFoundException('Can\'t find the specified vApp network')

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

        for network in self.vapp.get_all_networks():
            name = network.get('{' + NSMAP['ovf'] + '}name')
            n = {'description': str(network.Description)}
            response['msg'][name] = n

        return response

    def add_network(self):
        network_name = self.params.get('network')
        network_cidr = self.params.get('network_cidr')
        network_description = self.params.get('description')
        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_ranges = self.params.get('ip_ranges')
        is_guest_vx_vlan_allowed = self.params.get('is_guest_vx_vlan_allowed')
        response = dict()
        response['changed'] = False

        try:
            self.get_network()
        except EntityNotFoundException:
            add_network_task = self.vapp.create_vapp_network(
                name=network_name,
                network_cidr=network_cidr,
                description=network_description,
                primary_dns_ip=primary_dns_ip,
                secondary_dns_ip=secondary_dns_ip,
                dns_suffix=dns_suffix,
                ip_ranges=ip_ranges,
                is_guest_vx_vlan_allowed=is_guest_vx_vlan_allowed)
            self.execute_task(add_network_task)
            response['msg'] = 'Vapp Network {} has been added'.format(
                network_name)
            response['changed'] = True
        else:
            response[
                'warnings'] = 'Vapp Network {} is already present.'.format(
                    network_name)

        return response

    def update_network(self):
        network_name = self.params.get('network')
        new_network_name = self.params.get('new_network')
        network_description = self.params.get('description')
        response = dict()
        response['changed'] = False

        try:
            self.get_network()
        except EntityNotFoundException:
            response['warnings'] = 'Vapp Network {} is not present'.format(
                network_name)
        else:
            update_network_task = self.vapp.update_vapp_network(
                network_name=network_name,
                new_net_name=new_network_name,
                new_net_desc=network_description)
            self.execute_task(update_network_task)
            response['msg'] = 'Vapp Network {} has been updated'.format(
                network_name)
            response['changed'] = True

        return response

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

        try:
            self.get_network()
        except EntityNotFoundException:
            response['warnings'] = 'Vapp Network {} is not present'.format(
                network_name)
        else:
            delete_network_task = self.vapp.delete_vapp_network(network_name)
            self.execute_task(delete_network_task)
            response['msg'] = 'Vapp Network {} has been deleted.'.format(
                network_name)
            response['changed'] = True

        return response
Esempio n. 5
0
    def test_0000_setup(self):
        """Setup the vms required for the other tests in this module.

        Create a vApp with just one vm as per the configuration stated above.

        This test passes if the vApp and vm hrefs are not None.
        """
        logger = Environment.get_default_logger()
        TestVM._client = Environment.get_client_in_default_org(
            TestVM._test_runner_role)
        TestVM._sys_admin_client = Environment.get_sys_admin_client()
        vdc = Environment.get_test_vdc(TestVM._client)
        TestVM._media_resource = Environment.get_test_media_resource()

        logger.debug('Creating vApp ' + TestVM._test_vapp_name + '.')
        TestVM._test_vapp_href = create_customized_vapp_from_template(
            client=TestVM._client,
            vdc=vdc,
            name=TestVM._test_vapp_name,
            catalog_name=Environment.get_default_catalog_name(),
            template_name=Environment.get_default_template_name(),
            memory_size=TestVM._test_vapp_first_vm_memory_size,
            num_cpu=TestVM._test_vapp_first_vm_num_cpu,
            disk_size=TestVM._test_vapp_first_vm_first_disk_size,
            vm_name=TestVM._test_vapp_first_vm_name,
            nw_adapter_type=TestVM._test_vapp_first_vm_network_adapter_type)

        self.assertIsNotNone(TestVM._test_vapp_href)

        vapp = VApp(TestVM._client, href=TestVM._test_vapp_href)
        TestVM._test_vapp = vapp
        vm_resource = vapp.get_vm(TestVM._test_vapp_first_vm_name)
        TestVM._test_vapp_first_vm_href = vm_resource.get('href')

        self.assertIsNotNone(TestVM._test_vapp_first_vm_href)

        logger.debug('Creating empty vApp.')
        TestVM._empty_vapp_href = \
            create_empty_vapp(client=TestVM._client,
                              vdc=vdc,
                              name=TestVM._empty_vapp_name,
                              description=TestVM._empty_vapp_description)
        TestVM._empty_vapp_owner_name = Environment. \
            get_username_for_role_in_test_org(TestVM._test_runner_role)

        # Create independent disk
        TestVM._idisk = vdc.create_disk(name=self._idisk_name,
                                        size=self._idisk_size,
                                        description=self._idisk_description)

        # Upload template with vm tools.
        catalog_author_client = Environment.get_client_in_default_org(
            CommonRoles.CATALOG_AUTHOR)
        org_admin_client = Environment.get_client_in_default_org(
            CommonRoles.ORGANIZATION_ADMINISTRATOR)
        org = Environment.get_test_org(org_admin_client)
        catalog_name = Environment.get_config()['vcd']['default_catalog_name']
        catalog_items = org.list_catalog_items(catalog_name)
        template_name = Environment.get_config(
        )['vcd']['default_template_vmtools_file_name']
        catalog_item_flag = False
        for item in catalog_items:
            if item.get('name').lower() == template_name.lower():
                logger.debug('Reusing existing template ' + template_name)
                catalog_item_flag = True
                break
        if not catalog_item_flag:
            logger.debug('Uploading template ' + template_name +
                         ' to catalog ' + catalog_name + '.')
            org.upload_ovf(catalog_name=catalog_name, file_name=template_name)
            # wait for the template import to finish in vCD.
            catalog_item = org.get_catalog_item(name=catalog_name,
                                                item_name=template_name)
            template = catalog_author_client.get_resource(
                catalog_item.Entity.get('href'))
            catalog_author_client.get_task_monitor().wait_for_success(
                task=template.Tasks.Task[0])
        # Create Vapp with template of vmware tools
        logger.debug('Creating vApp ' + TestVM._test_vapp_vmtools_name + '.')
        TestVM._test_vapp_vmtools_href = create_customized_vapp_from_template(
            client=TestVM._client,
            vdc=vdc,
            name=TestVM._test_vapp_vmtools_name,
            catalog_name=catalog_name,
            template_name=template_name)
        self.assertIsNotNone(TestVM._test_vapp_href)
        vapp = VApp(TestVM._client, href=TestVM._test_vapp_vmtools_href)
        TestVM._test_vapp_vmtools = vapp
        vm_resource = vapp.get_vm(TestVM._test_vapp_vmtools_vm_name)
        TestVM._test_vapp_vmtools_vm_href = vm_resource.get('href')
        self.assertIsNotNone(TestVM._test_vapp_vmtools_vm_href)

        resource = TestVM._sys_admin_client.get_extension()
        result = TestVM._sys_admin_client.get_linked_resource(
            resource, RelationType.DOWN, EntityType.DATASTORE_REFERENCES.value)
        if hasattr(result, '{' + NSMAP['vcloud'] + '}Reference'):
            for reference in result['{' + NSMAP['vcloud'] + '}Reference']:
                if reference.get('name') == 'shared-disk-2':
                    TestVM._datastore_id = reference.get('id')
                    break

        vapp = Environment.get_vapp_in_test_vdc(
            client=TestVM._client, vapp_name=TestVM._test_vapp_name)
        logger.debug('Creating a vApp network in ' + TestVM._test_vapp_name)
        task = vapp.create_vapp_network(
            TestVM._vapp_network_name, TestVM._vapp_network_cidr,
            TestVM._vapp_network_description, TestVM._vapp_network_dns1,
            TestVM._vapp_network_dns2, TestVM._vapp_network_dns_suffix,
            [TestVM._vapp_network_ip_range])
        result = TestVM._client.get_task_monitor().wait_for_success(task)
        self.assertEqual(result.get('status'), TaskStatus.SUCCESS.value)
        vapp.reload()