Example #1
0
 def test_create_port_without_device(self):
     net = dbmf.NetworkWithSubnetFactory(userid="test_user",
                                         public=False,
                                         subnet__cidr="192.168.2.0/24",
                                         subnet__gateway=None,
                                         subnet__pool__size=3,
                                         subnet__pool__offset=1)
     request = {
         "port": {
             "name": "port_with_address",
             "network_id": str(net.id),
         }
     }
     response = self.post(PORTS_URL,
                          params=json.dumps(request),
                          user="******")
     self.assertEqual(response.status_code, 201)
     new_port = json.loads(response.content)["port"]
     self.assertEqual(new_port["device_id"], None)
     # And with address
     request["port"]["fixed_ips"] = [{"ip_address": "192.168.2.2"}]
     with override_settings(settings, GANETI_USE_HOTPLUG=True):
         response = self.post(PORTS_URL,
                              params=json.dumps(request),
                              user="******")
     self.assertEqual(response.status_code, 201)
     new_port = json.loads(response.content)["port"]
     self.assertEqual(new_port["device_id"], None)
     self.assertEqual(new_port["fixed_ips"][0]["ip_address"], "192.168.2.2")
Example #2
0
 def test_ips(self, client):
     network = mfactory.NetworkWithSubnetFactory(subnet__cidr='10.0.0.0/24',
                                                 subnet__gateway="10.0.0.1")
     bn = mfactory.BackendNetworkFactory(network=network)
     msg = self.create_msg(operation='OP_NETWORK_SET_PARAMS',
                           network=network.backend_id,
                           cluster=bn.backend.clustername,
                           status='success',
                           job_fields={"add_reserved_ips": ["10.0.0.10",
                                                            "10.0.0.20"]})
     update_network(client, msg)
     self.assertTrue(client.basic_ack.called)
     pool = network.get_ip_pools()[0]
     self.assertTrue(pool.is_reserved('10.0.0.10'))
     self.assertTrue(pool.is_reserved('10.0.0.20'))
     pool.save()
     # Check that they are not released
     msg = self.create_msg(operation='OP_NETWORK_SET_PARAMS',
                           network=network.backend_id,
                           cluster=bn.backend.clustername,
                           job_fields={
                               "remove_reserved_ips": ["10.0.0.10",
                                                       "10.0.0.20"]})
     update_network(client, msg)
     pool = network.get_ip_pools()[0]
     self.assertTrue(pool.is_reserved('10.0.0.10'))
     self.assertTrue(pool.is_reserved('10.0.0.20'))
Example #3
0
    def test_reserve_no_pool(self):
        # Network is not a floating IP pool
        pool2 = mf.NetworkWithSubnetFactory(floating_ip_pool=False,
                                            public=True,
                                            subnet__cidr="192.168.2.0/24",
                                            subnet__gateway="192.168.2.1")
        request = {"floatingip": {'floating_network_id': pool2.id}}
        response = self.post(URL, "test_user", json.dumps(request), "json")
        self.assertConflict(response)

        # Full network
        net = mf.NetworkWithSubnetFactory(floating_ip_pool=True,
                                          public=True,
                                          subnet__cidr="192.168.2.0/31",
                                          subnet__gateway="192.168.2.1",
                                          subnet__pool__size=0)
        request = {"floatingip": {'floating_network_id': net.id}}
        response = self.post(URL, "test_user", json.dumps(request), "json")
        self.assertConflict(response)
Example #4
0
 def test_reserve_ip(self):
     net1 = mfact.NetworkWithSubnetFactory(subnet__cidr='192.168.2.0/24')
     pool = net1.get_ip_pools()[0]
     self.assertTrue(pool.is_available('192.168.2.12'))
     net1.reserve_address('192.168.2.12')
     pool = net1.get_ip_pools()[0]
     self.assertFalse(pool.is_available('192.168.2.12'))
     net1.release_address('192.168.2.12')
     pool = net1.get_ip_pools()[0]
     self.assertTrue(pool.is_available('192.168.2.12'))
Example #5
0
 def test_orphan_networks(self, mrapi):
     net = mfactory.NetworkWithSubnetFactory(public=False,
                                             action="CREATE",
                                             deleted=True)
     mrapi().GetNetworks.return_value = [{
         "name": net.backend_id,
         "group_list": [],
         "network": net.subnet4.cidr,
         "map": "....",
         "external_reservations": ""
     }]
     self.reconciler.reconcile_networks()
     mrapi().DeleteNetwork.assert_called_once_with(net.backend_id, [])
Example #6
0
 def test_stale_network(self, mrapi):
     # Test that stale network will be deleted from DB, if network action is
     # destroy
     net1 = mfactory.NetworkWithSubnetFactory(public=False,
                                              flavor="IP_LESS_ROUTED",
                                              action="DESTROY",
                                              deleted=False)
     bn1 = mfactory.BackendNetworkFactory(network=net1,
                                          backend=self.backend,
                                          operstate="ACTIVE")
     mrapi().GetNetworks.return_value = []
     self.assertFalse(net1.deleted)
     with mocked_quotaholder():
         self.reconciler.reconcile_networks()
     net1 = Network.objects.get(id=net1.id)
     self.assertTrue(net1.deleted)
     self.assertFalse(net1.backend_networks.filter(id=bn1.id).exists())
     # But not if action is not DESTROY
     net2 = mfactory.NetworkWithSubnetFactory(public=False, action="CREATE")
     mfactory.BackendNetworkFactory(network=net2, backend=self.backend)
     self.assertFalse(net2.deleted)
     self.reconciler.reconcile_networks()
     self.assertFalse(net2.deleted)
