Revision e74a5b4b snf-cyclades-app/synnefo/logic/servers.py
b/snf-cyclades-app/synnefo/logic/servers.py | ||
---|---|---|
529 | 529 |
def create_ports_for_setting(user_id, category): |
530 | 530 |
if category == "admin": |
531 | 531 |
network_setting = settings.CYCLADES_FORCED_SERVER_NETWORKS |
532 |
exception = faults.ServiceUnavailable |
|
532 | 533 |
elif category == "default": |
533 | 534 |
network_setting = settings.CYCLADES_DEFAULT_SERVER_NETWORKS |
535 |
exception = faults.Conflict |
|
534 | 536 |
else: |
535 | 537 |
raise ValueError("Unknown category: %s" % category) |
536 | 538 |
|
... | ... | |
540 | 542 |
if type(network_ids) not in (list, tuple): |
541 | 543 |
network_ids = [network_ids] |
542 | 544 |
|
545 |
error_msgs = [] |
|
543 | 546 |
for network_id in network_ids: |
544 | 547 |
try: |
545 | 548 |
ports.append(_port_from_setting(user_id, network_id, category)) |
549 |
# Port successfully created in one of the networks. Skip the |
|
550 |
# the rest. |
|
546 | 551 |
break |
547 |
except faults.Conflict: |
|
548 |
# Try all network IDs in the network group |
|
549 |
pass |
|
552 |
except faults.Conflict as e: |
|
553 |
if len(network_ids) == 1: |
|
554 |
raise exception(e.message) |
|
555 |
else: |
|
556 |
error_msgs.append(e.message) |
|
557 |
|
|
558 |
if category == "admin": |
|
559 |
log.error("Cannot connect server to forced networks '%s': %s", |
|
560 |
network_ids, error_msgs) |
|
561 |
raise exception("Cannot connect server to forced server networks.") |
|
562 |
else: |
|
563 |
log.debug("Cannot connect server to default networks '%s': %s", |
|
564 |
network_ids, error_msgs) |
|
565 |
raise exception("Cannot connect server to default server" |
|
566 |
" networks.") |
|
550 | 567 |
|
551 |
# Diffrent exception for each category! |
|
552 |
if category == "admin": |
|
553 |
exception = faults.ServiceUnavailable |
|
554 |
else: |
|
555 |
exception = faults.Conflict |
|
556 |
raise exception("Cannot connect instance to any of the following" |
|
557 |
" networks %s" % network_ids) |
|
558 | 568 |
return ports |
559 | 569 |
|
560 | 570 |
|
... | ... | |
567 | 577 |
elif network_id == "SNF:ANY_PUBLIC": |
568 | 578 |
try: |
569 | 579 |
return create_public_ipv4_port(user_id, category=category) |
570 |
except faults.Conflict: |
|
571 |
return create_public_ipv6_port(user_id, category=category) |
|
580 |
except faults.Conflict as e1: |
|
581 |
try: |
|
582 |
return create_public_ipv6_port(user_id, category=category) |
|
583 |
except faults.Conflict as e2: |
|
584 |
log.error("Failed to connect server to a public IPv4 or IPv6" |
|
585 |
" network. IPv4: %s, IPv6: %s", e1, e2) |
|
586 |
msg = ("Cannot connect server to a public IPv4 or IPv6" |
|
587 |
" network.") |
|
588 |
raise faults.Conflict(msg) |
|
572 | 589 |
else: # Case of network ID |
573 | 590 |
if category in ["user", "default"]: |
574 | 591 |
return _port_for_request(user_id, {"uuid": network_id}) |
Also available in: Unified diff