def create_external_network(cls): """Creates an external network by the name specified in the config file. Skips creating one, if such a network already exists. Also stores the href and name of the network as class variables for future use. """ cls._basic_check() net_name = cls._config['external_network']['name'] platform = Platform(cls._sys_admin_client) net_refs = platform.list_external_networks() if net_name is not '*': for net_ref in net_refs: if net_ref.get('name').lower() == net_name.lower(): cls._logger.debug('Reusing existing ' + net_name) cls._external_network_href = net_ref.get('href') cls._external_network_name = net_name return cls._logger.debug('Creating new external network' + net_name) ext_nw = cls._create_external_network() cls._external_network_href = ext_nw.get('href') cls._external_network_name = net_name cls._logger.debug('Created external network ' + net_name) else: if len(net_refs) > 0: cls._logger.debug('Defaulting to first network : ' + net_refs[0].get('name')) cls._external_network_href = net_refs[0].get('href') cls._external_network_name = net_refs[0].get('name') else: cls._logger.debug('No usable network found. Aborting test.') raise Exception('Test Aborted. No usable external network.')
def list_external_networks(ctx): try: client = ctx.obj['client'] platform = Platform(client) ext_nets = platform.list_external_networks() result = [] for ext_net in ext_nets: result.append({'name': ext_net.get('name')}) stdout(result, ctx) except Exception as e: stderr(e, ctx)
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. """ logger = Environment.get_default_logger() TestGateway._client = Environment.get_sys_admin_client() vdc = Environment.get_test_vdc(TestGateway._client) platform = Platform(TestGateway._client) external_networks = platform.list_external_networks() self.assertTrue(len(external_networks) > 0) external_network = external_networks[0] ext_net_resource = TestGateway._client.get_resource( external_network.get('href')) 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 subnet_addr = gateway_ip + '/' + str(first_ipscope.SubnetPrefixLength) 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 = 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_0007_list_external_network_config_ip_allocations(self): """List external network configure ip allocations. Invoke the list_gateways_configure_ip_settings of the gateway. """ for client in (TestGateway._client, TestGateway._org_client): gateway_obj = Gateway(client, self._name, TestGateway._gateway.get('href')) ip_allocations = gateway_obj.list_configure_ip_settings() platform = Platform(TestGateway._client) external_networks = platform.list_external_networks() self.assertTrue(bool(ip_allocations)) exnet = ip_allocations[0].get('external_network') self.assertEqual(external_networks[0].get('name'), exnet)
def test_0015_list_external_network_config_ip_allocations(self): """List external network configure ip allocations. Invoke the list_gateways_configure_ip_settings of the gateway. """ for client in (TestGateway._client, TestGateway._org_client): gateway_obj = Gateway(client, self._name, TestGateway._gateway.get('href')) ip_allocations = gateway_obj.list_configure_ip_settings() platform = Platform(TestGateway._client) external_networks = platform.list_external_networks() self.assertTrue(bool(ip_allocations)) exnet = ip_allocations[0].get('external_network') self.assertEqual(external_networks[0].get('name'), exnet)
def test_030_list_external_networks(self): platform = Platform(self.client) ext_net_refs = platform.list_external_networks() assert len(ext_net_refs) > 0
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)
def test_0030_list_external_networks(self): vdc = Environment.get_test_vdc(TestNetwork._client) platform = Platform(TestNetwork._client) ext_net_refs = platform.list_external_networks() self.assertTrue(len(ext_net_refs) > 0)
def test_030_list_external_networks(self): platform = Platform(self.client) ext_net_refs = platform.list_external_networks() assert len(ext_net_refs) > 0