From 6c4130754b183c929b5092bab516c6391974ddcb Mon Sep 17 00:00:00 2001 From: Pengpeng Sun Date: Wed, 27 Aug 2025 14:19:58 +0800 Subject: [PATCH 1/2] Handle new cloud-init error code and status RH-Author: Ani Sinha RH-MergeRequest: 12: Handle new cloud-init error code and status RH-Jira: RHEL-99781 RH-Acked-by: xiachen RH-Acked-by: Miroslav Rezanina RH-Commit: [1/1] 40a705507363b9e508fcc50250d51c8eca7e81a3 (anisinha/centos-open-vm-tools) - A new error code [1] was introduced in cloud-init v23.4, RedHat team reported that our OVT code shall handle this new error code properly, see https://github.com/vmware/open-vm-tools/issues/768. This change follows the backwards-compatible way in https://cloudinit.readthedocs.io/en/latest/explanation/return_codes.html to check 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 details in https://github.com/canonical/cloud-init/commit/d175170aedc1398b85ac767573b8773a5a2e7c6f. This change adds "not started" match to CLOUDINIT_STATUS_NOT_RUN. This patch was sent by John Wolfe over email and has been pushed upstream here: https://github.com/vmware/open-vm-tools/blob/Handle-new-cloud-init-error-code.patch/ Addresses open-vm-tools issue https://github.com/vmware/open-vm-tools/issues/768 This change has been tested internally by Amy Chen and is seen to fix the original issue. 1. https://cloudinit.readthedocs.io/en/latest/explanation/failure_states.html#error-codes Signed-off-by: Ani Sinha --- open-vm-tools/libDeployPkg/linuxDeployment.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/open-vm-tools/libDeployPkg/linuxDeployment.c b/open-vm-tools/libDeployPkg/linuxDeployment.c index 44cac8ef..82e83957 100644 --- a/open-vm-tools/libDeployPkg/linuxDeployment.c +++ b/open-vm-tools/libDeployPkg/linuxDeployment.c @@ -1313,6 +1313,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"; @@ -1326,13 +1327,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; -- 2.47.3