예제 #1
0
    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)
예제 #2
0
파일: manager.py 프로젝트: teran/fuel-web
    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)
예제 #3
0
    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)
예제 #4
0
    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)