Revision 9599e997

b/snf-cyclades-app/synnefo/app_settings/default/backend.py
31 31

  
32 32
# If True, qemu-kvm will hotplug a NIC when connecting a vm to
33 33
# a network. This requires qemu-kvm=1.0.
34
GANETI_USE_HOTPLUG = False
34
GANETI_USE_HOTPLUG = True
35 35

  
36 36
# This module implements the strategy for allocating a vm to a backend
37 37
BACKEND_ALLOCATOR_MODULE = "synnefo.logic.allocators.default_allocator"
b/snf-cyclades-app/synnefo/logic/servers.py
44 44
    operstate = vm.operstate
45 45
    if operstate == "BUILD":
46 46
        raise faults.BuildInProgress("Server '%s' is being build." % vm.id)
47
    elif (action == "START" and operstate == "STARTED") or\
48
         (action == "STOP" and operstate == "STOPPED") or\
49
         (action == "RESIZE" and operstate == "STARTED"):
47
    elif (action == "START" and operstate != "STOPPED") or\
48
         (action == "STOP" and operstate != "STARTED") or\
49
         (action == "RESIZE" and operstate != "STOPPED") or\
50
         (action in ["CONNECT", "DISCONNECT"] and operstate != "STOPPED"
51
          and not settings.GANETI_USE_HOTPLUG):
50 52
        raise faults.BadRequest("Can not perform '%s' action while server is"
51 53
                                " in '%s' state." % (action, operstate))
52 54
    return
b/snf-cyclades-app/synnefo/logic/tests/servers.py
86 86
                                      state="ACTIVE",
87 87
                                      dhcp=True,
88 88
                                      flavor="CUSTOM")
89
        vm = mfactory.VirtualMachineFactory(operstate="ACTIVE")
89
        vm = mfactory.VirtualMachineFactory(operstate="STARTED")
90 90
        mfactory.BackendNetworkFactory(network=net, backend=vm.backend)
91 91
        mrapi().ModifyInstance.return_value = 42
92 92
        servers.connect(vm, net)
......
100 100
        self.assertEqual(nics[1]["network"], net.backend_id)
101 101

  
102 102
        # No dhcp
103
        vm = mfactory.VirtualMachineFactory(operstate="ACTIVE")
103
        vm = mfactory.VirtualMachineFactory(operstate="STARTED")
104 104
        net = mfactory.NetworkFactory(subnet="192.168.2.0/24",
105 105
                                      gateway="192.168.2.1",
106 106
                                      state="ACTIVE",
......
117 117
        self.assertEqual(nics[1]["network"], net.backend_id)
118 118

  
119 119
        # Test connect to IPv6 only network
120
        vm = mfactory.VirtualMachineFactory(operstate="ACTIVE")
120
        vm = mfactory.VirtualMachineFactory(operstate="STARTED")
121 121
        net = mfactory.NetworkFactory(subnet6="2000::/64",
122 122
                                      state="ACTIVE",
123 123
                                      gateway="2000::1")
......
158 158
        self.assertRaises(faults.BadRequest, servers.stop, vm)
159 159
        vm = mfactory.VirtualMachineFactory(operstate="STARTED")
160 160
        self.assertRaises(faults.BadRequest, servers.resize, vm)
161
        vm = mfactory.VirtualMachineFactory(operstate="STOPPED")
162
        self.assertRaises(faults.BadRequest, servers.stop, vm)
161
        # Check that connect/disconnect is allowed only in STOPPED vms
162
        # if hotplug is disabled.
163
        vm = mfactory.VirtualMachineFactory(operstate="STARTED")
164
        network = mfactory.NetworkFactory(state="ACTIVE")
165
        with override_settings(settings, GANETI_USE_HOTPLUG=False):
166
            self.assertRaises(faults.BadRequest, servers.connect, vm, network)
167
            self.assertRaises(faults.BadRequest, servers.disconnect, vm,
168
                              network)
163 169
        #test valid
170
        vm = mfactory.VirtualMachineFactory(operstate="STOPPED")
164 171
        mrapi().StartupInstance.return_value = 1
165 172
        with mocked_quotaholder():
166 173
            servers.start(vm)

Also available in: Unified diff