def handle(self, *args, **options): """ Finds zombies and kills them. """ self.log("Starting kill_zombies") # Set options self.region = options.get("region") self.dry_run = options.get("dry_run", False) # Start nova up and get the list of servers nova = openstack_utils.get_nova_client(self.region) nova_servers = nova.servers.list() if not nova_servers: self.log('No servers found in region {}.'.format(self.region)) return None self.log('Found {} unterminated servers in region {}.'.format(len(nova_servers), self.region)) # Scan each server for the zombieness. death_count = sum(1 for srv in nova_servers if self.not_zombie_or_die(srv)) if self.dry_run: result = "Would have terminated {} zombies if this weren't a dry run.".format(death_count) else: result = "Terminated {} zombies.".format(death_count) self.log(result) return result
def test_nova_client_connection_error(self, mock_request, mock_getresponse, mock_retry_sleep): """ Connection error during a request from the nova client Ensure requests are retried before giving up, with a backoff sleep between attempts """ def getresponse_call(*args, **kwargs): """ Invoked by the nova client when making a HTTP request (via requests/urllib3) """ raise ConnectionResetError('[Errno 104] Connection reset by peer') mock_getresponse.side_effect = getresponse_call nova = openstack_utils.get_nova_client(settings.OPENSTACK_REGION) with self.assertRaises(keystoneauth1.exceptions.discovery.DiscoveryFailure): nova.servers.get('test-id') self.assertEqual(mock_getresponse.call_count, 11) self.assertEqual(mock_retry_sleep.call_count, 10)
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.nova = openstack_utils.get_nova_client(self.openstack_region)