403b09
From 7767a6befe2cc461cd6b8aadff1626108e3101b0 Mon Sep 17 00:00:00 2001
403b09
From: Pavel Vomacka <pvomacka@redhat.com>
403b09
Date: Tue, 16 Aug 2016 10:03:36 +0200
403b09
Subject: [PATCH] Add warning about only one existing CA server
403b09
403b09
It is not safe to have only one CA server in topology. Therefore there is a check
403b09
and in case that there is only one CA server a warning is shown. The warning is
403b09
shown after each refreshing of servers facet.
403b09
403b09
https://fedorahosted.org/freeipa/ticket/5828
403b09
403b09
Reviewed-By: Tomas Krizek <tkrizek@redhat.com>
403b09
---
403b09
 install/ui/src/freeipa/topology.js | 73 +++++++++++++++++++++++++++++++++++++-
403b09
 install/ui/test/data/ipa_init.json |  2 ++
403b09
 ipaserver/plugins/internal.py      |  2 ++
403b09
 3 files changed, 76 insertions(+), 1 deletion(-)
403b09
403b09
diff --git a/install/ui/src/freeipa/topology.js b/install/ui/src/freeipa/topology.js
403b09
index 7e501eb3506587ea653497d2806938890066e4f0..c33adba9a3c704b66b85689dd18e927ab975d2fe 100644
403b09
--- a/install/ui/src/freeipa/topology.js
403b09
+++ b/install/ui/src/freeipa/topology.js
403b09
@@ -28,13 +28,14 @@ define([
403b09
         './facets/Facet',
403b09
         './topology_graph',
403b09
         './navigation',
403b09
+        './widget',
403b09
         // plain imports
403b09
         './search',
403b09
         './entity'],
403b09
             function(lang, declare, Evented, Stateful, Deferred, on, all, when,
403b09
                 builder, IPA, $, menu, metadata_provider, phases, reg, rpc,
403b09
                 text, mod_details, mod_facet, mod_field, ActionMixin,
403b09
-                HeaderMixin, Facet, topology_graph, navigation) {
403b09
+                HeaderMixin, Facet, topology_graph, navigation, widget_mod) {
403b09
 /**
403b09
  * Topology module
403b09
  * @class
403b09
@@ -206,6 +207,7 @@ return {
403b09
     facets: [
403b09
            {
403b09
             $type: 'search',
403b09
+            $factory: topology.servers_search_facet,
403b09
             no_update: true,
403b09
             disable_facet_tabs: false,
403b09
             tabs_in_sidebar: true,
403b09
@@ -483,6 +485,75 @@ topology.location_adapter = declare([mod_field.Adapter], {
403b09
     }
403b09
 });
403b09
 
403b09
+topology.servers_search_facet = function(spec, no_init) {
403b09
+    spec = spec || {};
403b09
+
403b09
+    var that = IPA.search_facet(spec);
403b09
+
403b09
+    that.create_get_records_command = function(pkeys, on_success, on_error) {
403b09
+
403b09
+        var on_success_extended = function(data, text_status, xhr) {
403b09
+            // Call original on_success handler
403b09
+            on_success(data, text_status, xhr);
403b09
+
403b09
+            var result = data.result.results;
403b09
+            var counter = 0;
403b09
+
403b09
+            for (var i=0, l=result.length; i
403b09
+                var current = result[i];
403b09
+                var roles = current.result.enabled_role_servrole;
403b09
+                for (var k=0, m=roles.length; k
403b09
+                    if (roles[k] === 'CA server') counter++;
403b09
+                }
403b09
+            }
403b09
+
403b09
+            // Create dialog and show it only when there is only one CA server
403b09
+            if (counter != 1) return;
403b09
+
403b09
+            var message = text.get('@i18n:objects.servers.ca_warning_message');
403b09
+            var dialog = IPA.dialog({
403b09
+                name: 'ca_warning',
403b09
+                title: '@i18n:objects.servers.ca_warning_title',
403b09
+                sections: [
403b09
+                    {
403b09
+                        show_header: false,
403b09
+                        layout:
403b09
+                        {
403b09
+                            $factory: widget_mod.fluid_layout,
403b09
+                            widget_cls: "col-sm-12 controls",
403b09
+                            label_cls: "hide"
403b09
+                        },
403b09
+                        fields: [
403b09
+                            {
403b09
+                                field: false,
403b09
+                                $type: 'html',
403b09
+                                html: message
403b09
+                            }
403b09
+                        ]
403b09
+                    }
403b09
+                ]
403b09
+            });
403b09
+
403b09
+            dialog.create_button({
403b09
+                name: 'ok',
403b09
+                label: '@i18n:buttons.ok',
403b09
+                click: function() {
403b09
+                    dialog.close();
403b09
+                }
403b09
+            });
403b09
+
403b09
+            dialog.open();
403b09
+        };
403b09
+
403b09
+        var batch = that.table_facet_create_get_records_command(pkeys,
403b09
+                                                on_success_extended, on_error);
403b09
+
403b09
+        return batch;
403b09
+    };
403b09
+
403b09
+    return that;
403b09
+};
403b09
+
403b09
 topology.servers_facet = function(spec, no_init) {
403b09
     spec = spec || {};
403b09
 
403b09
diff --git a/install/ui/test/data/ipa_init.json b/install/ui/test/data/ipa_init.json
403b09
index 77d6fce4e9ca0cf281d89e09f803d6a1a81c6870..efaf6b649296507c3b5b78c96d64db50e087370a 100644
403b09
--- a/install/ui/test/data/ipa_init.json
403b09
+++ b/install/ui/test/data/ipa_init.json
403b09
@@ -552,6 +552,8 @@
403b09
                             "label_singular": "Server Role",
403b09
                         },
403b09
                         "servers": {
403b09
+                            "ca_warning_message": "It is strongly recommended to keep the CA services installed on more than one server.",
403b09
+                            "ca_warning_title": "Warning: Only One CA Server Detected",
403b09
                             "remove_server": "Delete Server",
403b09
                             "remove_server_msg": "Deleting a server removes it permanently from the topology. Note that this is a non-reversible action."
403b09
                         },
403b09
diff --git a/ipaserver/plugins/internal.py b/ipaserver/plugins/internal.py
403b09
index ff29262180a967b2611db17271a742c5e472a19f..8af0af76c0b6305e9411d5bf4763d80df7304924 100644
403b09
--- a/ipaserver/plugins/internal.py
403b09
+++ b/ipaserver/plugins/internal.py
403b09
@@ -704,6 +704,8 @@ class i18n_messages(Command):
403b09
                 "label_singular": _("Server Role"),
403b09
             },
403b09
             "servers": {
403b09
+                "ca_warning_message": _("It is strongly recommended to keep the CA services installed on more than one server."),
403b09
+                "ca_warning_title": _("Warning: Only One CA Server Detected"),
403b09
                 "remove_server": _("Delete Server"),
403b09
                 "remove_server_msg": _("Deleting a server removes it permanently from the topology. Note that this is a non-reversible action.")
403b09
             },
403b09
-- 
403b09
2.7.4
403b09