def attach_port_group(self, vim_server_name, port_group_name): """Attach a portgroup to an external network. :param str vc_name: name of vc where portgroup is present. :param str pg_name: name of the portgroup to be attached to external network. return: object containing vmext:VMWExternalNetwork XML element that representing the external network. :rtype: lxml.objectify.ObjectifiedElement """ ext_net = self.get_resource() platform = Platform(self.client) if not vim_server_name or not port_group_name: raise InvalidParameterException( "Either vCenter Server name is none or portgroup name is none") vc_record = platform.get_vcenter(vim_server_name) vc_href = vc_record.get('href') pg_moref_types = \ platform.get_port_group_moref_types(vim_server_name, port_group_name) if hasattr(ext_net, '{' + NSMAP['vmext'] + '}VimPortGroupRef'): vim_port_group_refs = E_VMEXT.VimPortGroupRefs() vim_object_ref1 = self.__create_vimobj_ref(vc_href, pg_moref_types[0], pg_moref_types[1]) # Create a new VimObjectRef using vc href, portgroup moref and type # from existing VimPortGroupRef. Add the VimObjectRef to # VimPortGroupRefs and then delete VimPortGroupRef # from external network. vim_pg_ref = ext_net['{' + NSMAP['vmext'] + '}VimPortGroupRef'] vc2_href = vim_pg_ref.VimServerRef.get('href') vim_object_ref2 = self.__create_vimobj_ref( vc2_href, vim_pg_ref.MoRef.text, vim_pg_ref.VimObjectType.text) vim_port_group_refs.append(vim_object_ref1) vim_port_group_refs.append(vim_object_ref2) ext_net.remove(vim_pg_ref) ext_net.append(vim_port_group_refs) else: vim_port_group_refs = \ ext_net['{' + NSMAP['vmext'] + '}VimPortGroupRefs'] vim_object_ref1 = self.__create_vimobj_ref(vc_href, pg_moref_types[0], pg_moref_types[1]) vim_port_group_refs.append(vim_object_ref1) return self.client. \ put_linked_resource(ext_net, rel=RelationType.EDIT, media_type=EntityType. EXTERNAL_NETWORK.value, contents=ext_net)
def create_external_network(self, name, vim_server_name, port_group_names, gateway_ip, netmask, ip_ranges, description=None, primary_dns_ip=None, secondary_dns_ip=None, dns_suffix=None): """Create an external network. :param str name: name of external network to be created. :param str vim_server_name: VIM server_name (VC name). :param list port_group_names: list of port group names. :param str gateway_ip: IP address of the gateway of the new network. :param str netmask: Netmask of the gateway. :param list ip_ranges: list of IP ranges used for static pool allocation in the network. For example, [192.168.1.2-192.168.1.49, 192.168.1.100-192.168.1.149]. :param str description: description of external network. :param str primary_dns_ip: IP address of primary DNS server. :param str secondary_dns_ip: IP address of secondary DNS Server. :param str dns_suffix: DNS suffix. :return: an object containing vmext:VMWExternalNetwork XML element that represents the new external network. :rtype: lxml.objectify.ObjectifiedElement """ vc_record = self.get_vcenter(vim_server_name) vc_href = vc_record.get('href') pg_morefs = self.get_port_group_morefs(port_group_names) vmw_external_network = E_VMEXT.VMWExternalNetwork(name=name) if description is not None: vmw_external_network.append(E.Description(description)) config = E.Configuration() ip_scopes = E.IpScopes() ip_scope = E.IpScope() ip_scope.append(E.IsInherited(False)) ip_scope.append(E.Gateway(gateway_ip)) ip_scope.append(E.Netmask(netmask)) if primary_dns_ip is not None: ip_scope.append(E.Dns1(primary_dns_ip)) if secondary_dns_ip is not None: ip_scope.append(E.Dns2(secondary_dns_ip)) if dns_suffix is not None: ip_scope.append(E.DnsSuffix(dns_suffix)) e_ip_ranges = E.IpRanges() for ip_range in ip_ranges: e_ip_range = E.IpRange() ip_range_token = ip_range.split('-') e_ip_range.append(E.StartAddress(ip_range_token[0])) e_ip_range.append(E.EndAddress(ip_range_token[1])) e_ip_ranges.append(e_ip_range) ip_scope.append(e_ip_ranges) ip_scopes.append(ip_scope) config.append(ip_scopes) config.append(E.FenceMode(FenceMode.ISOLATED.value)) vmw_external_network.append(config) vim_port_group_refs = E_VMEXT.VimPortGroupRefs() for pg_moref in pg_morefs: vim_object_ref = E_VMEXT.VimObjectRef() vim_object_ref.append(E_VMEXT.VimServerRef(href=vc_href)) vim_object_ref.append(E_VMEXT.MoRef(pg_moref[0])) vim_object_ref.append(E_VMEXT.VimObjectType(pg_moref[1])) vim_port_group_refs.append(vim_object_ref) vmw_external_network.append(vim_port_group_refs) return self.client.post_linked_resource( self.extension.get_resource(), rel=RelationType.ADD, media_type=EntityType.EXTERNAL_NETWORK.value, contents=vmw_external_network)