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})
|