@@ -403,7 +403,9 @@ def request_cert(self, request, zone):
403403 status , data = self ._post (URLS .CERTIFICATE_REQUESTS , data = request_data )
404404 if status == HTTPStatus .CREATED :
405405 request .id = data ['certificateRequests' ][0 ]['id' ]
406- request .cert_guid = data ['certificateRequests' ][0 ]['certificateIds' ][0 ]
406+ if 'certificateIds' in data ['certificateRequests' ][0 ] \
407+ and len (data ['certificateRequests' ][0 ]['certificateIds' ]) > 0 :
408+ request .cert_guid = data ['certificateRequests' ][0 ]['certificateIds' ][0 ]
407409 return True
408410 else :
409411 log .error (f"unexpected server response { status } : { data } " )
@@ -413,11 +415,26 @@ def retrieve_cert(self, request):
413415 cert_status = self ._get_cert_status (request )
414416 if cert_status .status == CertStatuses .PENDING or cert_status .status == CertStatuses .REQUESTED :
415417 log .info (f"Certificate status is { cert_status .status } " )
416- return None
417- elif cert_status .status == CertStatuses .FAILED :
418+ # Time in seconds
419+ time_start = time .time ()
420+ while True :
421+ log .debug ("Waiting for certificate..." )
422+ time .sleep (3 )
423+ cert_status = self ._get_cert_status (request )
424+ if cert_status .status == CertStatuses .ISSUED :
425+ log .info (f"Certificate status is { cert_status .status } " )
426+ break
427+ elif (time .time () - time_start ) < request .timeout :
428+ continue
429+ else :
430+ raise RetrieveCertificateTimeoutError (f"Operation timed out at { request .timeout } seconds "
431+ f"while waiting for certificate with id { request .id } to be ISSUED" )
432+
433+ if cert_status .status == CertStatuses .FAILED :
418434 log .debug (f"Certificate status is { cert_status .status } . Returning data for debug" )
419435 return "Certificate FAILED"
420- elif cert_status .status == CertStatuses .ISSUED :
436+
437+ if cert_status .status == CertStatuses .ISSUED :
421438 request .cert_guid = cert_status .certificateIds [0 ]
422439 dek_info = self ._get_dek_hash (request .cert_guid )
423440 if dek_info and dek_info .public_key :
0 commit comments