def test_get_default_nic_networkgroups(self):
        cluster = self.env.create_cluster(api=True)
        node = self.env.create_node(api=True)
        node_db = self.env.nodes[0]

        admin_nic = node_db.admin_interface
        other_iface = self.db.query(NodeNICInterface).filter_by(
            node_id=node['id']
        ).filter(
            not_(NodeNICInterface.id == admin_nic.id)
        ).first()

        interfaces = deepcopy(node_db.meta['interfaces'])

        # allocate ip from admin subnet
        admin_ip = str(IPNetwork(
            NetworkManager.get_admin_network_group().cidr)[0])
        for interface in interfaces:
            if interface['mac'] == admin_nic.mac:
                # reset admin ip for previous admin interface
                interface['ip'] = None
            elif interface['mac'] == other_iface.mac:
                # set new admin interface
                interface['ip'] = admin_ip

        node_db.meta['interfaces'] = interfaces

        self.app.put(
            reverse('NodeCollectionHandler'),
            json.dumps([{
                        'mac': admin_nic.mac,
                        'meta': node_db.meta,
                        'is_agent': True,
                        'cluster_id': cluster["id"]
                        }]),
            headers=self.default_headers,
            expect_errors=True
        )

        new_main_nic_id = node_db.admin_interface.id
        self.assertEquals(new_main_nic_id, other_iface.id)
        self.assertEquals(
            other_iface.assigned_networks,
            NovaNetworkManager.get_default_nic_networkgroups(
                node_db, other_iface))
        self.assertEquals(
            self.db.query(
                NodeNICInterface).get(admin_nic.id).assigned_networks,
            NovaNetworkManager.get_default_nic_networkgroups(
                node_db, admin_nic))
    def test_cluster_create_no_ip_addresses(self):
        """Two clusters having same networks updated to use full CIDR is ok"""
        cluster = self.env.create_cluster(
            api=True,
            net_provider=consts.CLUSTER_NET_PROVIDERS.nova_network)
        cluster_db = self.db.query(Cluster).get(cluster["id"])
        cluster2 = self.env.create_cluster(
            api=True,
            net_provider=consts.CLUSTER_NET_PROVIDERS.nova_network,
            release_id=cluster_db.release.id)
        cluster2_db = self.db.query(Cluster).get(cluster2["id"])

        for clstr in (cluster_db, cluster2_db):
            management_net = self.db.query(NetworkGroup).filter_by(
                name="management",
                group_id=objects.Cluster.get_default_group(clstr).id
            ).first()
            NovaNetworkManager.update(
                clstr,
                {
                    "networks": [
                        {
                            "name": "management",
                            "ip_ranges": [
                                ["192.168.0.2", "192.168.255.254"]
                            ],
                            "id": management_net.id,
                            "cluster_id": clstr.id,
                            "vlan_start": 101,
                            "cidr": "192.168.0.0/16",
                            "gateway": "192.168.0.1"
                        }
                    ]
                }
            )

        cluster1_nets = self._get_cluster_networks(cluster["id"])
        cluster2_nets = self._get_cluster_networks(cluster2["id"])

        for net1, net2 in zip(cluster1_nets, cluster2_nets):
            for f in ('group_id', 'id'):
                del net1[f]
                del net2[f]

        cluster1_nets = sorted(cluster1_nets, key=lambda n: n['name'])
        cluster2_nets = sorted(cluster2_nets, key=lambda n: n['name'])

        self.assertEquals(cluster1_nets, cluster2_nets)
    def test_get_default_nic_assignment(self):
        admin_nic_id = self.env.network_manager.get_admin_interface(
            self.node_db
        ).id
        admin_nets = [n.name for n in self.db.query(
            NodeNICInterface).get(admin_nic_id).assigned_networks_list]

        other_nic = self.db.query(NodeNICInterface).filter_by(
            node_id=self.node_db.id
        ).filter(
            not_(NodeNICInterface.id == admin_nic_id)
        ).first()
        other_nets = [n.name for n in other_nic.assigned_networks_list]

        nics = NovaNetworkManager.get_default_interfaces_configuration(
            self.node_db)

        def_admin_nic = [n for n in nics if n['id'] == admin_nic_id]
        def_other_nic = [n for n in nics if n['id'] == other_nic.id]

        self.assertEqual(len(def_admin_nic), 1)
        self.assertEqual(len(def_other_nic), 1)
        self.assertEqual(
            set(admin_nets),
            set([n['name'] for n in def_admin_nic[0]['assigned_networks']]))
        self.assertEqual(
            set(other_nets),
            set([n['name'] for n in def_other_nic[0]['assigned_networks']]))
