Esempio n. 1
0
    def create_routed_ovdc_network(cls):
        """Creates a routed org vdc network.

        The name of the created org vdc network is specified in the
        ovdc_network_constant file, skips creating one, if such a network already
        exists.

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

        vdc = VDC(cls._sys_admin_client, href=cls._ovdc_href)

        expected_net_name = OvdcNetConstants.routed_net_name
        records_list = vdc.list_orgvdc_network_records()

        for network_record in records_list:
            if network_record['name'].lower() == expected_net_name.lower():
                cls._logger.debug('Reusing existing direct org-vdc network ' +
                                  expected_net_name)
                return

        result = vdc.create_routed_vdc_network(
            network_name=OvdcNetConstants.routed_net_name,
            gateway_name=GatewayConstants.name,
            network_cidr=OvdcNetConstants.routed_orgvdc_network_gateway_ip,
            description='org vdc network description')

        cls._sys_admin_client.get_task_monitor() \
            .wait_for_success(task=result.Tasks.Task[0])
Esempio n. 2
0
    def test_005_create_routed_orgvdc_network(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.create_routed_vdc_network(
            network_name=self.config['vcd']['vdc_routed_network_name'],
            gateway_name=self.config['vcd']['routed_network_gateway_name'],
            network_cidr=self.config['vcd']['network_cidr'],
            description='Dummy description')
        task = self.client.get_task_monitor().wait_for_success(
            task=result.Tasks.Task[0])
        assert task.get('status') == TaskStatus.SUCCESS.value
Esempio n. 3
0
    def test_005_create_routed_orgvdc_network(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.create_routed_vdc_network(
            network_name=self.config['vcd']['vdc_routed_network_name'],
            gateway_name=self.config['vcd']['routed_network_gateway_name'],
            network_cidr=self.config['vcd']['network_cidr'],
            description='Dummy description')
        task = self.client.get_task_monitor().wait_for_success(
            task=result.Tasks.Task[0])
        assert task.get('status') == TaskStatus.SUCCESS.value
Esempio n. 4
0
    def __create_routed_ovdc_network(self):
        """Creates a routed org vdc network.

        :raises: Exception: if the class variable _ovdc_href is not populated.
        """
        vdc_reource = TestIpSecVpn._vdc_resource
        vdc = VDC(TestIpSecVpn._client, resource=vdc_reource)
        routednet = vdc.create_routed_vdc_network(
            network_name=TestIpSecVpn._routed_network_name,
            gateway_name=TestIpSecVpn._gateway_name,
            network_cidr=TestIpSecVpn._routed_orgvdc_network_gateway_ip,
            description='org vdc network description')
        TestIpSecVpn._client.get_task_monitor() \
            .wait_for_success(task=routednet.Tasks.Task[0])

        TestIpSecVpn._routednet_href = routednet.get('href')
        TestIpSecVpn._routednet_obj = VdcNetwork(
            TestIpSecVpn._client, href=TestIpSecVpn._routednet_href)
        TestIpSecVpn._routednet_resource = TestIpSecVpn.\
            _routednet_obj.get_resource()
Esempio n. 5
0
    def __create_routed_ovdc_network(self):
        """Creates a routed org vdc network.

        :raises: Exception: if the class variable _ovdc_href is not populated.
        """
        vdc_reource = TestIpSecVpn._vdc_resource
        vdc = VDC(TestIpSecVpn._client, resource=vdc_reource)
        routednet = vdc.create_routed_vdc_network(
            network_name=TestIpSecVpn._routed_network_name,
            gateway_name=TestIpSecVpn._gateway_name,
            network_cidr=TestIpSecVpn._routed_orgvdc_network_gateway_ip,
            description='org vdc network description')
        TestIpSecVpn._client.get_task_monitor() \
            .wait_for_success(task=routednet.Tasks.Task[0])

        TestIpSecVpn._routednet_href = routednet.get('href')
        TestIpSecVpn._routednet_obj = VdcNetwork(TestIpSecVpn._client,
                                                 href=TestIpSecVpn.
                                                 _routednet_href)
        TestIpSecVpn._routednet_resource = TestIpSecVpn. \
            _routednet_obj.get_resource()
Esempio n. 6
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
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
Esempio n. 8
0
    sys.exit()

# Ensure Routed Org Network doesn't exist.
print("Fetching Network...")
try:
    network_resource = vdc.get_routed_orgvdc_network(
        cfg.org.org_routed_nw.name)
    print("Network already exists: {0}".format(cfg.org.org_routed_nw.name))
except Exception:
    print("Network {0} does not exist, creating".format(
        cfg.org.org_routed_nw.name))
    network_resource = vdc.create_routed_vdc_network(
        cfg.org.org_routed_nw.name,
        cfg.org.edge_gateway.name,
        cfg.org.org_routed_nw.cidr,
        dns_suffix=cfg.org.org_routed_nw.dns_suffix,
        ip_range_start=cfg.org.org_routed_nw.ip_range_start,
        ip_range_end=cfg.org.org_routed_nw.ip_range_end,
        is_shared=cfg.org.org_routed_nw.is_shared,
        distributed_interface=cfg.org.org_routed_nw.distributed_interface)

    handle_task(client, network_resource.Tasks.Task[0])

# Final report ------------------------------------------------------------------------------------
new_routed_network = vdc.get_routed_orgvdc_network(cfg.org.org_routed_nw.name)
print(
    '\nNew routed network is created -------------------------------------------------'
)
print('name: {}'.format(new_routed_network.attrib['name']))
print('href: {}'.format(new_routed_network.attrib['href']))