in hostfactory/host_provider/src/cyclecloud_provider.py [0:0]
def status(self, input_json):
'''
Kludge: can't seem to get provider.json to reliably call the correct request action.
'''
creates = [x for x in input_json["requests"] if not x["requestId"].startswith("delete-")]
deletes = [x for x in input_json["requests"] if x["requestId"].startswith("delete-")]
create_response = {}
delete_response = {}
if creates:
create_response = self._create_status({"requests": creates}, quiet_output())
assert "status" in create_response
if deletes:
delete_response = self._terminate_status({"requests": deletes})
assert "status" in delete_response
# Update request tracking
if 'requests' in create_response:
for cr in create_response['requests']:
if cr['status'] in [ RequestStates.complete ]:
self.request_tracker.request_completed(cr)
create_status = create_response.get("status", RequestStates.complete)
delete_status = delete_response.get("status", RequestStates.complete)
# if either are still running, then we need to mark it as running so this will continued
# to be called
if RequestStates.running in [create_status, delete_status]:
combined_status = RequestStates.running
# if one completed with error, then they both did.
elif RequestStates.complete_with_error in [create_status, delete_status]:
combined_status = RequestStates.complete_with_error
else:
combined_status = RequestStates.complete
response = {"status": combined_status,
"requests": create_response.get("requests", []) + delete_response.get("requests", [])
}
return self.stdout_handler.handle(response)