Revision 81814446 snf-tools/synnefo_tools/burnin/cyclades_common.py

b/snf-tools/synnefo_tools/burnin/cyclades_common.py
452 452
        # Verify quotas
453 453
        self._check_quotas(network=-len(networks))
454 454

  
455
    def _get_public_network(self, networks=None):
456
        """Get the public network"""
455
    def _get_public_networks(self, networks=None):
456
        """Get the public networks"""
457 457
        if networks is None:
458 458
            networks = self._get_list_of_networks(detail=True)
459
        self.info("Getting the public network")
459
        self.info("Getting the public networks")
460
        public_networks = []
460 461
        for net in networks:
461 462
            if net['SNF:floating_ip_pool'] and net['public']:
462
                return net
463
        self.fail("Could not find a public network to use")
463
                public_networks.append(net)
464

  
465
        self.assertNotEqual(public_networks, [],
466
                            "Could not find a public network to use")
467
        return public_networks
464 468

  
465 469
    def _create_floating_ip(self):
466 470
        """Create a new floating ip"""
467
        pub_net = self._get_public_network()
468
        self.info("Creating a new floating ip for network with id %s",
469
                  pub_net['id'])
470
        fip = self.clients.network.create_floatingip(pub_net['id'])
471
        # Verify that floating ip has been created
472
        fips = self.clients.network.list_floatingips()
473
        fips = [f['id'] for f in fips]
474
        self.assertIn(fip['id'], fips)
475
        # Verify quotas
476
        self._check_quotas(ip=+1)
477
        # Check that IP is IPv4
478
        self.assertEquals(IPy.IP(fip['floating_ip_address']).version(), 4)
471
        pub_nets = self._get_public_networks()
472
        for pub_net in pub_nets:
473
            self.info("Creating a new floating ip for network with id %s",
474
                      pub_net['id'])
475
            try:
476
                fip = self.clients.network.create_floatingip(pub_net['id'])
477
            except ClientError as err:
478
                self.warning("%s: %s", err.message, err.details)
479
                continue
480
            # Verify that floating ip has been created
481
            fips = self.clients.network.list_floatingips()
482
            fips = [f['id'] for f in fips]
483
            self.assertIn(fip['id'], fips)
484
            # Verify quotas
485
            self._check_quotas(ip=+1)
486
            # Check that IP is IPv4
487
            self.assertEquals(IPy.IP(fip['floating_ip_address']).version(), 4)
488

  
489
            self.info("Floating IP %s with id %s created",
490
                      fip['floating_ip_address'], fip['id'])
491
            return fip
479 492

  
480
        self.info("Floating IP %s with id %s created",
481
                  fip['floating_ip_address'], fip['id'])
482
        return fip
493
        self.fail("No more IP addresses available")
483 494

  
484 495
    def _create_port(self, network_id, device_id=None, floating_ip=None):
485 496
        """Create a new port attached to the a specific network"""
......
540 551
    def _disconnect_from_network(self, server, network=None):
541 552
        """Disconnnect server from network"""
542 553
        if network is None:
543
            # Disconnect from public network
544
            network = self._get_public_network()
554
            # Disconnect from all public networks
555
            for net in self._get_public_networks():
556
                self._disconnect_from_network(server, network=net)
557
            return
545 558

  
546 559
        lports = self.clients.network.list_ports()
547 560
        ports = []
......
569 582
        """Delete floating ips"""
570 583
        # Renew the list of floating IP objects
571 584
        # (It may have been changed, i.e. a port may have been deleted).
585
        if not fips:
586
            return
572 587
        fip_ids = [f['id'] for f in fips]
573 588
        new_fips = [f for f in self.clients.network.list_floatingips()
574 589
                    if f['id'] in fip_ids]

Also available in: Unified diff