11fcb6
From bfd8d181d45a22731ae5b1f05f3cb9488a2c7939 Mon Sep 17 00:00:00 2001
11fcb6
Message-Id: <bfd8d181d45a22731ae5b1f05f3cb9488a2c7939@dist-git>
11fcb6
From: Peter Krempa <pkrempa@redhat.com>
11fcb6
Date: Tue, 14 Jun 2022 13:23:29 +0200
11fcb6
Subject: [PATCH] domain_validate: Split out validation of disk startup policy
11fcb6
MIME-Version: 1.0
11fcb6
Content-Type: text/plain; charset=UTF-8
11fcb6
Content-Transfer-Encoding: 8bit
11fcb6
11fcb6
Move the code into 'virDomainDiskDefValidateStartupPolicy' which will be
11fcb6
later reused in the qemu driver.
11fcb6
11fcb6
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
11fcb6
Reviewed-by: Ján Tomko <jtomko@redhat.com>
11fcb6
(cherry picked from commit 3603a18bcec18842cedecbd8329723062b87795c)
11fcb6
https://bugzilla.redhat.com/show_bug.cgi?id=2095758
11fcb6
https://bugzilla.redhat.com/show_bug.cgi?id=2109571
11fcb6
---
11fcb6
 src/conf/domain_validate.c | 45 ++++++++++++++++++++++++--------------
11fcb6
 src/conf/domain_validate.h |  2 ++
11fcb6
 src/libvirt_private.syms   |  1 +
11fcb6
 3 files changed, 31 insertions(+), 17 deletions(-)
11fcb6
11fcb6
diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c
11fcb6
index 452742e67c..bfff7339ef 100644
11fcb6
--- a/src/conf/domain_validate.c
11fcb6
+++ b/src/conf/domain_validate.c
11fcb6
@@ -598,6 +598,32 @@ virDomainDiskDefSourceLUNValidate(const virStorageSource *src)
11fcb6
 }
11fcb6
 
11fcb6
 
11fcb6
+int
11fcb6
+virDomainDiskDefValidateStartupPolicy(const virDomainDiskDef *disk)
11fcb6
+{
11fcb6
+    if (disk->startupPolicy == VIR_DOMAIN_STARTUP_POLICY_DEFAULT)
11fcb6
+        return 0;
11fcb6
+
11fcb6
+    if (disk->src->type == VIR_STORAGE_TYPE_NETWORK) {
11fcb6
+        virReportError(VIR_ERR_XML_ERROR,
11fcb6
+                       _("disk startupPolicy '%s' is not allowed for disk of '%s' type"),
11fcb6
+                       virDomainStartupPolicyTypeToString(disk->startupPolicy),
11fcb6
+                       virStorageTypeToString(disk->src->type));
11fcb6
+        return -1;
11fcb6
+    }
11fcb6
+
11fcb6
+    if (disk->device != VIR_DOMAIN_DISK_DEVICE_CDROM &&
11fcb6
+        disk->device != VIR_DOMAIN_DISK_DEVICE_FLOPPY &&
11fcb6
+        disk->startupPolicy == VIR_DOMAIN_STARTUP_POLICY_REQUISITE) {
11fcb6
+        virReportError(VIR_ERR_XML_ERROR, "%s",
11fcb6
+                       _("disk startupPolicy 'requisite' is allowed only for cdrom or floppy"));
11fcb6
+        return -1;
11fcb6
+    }
11fcb6
+
11fcb6
+    return 0;
11fcb6
+}
11fcb6
+
11fcb6
+
11fcb6
 static int
11fcb6
 virDomainDiskDefValidate(const virDomainDef *def,
11fcb6
                          const virDomainDiskDef *disk)
11fcb6
@@ -775,23 +801,8 @@ virDomainDiskDefValidate(const virDomainDef *def,
11fcb6
         return -1;
11fcb6
     }
11fcb6
 
11fcb6
-    if (disk->startupPolicy != VIR_DOMAIN_STARTUP_POLICY_DEFAULT) {
11fcb6
-        if (disk->src->type == VIR_STORAGE_TYPE_NETWORK) {
11fcb6
-            virReportError(VIR_ERR_XML_ERROR,
11fcb6
-                           _("disk startupPolicy '%s' is not allowed for disk of '%s' type"),
11fcb6
-                           virDomainStartupPolicyTypeToString(disk->startupPolicy),
11fcb6
-                           virStorageTypeToString(disk->src->type));
11fcb6
-            return -1;
11fcb6
-        }
11fcb6
-
11fcb6
-        if (disk->device != VIR_DOMAIN_DISK_DEVICE_CDROM &&
11fcb6
-            disk->device != VIR_DOMAIN_DISK_DEVICE_FLOPPY &&
11fcb6
-            disk->startupPolicy == VIR_DOMAIN_STARTUP_POLICY_REQUISITE) {
11fcb6
-            virReportError(VIR_ERR_XML_ERROR, "%s",
11fcb6
-                           _("disk startupPolicy 'requisite' is allowed only for cdrom or floppy"));
11fcb6
-            return -1;
11fcb6
-        }
11fcb6
-    }
11fcb6
+    if (virDomainDiskDefValidateStartupPolicy(disk) < 0)
11fcb6
+        return -1;
11fcb6
 
11fcb6
     if (disk->wwn && !virValidateWWN(disk->wwn))
11fcb6
         return -1;
11fcb6
diff --git a/src/conf/domain_validate.h b/src/conf/domain_validate.h
11fcb6
index 430d61fd3c..07b99195e3 100644
11fcb6
--- a/src/conf/domain_validate.h
11fcb6
+++ b/src/conf/domain_validate.h
11fcb6
@@ -41,4 +41,6 @@ int virDomainDeviceDefValidate(const virDomainDeviceDef *dev,
11fcb6
 
11fcb6
 int virDomainDiskDefValidateSource(const virStorageSource *src);
11fcb6
 
11fcb6
+int virDomainDiskDefValidateStartupPolicy(const virDomainDiskDef *disk);
11fcb6
+
11fcb6
 int virDomainDiskDefSourceLUNValidate(const virStorageSource *src);
11fcb6
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
11fcb6
index 2c42e2a5e8..5b7a056151 100644
11fcb6
--- a/src/libvirt_private.syms
11fcb6
+++ b/src/libvirt_private.syms
11fcb6
@@ -777,6 +777,7 @@ virDomainActualNetDefValidate;
11fcb6
 virDomainDefValidate;
11fcb6
 virDomainDeviceValidateAliasForHotplug;
11fcb6
 virDomainDiskDefSourceLUNValidate;
11fcb6
+virDomainDiskDefValidateStartupPolicy;
11fcb6
 
11fcb6
 
11fcb6
 # conf/interface_conf.h
11fcb6
-- 
11fcb6
2.35.1
11fcb6