def create_direct_ovdc_network(cls): """Creates a direct org vdc network. The name of the created org vdc network is specified in the configuration 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 = cls._config['vcd']['default_direct ovdc_network_name'] records_dict = vdc.list_orgvdc_network_records() for net_name in records_dict.keys(): if net_name.lower() == expected_net_name.lower(): cls._logger.debug('Reusing existing direct org-vdc network ' + expected_net_name) return cls._logger.debug('Creating direct org-vdc network ' + expected_net_name) result = vdc.create_directly_connected_vdc_network( network_name=expected_net_name, parent_network_name=cls._config['external_network']['name'], description='direct org vdc network', is_shared=False) cls._sys_admin_client.get_task_monitor()\ .wait_for_success(task=result.Tasks.Task[0])
def create(ctx, name, description, parent_network_name, is_shared): try: client = ctx.obj['client'] in_use_vdc_href = ctx.obj['profiles'].get('vdc_href') vdc = VDC(client, href=in_use_vdc_href) result = vdc.create_directly_connected_vdc_network( network_name=name, description=description, parent_network_name=parent_network_name, is_shared=is_shared) stdout(result.Tasks.Task[0], ctx) except Exception as e: stderr(e, ctx)
def test_010_create_direct_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_directly_connected_vdc_network( network_name=self.config['vcd']['vdc_direct_network_name'], parent_network_name=self.config['vcd']['ext_network_name'], description='Dummy description') task = self.client.get_task_monitor().wait_for_success( task=result.Tasks.Task[0]) assert task.get('status') == TaskStatus.SUCCESS.value
def create_direct_network(ctx, name, parent_network_name, description, 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) result = vdc.create_directly_connected_vdc_network( network_name=name, parent_network_name=parent_network_name, description=description, is_shared=is_shared) stdout(result.Tasks.Task[0], ctx) except Exception as e: stderr(e, ctx)
def create_direct_ovdc_network(cls): """Creates a direct org vdc network. The name of the created org vdc network is specified in the configuration 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 = cls._config['vcd'][ 'default_direct ovdc_network_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 cls._logger.debug('Creating direct org-vdc network ' + expected_net_name) result = vdc.create_directly_connected_vdc_network( network_name=expected_net_name, parent_network_name=cls._config['external_network']['name'], description='direct org vdc network', is_shared=False) cls._sys_admin_client.get_task_monitor()\ .wait_for_success(task=result.Tasks.Task[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
vdc_resource = org.get_vdc(cfg.org.vdc_name) vdc = VDC(client, resource=vdc_resource) print("VDC already exists: {0}".format(cfg.org.vdc_name)) except Exception: print("VDC {0} does not exist, exiting".format(cfg.org['vdc_name'])) sys.exit() # Ensure Direct Org Network doesn't exist. print("Fetching Network...") try: network_resource = vdc.get_direct_orgvdc_network( cfg.org.org_direct_nw.name) print("Network already exists: {0}".format(cfg.org.org_direct_nw.name)) except Exception: print("Network {0} does not exist, creating".format( cfg.org.org_direct_nw.name)) network_res = vdc.create_directly_connected_vdc_network( network_name=cfg.org.org_direct_nw.name, parent_network_name=cfg.org.org_direct_nw.parent_network, is_shared=cfg.org.org_direct_nw.is_shared) handle_task(client, network_res.Tasks.Task[0]) # Final report ------------------------------------------------------------------------------------ new_direct_network = vdc.get_direct_orgvdc_network(cfg.org.org_direct_nw.name) print( '\nNew Direct network is created -------------------------------------------------' ) print('name: {}'.format(new_direct_network.attrib['name'])) print('href: {}'.format(new_direct_network.attrib['href']))