Пример #1
0
    def drop(self):
        """
        Drops the All Topology, which is the topology of all the elements
        in the tenant,
        """
        nova = novaclient.Client('2', session=self.session)
        neutron = neutronclient.Client(endpoint_url=self.neutron_endpoint,
            token=self.token)
        neutron_if = NeutronIF()

        # Remove FWaaS
        logging.info('Removing FWaaS')
        try:
            for fw in neutron_if.firewall_list():
                neutron_if.firewall_delete(fw.get('id'))

            for policy in neutron_if.firewall_policy_list():
                neutron_if.firewall_policy_delete(policy.get('id'))

            for rule in neutron_if.firewall_rule_list():
                neutron_if.firewall_rule_delete(id_=rule.get('id'))
        except Exception as e:
            logging.error('ERROR at removing FWaaS')
            logging.error(e)
        else:
            logging.info('Success!')

        # Deallocate floating IPs
        logging.info('Deallocating floating IPs')
        try:
            floating_ips = nova.floating_ips.list()
            for f_ip in floating_ips:
                nova.servers.remove_floating_ip(server=f_ip.instance_id,
                                           address=f_ip.ip)
                nova.floating_ips.delete(f_ip.id)
        except Exception as e:
            logging.error('ERROR at deallocating floating IPs')
            logging.error(e)
        else:
            logging.info('Success!')

        # Delete routers
        logging.info('Deleting routers...')
        try:
            routers = neutron_if.router_list()
            for router in routers:
                id_ = router['id']
                # Delete gateway
                neutron_if.router_gateway_clear(router_id=id_)
                # Get router ports
                interfaces = neutron_if.router_port_list(router_id=id_)
                # Delete interfaces the router is connected to
                for interface in interfaces:
                    port_id = interface.get('id')
                    neutron_if.router_interface_delete(router_id=id_,
                                                       port_id=port_id)
                # Delete router
                neutron_if.router_delete(router_id=id_)
        except Exception as e:
            logging.error('Error at deleting routers')
            logging.error(e)
        else:
            logging.info('Success!')

        # Delete instances
        logging.info('Deleting instances...')
        try:
            servers = nova.servers.list()
            for server in servers:
                server.delete()
        except Exception as e:
            logging.error('Error at deleting the instances')
            logging.error(e)
        else:
            logging.info('Success!')

        time.sleep(5)

        # Delete networks
        logging.info('Deleting subnets and nets...')
        try:
            networks = neutron.list_networks()['networks']
            for network in networks:
                if network['name'] == 'ExtNet':
                    continue
                id_ = network['id']
                for subnet in network['subnets']:
                    neutron.delete_subnet(subnet)
                neutron.delete_network(id_)
        except Exception as e:
            logging.error('Error at deleting the subnets and nets')
            logging.error(e)
        else:
            logging.info('Success!')