summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--install/ui/src/freeipa/navigation/menu_spec.js5
-rw-r--r--install/ui/src/freeipa/serverconfig.js7
-rw-r--r--install/ui/src/freeipa/topology.js129
-rw-r--r--install/ui/test/data/ipa_init.json4
-rw-r--r--ipaserver/plugins/internal.py4
5 files changed, 149 insertions, 0 deletions
diff --git a/install/ui/src/freeipa/navigation/menu_spec.js b/install/ui/src/freeipa/navigation/menu_spec.js
index 0afc7dace..442e7c771 100644
--- a/install/ui/src/freeipa/navigation/menu_spec.js
+++ b/install/ui/src/freeipa/navigation/menu_spec.js
@@ -221,6 +221,11 @@ var nav = {};
hidden: true
},
{
+ entity: 'server_role',
+ facet: 'search',
+ hidden: true
+ },
+ {
entity: 'domainlevel',
facet: 'details',
hidden: true
diff --git a/install/ui/src/freeipa/serverconfig.js b/install/ui/src/freeipa/serverconfig.js
index 70bb9574b..2bc4e88b0 100644
--- a/install/ui/src/freeipa/serverconfig.js
+++ b/install/ui/src/freeipa/serverconfig.js
@@ -95,6 +95,13 @@ return {
{
$type: 'multivalued',
name: 'ipauserobjectclasses'
+ },
+ {
+ $type: 'entity_select',
+ name: 'ca_renewal_master_server',
+ other_entity: 'server',
+ other_field: 'cn',
+ flags: ['w_if_no_aci']
}
]
},
diff --git a/install/ui/src/freeipa/topology.js b/install/ui/src/freeipa/topology.js
index 290dc3825..139f95625 100644
--- a/install/ui/src/freeipa/topology.js
+++ b/install/ui/src/freeipa/topology.js
@@ -50,6 +50,7 @@ var topology = IPA.topology = {
facets: {
suffix_search: 'topologysuffix_search',
server_search: 'server_search',
+ server_role_search: 'server_role_search',
domainlevel: 'domainlevel_details',
topologygraph: 'topology-graph',
location_search: 'location_search'
@@ -240,6 +241,14 @@ return {
{
name: 'ipalocationweight',
placeholder: '100'
+ },
+ {
+ $type: 'association_table',
+ other_entity: 'server_role',
+ name: 'enabled_role_servrole',
+ footer: false,
+ read_only: true,
+ selectable: false
}
]
}
@@ -248,6 +257,55 @@ return {
]
};};
+
+var make_serverroles_spec = function() {
+return {
+ name: 'server_role',
+ facet_groups: [ 'role_servers' ],
+ facets: [
+ {
+ $factory: topology.serverroles_search_facet,
+ $type: 'search',
+ primary_key_name: 'role_servrole',
+ search_all_entries: true,
+ disable_search_field: true,
+ no_update: true,
+ selectable: false,
+ disable_facet_tabs: false,
+ tabs_in_sidebar: true,
+ tab_label: '@i18n:objects.server_role.label',
+ label: '@i18n:objects.server_role.label',
+ facet_groups: [topology.search_facet_group],
+ facet_group: 'search',
+ columns: [
+ 'role_servrole',
+ 'status'
+ ]
+ },
+ {
+ $factory: topology.serverroles_nested_search_facet,
+ $type: 'nested_search',
+ primary_key_name: 'server_server',
+ search_all_entries: true,
+ disable_search_field: true,
+ no_update: true,
+ selectable: false,
+ nested_entity: 'server_role',
+ facet_group: 'role_servers',
+ label: '@i18n:objects.server_role.label_singular',
+ columns: [
+ {
+ name: 'server_server',
+ target_entity: 'server',
+ target_facet: 'details',
+ link: true
+ },
+ 'status'
+ ]
+ }
+ ]
+};};
+
var make_domainlevel_spec = function() {
return {
name: 'domainlevel',
@@ -399,6 +457,69 @@ topology.location_adapter = declare([mod_field.Adapter], {
}
});
+topology.serverroles_search_facet = function(spec) {
+
+ spec = spec || {};
+
+ var that = IPA.search_facet(spec);
+
+ that.filter_records = function(records_map, pkey, record) {
+
+ var stored_record = records_map.get(pkey);
+ if (!stored_record) return true;
+
+ // set priority to all possible values. Value with higher priority
+ // will overwrite a value with lower prio.
+ var priority_map = {
+ absent: 0,
+ configured: 1,
+ enabled: 2
+ };
+
+ var priority_old = priority_map[stored_record.status];
+ var priority_new = priority_map[record.status];
+ return priority_new >= priority_old;
+ };
+
+ that.get_refresh_command_args = function() {
+ // We need to call find command with no argument.
+ return;
+ };
+
+ return that;
+};
+
+topology.serverroles_nested_search_facet = function(spec) {
+
+ spec = spec || {};
+ spec.disable_facet_tabs = true;
+
+ var that = IPA.nested_search_facet(spec);
+
+ that.get_refresh_command_args = function() {
+ // We need to call find command with no argument.
+ return;
+ };
+
+ that.get_refresh_command_options = function() {
+ return { 'role_servrole': that.get_pkey() };
+ };
+
+ that.on_column_link_click = function(value, entity) {
+ var pkeys = [value];
+
+ navigation.show_entity('server', that.details_facet_name, pkeys);
+ return false;
+ };
+
+ that.filter_records = function(records_map, pkey, record) {
+ // Return false when the status is 'absent'
+ return record.status !== 'absent';
+ };
+
+ return that;
+};
+
topology.location_server_adder_dialog = function(spec) {
spec = spec || {};
@@ -1205,6 +1326,13 @@ topology.segment_spec = make_segment_spec();
topology.server_spec = make_server_spec();
/**
+ * IPA server roles entity specification object
+ * @member topology
+ */
+topology.serverroles_spec = make_serverroles_spec();
+
+
+/**
* Domain Level entity specification object
* @member topology
*/
@@ -1225,6 +1353,7 @@ topology.register = function() {
e.register({type: 'topologysuffix', spec: topology.suffix_spec});
e.register({type: 'topologysegment', spec: topology.segment_spec});
e.register({type: 'server', spec: topology.server_spec});
+ e.register({type: 'server_role', spec: topology.serverroles_spec});
e.register({type: 'domainlevel', spec: topology.domainlevel_spec});
e.register({type: 'location', spec: topology.location_spec});
diff --git a/install/ui/test/data/ipa_init.json b/install/ui/test/data/ipa_init.json
index 4ccf49f88..52031040b 100644
--- a/install/ui/test/data/ipa_init.json
+++ b/install/ui/test/data/ipa_init.json
@@ -521,6 +521,10 @@
"specified_users": "Specified Users and Groups",
"user": "User"
},
+ "server_role": {
+ "label": "Server Roles",
+ "label_singular": "Server Role",
+ },
"service": {
"auth_indicators": "Authentication indicators",
"auth_indicator": "Authentication indicator",
diff --git a/ipaserver/plugins/internal.py b/ipaserver/plugins/internal.py
index c44c260f5..82d0b2398 100644
--- a/ipaserver/plugins/internal.py
+++ b/ipaserver/plugins/internal.py
@@ -660,6 +660,10 @@ class i18n_messages(Command):
"specified_users": _("Specified Users and Groups"),
"user": _("User"),
},
+ "server_role": {
+ "label": _("Server Roles"),
+ "label_singular": _("Server Role"),
+ },
"service": {
"auth_indicators": _("Authentication indicators"),
"auth_indicator": _("Authentication indicator"),