Skip to main content

Distribution error codes

Structured per-target error codes emitted by every distribution module, the error class each code maps to, and which classes the fan-out per-target retry re-attempts. Codes appear in the error_code field of the per-target results (last_target_results) on the distribution and in job logs.

Error classes

Retry policy is based on a normalized error class, not on raw error strings. Each code maps to one of five classes; only the first two are re-attempted by fan-out per-target retry.

ClassMeaningRetried by fan-out?
networkTimeout, connect failure, DNS resolution failure.Yes
io_transientBroken pipe, connection reset, transient SFTP/API failure — likely to succeed on retry.Yes
io_permanentRemote permission denied, no space left, quota/ownership conflicts — operator action needed.No
authSSH/API authentication failure, credential rejected.No
validationCert/key mismatch, invalid path, missing target — the request itself is wrong.No
note

A code that is not mapped to any class (and where the module did not set a class itself) is treated as not retryable.

Cross-module codes

CodeClassMeaning
CREDENTIAL_MISSINGauthThe module credential referenced by the target could not be resolved.

SSH

CodeClassMeaning
SSH_CONNECTnetworkTCP/SSH connection to the target failed.
SSH_AUTHauthSSH authentication rejected (key or password).
SFTP_FAILEDio_transientSFTP session could not be opened or an SFTP operation failed.
FILE_UPLOADio_transientWriting a PathSet file on the target failed.
SCRIPT_EXIT_NONZEROio_transientThe ActionSet script ran but exited with a non-zero status.
SCRIPT_FAILEDio_transientThe ActionSet script could not be executed.

Webhook

CodeClassMeaning
WEBHOOK_CONNECTnetworkThe webhook endpoint could not be reached.
WEBHOOK_NON_2XXio_transientThe endpoint answered with a non-2xx HTTP status.

Kubernetes

CodeClassMeaning
K8S_CONNECTnetworkThe API server could not be reached.
K8S_FORBIDDENauthRBAC denied the secret create/update.
K8S_NOT_FOUNDvalidationNamespace or referenced object does not exist.
K8S_APPLY_FAILEDio_transientApplying the Secret failed for another reason.

NetScaler

CodeClassMeaning
NETSCALER_CONNECTnetworkNITRO API unreachable.
NETSCALER_AUTHauthNITRO login rejected.
NETSCALER_UPLOADio_transientUploading the cert/key files failed.
NETSCALER_UPDATEio_transientUpdating the certkey object failed.
NETSCALER_NOT_FOUNDvalidationThe certkey / vserver referenced does not exist.
NETSCALER_LINKio_transientLinking the certificate to the CA chain failed.
NETSCALER_CHAINio_transientInstalling the chain certificate failed.
NETSCALER_OWNERSHIPio_permanentThe object exists but is not managed by CertAutoPilot — refusing to overwrite.

Huawei Cloud

CodeClassMeaning
HUAWEICLOUD_CONNECTnetworkHuawei Cloud API unreachable.
HUAWEICLOUD_AUTHauthAK/SK authentication rejected.
HUAWEICLOUD_NOT_FOUNDvalidationThe referenced certificate/listener resource does not exist.
HUAWEICLOUD_CONFLICTio_permanentName/state conflict — e.g. ambiguous name lookup matched multiple certificates.
HUAWEICLOUD_QUOTAio_transientAPI quota / rate limit hit.

F5 BIG-IP

CodeClassMeaning
F5BIGIP_CONNECTnetworkiControl REST unreachable.
F5BIGIP_AUTHauthAuthentication rejected.
F5BIGIP_UPLOADio_transientUploading cert/key files failed.
F5BIGIP_UPDATEio_transientUpdating objects (including the update transaction commit) failed.
F5BIGIP_NOT_FOUNDvalidationReferenced object does not exist.
F5BIGIP_CHAINio_transientInstalling the chain bundle failed.
F5BIGIP_OWNERSHIPio_permanentObject exists but is not managed by CertAutoPilot.
F5BIGIP_PROFILEio_permanentClient-SSL profile create/update failed.

HashiCorp Vault

CodeClassMeaning
VAULT_CONNECT_FAILEDnetworkVault unreachable.
VAULT_AUTH_FAILEDauthToken/AppRole authentication rejected.
VAULT_READ_FAILEDio_transientReading the existing secret failed.
VAULT_WRITE_FAILEDio_transientWriting the secret failed.
VAULT_VALIDATE_FAILEDvalidationPost-write validation of the stored material failed.
VAULT_PATH_INVALIDvalidationThe configured KV path is invalid.
VAULT_ROLLBACK_FAILEDio_transientKV v2 version-restore during rollback failed.

Windows (generic WinRM)

