]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
daemon: add option to read host uuid from /etc/machine-id
authorNikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
Tue, 3 May 2016 09:12:41 +0000 (12:12 +0300)
committerCole Robinson <crobinso@redhat.com>
Tue, 3 May 2016 12:58:30 +0000 (08:58 -0400)
Daemon config parameter switch between reading host uuid
either from smbios or machine-id:

host_uuid_source = "smbios|machine-id"

Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
daemon/libvirtd-config.c
daemon/libvirtd-config.h
daemon/libvirtd.aug
daemon/libvirtd.c
daemon/libvirtd.conf
daemon/test_libvirtd.aug.in

index 7a448f988c157ebfc3afe8bcfd8dcdcc48edd81c..45280e9febd42e43baa61da145904c404ac83992 100644 (file)
@@ -374,6 +374,7 @@ daemonConfigFree(struct daemonConfig *data)
     VIR_FREE(data->crl_file);
 
     VIR_FREE(data->host_uuid);
+    VIR_FREE(data->host_uuid_source);
     VIR_FREE(data->log_filters);
     VIR_FREE(data->log_outputs);
 
@@ -463,6 +464,7 @@ daemonConfigLoadOptions(struct daemonConfig *data,
     GET_CONF_UINT(conf, filename, audit_logging);
 
     GET_CONF_STR(conf, filename, host_uuid);
+    GET_CONF_STR(conf, filename, host_uuid_source);
 
     GET_CONF_UINT(conf, filename, log_level);
     GET_CONF_STR(conf, filename, log_filters);
index 3e1971d67f05a4f9a8c14e7315984ae229280d21..672e9ad5df76ad051b9d7fb316094d9335fb11c2 100644 (file)
@@ -28,6 +28,7 @@
 
 struct daemonConfig {
     char *host_uuid;
+    char *host_uuid_source;
 
     int listen_tls;
     int listen_tcp;
index 4d40ee2239c8b0e6fcb373ef12a97ddbacc16748..7a81723d30d106283da112c3bfc5adb4cfb74316 100644 (file)
@@ -86,6 +86,7 @@ module Libvirtd =
                              | bool_entry "admin_keepalive_required"
 
    let misc_entry = str_entry "host_uuid"
+                  | str_entry "host_uuid_source"
 
    (* Each enty in the config is one of the following three ... *)
    let entry = network_entry
index f5d1e2fcd292eabfae31be95415df2bdfbc7f684..f0fdaedb747257f6f6265b7be154bfe48ef20e14 100644 (file)
@@ -1076,6 +1076,39 @@ static int migrateProfile(void)
     return ret;
 }
 
+static int
+daemonSetupHostUUID(const struct daemonConfig *config)
+{
+    static const char *machine_id = "/etc/machine-id";
+    char buf[VIR_UUID_STRING_BUFLEN];
+    const char *uuid;
+
+    if (config->host_uuid) {
+        uuid = config->host_uuid;
+    } else if (!config->host_uuid_source ||
+               STREQ(config->host_uuid_source, "smbios")) {
+        /* smbios UUID is fetched on demand in virGetHostUUID */
+        return 0;
+    } else if (STREQ(config->host_uuid_source, "machine-id")) {
+        if (virFileReadBufQuiet(machine_id, buf, sizeof(buf)) < 0) {
+            VIR_ERROR(_("Can't read %s"), machine_id);
+            return -1;
+        }
+
+        uuid = buf;
+    } else {
+        VIR_ERROR(_("invalid UUID source: %s"), config->host_uuid_source);
+        return -1;
+    }
+
+    if (virSetHostUUIDStr(uuid)) {
+        VIR_ERROR(_("invalid host UUID: %s"), uuid);
+        return -1;
+    }
+
+    return 0;
+}
+
 /* Print command-line usage. */
 static void
 daemonUsage(const char *argv0, bool privileged)
@@ -1295,9 +1328,8 @@ int main(int argc, char **argv) {
         exit(EXIT_FAILURE);
     }
 
-    if (config->host_uuid &&
-        virSetHostUUIDStr(config->host_uuid) < 0) {
-        VIR_ERROR(_("invalid host UUID: %s"), config->host_uuid);
+    if (daemonSetupHostUUID(config) < 0) {
+        VIR_ERROR(_("Can't setup host uuid"));
         exit(EXIT_FAILURE);
     }
 
index d2c439c72256973d2190cc4bddabc3a660efe034..1c1fa7fe3aa79bc0dcf8684a7627eb6c333f22d2 100644 (file)
 
 ###################################################################
 # UUID of the host:
-# Provide the UUID of the host here in case the command
-# 'dmidecode -s system-uuid' does not provide a valid uuid. In case
-# 'dmidecode' does not provide a valid UUID and none is provided here, a
-# temporary UUID will be generated.
+# Host UUID is read from one of the sources specified in host_uuid_source.
+#
+# - 'smbios': fetch the UUID from 'dmidecode -s system-uuid'
+# - 'machine-id': fetch the UUID from /etc/machine-id
+#
+# The host_uuid_source default is 'smbios'. If 'dmidecode' does not provide
+# a valid UUID a temporary UUID will be generated.
+#
+# Another option is to specify host UUID in host_uuid.
+#
 # Keep the format of the example UUID below. UUID must not have all digits
 # be the same.
 
 # it with the output of the 'uuidgen' command and then
 # uncomment this entry
 #host_uuid = "00000000-0000-0000-0000-000000000000"
+#host_uuid_source = "smbios"
 
 ###################################################################
 # Keepalive protocol:
index b0cb7eb1492027b4369a90ed206bc4841064b05b..7a036034b64c98fa8f98c4735177e3450cd41010 100644 (file)
@@ -55,6 +55,7 @@ module Test_libvirtd =
         { "audit_level" = "2" }
         { "audit_logging" = "1" }
         { "host_uuid" = "00000000-0000-0000-0000-000000000000" }
+        { "host_uuid_source" = "smbios" }
         { "keepalive_interval" = "5" }
         { "keepalive_count" = "5" }
         { "keepalive_required" = "1" }