The CH driver needs "cloud-hypervisor" binary. And if none was
found then the initialization of the driver fails as
chStateInitialize() returns VIR_DRV_STATE_INIT_ERROR. This in
turn means that whole daemon fails to initialize. Let's return
VIR_DRV_STATE_INIT_SKIPPED in this particular case, which
disables the CH drvier but lets the daemon run.
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
src/ch/ch_conf.c | 6 +++++-
src/ch/ch_driver.c | 15 +++++++++++----
2 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/src/ch/ch_conf.c b/src/ch/ch_conf.c
index dfebc8525a..b2812de7ad 100644
--- a/src/ch/ch_conf.c
+++ b/src/ch/ch_conf.c
@@ -199,8 +199,12 @@ chExtractVersion(virCHDriver *driver)
char *help = NULL;
char *tmp = NULL;
g_autofree char *ch_cmd = g_find_program_in_path(CH_CMD);
- virCommand *cmd = virCommandNewArgList(ch_cmd, "--version", NULL);
+ virCommand *cmd = NULL;
+ if (!ch_cmd)
+ return -2;
+
+ cmd = virCommandNewArgList(ch_cmd, "--version", NULL);
virCommandAddEnvString(cmd, "LC_ALL=C");
virCommandSetOutputBuffer(cmd, &help);
diff --git a/src/ch/ch_driver.c b/src/ch/ch_driver.c
index 7d1e97098a..8c458a20bd 100644
--- a/src/ch/ch_driver.c
+++ b/src/ch/ch_driver.c
@@ -836,6 +836,9 @@ static int chStateInitialize(bool privileged,
virStateInhibitCallback callback G_GNUC_UNUSED,
void *opaque G_GNUC_UNUSED)
{
+ int ret = VIR_DRV_STATE_INIT_ERROR;
+ int rv;
+
if (root != NULL) {
virReportError(VIR_ERR_INVALID_ARG, "%s",
_("Driver does not support embedded mode"));
@@ -861,14 +864,18 @@ static int chStateInitialize(bool privileged,
if (!(ch_driver->config = virCHDriverConfigNew(privileged)))
goto cleanup;
- if (chExtractVersion(ch_driver) < 0)
+ if ((rv = chExtractVersion(ch_driver)) < 0) {
+ if (rv == -2)
+ ret = VIR_DRV_STATE_INIT_SKIPPED;
goto cleanup;
+ }
- return VIR_DRV_STATE_INIT_COMPLETE;
+ ret = VIR_DRV_STATE_INIT_COMPLETE;
cleanup:
- chStateCleanup();
- return VIR_DRV_STATE_INIT_ERROR;
+ if (ret != VIR_DRV_STATE_INIT_COMPLETE)
+ chStateCleanup();
+ return ret;
}
/* Function Tables */
--
2.31.1