Exemple #1
0
    def test_0000_setup(self):
        """
        Create one external network as per the configuration stated aboveself.

        Choose first unused port group which is not a VxLAN. Unused port groups
        have network names set to '--'. VxLAN port groups have name starting
        with 'vxw-'.

        Test the method Platform.create_external_network().

        This test passes if external network is created successfully.
        """
        logger = Environment.get_default_logger()
        TestExtNet._sys_admin_client = Environment.get_sys_admin_client()
        TestExtNet._config = Environment.get_config()

        platform = Platform(TestExtNet._sys_admin_client)
        vc_name = TestExtNet._config['vc']['vcenter_host_name']
        name_filter = ('vcName', vc_name)
        query = TestExtNet._sys_admin_client.get_typed_query(
            ResourceType.PORT_GROUP.value,
            query_result_format=QueryResultFormat.RECORDS,
            equality_filter=name_filter)

        for record in list(query.execute()):
            if record.get('networkName') == '--':
                if not record.get('name').startswith('vxw-'):
                    TestExtNet._port_group = record.get('name')
                    break

        self.assertIsNotNone(self._port_group,
                             'None of the port groups are free.')

        ext_net = platform.create_external_network(
            name=TestExtNet._name,
            vim_server_name=vc_name,
            port_group_names=[TestExtNet._port_group],
            gateway_ip=TestExtNet._gateway,
            netmask=TestExtNet._netmask,
            ip_ranges=[TestExtNet._ip_range],
            description=TestExtNet._description,
            primary_dns_ip=TestExtNet._dns1,
            secondary_dns_ip=TestExtNet._dns2,
            dns_suffix=TestExtNet._dns_suffix)

        task = ext_net.find('vcloud:Tasks', NSMAP).Task[0]
        TestExtNet._sys_admin_client.get_task_monitor().wait_for_success(
            task=task)

        logger.debug('Created external network ' + TestExtNet._name + '.')
Exemple #2
0
    def _create_external_network(cls):
        vc_name = cls._config['vc']['vcenter_host_name']
        name_filter = ('vcName', vc_name)
        query = cls._sys_admin_client.get_typed_query(
            ResourceType.PORT_GROUP.value,
            query_result_format=QueryResultFormat.RECORDS,
            equality_filter=name_filter)

        port_group = None
        for record in list(query.execute()):
            if record.get('networkName') == '--':
                if not record.get('name').startswith('vxw-'):
                    port_group = record.get('name')
                    break

        if port_group is None:
            raise Exception(
                'None of the port groups are free for new network.')

        ext_config = cls._config['external_network']
        ip_scopes = cls._config['external_network']['ip_scopes']
        if len(ip_scopes) == 0:
            raise Exception('No network spec provided.')
        # [{subnet:'10.10.10.1/24', ip_range:'10.10.10.101-10.10.10.150'}]
        primary_subnet = ip_scopes[0]['subnet']
        gateway_ip, prefix_len = primary_subnet.split('/')
        netmask = cidr_to_netmask(primary_subnet)[1]
        ip_ranges = ip_scopes[0]['ip_ranges']
        primary_dns_ip = '8.8.8.8'
        secondary_dns_ip = '8.8.8.9'
        dns_suffix = 'example.com'
        platform = Platform(cls._sys_admin_client)
        ext_net = platform.create_external_network(
            name=ext_config['name'],
            vim_server_name=vc_name,
            port_group_names=[port_group],
            gateway_ip=gateway_ip,
            netmask=netmask,
            ip_ranges=ip_ranges,
            description=ext_config['name'],
            primary_dns_ip=primary_dns_ip,
            secondary_dns_ip=secondary_dns_ip,
            dns_suffix=dns_suffix)

        task = ext_net['{' + NSMAP['vcloud'] + '}Tasks'].Task[0]
        cls._sys_admin_client.get_task_monitor().wait_for_success(task=task)
        return ext_net