Example #4
0
    def test_get_default_nic_assignment(self):
        admin_nic_id = self.env.network_manager.get_admin_interface(
            self.node_db).id
        admin_nets = [
            n.name for n in self.db.query(NodeNICInterface).get(
                admin_nic_id).assigned_networks_list
        ]

        other_nic = self.db.query(NodeNICInterface).filter_by(
            node_id=self.node_db.id).filter(
                not_(NodeNICInterface.id == admin_nic_id)).first()
        other_nets = [n.name for n in other_nic.assigned_networks_list]

        nics = NovaNetworkManager.get_default_interfaces_configuration(
            self.node_db)

        def_admin_nic = [n for n in nics if n['id'] == admin_nic_id]
        def_other_nic = [n for n in nics if n['id'] == other_nic.id]

        self.assertEqual(len(def_admin_nic), 1)
        self.assertEqual(len(def_other_nic), 1)
        self.assertEqual(
            set(admin_nets),
            set([n['name'] for n in def_admin_nic[0]['assigned_networks']]))
        self.assertEqual(
            set(other_nets),
            set([n['name'] for n in def_other_nic[0]['assigned_networks']]))
    def test_cluster_create_no_ip_addresses(self):
        """In this test we check that no error is occured
        if two clusters will have same networks updated to use
        full CIDR
        """
        cluster = self.env.create_cluster(api=True)
        cluster_db = self.db.query(Cluster).get(cluster["id"])
        cluster2 = self.env.create_cluster(api=True,
                                           release=cluster_db.release.id)
        cluster2_db = self.db.query(Cluster).get(cluster2["id"])

        for clstr in (cluster_db, cluster2_db):
            management_net = self.db.query(NetworkGroup).filter_by(
                name="management",
                cluster_id=clstr.id
            ).first()
            NovaNetworkManager.update(
                clstr,
                {
                    "networks": [
                        {
                            "network_size": 65536,
                            "name": "management",
                            "ip_ranges": [
                                ["192.168.0.2", "192.168.255.254"]
                            ],
                            "amount": 1,
                            "id": management_net.id,
                            "netmask": "255.255.255.0",
                            "cluster_id": clstr.id,
                            "vlan_start": 101,
                            "cidr": "192.168.0.0/16",
                            "gateway": "192.168.0.1"
                        }
                    ]
                }
            )

        cluster1_nets = self._get_cluster_networks(cluster["id"])
        cluster2_nets = self._get_cluster_networks(cluster2["id"])

        for net1, net2 in zip(cluster1_nets, cluster2_nets):
            for f in ('cluster_id', 'id'):
                del net1[f]
                del net2[f]

        self.assertEquals(cluster1_nets, cluster2_nets)
Example #6
0
    def test_get_default_nic_networkgroups(self):
        admin_nic = self.node_db.admin_interface
        other_iface = self.db.query(NodeNICInterface).filter_by(
            node_id=self.node_db.id
        ).filter(
            not_(NodeNICInterface.id == admin_nic.id)
        ).first()

        self.assertEquals(
            other_iface.assigned_networks_list,
            NovaNetworkManager.get_default_nic_networkgroups(
                self.node_db, other_iface))
        self.assertEquals(
            self.db.query(
                NodeNICInterface).get(admin_nic.id).assigned_networks_list,
            NovaNetworkManager.get_default_nic_networkgroups(
                self.node_db, admin_nic))
