mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
DNS Locations: WebUI part
WebUI part of DNS Location feature. https://fedorahosted.org/freeipa/ticket/5905 Reviewed-By: Petr Vobornik <pvoborni@redhat.com>
This commit is contained in:
parent
5a8ad3e982
commit
5f48df48d4
@ -225,6 +225,11 @@ var nav = {};
|
|||||||
facet: 'details',
|
facet: 'details',
|
||||||
hidden: true
|
hidden: true
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
entity: 'location',
|
||||||
|
facet: 'search',
|
||||||
|
hidden: true
|
||||||
|
},
|
||||||
{
|
{
|
||||||
facet: 'topology-graph',
|
facet: 'topology-graph',
|
||||||
hidden: true
|
hidden: true
|
||||||
|
@ -51,7 +51,8 @@ var topology = IPA.topology = {
|
|||||||
suffix_search: 'topologysuffix_search',
|
suffix_search: 'topologysuffix_search',
|
||||||
server_search: 'server_search',
|
server_search: 'server_search',
|
||||||
domainlevel: 'domainlevel_details',
|
domainlevel: 'domainlevel_details',
|
||||||
topologygraph: 'topology-graph'
|
topologygraph: 'topology-graph',
|
||||||
|
location_search: 'location_search'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -193,6 +194,14 @@ return {
|
|||||||
var make_server_spec = function() {
|
var make_server_spec = function() {
|
||||||
return {
|
return {
|
||||||
name: 'server',
|
name: 'server',
|
||||||
|
policies: [
|
||||||
|
{
|
||||||
|
$factory: IPA.facet_update_policy,
|
||||||
|
source_facet: 'details',
|
||||||
|
dest_entity: 'location',
|
||||||
|
dest_facet: 'details'
|
||||||
|
}
|
||||||
|
],
|
||||||
facets: [
|
facets: [
|
||||||
{
|
{
|
||||||
$type: 'search',
|
$type: 'search',
|
||||||
@ -212,7 +221,6 @@ return {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
$type: 'details',
|
$type: 'details',
|
||||||
no_update: true,
|
|
||||||
disable_facet_tabs: true,
|
disable_facet_tabs: true,
|
||||||
sections: [
|
sections: [
|
||||||
{
|
{
|
||||||
@ -221,7 +229,18 @@ return {
|
|||||||
{ name: 'cn', read_only: true },
|
{ name: 'cn', read_only: true },
|
||||||
{ name: 'ipamindomainlevel', read_only: true },
|
{ name: 'ipamindomainlevel', read_only: true },
|
||||||
{ name: 'ipamaxdomainlevel', read_only: true },
|
{ name: 'ipamaxdomainlevel', read_only: true },
|
||||||
{ $type: 'multivalued', name: 'iparepltopomanagedsuffix_topologysuffix', read_only: true }
|
{ $type: 'multivalued', name: 'iparepltopomanagedsuffix_topologysuffix', read_only: true },
|
||||||
|
{
|
||||||
|
$type: 'entity_select',
|
||||||
|
name: 'ipalocation_location',
|
||||||
|
other_entity: 'location',
|
||||||
|
other_field: 'idnsname',
|
||||||
|
flags: ['w_if_no_aci']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'ipalocationweight',
|
||||||
|
placeholder: '100'
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -272,6 +291,227 @@ topology.domainlevel_adapter = declare([mod_field.Adapter], {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
var make_location_spec = function() {
|
||||||
|
return {
|
||||||
|
name: 'location',
|
||||||
|
policies: [
|
||||||
|
{
|
||||||
|
$factory: IPA.facet_update_policy,
|
||||||
|
source_facet: 'details',
|
||||||
|
dest_entity: 'server',
|
||||||
|
dest_facet: 'details'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
$factory: IPA.facet_update_policy,
|
||||||
|
source_facet: 'details',
|
||||||
|
dest_entity: 'location',
|
||||||
|
dest_facet: 'search'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
facets: [
|
||||||
|
{
|
||||||
|
$type: 'search',
|
||||||
|
disable_facet_tabs: false,
|
||||||
|
tabs_in_sidebar: true,
|
||||||
|
tab_label: '@mo:location.label',
|
||||||
|
facet_groups: [topology.search_facet_group],
|
||||||
|
facet_group: 'search',
|
||||||
|
columns: [
|
||||||
|
'idnsname',
|
||||||
|
'description'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
$type: 'details',
|
||||||
|
disable_facet_tabs: true,
|
||||||
|
section_layout_class: 'col-sm-12',
|
||||||
|
sections: [
|
||||||
|
{
|
||||||
|
name: 'general',
|
||||||
|
label: '@i18n:details.general',
|
||||||
|
fields: [
|
||||||
|
'idnsname',
|
||||||
|
{
|
||||||
|
$type: 'textarea',
|
||||||
|
name: 'description'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
$factory: IPA.section,
|
||||||
|
name: 'servers',
|
||||||
|
label: '@mo:server.label',
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
$type: 'location_association_table',
|
||||||
|
adapter: topology.location_adapter,
|
||||||
|
other_entity: 'server',
|
||||||
|
footer: false,
|
||||||
|
name: 'cn',
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
name: 'cn',
|
||||||
|
link: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'ipalocationweight'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'location_relative_weight'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
adder_dialog: {
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
$type: 'text',
|
||||||
|
name: 'idnsname',
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
'description'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};};
|
||||||
|
|
||||||
|
topology.location_adapter = declare([mod_field.Adapter], {
|
||||||
|
load: function(data) {
|
||||||
|
var result = this.get_record(data);
|
||||||
|
if (result.servers_server === undefined) return [];
|
||||||
|
|
||||||
|
result = result.servers_server;
|
||||||
|
|
||||||
|
this.result_name = 'servers';
|
||||||
|
var servers = this.get_record(data);
|
||||||
|
this.result_name = 'result';
|
||||||
|
|
||||||
|
var output = [];
|
||||||
|
|
||||||
|
for (var i=0, l=result.length; i<l; i++) {
|
||||||
|
output.push(servers[result[i]]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
topology.location_server_adder_dialog = function(spec) {
|
||||||
|
spec = spec || {};
|
||||||
|
|
||||||
|
var that = IPA.entity_adder_dialog(spec);
|
||||||
|
|
||||||
|
that.init = function() {
|
||||||
|
that.added.attach(function() {
|
||||||
|
that.facet.refresh();
|
||||||
|
that.facet.on_update.notify();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
that.create_add_command = function(record) {
|
||||||
|
var pkey = that.facet.get_pkey();
|
||||||
|
var command = that.entity_adder_dialog_create_add_command(record);
|
||||||
|
|
||||||
|
command.set_option('ipalocation_location', pkey);
|
||||||
|
|
||||||
|
return command;
|
||||||
|
};
|
||||||
|
|
||||||
|
that.init();
|
||||||
|
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
|
topology.location_association_table_widget = function(spec) {
|
||||||
|
|
||||||
|
spec = spec || {};
|
||||||
|
spec.name = spec.name || 'servers';
|
||||||
|
|
||||||
|
var that = IPA.association_table_widget(spec);
|
||||||
|
|
||||||
|
that.create_add_dialog = function() {
|
||||||
|
|
||||||
|
var entity_label = that.entity.metadata.label_singular;
|
||||||
|
var pkey = that.facet.get_pkey();
|
||||||
|
var other_entity_label = that.other_entity.metadata.label_singular;
|
||||||
|
|
||||||
|
var title = that.add_title;
|
||||||
|
title = title.replace('${entity}', entity_label);
|
||||||
|
title = title.replace('${primary_key}', pkey);
|
||||||
|
title = title.replace('${other_entity}', other_entity_label);
|
||||||
|
|
||||||
|
return topology.location_server_adder_dialog({
|
||||||
|
title: title,
|
||||||
|
entity: that.other_entity.name,
|
||||||
|
method: 'mod',
|
||||||
|
options: {
|
||||||
|
'ipalocation_location': pkey
|
||||||
|
},
|
||||||
|
sections: [
|
||||||
|
{
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
$type: 'entity_select',
|
||||||
|
name: 'cn',
|
||||||
|
required: true,
|
||||||
|
other_entity: that.other_entity.name,
|
||||||
|
other_field: 'cn',
|
||||||
|
filter_options: {
|
||||||
|
'not_in_location': pkey
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
$type: 'text',
|
||||||
|
name: 'ipalocationweight'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
that.remove = function(values, on_success, on_error) {
|
||||||
|
|
||||||
|
var pkey = '';
|
||||||
|
|
||||||
|
var batch = rpc.batch_command({
|
||||||
|
on_success: function(data) {
|
||||||
|
that.remove_button.set_enabled(false);
|
||||||
|
that.facet.refresh();
|
||||||
|
|
||||||
|
var count = data.result.count;
|
||||||
|
var msg = text.get('@i18n:association.removed').replace('${count}', count);
|
||||||
|
IPA.notify_success(msg);
|
||||||
|
},
|
||||||
|
on_error: on_error
|
||||||
|
});
|
||||||
|
|
||||||
|
var command, value;
|
||||||
|
for(var i = 0, l=values.length; i<l; i++) {
|
||||||
|
value = values[i];
|
||||||
|
|
||||||
|
command = rpc.command({
|
||||||
|
entity: that.other_entity.name,
|
||||||
|
method: 'mod',
|
||||||
|
args: [value],
|
||||||
|
options: {
|
||||||
|
'ipalocation_location': pkey
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
batch.add_command(command);
|
||||||
|
}
|
||||||
|
|
||||||
|
batch.execute();
|
||||||
|
};
|
||||||
|
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
topology.domainlevel_metadata = function(spec, context) {
|
topology.domainlevel_metadata = function(spec, context) {
|
||||||
var metadata = metadata_provider.source;
|
var metadata = metadata_provider.source;
|
||||||
metadata.objects.domainlevel = {
|
metadata.objects.domainlevel = {
|
||||||
@ -970,6 +1210,7 @@ topology.server_spec = make_server_spec();
|
|||||||
*/
|
*/
|
||||||
topology.domainlevel_spec = make_domainlevel_spec();
|
topology.domainlevel_spec = make_domainlevel_spec();
|
||||||
|
|
||||||
|
topology.location_spec = make_location_spec();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register entity
|
* Register entity
|
||||||
@ -985,17 +1226,20 @@ topology.register = function() {
|
|||||||
e.register({type: 'topologysegment', spec: topology.segment_spec});
|
e.register({type: 'topologysegment', spec: topology.segment_spec});
|
||||||
e.register({type: 'server', spec: topology.server_spec});
|
e.register({type: 'server', spec: topology.server_spec});
|
||||||
e.register({type: 'domainlevel', spec: topology.domainlevel_spec});
|
e.register({type: 'domainlevel', spec: topology.domainlevel_spec});
|
||||||
|
e.register({type: 'location', spec: topology.location_spec});
|
||||||
|
|
||||||
a.register('domainlevel_set', topology.domainlevel_set_action);
|
a.register('domainlevel_set', topology.domainlevel_set_action);
|
||||||
a.register('segment_add', topology.add_segment_action);
|
a.register('segment_add', topology.add_segment_action);
|
||||||
a.register('segment_del', topology.del_segment_action);
|
a.register('segment_del', topology.del_segment_action);
|
||||||
|
|
||||||
w.register('topology-graph', topology.TopologyGraphWidget);
|
w.register('topology-graph', topology.TopologyGraphWidget);
|
||||||
|
w.register('location_association_table', topology.location_association_table_widget);
|
||||||
fa.register({
|
fa.register({
|
||||||
type: 'topology-graph',
|
type: 'topology-graph',
|
||||||
ctor: topology.TopologyGraphFacet,
|
ctor: topology.TopologyGraphFacet,
|
||||||
spec: topology.topology_graph_facet_spec
|
spec: topology.topology_graph_facet_spec
|
||||||
});
|
});
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
phases.on('registration', topology.register);
|
phases.on('registration', topology.register);
|
||||||
|
Loading…
Reference in New Issue
Block a user