Exemple #3
0
    def test_0000_setup(self):
        """
        Create one external network as per the configuration stated aboveself.

        Choose first unused port group which is not a VxLAN. Unused port groups
        have network names set to '--'. VxLAN port groups have name starting
        with 'vxw-'.

        Test the method Platform.create_external_network().

        This test passes if external network is created successfully.
        """
        logger = Environment.get_default_logger()
        TestExtNet._sys_admin_client = Environment.get_sys_admin_client()
        TestExtNet._config = Environment.get_config()
        TestExtNet._common_ext_net_name = TestExtNet._config[
            'external_network']['name']

        platform = Platform(TestExtNet._sys_admin_client)
        vc_name = TestExtNet._config['vc']['vcenter_host_name']
        TestExtNet._vc2_host_ip = TestExtNet._config['vc2']['vcenter_host_ip']
        portgrouphelper = PortgroupHelper(TestExtNet._sys_admin_client)
        pg_name = portgrouphelper.get_available_portgroup_name(
            vc_name, TestExtNet._portgroupType)

        ext_net = platform.create_external_network(
            name=TestExtNet._name,
            vim_server_name=vc_name,
            port_group_names=[pg_name],
            gateway_ip=TestExtNet._gateway,
            netmask=TestExtNet._netmask,
            ip_ranges=[TestExtNet._ip_range],
            description=TestExtNet._description,
            primary_dns_ip=TestExtNet._dns1,
            secondary_dns_ip=TestExtNet._dns2,
            dns_suffix=TestExtNet._dns_suffix)

        task = ext_net['{' + NSMAP['vcloud'] + '}Tasks'].Task[0]
        TestExtNet._sys_admin_client.get_task_monitor().wait_for_success(
            task=task)

        logger.debug('Created external network ' + TestExtNet._name + '.')
Exemple #4
0
    def test_0000_setup(self):
        """
        Create one external network as per the configuration stated aboveself.

        Choose first unused port group which is not a VxLAN. Unused port groups
        have network names set to '--'. VxLAN port groups have name starting
        with 'vxw-'.

        Test the method Platform.create_external_network().

        This test passes if external network is created successfully.
        """
        logger = Environment.get_default_logger()
        TestExtNet._sys_admin_client = Environment.get_sys_admin_client()
        TestExtNet._config = Environment.get_config()
        TestExtNet._common_ext_net_name = TestExtNet._config[
            'external_network']['name']

        platform = Platform(TestExtNet._sys_admin_client)
        vc_name = TestExtNet._config['vc']['vcenter_host_name']
        TestExtNet._vc2_host_ip = TestExtNet._config['vc2']['vcenter_host_ip']
        portgrouphelper = PortgroupHelper(TestExtNet._sys_admin_client)
        pg_name = portgrouphelper.get_available_portgroup_name(
            vc_name, TestExtNet._portgroupType)

        ext_net = platform.create_external_network(
            name=TestExtNet._name,
            vim_server_name=vc_name,
            port_group_names=[pg_name],
            gateway_ip=TestExtNet._gateway,
            netmask=TestExtNet._netmask,
            ip_ranges=[TestExtNet._ip_range],
            description=TestExtNet._description,
            primary_dns_ip=TestExtNet._dns1,
            secondary_dns_ip=TestExtNet._dns2,
            dns_suffix=TestExtNet._dns_suffix)

        task = ext_net['{' + NSMAP['vcloud'] + '}Tasks'].Task[0]
        TestExtNet._sys_admin_client.get_task_monitor().wait_for_success(
            task=task)

        logger.debug('Created external network ' + TestExtNet._name + '.')
