From: Kruti Pendharkar Date: Thu, 22 Jan 2026 04:42:54 +0000 (-0800) Subject: Handle the new cloud-init error code and status X-Git-Tag: stable-13.0.10~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ef02e35e7db9bd40734dad78063a62a559de0537;p=thirdparty%2Fopen-vm-tools.git Handle the new cloud-init error code and status - A new error code[1] was introduced in cloud-init v23.4, It was reported that the existing code should handle this new error code properly. This change follows the backwards-compatible approach as described in cloud-init documentation[2], by checking that the return code is not equal to 1. - Running status has been changed from "not run" to "not started" in cloud-init v24.1 (see [3]). This change adds a "not started" match to CLOUDINIT_STATUS_NOT_RUN to maintain compatibility. Addresses Issue: https://github.com/vmware/open-vm-tools/issues/768 [1]: https://cloudinit.readthedocs.io/en/latest/explanation/failure_states.html#error-codes [2]: https://cloudinit.readthedocs.io/en/latest/explanation/return_codes.html [3]: https://github.com/canonical/cloud-init/commit/d175170aedc1398b85ac767573b8773a5a2e7c6f --- diff --git a/open-vm-tools/libDeployPkg/linuxDeployment.c b/open-vm-tools/libDeployPkg/linuxDeployment.c index 981ea10f5..94a3890eb 100644 --- a/open-vm-tools/libDeployPkg/linuxDeployment.c +++ b/open-vm-tools/libDeployPkg/linuxDeployment.c @@ -1315,6 +1315,7 @@ static CLOUDINIT_STATUS_CODE GetCloudinitStatus() { // Cloud-init execution status messages static const char* NOT_RUN = "not run"; + static const char* NOT_STARTED = "not started"; static const char* RUNNING = "running"; static const char* DONE = "done"; static const char* ERROR = "error"; @@ -1328,13 +1329,16 @@ GetCloudinitStatus() { false, cloudinitStatusCmdOutput, MAX_LENGTH_CLOUDINIT_STATUS); - if (forkExecResult != 0) { - sLog(log_info, "Unable to get cloud-init status."); - return CLOUDINIT_STATUS_UNKNOWN; + if (forkExecResult == 1) { + sLog(log_info, "Cloud-init experienced unrecoverable error."); + return CLOUDINIT_STATUS_ERROR; } else { if (strstr(cloudinitStatusCmdOutput, NOT_RUN) != NULL) { sLog(log_info, "Cloud-init status is '%s'.", NOT_RUN); return CLOUDINIT_STATUS_NOT_RUN; + } else if (strstr(cloudinitStatusCmdOutput, NOT_STARTED) != NULL) { + sLog(log_info, "Cloud-init status is '%s'.", NOT_STARTED); + return CLOUDINIT_STATUS_NOT_RUN; } else if (strstr(cloudinitStatusCmdOutput, RUNNING) != NULL) { sLog(log_info, "Cloud-init status is '%s'.", RUNNING); return CLOUDINIT_STATUS_RUNNING;