Example #7
0
 def test_unsynced_nics(self, mrapi):
     network1 = mfactory.NetworkWithSubnetFactory(
         subnet__cidr="10.0.0.0/24", subnet__gateway="10.0.0.2")
     network2 = mfactory.NetworkWithSubnetFactory(
         subnet__cidr="192.168.2.0/24", subnet__gateway="192.168.2.2")
     vm1 = mfactory.VirtualMachineFactory(backend=self.backend,
                                          deleted=False,
                                          operstate="STOPPED")
     subnet = network1.subnets.get(ipversion=4)
     ip = mfactory.IPv4AddressFactory(nic__machine=vm1,
                                      network=network1,
                                      subnet=subnet,
                                      address="10.0.0.3")
     nic = ip.nic
     mrapi().GetInstances.return_value =\
         [{"name": vm1.backend_vm_id,
          "beparams": {"maxmem": 2048,
                       "minmem": 2048,
                       "vcpus": 4},
          "oper_state": True,
          "mtime": time(),
          "disk.sizes": [],
          "disk.names": [],
          "disk.uuids": [],
          "nic.names": [nic.backend_uuid],
          "nic.ips": ["192.168.2.5"],
          "nic.macs": ["aa:00:bb:cc:dd:ee"],
          "nic.networks.names": [network2.backend_id],
          "tags": []}]
     with mocked_quotaholder():
         self.reconciler.reconcile()
     vm1 = VirtualMachine.objects.get(id=vm1.id)
     self.assertEqual(vm1.operstate, "STARTED")
     nic = vm1.nics.all()[0]
     self.assertEqual(nic.network, network2)
     self.assertEqual(nic.ipv4_address, "192.168.2.5")
     self.assertEqual(nic.mac, "aa:00:bb:cc:dd:ee")
Example #8
0
 def test_unsynced_networks(self, mrapi):
     net = mfactory.NetworkWithSubnetFactory(public=False,
                                             state="PENDING",
                                             action="CREATE",
                                             deleted=False)
     bn = mfactory.BackendNetworkFactory(network=net,
                                         backend=self.backend,
                                         operstate="PENDING")
     mrapi().GetNetworks.return_value = [{
         "name": net.backend_id,
         "group_list": [],
         "network": net.subnet4.cidr,
         "map": "....",
         "external_reservations": ""
     }]
     self.assertEqual(bn.operstate, "PENDING")
     self.reconciler.reconcile_networks()
     bn = BackendNetwork.objects.get(id=bn.id)
     self.assertEqual(bn.operstate, "ACTIVE")
Example #9
0
    def test_create_port_with_address(self, mrapi):
        """Test creation if IP address is specified."""
        mrapi().ModifyInstance.return_value = 42
        vm = dbmf.VirtualMachineFactory()
        net = dbmf.NetworkWithSubnetFactory(userid=vm.userid,
                                            public=False,
                                            subnet__cidr="192.168.2.0/24",
                                            subnet__gateway=None,
                                            subnet__pool__size=1,
                                            subnet__pool__offset=1)
        request = {
            "port": {
                "name": "port_with_address",
                "network_id": str(net.id),
                "device_id": str(vm.id),
                "fixed_ips": [{
                    "ip_address": "192.168.2.1"
                }]
            }
        }
        with override_settings(settings, GANETI_USE_HOTPLUG=True):
            response = self.post(PORTS_URL,
                                 params=json.dumps(request),
                                 user=vm.userid)
        self.assertEqual(response.status_code, 201)
        new_port_ip = json.loads(response.content)["port"]["fixed_ips"][0]
        self.assertEqual(new_port_ip["ip_address"], "192.168.2.1")

        # But 409 if address is already used
        with override_settings(settings, GANETI_USE_HOTPLUG=True):
            response = self.post(PORTS_URL,
                                 params=json.dumps(request),
                                 user=vm.userid)
        self.assertConflict(response)

        # And bad request if IPv6 address is specified
        request["port"]["fixed_ips"][0]["ip_address"] = "babe::"
        with override_settings(settings, GANETI_USE_HOTPLUG=True):
            response = self.post(PORTS_URL,
                                 params=json.dumps(request),
                                 user=vm.userid)
        self.assertBadRequest(response)
Example #10
0
    def test_parted_network(self, mrapi):
        net1 = mfactory.NetworkWithSubnetFactory(public=False)
        mrapi().GetNetworks.return_value = []
        # Test nothing if Ganeti returns nothing
        self.assertEqual(net1.backend_networks.count(), 0)
        self.reconciler.reconcile_networks()
        self.assertEqual(net1.backend_networks.count(), 0)

        # Test creation if exists in Ganeti
        self.assertEqual(net1.backend_networks.count(), 0)
        mrapi().GetNetworks.return_value = [{
            "name":
            net1.backend_id,
            "group_list": [["default", "bridged", "prv0", "1"]],
            "network":
            net1.subnet4.cidr,
            "map":
            "....",
            "external_reservations":
            ""
        }]
        self.reconciler.reconcile_networks()
        self.assertTrue(
            net1.backend_networks.filter(backend=self.backend).exists())
Example #11
0
 def setUp(self):
     self.pool = mf.NetworkWithSubnetFactory(floating_ip_pool=True,
                                             public=True,
                                             subnet__cidr="192.168.2.0/24",
                                             subnet__gateway="192.168.2.1")
Example #12
0
 def setUp(self):
     self.net = mfact.NetworkWithSubnetFactory()
Example #13
0
 def test_missing_network(self, mrapi):
     net2 = mfactory.NetworkWithSubnetFactory(public=False, action="CREATE")
     mfactory.BackendNetworkFactory(network=net2, backend=self.backend)
     mrapi().GetNetworks.return_value = []
     self.reconciler.reconcile_networks()
     self.assertEqual(len(mrapi().CreateNetwork.mock_calls), 1)