Exemple #5
0
    def _create_external_network(cls):
        vc_name = cls._config['vc']['vcenter_host_name']
        portgrouphelper = PortgroupHelper(cls._sys_admin_client)
        port_group = portgrouphelper.get_available_portgroup_name(
            vc_name, Environment._portgroupType)

        if port_group is None:
            raise Exception(
                'None of the port groups are free for new network.')

        ext_config = cls._config['external_network']
        ip_scopes = cls._config['external_network']['ip_scopes']
        if len(ip_scopes) == 0:
            raise Exception('No network spec provided.')
        # [{subnet:'10.10.10.1/24', ip_range:'10.10.10.101-10.10.10.150'}]
        primary_subnet = ip_scopes[0]['subnet']
        gateway_ip, prefix_len = primary_subnet.split('/')
        netmask = cidr_to_netmask(primary_subnet)[1]
        ip_ranges = ip_scopes[0]['ip_ranges']
        primary_dns_ip = '8.8.8.8'
        secondary_dns_ip = '8.8.8.9'
        dns_suffix = 'example.com'
        platform = Platform(cls._sys_admin_client)
        ext_net = platform.create_external_network(
            name=ext_config['name'],
            vim_server_name=vc_name,
            port_group_names=[port_group],
            gateway_ip=gateway_ip,
            netmask=netmask,
            ip_ranges=ip_ranges,
            description=ext_config['name'],
            primary_dns_ip=primary_dns_ip,
            secondary_dns_ip=secondary_dns_ip,
            dns_suffix=dns_suffix)

        task = ext_net['{' + NSMAP['vcloud'] + '}Tasks'].Task[0]
        cls._sys_admin_client.get_task_monitor().wait_for_success(task=task)
        return ext_net
Exemple #6
0
    def _create_external_network(self):
        """Creates an external network from the available portgroup."""
        vc_name = TestGateway._config['vc']['vcenter_host_name']
        name_filter = ('vcName', vc_name)
        query = TestGateway._client.get_typed_query(
            ResourceType.PORT_GROUP.value,
            query_result_format=QueryResultFormat.RECORDS,
            equality_filter=name_filter)

        port_group = None
        for record in list(query.execute()):
            if record.get('networkName') == '--':
                if not record.get('name').startswith('vxw-'):
                    port_group = record.get('name')
                    break

        if port_group is None:
            raise Exception(
                'None of the port groups are free for new network.')

        name = 'external_network_' + str(uuid1())
        platform = Platform(TestGateway._client)
        ext_net = platform.create_external_network(
            name=name,
            vim_server_name=vc_name,
            port_group_names=[port_group],
            gateway_ip='10.10.30.1',
            netmask='255.255.255.0',
            ip_ranges=['10.10.30.101-10.10.30.150'],
            description=name,
            primary_dns_ip='8.8.8.8',
            secondary_dns_ip='8.8.8.9',
            dns_suffix='example.com')

        task = ext_net['{' + NSMAP['vcloud'] + '}Tasks'].Task[0]
        TestGateway._client.get_task_monitor().wait_for_success(task=task)
        TestGateway._external_network2 = ext_net
        return ext_net
Exemple #7
0
    def _create_external_network(self):
        """Creates an external network from the available portgroup."""
        vc_name = TestGateway._config['vc']['vcenter_host_name']
        name_filter = ('vcName', vc_name)
        query = TestGateway._client.get_typed_query(
            ResourceType.PORT_GROUP.value,
            query_result_format=QueryResultFormat.RECORDS,
            equality_filter=name_filter)

        port_group = None
        for record in list(query.execute()):
            if record.get('networkName') == '--':
                if not record.get('name').startswith('vxw-'):
                    port_group = record.get('name')
                    break

        if port_group is None:
            raise Exception(
                'None of the port groups are free for new network.')

        name = 'external_network_' + str(uuid1())
        platform = Platform(TestGateway._client)
        ext_net = platform.create_external_network(
            name=name,
            vim_server_name=vc_name,
            port_group_names=[port_group],
            gateway_ip='10.10.30.1',
            netmask='255.255.255.0',
            ip_ranges=['10.10.30.101-10.10.30.150'],
            description=name,
            primary_dns_ip='8.8.8.8',
            secondary_dns_ip='8.8.8.9',
            dns_suffix='example.com')

        task = ext_net['{' + NSMAP['vcloud'] + '}Tasks'].Task[0]
        TestGateway._client.get_task_monitor().wait_for_success(task=task)
        TestGateway._external_network2 = ext_net
        return ext_net
