def create_network_groups(cls, cluster, neutron_segment_type, gid=None): """Method for creation of network groups for cluster. :param cluster: Cluster instance. :type cluster: instance :returns: None """ group_id = gid or objects.Cluster.get_default_group(cluster).id networks_metadata = cluster.release.networks_metadata networks_list = networks_metadata[cluster.net_provider]["networks"] used_nets = [IPNetwork(cls.get_admin_network_group().cidr)] def check_range_in_use_already(cidr_range): for n in used_nets: if cls.is_range_intersection(n, cidr_range): logger.warn( "IP range {0} is in use already".format(cidr_range)) break used_nets.append(cidr_range) for net in networks_list: if "seg_type" in net \ and neutron_segment_type != net['seg_type']: continue vlan_start = net.get("vlan_start") cidr, gw, cidr_gw = None, None, None if net.get("notation"): if net.get("cidr"): cidr = IPNetwork(net["cidr"]).cidr cidr_gw = str(cidr[1]) if net["notation"] == 'cidr' and cidr: new_ip_range = IPAddrRange(first=str(cidr[2]), last=str(cidr[-2])) if net.get('use_gateway'): gw = cidr_gw else: new_ip_range.first = cidr_gw check_range_in_use_already(cidr) elif net["notation"] == 'ip_ranges' and net.get("ip_range"): new_ip_range = IPAddrRange(first=net["ip_range"][0], last=net["ip_range"][1]) gw = net.get('gateway') or cidr_gw \ if net.get('use_gateway') else None check_range_in_use_already( IPRange(new_ip_range.first, new_ip_range.last)) if net['name'] == "management": gw = "192.168.0.254" #set default manage gateway nw_group = NetworkGroup(release=cluster.release.id, name=net['name'], cidr=str(cidr) if cidr else None, gateway=gw, group_id=group_id, vlan_start=vlan_start, meta=net) db().add(nw_group) db().flush() if net.get("notation"): nw_group.ip_ranges.append(new_ip_range) db().flush() cls.cleanup_network_group(nw_group)
def create_network_groups(cls, cluster_id): """Method for creation of network groups for cluster. :param cluster_id: Cluster database ID. :type cluster_id: int :returns: None :raises: errors.InvalidNetworkCIDR """ cluster_db = db().query(Cluster).get(cluster_id) networks_metadata = cluster_db.release.networks_metadata networks_list = networks_metadata[cluster_db.net_provider]["networks"] used_nets = [IPNetwork(cls.get_admin_network_group().cidr)] def check_range_in_use_already(cidr_range): for n in used_nets: if cls.is_range_intersection(n, cidr_range): raise errors.InvalidNetworkCIDR( u"CIDR/range '{0}' of '{1}' network intersects " u"with IP range '{2}' of other network".format( str(cidr_range), net['name'], str(n))) used_nets.append(cidr_range) for net in networks_list: if "seg_type" in net and \ cluster_db.net_segment_type != net['seg_type']: continue vlan_start = net.get("vlan_start") net_size = net.get('network_size') cidr, gw, cidr_gw, netmask = None, None, None, None if net.get("notation"): if net.get("cidr"): cidr = IPNetwork(net["cidr"]).cidr cidr_gw = str(cidr[1]) netmask = str(cidr.netmask) net_size = net_size or cidr.size if net["notation"] == 'cidr' and cidr: new_ip_range = IPAddrRange( first=str(cidr[2]), last=str(cidr[-2]) ) if net.get('use_gateway'): gw = cidr_gw else: new_ip_range.first = cidr_gw check_range_in_use_already(cidr) elif net["notation"] == 'ip_ranges' and net.get("ip_range"): new_ip_range = IPAddrRange( first=net["ip_range"][0], last=net["ip_range"][1] ) gw = net.get('gateway') or cidr_gw \ if net.get('use_gateway') else None netmask = net.get('netmask') or netmask check_range_in_use_already(IPRange(new_ip_range.first, new_ip_range.last)) nw_group = NetworkGroup( release=cluster_db.release.id, name=net['name'], cidr=str(cidr) if cidr else None, netmask=netmask, gateway=gw, cluster_id=cluster_id, vlan_start=vlan_start, amount=1, network_size=net_size or 1, meta=net ) db().add(nw_group) db().commit() if net.get("notation"): nw_group.ip_ranges.append(new_ip_range) db().commit() cls.cleanup_network_group(nw_group)
def create_network_groups(cls, cluster, neutron_segment_type, gid=None): """Method for creation of network groups for cluster. :param cluster: Cluster instance. :type cluster: instance :returns: None """ group_id = gid or objects.Cluster.get_default_group(cluster).id networks_metadata = cluster.release.networks_metadata networks_list = networks_metadata[cluster.net_provider]["networks"] used_nets = [IPNetwork(cls.get_admin_network_group().cidr)] def check_range_in_use_already(cidr_range): for n in used_nets: if cls.is_range_intersection(n, cidr_range): logger.warn("IP range {0} is in use already".format( cidr_range)) break used_nets.append(cidr_range) for net in networks_list: if "seg_type" in net \ and neutron_segment_type != net['seg_type']: continue vlan_start = net.get("vlan_start") cidr, gw, cidr_gw = None, None, None if net.get("notation"): if net.get("cidr"): cidr = IPNetwork(net["cidr"]).cidr cidr_gw = str(cidr[1]) if net["notation"] == 'cidr' and cidr: new_ip_range = IPAddrRange( first=str(cidr[2]), last=str(cidr[-2]) ) if net.get('use_gateway'): gw = cidr_gw else: new_ip_range.first = cidr_gw check_range_in_use_already(cidr) elif net["notation"] == 'ip_ranges' and net.get("ip_range"): new_ip_range = IPAddrRange( first=net["ip_range"][0], last=net["ip_range"][1] ) gw = net.get('gateway') or cidr_gw \ if net.get('use_gateway') else None check_range_in_use_already(IPRange(new_ip_range.first, new_ip_range.last)) nw_group = NetworkGroup( release=cluster.release.id, name=net['name'], cidr=str(cidr) if cidr else None, gateway=gw, group_id=group_id, vlan_start=vlan_start, meta=net ) db().add(nw_group) db().flush() if net.get("notation"): nw_group.ip_ranges.append(new_ip_range) db().flush() cls.cleanup_network_group(nw_group)
def create_network_groups(cls, cluster_id): """Method for creation of network groups for cluster. :param cluster_id: Cluster database ID. :type cluster_id: int :returns: None :raises: errors.InvalidNetworkCIDR """ cluster_db = db().query(Cluster).get(cluster_id) networks_metadata = cluster_db.release.networks_metadata networks_list = networks_metadata[cluster_db.net_provider]["networks"] used_nets = [IPNetwork(cls.get_admin_network_group().cidr)] def check_range_in_use_already(cidr_range): for n in used_nets: if cls.is_range_intersection(n, cidr_range): logger.warn( "IP range {0} is in use already".format(cidr_range)) break used_nets.append(cidr_range) for net in networks_list: if "seg_type" in net and \ cluster_db.net_segment_type != net['seg_type']: continue vlan_start = net.get("vlan_start") net_size = net.get('network_size') cidr, gw, cidr_gw, netmask = None, None, None, None if net.get("notation"): if net.get("cidr"): cidr = IPNetwork(net["cidr"]).cidr cidr_gw = str(cidr[1]) netmask = str(cidr.netmask) net_size = net_size or cidr.size if net["notation"] == 'cidr' and cidr: new_ip_range = IPAddrRange(first=str(cidr[2]), last=str(cidr[-2])) if net.get('use_gateway'): gw = cidr_gw else: new_ip_range.first = cidr_gw check_range_in_use_already(cidr) elif net["notation"] == 'ip_ranges' and net.get("ip_range"): new_ip_range = IPAddrRange(first=net["ip_range"][0], last=net["ip_range"][1]) gw = net.get('gateway') or cidr_gw \ if net.get('use_gateway') else None netmask = net.get('netmask') or netmask check_range_in_use_already( IPRange(new_ip_range.first, new_ip_range.last)) nw_group = NetworkGroup(release=cluster_db.release.id, name=net['name'], cidr=str(cidr) if cidr else None, netmask=netmask, gateway=gw, cluster_id=cluster_id, vlan_start=vlan_start, amount=1, network_size=net_size or 1, meta=net) db().add(nw_group) db().commit() if net.get("notation"): nw_group.ip_ranges.append(new_ip_range) db().commit() cls.cleanup_network_group(nw_group)