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