Exemple #8
0
def create_external_network(ctx, name, vc_name, port_group, gateway_ip,
                            netmask, ip_range, description, primary_dns_ip,
                            secondary_dns_ip, dns_suffix):
    try:
        restore_session(ctx)
        client = ctx.obj['client']

        platform = Platform(client)
        ext_net = platform.create_external_network(
            name=name,
            vim_server_name=vc_name,
            port_group_names=port_group,
            gateway_ip=gateway_ip,
            netmask=netmask,
            ip_ranges=ip_range,
            description=description,
            primary_dns_ip=primary_dns_ip,
            secondary_dns_ip=secondary_dns_ip,
            dns_suffix=dns_suffix)

        stdout(ext_net['{' + NSMAP['vcloud'] + '}Tasks'].Task[0], ctx)
        stdout('External network created successfully.', ctx)
    except Exception as e:
        stderr(e, ctx)
class VcdExternalNetwork(VcdAnsibleModule):
    def __init__(self, **kwargs):
        super(VcdExternalNetwork, self).__init__(**kwargs)
        self.platform = Platform(self.client)

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

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

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

    def manage_operations(self):
        operation = self.params.get('operation')
        if operation == "list_networks":
            return self.list_external_networks()

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

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

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

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

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

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

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

    def create(self):
        vc_name = self.params.get('vc_name')
        port_group_names = self.params.get('port_group_names')
        network_name = self.params.get('network_name')
        gateway_ip = self.params.get('gateway_ip')
        netmask = self.params.get('netmask')
        ip_ranges = self.params.get('ip_ranges')
        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')
        description = self.params.get('description')
        response = dict()
        response['changed'] = False

        try:
            self.platform.get_external_network(network_name)
        except EntityNotFoundException:
            self.platform.create_external_network(network_name, vc_name,
                                                  port_group_names, gateway_ip,
                                                  netmask, ip_ranges,
                                                  description,
                                                  primary_dns_ip,
                                                  secondary_dns_ip,
                                                  dns_suffix)
            msg = "External Network {0} is created"
            response['msg'] = msg.format(network_name)
            response['changed'] = True
        else:
            msg = "External Network {0} is already present"
            response['warnings'] = msg.format(network_name)

        return response

    def update(self):
        network_name = self.params.get('network_name')
        new_network_name = self.params.get('new_network_name')
        description = self.params.get('description')
        response = dict()
        response['changed'] = False

        try:
            self.platform.get_external_network(network_name)
            self.platform.update_external_network(
                network_name, new_network_name, description)
        except EntityNotFoundException:
            msg = "External Network {0} does not exists"
            response['msg'] = msg.format(network_name)
        else:
            msg = "External Network {0} has been updated with {1}"
            response['msg'] = msg.format(network_name, new_network_name)
            response['changed'] = True

        return response

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

        try:
            task = self.platform.delete_external_network(
                network_name, force_delete)
            self.execute_task(task)
        except EntityNotFoundException:
            msg = "External Network {0} does not exists"
            response['msg'] = msg.format(network_name)
        else:
            msg = "External Network {0} has been deleted"
            response['msg'] = msg.format(network_name)
            response['changed'] = True

        return response

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

        networks = self.platform.list_external_networks()
        response['msg'] = [v for k, v in networks.items() if k == "name"]

        return response

    def add_subnet(self):
        network_name = self.params.get('network_name')
        gateway_ip = self.params.get('gateway_ip')
        netmask = self.params.get('netmask')
        ip_ranges = self.params.get('ip_ranges')
        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')
        response = dict()
        response['changed'] = False

        network = self.get_network(network_name)
        network.add_subnet(network_name, gateway_ip, netmask, ip_ranges,
                           primary_dns_ip, secondary_dns_ip, dns_suffix)
        msg = "A new subnet has been added to network {0}"
        response['msg'] = msg.format(network_name)
        response['changed'] = True

        return response

    def add_ip_ranges(self):
        network_name = self.params.get('network_name')
        gateway_ip = self.params.get('gateway_ip')
        ip_ranges = self.params.get('ip_ranges')
        response = dict()
        response['changed'] = False

        network = self.get_network(network_name)
        network.add_ip_range(gateway_ip, ip_ranges)
        msg = "A new ip ranges has been added to network {0}"
        response['msg'] = msg.format(network_name)
        response['changed'] = True

        return response

    def modify_ip_ranges(self):
        network_name = self.params.get('network_name')
        gateway_ip = self.params.get('gateway_ip')
        ip_ranges = self.params.get('ip_ranges')
        new_ip_ranges = self.params.get('new_ip_ranges')
        response = dict()
        response['changed'] = False

        if len(ip_ranges) != len(new_ip_ranges):
            raise ValueError(
                "ip_ranges and new_ip_ranges should have same length")

        network = self.get_network(network_name)
        for i in range(len(ip_ranges)):
            network.modify_ip_range(gateway_ip, ip_ranges[i], new_ip_ranges[i])

        msg = "Ip ranges have been updated to network {0}"
        response['msg'] = msg.format(network_name)
        response['changed'] = True

        return response

    def delete_ip_ranges(self):
        network_name = self.params.get('network_name')
        gateway_ip = self.params.get('gateway_ip')
        ip_ranges = self.params.get('ip_ranges')
        response = dict()
        response['changed'] = False

        network = self.get_network(network_name)
        network.delete_ip_range(gateway_ip, ip_ranges)
        msg = "Ip ranges have been deleted from network {0}"
        response['msg'] = msg.format(network_name)
        response['changed'] = True

        return response

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

        network = self.get_network(network_name)
        network.enable_subnet(gateway_ip, enable_subnet)
        s = "has been enabled" if enable_subnet else "has been disabled"
        msg = "subnet with gatway {0} {1} now in network {2}"
        response['msg'] = msg.format(gateway_ip, s, network_name)
        response['changed'] = True

        return response

    def attach_port_group(self):
        network_name = self.params.get('network_name')
        vc_name = self.params.get('vc_name')
        port_group_names = self.params.get('port_group_names')
        response = dict()
        response['changed'] = False

        network = self.get_network(network_name)
        for port_group_name in port_group_names:
            network.attach_port_group(vc_name, port_group_name)

        msg = "port groups {0} have been attached now from network {1}"
        response['msg'] = msg.format(','.join(port_group_names), network_name)
        response['changed'] = True

        return response

    def detach_port_group(self):
        network_name = self.params.get('network_name')
        vc_name = self.params.get('vc_name')
        port_group_names = self.params.get('port_group_names')
        response = dict()
        response['changed'] = False
        network = self.get_network(network_name)

        for port_group_name in port_group_names:
            network.detach_port_group(vc_name, port_group_name)

        msg = "port groups {0} have been detached now from network {1}"
        response['msg'] = msg.format(','.join(port_group_names), network_name)
        response['changed'] = True

        return response

    def get_network(self, network_name):
        network_resource = self.platform.get_external_network(network_name)

        return ExternalNetwork(self.client, resource=network_resource)
