def create_isolated_network(ctx, name, gateway_ip, netmask, description, primary_dns_ip, secondary_dns_ip, dns_suffix, ip_range_start, ip_range_end, is_dhcp_enabled, default_lease_time, max_lease_time, dhcp_ip_range_start, dhcp_ip_range_end, is_shared): try: restore_session(ctx, vdc_required=True) client = ctx.obj['client'] in_use_vdc_href = ctx.obj['profiles'].get('vdc_href') vdc = VDC(client, href=in_use_vdc_href) prefix_len = netmask_to_cidr_prefix_len(gateway_ip, netmask) network_cidr = gateway_ip + '/' + str(prefix_len) result = vdc.create_isolated_vdc_network( network_name=name, network_cidr=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=is_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=is_shared) stdout(result.Tasks.Task[0], ctx) except Exception as e: stderr(e, ctx)
def test_0000_setup(self): """Load configuration and create a click runner to invoke CLI.""" self._config = Environment.get_config() GatewayTest._logger = Environment.get_default_logger() GatewayTest._runner = CliRunner() default_org = self._config['vcd']['default_org_name'] self._login() GatewayTest._runner.invoke(org, ['use', default_org]) GatewayTest._api_version = self._config['vcd']['api_version'] GatewayTest._ext_network_name = self._get_first_external_network() self.client = Environment.get_sys_admin_client() platform = Platform(self.client) ext_net_resource = platform.get_external_network( GatewayTest._ext_network_name) self.assertTrue(len(ext_net_resource) > 0) ip_scopes = ext_net_resource.xpath( 'vcloud:Configuration/vcloud:IpScopes/vcloud:IpScope', namespaces=NSMAP) first_ipscope = ip_scopes[0] GatewayTest._gateway_ip = first_ipscope.Gateway.text prefix_len = netmask_to_cidr_prefix_len(GatewayTest._gateway_ip, first_ipscope.Netmask.text) GatewayTest._subnet_addr = GatewayTest._gateway_ip + '/' + str( prefix_len)
def create_isolated_network(ctx, name, gateway_ip, netmask, description, primary_dns_ip, secondary_dns_ip, dns_suffix, ip_range_start, ip_range_end, is_dhcp_enabled, default_lease_time, max_lease_time, dhcp_ip_range_start, dhcp_ip_range_end, is_shared): try: restore_session(ctx, vdc_required=True) client = ctx.obj['client'] in_use_vdc_href = ctx.obj['profiles'].get('vdc_href') vdc = VDC(client, href=in_use_vdc_href) prefix_len = netmask_to_cidr_prefix_len(gateway_ip, netmask) network_cidr = gateway_ip + '/' + str(prefix_len) result = vdc.create_isolated_vdc_network( network_name=name, network_cidr=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=is_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=is_shared) stdout(result.Tasks.Task[0], ctx) except Exception as e: stderr(e, ctx)
def update_subnet_participation(self, subnets, subnet_participation): """It updates subnetparticipation of the gateway with subnets. :param subnets: dict of ipconfig settings for e.g. {192.168.1.1/24 :{'enable': True, 'ip_address': '192.168.1.2'}} :param subnet_participation: object containing gateway's subnet """ subnet_found = False for subnetpart in subnet_participation: subnet = subnets.get(subnetpart.Gateway.text + '/' + str( netmask_to_cidr_prefix_len(subnetpart.Gateway.text, subnetpart.Netmask.text))) if subnet is not None: subnet_found = True if subnet.get('enable') is not None: subnetpart.UseForDefaultRoute = E. \ UseForDefaultRoute(subnet.get('enable')) if subnet.get('ip_address') is not None: subnetpart.IpAddress = E.IpAddress( subnet.get('ip_address')) if not subnet_found: raise ValueError('Subnet not found')
def list_configure_ip_settings(self): """List all gateway's configure ip settings in the current vdc. :return: a list of dictionary that has gateway's configure ip settings Ex: [{'external_network': 'external_network_de99a4e2-f6d8-11e8-9e0c-9061ae543719', 'gateway': ['10.20.30.1/24'], 'ip_address': ['10.20.30.2']}] :rtype: list """ out_list = [] gateway = self.get_resource() for gatewayinf in \ gateway.Configuration.GatewayInterfaces.GatewayInterface: ipconfigsettings = dict() ipconfigsettings['external_network'] = gatewayinf.Name.text gatewayips = ipconfigsettings.setdefault('gateway', []) ips = ipconfigsettings.setdefault('ip_address', []) for subnetpart in gatewayinf.SubnetParticipation: if hasattr(subnetpart, 'SubnetPrefixLength'): gatewayips.append(subnetpart.Gateway.text + '/' + subnetpart.SubnetPrefixLength.text) else: gatewayips.append(subnetpart.Gateway.text + '/' + str( netmask_to_cidr_prefix_len(subnetpart.Gateway.text, subnetpart.Netmask.text))) ips.append(subnetpart.IpAddress.text) out_list.append(ipconfigsettings) return out_list
def test_0000_setup(self): """Setup the gateway required for the other tests in this module. Create a gateway as per the configuration stated above. This test passes if the gateway is created successfully. """ TestGateway._client = Environment.get_sys_admin_client() TestGateway._vdc = Environment.get_test_vdc(TestGateway._client) TestGateway._org_client = Environment.get_client_in_default_org( CommonRoles.ORGANIZATION_ADMINISTRATOR) TestGateway._config = Environment.get_config() TestGateway._gateway = Environment.get_test_gateway( TestGateway._client) if TestGateway._gateway is not None: task = TestGateway._vdc.delete_gateway(self._name) result = TestGateway._client.get_task_monitor().wait_for_success( task=task) self.assertEqual(result.get('status'), TaskStatus.SUCCESS.value) external_network = Environment.get_test_external_network( TestGateway._client) ext_net_resource = external_network.get_resource() ip_scopes = ext_net_resource.xpath( 'vcloud:Configuration/vcloud:IpScopes/vcloud:IpScope', namespaces=NSMAP) first_ipscope = ip_scopes[0] gateway_ip = first_ipscope.Gateway.text prefix_len = netmask_to_cidr_prefix_len(gateway_ip, first_ipscope.Netmask.text) subnet_addr = gateway_ip + '/' + str(prefix_len) ext_net_to_participated_subnet_with_ip_settings = { ext_net_resource.get('name'): { subnet_addr: 'Auto' } } gateway_ip_arr = gateway_ip.split('.') last_ip_digit = int(gateway_ip_arr[-1]) + 1 gateway_ip_arr[-1] = str(last_ip_digit) next_ip = '.'.join(gateway_ip_arr) ext_net_to_subnet_with_ip_range = { ext_net_resource.get('name'): { subnet_addr: [next_ip + '-' + next_ip] } } ext_net_to_rate_limit = {ext_net_resource.get('name'): {100: 100}} TestGateway._gateway = TestGateway._vdc.create_gateway( self._name, [ext_net_resource.get('name')], 'compact', None, True, ext_net_resource.get('name'), gateway_ip, True, False, False, False, True, ext_net_to_participated_subnet_with_ip_settings, True, ext_net_to_subnet_with_ip_range, ext_net_to_rate_limit) result = TestGateway._client.get_task_monitor().wait_for_success( task=TestGateway._gateway.Tasks.Task) self.assertEqual(result.get('status'), TaskStatus.SUCCESS.value)
def test_0008_add_external_network(self): """Add an exernal netowrk to the gateway. Invoke the add_external_network function of gateway. """ gateway_obj = Gateway(TestGateway._client, self._name, TestGateway._gateway.get('href')) extNw2 = self._create_external_network() ip_scopes = extNw2.xpath( 'vcloud:Configuration/vcloud:IpScopes/vcloud:IpScope', namespaces=NSMAP) first_ipscope = ip_scopes[0] gateway_ip = first_ipscope.Gateway.text prefixlen = netmask_to_cidr_prefix_len(gateway_ip, first_ipscope.Netmask.text) subnet_addr = gateway_ip + '/' + str(prefixlen) task = gateway_obj.add_external_network(extNw2.get('name'), [(subnet_addr, 'Auto')]) result = TestGateway._client.get_task_monitor().wait_for_success( task=task) self.assertEqual(result.get('status'), TaskStatus.SUCCESS.value)
def test_0020_add_external_network(self): """Add an exernal netowrk to the gateway. Invoke the add_external_network function of gateway. """ gateway_obj = Gateway(TestGateway._client, self._name, TestGateway._gateway.get('href')) extNw2 = self._create_external_network() ip_scopes = extNw2.xpath( 'vcloud:Configuration/vcloud:IpScopes/vcloud:IpScope', namespaces=NSMAP) first_ipscope = ip_scopes[0] gateway_ip = first_ipscope.Gateway.text prefixlen = netmask_to_cidr_prefix_len(gateway_ip, first_ipscope.Netmask.text) subnet_addr = gateway_ip + '/' + str(prefixlen) task = gateway_obj.add_external_network( extNw2.get('name'), [(subnet_addr, 'Auto')]) result = TestGateway._client.get_task_monitor().wait_for_success( task=task) self.assertEqual(result.get('status'), TaskStatus.SUCCESS.value)
def test_0000_setup(self): """Setup the gateway required for the other tests in this module. Create a gateway as per the configuration stated above. This test passes if the gateway is created successfully. """ TestGateway._client = Environment.get_sys_admin_client() TestGateway._vdc = Environment.get_test_vdc(TestGateway._client) TestGateway._org_client = Environment.get_client_in_default_org( CommonRoles.ORGANIZATION_ADMINISTRATOR) TestGateway._config = Environment.get_config() TestGateway._api_version = TestGateway._config['vcd']['api_version'] external_network = Environment.get_test_external_network( TestGateway._client) ext_net_resource = external_network.get_resource() ip_scopes = ext_net_resource.xpath( 'vcloud:Configuration/vcloud:IpScopes/vcloud:IpScope', namespaces=NSMAP) first_ipscope = ip_scopes[0] gateway_ip = first_ipscope.Gateway.text prefix_len = netmask_to_cidr_prefix_len(gateway_ip, first_ipscope.Netmask.text) subnet_addr = gateway_ip + '/' + str(prefix_len) ext_net_to_participated_subnet_with_ip_settings = { ext_net_resource.get('name'): { subnet_addr: self._ip_address_for_config_ip_setting } } ext_net_to_subnet_with_ip_range = { ext_net_resource.get('name'): { subnet_addr: [self._ip_address_for_ip_range] } } ext_net_to_rate_limit = {ext_net_resource.get('name'): {100: 100}} if float(TestGateway._api_version) <= float( ApiVersion.VERSION_30.value): TestGateway._gateway = \ TestGateway._vdc.create_gateway_api_version_30( self._name, [ext_net_resource.get('name')], 'compact', None, True, ext_net_resource.get('name'), gateway_ip, True, False, False, False, True, ext_net_to_participated_subnet_with_ip_settings, True, ext_net_to_subnet_with_ip_range, ext_net_to_rate_limit) elif float(TestGateway._api_version) == float( ApiVersion.VERSION_31.value): TestGateway._gateway = \ TestGateway._vdc.create_gateway_api_version_31( self._name, [ext_net_resource.get('name')], 'compact', None, True, ext_net_resource.get('name'), gateway_ip, True, False, False, False, True, ext_net_to_participated_subnet_with_ip_settings, True, ext_net_to_subnet_with_ip_range, ext_net_to_rate_limit) elif float(TestGateway._api_version) >= float( ApiVersion.VERSION_32.value): TestGateway._gateway = \ TestGateway._vdc.create_gateway_api_version_32( self._name, [ext_net_resource.get('name')], 'compact', None, True, ext_net_resource.get('name'), gateway_ip, True, False, False, False, True, ext_net_to_participated_subnet_with_ip_settings, True, ext_net_to_subnet_with_ip_range, ext_net_to_rate_limit) result = TestGateway._client.get_task_monitor().wait_for_success( task=TestGateway._gateway.Tasks.Task) self.assertEqual(result.get('status'), TaskStatus.SUCCESS.value) TestGateway._extension = Extension(TestGateway._client) TestGateway._extension.get_resource() link = find_link(TestGateway._extension.resource, RelationType.DOWN, EntityType.SYSTEM_SETTINGS.value) settings = TestGateway._client.get_resource(link.href) syslog_server_settings = settings.GeneralSettings.SyslogServerSettings if hasattr(syslog_server_settings, '{' + NSMAP['vcloud'] + '}SyslogServerIp1'): return syslog_server_settings.append( E.SyslogServerIp1(TestGateway._syslog_server_ip1)) TestGateway._client.put_resource(link.href, settings, EntityType.SYSTEM_SETTINGS.value) TestGateway._extension.reload() settings = TestGateway._client.get_resource(link.href) self.assertTrue( hasattr(syslog_server_settings, '{' + NSMAP['vcloud'] + '}SyslogServerIp1'))
def test_0000_setup(self): """Setup the gateway required for the other tests in this module. Create a gateway as per the configuration stated above. This test passes if the gateway is created successfully. """ TestGateway._client = Environment.get_sys_admin_client() TestGateway._vdc = Environment.get_test_vdc(TestGateway._client) TestGateway._org_client = Environment.get_client_in_default_org( CommonRoles.ORGANIZATION_ADMINISTRATOR) TestGateway._config = Environment.get_config() TestGateway._api_version = TestGateway._config['vcd']['api_version'] external_network = Environment.get_test_external_network( TestGateway._client) ext_net_resource = external_network.get_resource() ip_scopes = ext_net_resource.xpath( 'vcloud:Configuration/vcloud:IpScopes/vcloud:IpScope', namespaces=NSMAP) first_ipscope = ip_scopes[0] gateway_ip = first_ipscope.Gateway.text prefix_len = netmask_to_cidr_prefix_len(gateway_ip, first_ipscope.Netmask.text) subnet_addr = gateway_ip + '/' + str(prefix_len) ext_net_to_participated_subnet_with_ip_settings = { ext_net_resource.get('name'): { subnet_addr: 'Auto' } } gateway_ip_arr = gateway_ip.split('.') last_ip_digit = int(gateway_ip_arr[-1]) + 1 gateway_ip_arr[-1] = str(last_ip_digit) next_ip = '.'.join(gateway_ip_arr) ext_net_to_subnet_with_ip_range = { ext_net_resource.get('name'): { subnet_addr: [next_ip + '-' + next_ip] } } ext_net_to_rate_limit = {ext_net_resource.get('name'): {100: 100}} if float(TestGateway._api_version) <= float( ApiVersion.VERSION_30.value): TestGateway._gateway = \ TestGateway._vdc.create_gateway_api_version_30( self._name, [ext_net_resource.get('name')], 'compact', None, True, ext_net_resource.get('name'), gateway_ip, True, False, False, False, True, ext_net_to_participated_subnet_with_ip_settings, True, ext_net_to_subnet_with_ip_range, ext_net_to_rate_limit) elif float(TestGateway._api_version) == float( ApiVersion.VERSION_31.value): TestGateway._gateway = \ TestGateway._vdc.create_gateway_api_version_31( self._name, [ext_net_resource.get('name')], 'compact', None, True, ext_net_resource.get('name'), gateway_ip, True, False, False, False, True, ext_net_to_participated_subnet_with_ip_settings, True, ext_net_to_subnet_with_ip_range, ext_net_to_rate_limit) elif float(TestGateway._api_version) >= float( ApiVersion.VERSION_32.value): TestGateway._gateway = \ TestGateway._vdc.create_gateway_api_version_32( self._name, [ext_net_resource.get('name')], 'compact', None, True, ext_net_resource.get('name'), gateway_ip, True, False, False, False, True, ext_net_to_participated_subnet_with_ip_settings, True, ext_net_to_subnet_with_ip_range, ext_net_to_rate_limit) result = TestGateway._client.get_task_monitor().wait_for_success( task=TestGateway._gateway.Tasks.Task) self.assertEqual(result.get('status'), TaskStatus.SUCCESS.value) TestGateway._extension = Extension(TestGateway._client) TestGateway._extension.get_resource() link = find_link(TestGateway._extension.resource, RelationType.DOWN, EntityType.SYSTEM_SETTINGS.value) settings = TestGateway._client.get_resource(link.href) syslog_server_settings = settings.GeneralSettings.SyslogServerSettings if hasattr(syslog_server_settings, '{' + NSMAP['vcloud'] + '}SyslogServerIp1'): return syslog_server_settings.append( E.SyslogServerIp1(TestGateway._syslog_server_ip1)) TestGateway._client.put_resource(link.href, settings, EntityType.SYSTEM_SETTINGS.value) TestGateway._extension.reload() settings = TestGateway._client.get_resource(link.href) self.assertTrue( hasattr(syslog_server_settings, '{' + NSMAP['vcloud'] + '}SyslogServerIp1'))
def add_external_network(self, network_name, ip_configuration): """Add the given external network to the gateway. :param str network_name: external network name. :param list ip_configuration: list of tuples that contain subnet in CIDR format and allocated ip address. Example [(10.10.10.1/24, Auto), (10.10.20.1/24, 10.10.20.3)] :return: object containing EntityType.TASK XML data representing the asynchronous task. :rtype: lxml.objectify.ObjectifiedElement """ if self.resource is None: self.reload() gateway = self.resource for inf in gateway.Configuration.GatewayInterfaces.GatewayInterface: if inf.Network.get('name') == network_name: raise AlreadyExistsException('External network ' + network_name + 'already added to the gateway.') ext_nw = self._get_external_network(network_name) gw_interface = self._create_gateway_interface(ext_nw, 'uplink') # Add subnet participation ip_scopes = ext_nw.xpath( 'vcloud:Configuration/vcloud:IpScopes/vcloud:IpScope', namespaces=NSMAP) for ip_scope in ip_scopes: subnet_participation_param = E.SubnetParticipation() subnet = None ext_nw_subnet = ip_scope.Gateway.text + '/' + \ str(netmask_to_cidr_prefix_len(ip_scope.Gateway.text, ip_scope.Netmask.text)) for sn in ip_configuration: if len(sn) != 2: raise InvalidParameterException( 'IP Configuration should have both subnet and IP.') if sn[0] == ext_nw_subnet: subnet = sn break if subnet is None: continue ip_assigned = subnet[1].strip() # Configure Ip Settings subnet_participation_param.append(E.Gateway(ip_scope.Gateway.text)) subnet_participation_param.append(E.Netmask(ip_scope.Netmask.text)) if not ip_assigned and ip_assigned.lower() != 'auto': subnet_participation_param.append(E.IpAddress(ip_assigned)) gw_interface.append(subnet_participation_param) gateway.Configuration.GatewayInterfaces.append(gw_interface) return self.client.put_linked_resource( self.resource, RelationType.GATEWAY_UPDATE_PROPERTIES, EntityType.EDGE_GATEWAY.value, gateway)