CodeClassMeaning
WINRM_CONNECTnetworkWinRM endpoint unreachable.
WINRM_AUTHauthNTLM / Basic / Kerberos authentication rejected.
WINRM_TIMEOUTio_transientCommand execution timed out.
WINRM_EXECio_transientActionSet command/script failed on the host.
WINRM_PS_SYNTAXvalidationThe PowerShell payload has a syntax error.
WINRM_FILEio_transientChunked file transfer / certutil decode failed.
WINRM_VALIDATIONvalidationValidationProfile check failed after deployment.
WINRM_QUOTAio_permanentWinRM quota exceeded (envelope size, concurrent shells).

Microsoft IIS

CodeClassMeaning
IIS_CONNECTnetworkWinRM connection or in-flight transport to the Windows host failed.
IIS_AUTHauthNTLM/Basic authentication rejected, or the account lacks store/binding permissions.
IIS_PFX_FAILEDvalidation / io_transientBuilding the PKCS#12 bundle locally failed (validation — cert/key problem), or uploading it over WinRM failed (io_transient — retried).
IIS_IMPORT_FAILEDio_permanentImporting the PFX into the Windows certificate store failed, or the script result could not be parsed.
IIS_BINDING_NOT_FOUNDvalidationNo HTTPS binding matched the configured filter (or, in all_sites, no binding on any non-excluded site).
IIS_BINDING_AMBIGUOUSvalidationMore than one binding matched in single mode — refusing to guess.
IIS_BINDING_FAILEDio_permanentNo bindings could be updated (including the all-matched-bindings-are-CCS case).
IIS_APPPOOL_DETECT_FAILEDvalidationDetecting the application pools to recycle failed.
IIS_APPPOOL_RECYCLE_FAILEDio_permanentRecycling one or more application pools failed (run is partial).
IIS_VALIDATE_STOREvalidationPost-deploy check of the certificate store failed.
IIS_VALIDATE_BINDINGvalidation / io_transientPost-deploy binding check found a mismatch (validation), or the check itself failed at the transport level (io_transient — retried; the bind already succeeded).
IIS_MODULE_MISSINGvalidationA required server-side component (e.g. the WebAdministration PowerShell module) is missing.
IIS_SITE_NOT_FOUNDvalidationThe configured IIS site does not exist.

Dual-class rows: the same code covers two failure natures; the module sets the class explicitly at the failure site, so fan-out retries only the transient one.

SMTP

The SMTP module classifies by SMTP reply code and sets the class directly on the result.

CodeClassMeaning
SMTP_CONNECTnetworkTCP dial / DNS failure before any SMTP conversation.
SMTP_TLSauthTLS handshake or certificate-trust failure (STARTTLS/SMTPS).
SMTP_AUTHauthAuthentication rejected (reply 530/534/535/538).
SMTP_TRANSIENTio_transientTemporary server condition (421/450/451/452/454, other 4xx, or unclassifiable errors).
SMTP_PERMANENTio_permanentPermanent rejection (550/552/554, other 5xx) — operator action needed.
SMTP_VALIDATIONvalidationThe request was malformed (500/501/503/553).
SMTP_PAYLOADvalidationBuilding the PEM / PKCS#12 attachment failed before sending.

AWS ACM

The AWS ACM module classifies AWS SDK errors itself, so one code can map to more than one class depending on the underlying cause.

CodeClassMeaning
AWS_CONNECTnetwork (dial/timeout) or io_transient (throttling)AWS API unreachable, or the request was throttled (Throttling, RequestLimitExceeded, TooManyRequests, SlowDown).
AWS_AUTHauthCredentials rejected (InvalidClientTokenId, SignatureDoesNotMatch, AccessDenied, UnauthorizedOperation, …).
AWS_CREDENTIALauthResolving the module credential for the target failed.
AWS_IMPORTvalidation (bad input, e.g. missing region) or io_permanent (import rejected)ImportCertificate failed or returned an unusable result.

MerlinCDN

Certificates on MerlinCDN are immutable — each deploy uploads a new cert, then binds it by re-pointing the distribution's canonical name. The codes below distinguish an upload failure (nothing bound yet) from a bind failure (a new cert was uploaded; the module best-effort deletes that orphan).

CodeClassMeaning
MERLINCDN_CONNECTnetworkMerlinCDN API unreachable.
MERLINCDN_AUTHauthPersonal access token or org/workspace headers rejected.
MERLINCDN_NOT_FOUNDvalidationThe referenced distribution or canonical name does not exist.
MERLINCDN_CONFLICTio_permanentName/state conflict on the CDN.
MERLINCDN_QUOTAio_transientAPI quota / rate limit hit.
MERLINCDN_UPLOADio_permanentUploading the new certificate failed (nothing was bound).
MERLINCDN_BINDio_permanentRe-binding the canonical name to the new certificate failed; the just-uploaded cert is best-effort removed.

See also