Example #7
0
    def PUT(self, cluster_id):
        """:returns: JSONized Task object.
        :http: * 202 (network checking task created)
               * 404 (cluster not found in db)
        """
        data = json.loads(web.data())
        if data.get("networks"):
            data["networks"] = [
                n for n in data["networks"] if n.get("name") != "fuelweb_admin"
            ]

        cluster = self.get_object_or_404(Cluster, cluster_id)
        self.check_net_provider(cluster)

        self.check_if_network_configuration_locked(cluster)

        task_manager = CheckNetworksTaskManager(cluster_id=cluster.id)
        task = task_manager.execute(data)

        if task.status != 'error':
            try:
                if 'networks' in data:
                    self.validator.validate_networks_update(
                        json.dumps(data)
                    )

                if 'dns_nameservers' in data:
                    self.validator.validate_dns_servers_update(
                        json.dumps(data)
                    )

                NovaNetworkManager.update(cluster, data)
            except web.webapi.badrequest as exc:
                TaskHelper.set_error(task.uuid, exc.data)
                logger.error(traceback.format_exc())
            except Exception as exc:
                TaskHelper.set_error(task.uuid, exc)
                logger.error(traceback.format_exc())

        data = build_json_response(TaskHandler.render(task))
        if task.status == 'error':
            db().rollback()
        else:
            db().commit()
        raise web.accepted(data=data)
    def test_cluster_create_no_ip_addresses(self):
        """In this test we check that no error is occured
        if two clusters will have same networks updated to use
        full CIDR
        """
        cluster = self.env.create_cluster(api=True)
        cluster_db = self.db.query(Cluster).get(cluster["id"])
        cluster2 = self.env.create_cluster(api=True, release_id=cluster_db.release.id)
        cluster2_db = self.db.query(Cluster).get(cluster2["id"])

        for clstr in (cluster_db, cluster2_db):
            management_net = (
                self.db.query(NetworkGroup)
                .filter_by(name="management", group_id=objects.Cluster.get_default_group(clstr).id)
                .first()
            )
            NovaNetworkManager.update(
                clstr,
                {
                    "networks": [
                        {
                            "name": "management",
                            "ip_ranges": [["192.168.0.2", "192.168.255.254"]],
                            "id": management_net.id,
                            "cluster_id": clstr.id,
                            "vlan_start": 101,
                            "cidr": "192.168.0.0/16",
                            "gateway": "192.168.0.1",
                        }
                    ]
                },
            )

        cluster1_nets = self._get_cluster_networks(cluster["id"])
        cluster2_nets = self._get_cluster_networks(cluster2["id"])

        for net1, net2 in zip(cluster1_nets, cluster2_nets):
            for f in ("group_id", "id"):
                del net1[f]
                del net2[f]

        cluster1_nets = sorted(cluster1_nets, key=lambda n: n["name"])
        cluster2_nets = sorted(cluster2_nets, key=lambda n: n["name"])

        self.assertEquals(cluster1_nets, cluster2_nets)
    def test_cluster_create_no_ip_addresses(self):
        """In this test we check that no error is occured
        if two clusters will have same networks updated to use
        full CIDR
        """
        cluster = self.env.create_cluster(api=True)
        cluster_db = self.db.query(Cluster).get(cluster["id"])
        cluster2 = self.env.create_cluster(api=True,
                                           release_id=cluster_db.release.id)
        cluster2_db = self.db.query(Cluster).get(cluster2["id"])

        for clstr in (cluster_db, cluster2_db):
            management_net = self.db.query(NetworkGroup).filter_by(
                name="management",
                cluster_id=clstr.id
            ).first()
            NovaNetworkManager.update(
                clstr,
                {
                    "networks": [
                        {
                            "name": "management",
                            "ip_ranges": [
                                ["192.168.0.2", "192.168.255.254"]
                            ],
                            "id": management_net.id,
                            "cluster_id": clstr.id,
                            "vlan_start": 101,
                            "cidr": "192.168.0.0/16",
                            "gateway": "192.168.0.1"
                        }
                    ]
                }
            )

        cluster1_nets = self._get_cluster_networks(cluster["id"])
        cluster2_nets = self._get_cluster_networks(cluster2["id"])

        for net1, net2 in zip(cluster1_nets, cluster2_nets):
            for f in ('cluster_id', 'id'):
                del net1[f]
                del net2[f]

        self.assertEqual(cluster1_nets, cluster2_nets)
Example #10
0
    def test_cluster_create_no_ip_addresses(self):
        """Two clusters having same networks updated to use full CIDR is ok"""
        cluster = self.env.create_cluster(
            api=True, net_provider=consts.CLUSTER_NET_PROVIDERS.nova_network)
        cluster_db = self.db.query(Cluster).get(cluster["id"])
        cluster2 = self.env.create_cluster(
            api=True,
            net_provider=consts.CLUSTER_NET_PROVIDERS.nova_network,
            release_id=cluster_db.release.id)
        cluster2_db = self.db.query(Cluster).get(cluster2["id"])

        for clstr in (cluster_db, cluster2_db):
            management_net = self.db.query(NetworkGroup).filter_by(
                name="management",
                group_id=objects.Cluster.get_default_group(clstr).id).first()
            NovaNetworkManager.update(
                clstr, {
                    "networks":
                    [{
                        "name": "management",
                        "ip_ranges": [["192.168.0.2", "192.168.255.254"]],
                        "id": management_net.id,
                        "cluster_id": clstr.id,
                        "vlan_start": 101,
                        "cidr": "192.168.0.0/16",
                        "gateway": "192.168.0.1"
                    }]
                })

        cluster1_nets = self._get_cluster_networks(cluster["id"])
        cluster2_nets = self._get_cluster_networks(cluster2["id"])

        for net1, net2 in zip(cluster1_nets, cluster2_nets):
            for f in ('group_id', 'id'):
                del net1[f]
                del net2[f]

        cluster1_nets = sorted(cluster1_nets, key=lambda n: n['name'])
        cluster2_nets = sorted(cluster2_nets, key=lambda n: n['name'])

        self.assertEquals(cluster1_nets, cluster2_nets)