def mark_software_not_available(software, version): url = ("{master_api}/agents/{agent}/software/{software}/" "versions/{version}").format( master_api=config.get("master_api"), agent=config.get("agent_id"), software=software, version=version) while True: try: response = yield delete_direct(url) except Exception as error: delay = http_retry_delay() logger.error( "Failed to remove software %s, version %s from this " "agent on master: %r. Will retry in %s seconds.", software, version, error, delay) deferred = Deferred() reactor.callLater(delay, deferred.callback, None) yield deferred else: data = yield treq.content(response) if response.code in [OK, ACCEPTED, NO_CONTENT]: logger.info("Removed software %s, version %s from this " "agent on master.", software, version) break elif response.code >= INTERNAL_SERVER_ERROR: delay = http_retry_delay() logger.warning( "Could not remove software %s, version %s from " "this agent. The master responded with " "INTERNAL_SERVER_ERROR. Retrying in %s " "seconds.", software, version, delay) deferred = Deferred() reactor.callLater(delay, deferred.callback, None) yield deferred else: logger.error( "Failed to remove software %s, version %s from " "this agent: " "Unexpected status from server %s. Data: %s", software, version, response.code, data) break if self.testing: self.operation_deferred.callback(None)
def delete(self, url, **kwargs): return delete_direct(self.get_url(url), **kwargs)