Exemple #10
0
    print("External Network already exists: {0}".format(
        cfg.system.ext_network.name))
except Exception:
    print("External Network {0} does not exist, creating".format(
        cfg.system.ext_network.name))
    # Ensure Port Group exists.
    print("Fetching Port Groups...")
    # Fetch dvportgroups - not startswith('vxw-')
    records = platform.list_available_port_group_names(
        vim_server_name=cfg.system.vcenter)
    if cfg.system.ext_network.portgroup in records:
        print("Port Group {0} found".format(cfg.system.ext_network.portgroup))
        print("Creating External Network {0} ".format(
            cfg.system.ext_network.name))
        network_resource = platform.create_external_network(
            cfg.system.ext_network.name, cfg.system.vcenter,
            [cfg.system.ext_network.portgroup], cfg.system.ext_network.gateway,
            cfg.system.ext_network.mask, [cfg.system.ext_network.range])

    else:
        print("Port Group {0} does not exist, exiting".format(
            cfg.system.ext_network.portgroup))

# Status report -----------------------------------------------------------------------------------
new_external_network = platform.get_external_network(
    cfg.system.ext_network.name)
print(
    '\nNew External network is created -------------------------------------------------'
)
print('name: {}'.format(new_external_network.attrib['name']))
print('href: {}'.format(new_external_network.attrib['href']))