Revision 09b76b7e
b/snf-cyclades-app/synnefo/api/management/commands/port-inspect.py | ||
---|---|---|
35 | 35 |
from django.core.management.base import BaseCommand, CommandError |
36 | 36 |
|
37 | 37 |
from synnefo.management.common import convert_api_faults |
38 |
from synnefo.api.util import get_port |
|
39 |
from synnefo.management import pprint |
|
38 |
from synnefo.management import pprint, common |
|
40 | 39 |
|
41 | 40 |
|
42 | 41 |
class Command(BaseCommand): |
... | ... | |
63 | 62 |
if len(args) != 1: |
64 | 63 |
raise CommandError("Please provide a port ID") |
65 | 64 |
|
66 |
port = get_port(args[0], None)
|
|
65 |
port = common.get_port(args[0])
|
|
67 | 66 |
|
68 | 67 |
pprint.pprint_port(port, stdout=self.stdout) |
69 | 68 |
self.stdout.write('\n\n') |
b/snf-cyclades-app/synnefo/api/management/commands/port-remove.py | ||
---|---|---|
31 | 31 |
from optparse import make_option |
32 | 32 |
from django.core.management.base import BaseCommand, CommandError |
33 | 33 |
from synnefo.logic import servers |
34 |
from synnefo.api.util import get_port |
|
35 | 34 |
from synnefo.management import common |
36 | 35 |
from snf_django.management.utils import parse_bool |
37 | 36 |
|
... | ... | |
54 | 53 |
if len(args) < 1: |
55 | 54 |
raise CommandError("Please provide a port ID") |
56 | 55 |
|
57 |
port = get_port(args[0], None, for_update=True)
|
|
56 |
port = common.get_port(args[0], for_update=True)
|
|
58 | 57 |
|
59 | 58 |
servers.delete_port(port) |
60 | 59 |
|
b/snf-cyclades-app/synnefo/api/tests/ports.py | ||
---|---|---|
61 | 61 |
def test_get_port(self): |
62 | 62 |
nic = dbmf.NetworkInterfaceFactory() |
63 | 63 |
url = join_urls(PORTS_URL, str(nic.id)) |
64 |
response = self.get(url, user=nic.network.userid)
|
|
64 |
response = self.get(url, user=nic.userid) |
|
65 | 65 |
self.assertEqual(response.status_code, 200) |
66 | 66 |
|
67 | 67 |
@patch("synnefo.db.models.get_rapi_client") |
... | ... | |
70 | 70 |
url = join_urls(PORTS_URL, str(nic.id)) |
71 | 71 |
mrapi().ModifyInstance.return_value = 42 |
72 | 72 |
with override_settings(settings, GANETI_USE_HOTPLUG=True): |
73 |
response = self.delete(url, user=nic.network.userid)
|
|
73 |
response = self.delete(url, user=nic.userid) |
|
74 | 74 |
self.assertEqual(response.status_code, 204) |
75 | 75 |
with override_settings(settings, GANETI_USE_HOTPLUG=False): |
76 |
response = self.delete(url, user=nic.network.userid)
|
|
76 |
response = self.delete(url, user=nic.userid) |
|
77 | 77 |
self.assertEqual(response.status_code, 400) |
78 | 78 |
|
79 | 79 |
def test_remove_nic_malformed(self): |
... | ... | |
86 | 86 |
url = join_urls(PORTS_URL, str(nic.id)) |
87 | 87 |
request = {'port': {"name": "test-name"}} |
88 | 88 |
response = self.put(url, params=json.dumps(request), |
89 |
user=nic.network.userid)
|
|
89 |
user=nic.userid) |
|
90 | 90 |
self.assertEqual(response.status_code, 200) |
91 | 91 |
res = json.loads(response.content) |
92 | 92 |
self.assertEqual(res['port']['name'], "test-name") |
... | ... | |
99 | 99 |
url = join_urls(PORTS_URL, str(nic.id)) |
100 | 100 |
request = {'port': {"security_groups": ["123"]}} |
101 | 101 |
response = self.put(url, params=json.dumps(request), |
102 |
user=nic.network.userid)
|
|
102 |
user=nic.userid) |
|
103 | 103 |
self.assertEqual(response.status_code, 404) |
104 | 104 |
|
105 | 105 |
def test_update_port_sg(self): |
... | ... | |
112 | 112 |
url = join_urls(PORTS_URL, str(nic.id)) |
113 | 113 |
request = {'port': {"security_groups": [str(sg2.id), str(sg3.id)]}} |
114 | 114 |
response = self.put(url, params=json.dumps(request), |
115 |
user=nic.network.userid)
|
|
115 |
user=nic.userid) |
|
116 | 116 |
res = json.loads(response.content) |
117 | 117 |
self.assertEqual(res['port']['security_groups'], |
118 | 118 |
[str(sg2.id), str(sg3.id)]) |
b/snf-cyclades-app/synnefo/api/tests/servers.py | ||
---|---|---|
408 | 408 |
|
409 | 409 |
def test_create_server_with_port(self, mrapi): |
410 | 410 |
mrapi().CreateInstance.return_value = 42 |
411 |
port1 = mfactory.IPv4AddressFactory(nic=None) |
|
411 |
ip = mfactory.IPv4AddressFactory(nic__machine=None) |
|
412 |
port1 = ip.nic |
|
412 | 413 |
request = deepcopy(self.request) |
413 | 414 |
request["server"]["networks"] = [{"port": port1.id}] |
414 | 415 |
with mocked_quotaholder(): |
... | ... | |
424 | 425 |
json.dumps(request), 'json') |
425 | 426 |
self.assertConflict(response) |
426 | 427 |
# Test permissions |
427 |
port2 = mfactory.IPv4AddressFactory(userid="user1") |
|
428 |
ip = mfactory.IPv4AddressFactory(userid="user1", nic__userid="user1") |
|
429 |
port2 = ip.nic |
|
428 | 430 |
request["server"]["networks"] = [{"port": port2.id}] |
429 | 431 |
with mocked_quotaholder(): |
430 | 432 |
response = self.mypost("servers", "user2", |
b/snf-cyclades-app/synnefo/api/util.py | ||
---|---|---|
231 | 231 |
Return a NetworkInteface instance or raise ItemNotFound. |
232 | 232 |
""" |
233 | 233 |
try: |
234 |
objects = NetworkInterface.objects |
|
234 |
objects = NetworkInterface.objects.filter(userid=user_id)
|
|
235 | 235 |
if for_update: |
236 | 236 |
objects = objects.select_for_update() |
237 |
|
|
238 |
if not user_id: |
|
239 |
port = objects.get(id=port_id) |
|
240 |
else: |
|
241 |
port = objects.get(network__userid=user_id, id=port_id) |
|
242 |
|
|
243 | 237 |
# if (port.device_owner != "vm") and for_update: |
244 | 238 |
# raise faults.BadRequest('Can not update non vm port') |
245 |
|
|
246 |
return port |
|
239 |
return objects.get(id=port_id) |
|
247 | 240 |
except (ValueError, NetworkInterface.DoesNotExist): |
248 |
raise faults.ItemNotFound('Port not found.')
|
|
241 |
raise faults.ItemNotFound("Port '%s' not found." % port_id)
|
|
249 | 242 |
|
250 | 243 |
|
251 | 244 |
def get_security_group(sg_id): |
b/snf-cyclades-app/synnefo/db/models_factory.py | ||
---|---|---|
176 | 176 |
class NetworkInterfaceFactory(factory.DjangoModelFactory): |
177 | 177 |
FACTORY_FOR = models.NetworkInterface |
178 | 178 |
|
179 |
userid = factory.Sequence(user_seq()) |
|
179 | 180 |
name = factory.LazyAttribute(lambda self: random_string(30)) |
180 | 181 |
machine = factory.SubFactory(VirtualMachineFactory, operstate="STARTED") |
181 | 182 |
network = factory.SubFactory(NetworkFactory, state="ACTIVE") |
... | ... | |
231 | 232 |
factory.LazyAttributeSequence(lambda self, n: self.subnet.cidr[:-4] + |
232 | 233 |
'{0}'.format(int(n) + 2)) |
233 | 234 |
nic = factory.SubFactory(NetworkInterfaceFactory, |
235 |
userid=factory.SelfAttribute('..userid'), |
|
234 | 236 |
network=factory.SelfAttribute('..network')) |
235 | 237 |
|
236 | 238 |
|
b/snf-cyclades-app/synnefo/logic/servers.py | ||
---|---|---|
261 | 261 |
ports.append(port) |
262 | 262 |
|
263 | 263 |
for floating_ip_id in floating_ips: |
264 |
floating_ip = util.get_floating_ip_by_id(vm.userid, floating_ip_id,
|
|
264 |
floating_ip = util.get_floating_ip_by_id(userid, floating_ip_id, |
|
265 | 265 |
for_update=True) |
266 | 266 |
port = _create_port(userid, network=floating_ip.network, |
267 | 267 |
use_ipaddress=floating_ip) |
b/snf-cyclades-app/synnefo/management/common.py | ||
---|---|---|
34 | 34 |
from django.core.management import CommandError |
35 | 35 |
from synnefo.db.models import (Backend, VirtualMachine, Network, |
36 | 36 |
Flavor, IPAddress, Subnet, |
37 |
BridgePoolTable, MacPrefixPoolTable) |
|
37 |
BridgePoolTable, MacPrefixPoolTable, |
|
38 |
NetworkInterface) |
|
38 | 39 |
from functools import wraps |
39 | 40 |
|
40 | 41 |
from snf_django.lib.api import faults |
... | ... | |
132 | 133 |
def get_subnet(subnet_id, for_update=True): |
133 | 134 |
"""Get a Subnet object by its ID.""" |
134 | 135 |
try: |
135 |
return Subnet.objects.get(id=subnet_id) |
|
136 |
subnets = Subnet.objects |
|
137 |
if for_update: |
|
138 |
subnets.select_for_update() |
|
139 |
return subnets.get(id=subnet_id) |
|
136 | 140 |
except Subnet.DoesNotExist: |
137 | 141 |
raise CommandError("Subnet with ID %s not found in DB." |
138 | 142 |
" Use snf-manage subnet-list to find out" |
139 | 143 |
" available subnet IDs" % subnet_id) |
140 | 144 |
|
141 | 145 |
|
146 |
def get_port(port_id, for_update=True): |
|
147 |
"""Get a port object by its ID.""" |
|
148 |
try: |
|
149 |
ports = NetworkInterface.objects |
|
150 |
if for_update: |
|
151 |
ports.select_for_update() |
|
152 |
return ports.get(id=port_id) |
|
153 |
except NetworkInterface.DoesNotExist: |
|
154 |
raise CommandError("Port with ID %s not found in DB." |
|
155 |
" Use snf-manage port-list to find out" |
|
156 |
" available port IDs" % port_id) |
|
157 |
|
|
158 |
|
|
142 | 159 |
def get_flavor(flavor_id): |
143 | 160 |
try: |
144 | 161 |
flavor_id = int(flavor_id) |
Also available in: Unified diff