Revision b14725eb
b/snf-cyclades-app/synnefo/api/management/commands/network-create.py | ||
---|---|---|
36 | 36 |
from django.core.management.base import BaseCommand, CommandError |
37 | 37 |
|
38 | 38 |
from synnefo.db.models import Network, Backend |
39 |
from synnefo.api.util import network_link_from_type |
|
39 |
from synnefo.api.util import network_link_from_type, validate_network_size
|
|
40 | 40 |
from synnefo.logic.backend import create_network |
41 |
from synnefo import settings |
|
41 | 42 |
|
42 | 43 |
import ipaddr |
43 | 44 |
|
... | ... | |
47 | 48 |
|
48 | 49 |
|
49 | 50 |
class Command(BaseCommand): |
51 |
can_import_settings = True |
|
52 |
|
|
50 | 53 |
help = "Create a new network" |
51 | 54 |
|
52 | 55 |
option_list = BaseCommand.option_list + ( |
... | ... | |
154 | 157 |
create_network(network) |
155 | 158 |
|
156 | 159 |
|
157 |
|
|
158 | 160 |
def validate_network_info(options): |
159 | 161 |
subnet = options['subnet'] |
160 | 162 |
gateway = options['gateway'] |
... | ... | |
162 | 164 |
gateway6 = options['gateway6'] |
163 | 165 |
|
164 | 166 |
try: |
165 |
ipaddr.IPv4Network(subnet) |
|
167 |
net = ipaddr.IPv4Network(subnet) |
|
168 |
prefix = net.prefixlen |
|
169 |
if not validate_network_size(prefix): |
|
170 |
raise CommandError("Unsupport network mask %d." |
|
171 |
" Must be in range (%s,29] " |
|
172 |
% (prefix, settings.MAX_CIDR_BLOCK)) |
|
166 | 173 |
except ValueError: |
167 | 174 |
raise CommandError('Malformed subnet') |
168 | 175 |
try: |
b/snf-cyclades-app/synnefo/api/networks.py | ||
---|---|---|
48 | 48 |
NetworkInUse, OverLimit) |
49 | 49 |
from synnefo.db.models import Network, Pool |
50 | 50 |
from synnefo.logic import backend |
51 |
from synnefo.settings import MAX_CIDR_BLOCK |
|
52 | 51 |
|
53 | 52 |
|
54 | 53 |
log = getLogger('synnefo.api') |
... | ... | |
179 | 178 |
raise OverLimit('Network count limit exceeded for your account.') |
180 | 179 |
|
181 | 180 |
cidr_block = int(subnet.split('/')[1]) |
182 |
if cidr_block <= MAX_CIDR_BLOCK: |
|
183 |
raise OverLimit("Network size is to big. Please specify a network" |
|
184 |
" smaller than /" + str(MAX_CIDR_BLOCK) + '.') |
|
181 |
if not util.validate_network_size(cidr_block): |
|
182 |
raise OverLimit("Unsupported network size.") |
|
185 | 183 |
|
186 | 184 |
try: |
187 | 185 |
link = util.network_link_from_type(typ) |
b/snf-cyclades-app/synnefo/api/util.py | ||
---|---|---|
64 | 64 |
from synnefo.lib.astakos import get_user |
65 | 65 |
from synnefo.plankton.backend import ImageBackend |
66 | 66 |
from synnefo.logic import ippool |
67 |
from synnefo.settings import MAX_CIDR_BLOCK |
|
67 | 68 |
|
68 | 69 |
|
69 | 70 |
log = getLogger('synnefo.api') |
... | ... | |
209 | 210 |
raise ItemNotFound('Network not found.') |
210 | 211 |
|
211 | 212 |
|
213 |
def validate_network_size(cidr_block): |
|
214 |
"""Return True if network size is allowed.""" |
|
215 |
return cidr_block <= 29 and cidr_block > MAX_CIDR_BLOCK |
|
216 |
|
|
217 |
|
|
212 | 218 |
def backend_public_networks(backend): |
213 | 219 |
"""Return available public networks of the backend. |
214 | 220 |
|
Also available in: Unified diff