Blame SOURCES/0058-ovirt-foreign-menu-Bypass-errors-from-Host-Cluster-D.patch

427fab
From f7f487b4490793eb54a276103eae7a17c829b2b4 Mon Sep 17 00:00:00 2001
427fab
From: "Eduardo Lima (Etrunko)" <etrunko@redhat.com>
427fab
Date: Fri, 6 Jul 2018 09:12:18 -0300
427fab
Subject: [PATCH virt-viewer] ovirt-foreign-menu: Bypass errors from
427fab
 Host/Cluster/Data Center
427fab
427fab
When accessing ovirt as a regular user, it may happen that queries to
427fab
Hosts, Clusters and Data Centers return errors due to insufficient
427fab
permissions, while they will work fine if access is done by admin user.
427fab
In this case, we skip the errors and fallback to the old method.
427fab
427fab
Signed-off-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
427fab
---
427fab
 src/ovirt-foreign-menu.c | 51 ++++++++++++++++++++++++++++++----------
427fab
 1 file changed, 39 insertions(+), 12 deletions(-)
427fab
427fab
diff --git a/src/ovirt-foreign-menu.c b/src/ovirt-foreign-menu.c
427fab
index b8ad179..451b116 100644
427fab
--- a/src/ovirt-foreign-menu.c
427fab
+++ b/src/ovirt-foreign-menu.c
427fab
@@ -621,12 +621,21 @@ static void ovirt_foreign_menu_fetch_vm_cdrom_async(OvirtForeignMenu *menu,
427fab
 
427fab
 #ifdef HAVE_OVIRT_DATA_CENTER
427fab
 static gboolean storage_domain_attached_to_data_center(OvirtStorageDomain *domain,
427fab
-                                                      OvirtDataCenter *data_center)
427fab
+                                                       OvirtDataCenter *data_center)
427fab
 {
427fab
     GStrv data_center_ids;
427fab
     char *data_center_guid;
427fab
     gboolean match;
427fab
 
427fab
+    /* For some reason we did not get data center information, so just return
427fab
+     * TRUE as it will work like a fallback to old method, where we did not
427fab
+     * check relationship between data center and storage domain.
427fab
+     */
427fab
+    if (data_center == NULL) {
427fab
+        g_debug("Could not get data center info, considering storage domain is attached to it");
427fab
+        return TRUE;
427fab
+    }
427fab
+
427fab
     g_object_get(domain, "data-center-ids", &data_center_ids, NULL);
427fab
     g_object_get(data_center, "guid", &data_center_guid, NULL);
427fab
     match = g_strv_contains((const gchar * const *) data_center_ids, data_center_guid);
427fab
@@ -725,9 +734,6 @@ static void data_center_fetched_cb(GObject *source_object,
427fab
     ovirt_resource_refresh_finish(resource, result, &error);
427fab
     if (error != NULL) {
427fab
         g_debug("failed to fetch Data Center: %s", error->message);
427fab
-        g_task_return_error(task, error);
427fab
-        g_object_unref(task);
427fab
-        return;
427fab
     }
427fab
 
427fab
     ovirt_foreign_menu_next_async_step(menu, task, STATE_DATA_CENTER);
427fab
@@ -742,6 +748,12 @@ static void ovirt_foreign_menu_fetch_data_center_async(OvirtForeignMenu *menu,
427fab
     g_return_if_fail(OVIRT_IS_CLUSTER(menu->priv->cluster));
427fab
 
427fab
     menu->priv->data_center = ovirt_cluster_get_data_center(menu->priv->cluster);
427fab
+
427fab
+    if (menu->priv->data_center == NULL) {
427fab
+        ovirt_foreign_menu_next_async_step(menu, task, STATE_DATA_CENTER);
427fab
+        return;
427fab
+    }
427fab
+
427fab
     ovirt_resource_refresh_async(OVIRT_RESOURCE(menu->priv->data_center),
427fab
                                  menu->priv->proxy,
427fab
                                  g_task_get_cancellable(task),
427fab
@@ -762,9 +774,6 @@ static void cluster_fetched_cb(GObject *source_object,
427fab
     ovirt_resource_refresh_finish(resource, result, &error);
427fab
     if (error != NULL) {
427fab
         g_debug("failed to fetch Cluster: %s", error->message);
427fab
-        g_task_return_error(task, error);
427fab
-        g_object_unref(task);
427fab
-        return;
427fab
     }
427fab
 
427fab
     ovirt_foreign_menu_next_async_step(menu, task, STATE_CLUSTER);
427fab
@@ -776,9 +785,21 @@ static void ovirt_foreign_menu_fetch_cluster_async(OvirtForeignMenu *menu,
427fab
 {
427fab
     g_return_if_fail(OVIRT_IS_FOREIGN_MENU(menu));
427fab
     g_return_if_fail(OVIRT_IS_PROXY(menu->priv->proxy));
427fab
-    g_return_if_fail(OVIRT_IS_HOST(menu->priv->host));
427fab
 
427fab
-    menu->priv->cluster = ovirt_host_get_cluster(menu->priv->host);
427fab
+    /* If there is no host information, we get cluster from the VM */
427fab
+    if (menu->priv->host == NULL) {
427fab
+        g_return_if_fail(OVIRT_IS_VM(menu->priv->vm));
427fab
+        menu->priv->cluster = ovirt_vm_get_cluster(menu->priv->vm);
427fab
+    } else {
427fab
+        g_return_if_fail(OVIRT_IS_HOST(menu->priv->host));
427fab
+        menu->priv->cluster = ovirt_host_get_cluster(menu->priv->host);
427fab
+    }
427fab
+
427fab
+    if (menu->priv->cluster == NULL) {
427fab
+        ovirt_foreign_menu_next_async_step(menu, task, STATE_CLUSTER);
427fab
+        return;
427fab
+    }
427fab
+
427fab
     ovirt_resource_refresh_async(OVIRT_RESOURCE(menu->priv->cluster),
427fab
                                  menu->priv->proxy,
427fab
                                  g_task_get_cancellable(task),
427fab
@@ -799,9 +820,6 @@ static void host_fetched_cb(GObject *source_object,
427fab
     ovirt_resource_refresh_finish(resource, result, &error);
427fab
     if (error != NULL) {
427fab
         g_debug("failed to fetch Host: %s", error->message);
427fab
-        g_task_return_error(task, error);
427fab
-        g_object_unref(task);
427fab
-        return;
427fab
     }
427fab
 
427fab
     ovirt_foreign_menu_next_async_step(menu, task, STATE_HOST);
427fab
@@ -816,6 +834,15 @@ static void ovirt_foreign_menu_fetch_host_async(OvirtForeignMenu *menu,
427fab
     g_return_if_fail(OVIRT_IS_VM(menu->priv->vm));
427fab
 
427fab
     menu->priv->host = ovirt_vm_get_host(menu->priv->vm);
427fab
+
427fab
+    /* In some cases the VM XML does not include host information, so we just
427fab
+     * skip to the next step
427fab
+     */
427fab
+    if (menu->priv->host == NULL) {
427fab
+        ovirt_foreign_menu_next_async_step(menu, task, STATE_HOST);
427fab
+        return;
427fab
+    }
427fab
+
427fab
     ovirt_resource_refresh_async(OVIRT_RESOURCE(menu->priv->host),
427fab
                                  menu->priv->proxy,
427fab
                                  g_task_get_cancellable(task),
427fab
-- 
427fab
2.20.1
427fab