mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Added commands into metadata.
The json_metadata command has been modified to accept some new options and return the commands metadata. The API.txt has been updated as well. The UI has been modified to use commands metadata instead of methods metadata. Ticket #388
This commit is contained in:
6
API.txt
6
API.txt
@@ -1684,11 +1684,15 @@ command: i18n_messages
|
|||||||
args: 0,0,1
|
args: 0,0,1
|
||||||
output: Output('messages', <type 'dict'>, None)
|
output: Output('messages', <type 'dict'>, None)
|
||||||
command: json_metadata
|
command: json_metadata
|
||||||
args: 2,0,2
|
args: 2,3,3
|
||||||
arg: Str('objname?')
|
arg: Str('objname?')
|
||||||
arg: Str('methodname?')
|
arg: Str('methodname?')
|
||||||
|
option: Str('object?')
|
||||||
|
option: Str('method?')
|
||||||
|
option: Str('command?')
|
||||||
output: Output('objects', <type 'dict'>, None)
|
output: Output('objects', <type 'dict'>, None)
|
||||||
output: Output('methods', <type 'dict'>, None)
|
output: Output('methods', <type 'dict'>, None)
|
||||||
|
output: Output('commands', <type 'dict'>, None)
|
||||||
command: krbtpolicy_mod
|
command: krbtpolicy_mod
|
||||||
args: 1,9,3
|
args: 1,9,3
|
||||||
arg: Str('uid', attribute=True, cli_name='user', multivalue=False, primary_key=True, query=True, required=False)
|
arg: Str('uid', attribute=True, cli_name='user', multivalue=False, primary_key=True, query=True, required=False)
|
||||||
|
|||||||
@@ -132,12 +132,12 @@ IPA.automount.map_entity = function(spec) {
|
|||||||
fields: [
|
fields: [
|
||||||
{
|
{
|
||||||
name: 'key',
|
name: 'key',
|
||||||
label: IPA.get_method_option(
|
label: IPA.get_command_option(
|
||||||
'automountmap_add_indirect', 'key').label
|
'automountmap_add_indirect', 'key').label
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'parentmap',
|
name: 'parentmap',
|
||||||
label: IPA.get_method_option(
|
label: IPA.get_command_option(
|
||||||
'automountmap_add_indirect', 'parentmap').label
|
'automountmap_add_indirect', 'parentmap').label
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ IPA.dns.zone_entity = function(spec) {
|
|||||||
{
|
{
|
||||||
type: 'force_dnszone_add_checkbox',
|
type: 'force_dnszone_add_checkbox',
|
||||||
name: 'force',
|
name: 'force',
|
||||||
metadata: IPA.get_method_option('dnszone_add', 'force')
|
metadata: IPA.get_command_option('dnszone_add', 'force')
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -745,7 +745,7 @@ IPA.dnsrecord_type_widget = function(spec) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
IPA.force_dnszone_add_checkbox_widget = function(spec) {
|
IPA.force_dnszone_add_checkbox_widget = function(spec) {
|
||||||
var metadata = IPA.get_method_option('dnszone_add', spec.name);
|
var metadata = IPA.get_command_option('dnszone_add', spec.name);
|
||||||
spec.label = metadata.label;
|
spec.label = metadata.label;
|
||||||
spec.tooltip = metadata.doc;
|
spec.tooltip = metadata.doc;
|
||||||
return IPA.checkbox_widget(spec);
|
return IPA.checkbox_widget(spec);
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ IPA.entitle.entity = function(spec) {
|
|||||||
fields: [
|
fields: [
|
||||||
{
|
{
|
||||||
name: 'uuid',
|
name: 'uuid',
|
||||||
label: IPA.get_method_option('entitle_register', 'ipaentitlementid').label,
|
label: IPA.get_command_option('entitle_register', 'ipaentitlementid').label,
|
||||||
read_only: true
|
read_only: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -72,7 +72,7 @@ IPA.entitle.entity = function(spec) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'quantity',
|
name: 'quantity',
|
||||||
label: IPA.get_method_arg('entitle_consume', 'quantity').label,
|
label: IPA.get_command_arg('entitle_consume', 'quantity').label,
|
||||||
read_only: true
|
read_only: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -96,7 +96,7 @@ IPA.entitle.entity = function(spec) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'quantity',
|
name: 'quantity',
|
||||||
label: IPA.get_method_arg('entitle_consume', 'quantity').label
|
label: IPA.get_command_arg('entitle_consume', 'quantity').label
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'start',
|
name: 'start',
|
||||||
@@ -121,17 +121,17 @@ IPA.entitle.entity = function(spec) {
|
|||||||
fields: [
|
fields: [
|
||||||
{
|
{
|
||||||
name: 'username',
|
name: 'username',
|
||||||
label: IPA.get_method_arg('entitle_register', 'username').label
|
label: IPA.get_command_arg('entitle_register', 'username').label
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'password',
|
name: 'password',
|
||||||
label: IPA.get_method_option('entitle_register', 'password').label,
|
label: IPA.get_command_option('entitle_register', 'password').label,
|
||||||
type: 'password'
|
type: 'password'
|
||||||
}
|
}
|
||||||
/* currently not supported
|
/* currently not supported
|
||||||
, {
|
, {
|
||||||
name: 'ipaentitlementid',
|
name: 'ipaentitlementid',
|
||||||
label: IPA.get_method_option('entitle_register', 'ipaentitlementid').label
|
label: IPA.get_command_option('entitle_register', 'ipaentitlementid').label
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
]
|
]
|
||||||
@@ -155,8 +155,8 @@ IPA.entitle.entity = function(spec) {
|
|||||||
fields: [
|
fields: [
|
||||||
{
|
{
|
||||||
name: 'quantity',
|
name: 'quantity',
|
||||||
label: IPA.get_method_arg('entitle_consume', 'quantity').label,
|
label: IPA.get_command_arg('entitle_consume', 'quantity').label,
|
||||||
metadata: IPA.get_method_arg('entitle_consume', 'quantity')
|
metadata: IPA.get_command_arg('entitle_consume', 'quantity')
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}).
|
}).
|
||||||
|
|||||||
@@ -144,12 +144,12 @@ IPA.host.entity = function(spec) {
|
|||||||
fields: [
|
fields: [
|
||||||
{
|
{
|
||||||
name: 'ip_address',
|
name: 'ip_address',
|
||||||
metadata: IPA.get_method_option('host_add', 'ip_address')
|
metadata: IPA.get_command_option('host_add', 'ip_address')
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'force_host_add_checkbox',
|
type: 'force_host_add_checkbox',
|
||||||
name: 'force',
|
name: 'force',
|
||||||
metadata: IPA.get_method_option('host_add', 'force')
|
metadata: IPA.get_command_option('host_add', 'force')
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -392,7 +392,7 @@ IPA.host_deleter_dialog = function(spec) {
|
|||||||
|
|
||||||
that.deleter_dialog_create();
|
that.deleter_dialog_create();
|
||||||
|
|
||||||
var metadata = IPA.get_method_option('host_del', 'updatedns');
|
var metadata = IPA.get_command_option('host_del', 'updatedns');
|
||||||
|
|
||||||
that.updatedns = $('<input/>', {
|
that.updatedns = $('<input/>', {
|
||||||
type: 'checkbox',
|
type: 'checkbox',
|
||||||
@@ -492,7 +492,7 @@ IPA.utc_date_column_format = function(value){
|
|||||||
|
|
||||||
|
|
||||||
IPA.force_host_add_checkbox_widget = function(spec) {
|
IPA.force_host_add_checkbox_widget = function(spec) {
|
||||||
var metadata = IPA.get_method_option('host_add', spec.name);
|
var metadata = IPA.get_command_option('host_add', spec.name);
|
||||||
spec.label = metadata.label;
|
spec.label = metadata.label;
|
||||||
spec.tooltip = metadata.doc;
|
spec.tooltip = metadata.doc;
|
||||||
return IPA.checkbox_widget(spec);
|
return IPA.checkbox_widget(spec);
|
||||||
|
|||||||
@@ -66,41 +66,14 @@ var IPA = function() {
|
|||||||
|
|
||||||
$.ajaxSetup(that.ajax_options);
|
$.ajaxSetup(that.ajax_options);
|
||||||
|
|
||||||
var methods = IPA.command({
|
|
||||||
name: 'ipa_init_methods',
|
|
||||||
method: 'json_metadata',
|
|
||||||
options: {
|
|
||||||
methodname: 'all'
|
|
||||||
},
|
|
||||||
on_success: function(data, text_status, xhr) {
|
|
||||||
that.metadata.methods = data.result.methods;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
var objects = IPA.command({
|
|
||||||
name: 'ipa_init_objects',
|
|
||||||
method: 'json_metadata',
|
|
||||||
options: {
|
|
||||||
objname: 'all'
|
|
||||||
},
|
|
||||||
on_success: function(data, text_status, xhr) {
|
|
||||||
that.metadata.objects = data.result.objects;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
var metadata_command = IPA.concurrent_command({
|
|
||||||
commands: [
|
|
||||||
methods,
|
|
||||||
objects
|
|
||||||
],
|
|
||||||
on_success: params.on_success
|
|
||||||
});
|
|
||||||
|
|
||||||
var batch = IPA.batch_command({
|
var batch = IPA.batch_command({
|
||||||
name: 'ipa_init',
|
name: 'ipa_init',
|
||||||
retry: false,
|
retry: false,
|
||||||
on_success: function() {
|
on_success: function() {
|
||||||
metadata_command.execute();
|
that.init_metadata({
|
||||||
|
on_success: params.on_success,
|
||||||
|
on_error: params.on_error
|
||||||
|
});
|
||||||
},
|
},
|
||||||
on_error: function(xhr, text_status, error_thrown) {
|
on_error: function(xhr, text_status, error_thrown) {
|
||||||
|
|
||||||
@@ -168,6 +141,42 @@ var IPA = function() {
|
|||||||
batch.execute();
|
batch.execute();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
that.init_metadata = function(params) {
|
||||||
|
|
||||||
|
var objects = IPA.command({
|
||||||
|
name: 'ipa_init_objects',
|
||||||
|
method: 'json_metadata',
|
||||||
|
options: {
|
||||||
|
object: 'all'
|
||||||
|
},
|
||||||
|
on_success: function(data, text_status, xhr) {
|
||||||
|
that.metadata.objects = data.result.objects;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var commands = IPA.command({
|
||||||
|
name: 'ipa_init_commands',
|
||||||
|
method: 'json_metadata',
|
||||||
|
options: {
|
||||||
|
command: 'all'
|
||||||
|
},
|
||||||
|
on_success: function(data, text_status, xhr) {
|
||||||
|
that.metadata.commands = data.result.commands;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var metadata_command = IPA.concurrent_command({
|
||||||
|
commands: [
|
||||||
|
objects,
|
||||||
|
commands
|
||||||
|
],
|
||||||
|
on_success: params.on_success,
|
||||||
|
on_error: params.on_error
|
||||||
|
});
|
||||||
|
|
||||||
|
metadata_command.execute();
|
||||||
|
};
|
||||||
|
|
||||||
that.register = function(name, factory) {
|
that.register = function(name, factory) {
|
||||||
that.remove_entity(name);
|
that.remove_entity(name);
|
||||||
that.entity_factories[name] = factory;
|
that.entity_factories[name] = factory;
|
||||||
@@ -798,9 +807,9 @@ IPA.get_entity_param = function(entity_name, name) {
|
|||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
|
|
||||||
IPA.get_method_arg = function(method_name, name) {
|
IPA.get_command_arg = function(command_name, arg_name) {
|
||||||
|
|
||||||
var metadata = IPA.metadata.methods[method_name];
|
var metadata = IPA.metadata.commands[command_name];
|
||||||
if (!metadata) {
|
if (!metadata) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -811,7 +820,7 @@ IPA.get_method_arg = function(method_name, name) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (var i=0; i<args.length; i++) {
|
for (var i=0; i<args.length; i++) {
|
||||||
if (args[i].name === name) {
|
if (args[i].name === arg_name) {
|
||||||
return args[i];
|
return args[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -819,9 +828,9 @@ IPA.get_method_arg = function(method_name, name) {
|
|||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
|
|
||||||
IPA.get_method_option = function(method_name, name) {
|
IPA.get_command_option = function(command_name, option_name) {
|
||||||
|
|
||||||
var metadata = IPA.metadata.methods[method_name];
|
var metadata = IPA.metadata.commands[command_name];
|
||||||
if (!metadata) {
|
if (!metadata) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -832,7 +841,7 @@ IPA.get_method_option = function(method_name, name) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (var i=0; i<options.length; i++) {
|
for (var i=0; i<options.length; i++) {
|
||||||
if (options[i].name === name) {
|
if (options[i].name === option_name) {
|
||||||
return options[i];
|
return options[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ IPA.service.entity = function(spec) {
|
|||||||
{
|
{
|
||||||
type: 'checkbox',
|
type: 'checkbox',
|
||||||
name: 'force',
|
name: 'force',
|
||||||
metadata: IPA.get_method_option('service_add', 'force')
|
metadata: IPA.get_command_option('service_add', 'force')
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -666,7 +666,7 @@ IPA.sudo.options_section = function(spec) {
|
|||||||
|
|
||||||
that.table.create_column({
|
that.table.create_column({
|
||||||
name: 'ipasudoopt',
|
name: 'ipasudoopt',
|
||||||
label: IPA.get_method_option('sudorule_add_option', 'ipasudoopt').label,
|
label: IPA.get_command_option('sudorule_add_option', 'ipasudoopt').label,
|
||||||
entity_name:that.entity.name,
|
entity_name:that.entity.name,
|
||||||
primary_key: true
|
primary_key: true
|
||||||
});
|
});
|
||||||
@@ -766,7 +766,7 @@ IPA.sudo.options_section = function(spec) {
|
|||||||
|
|
||||||
that.show_add_dialog = function() {
|
that.show_add_dialog = function() {
|
||||||
|
|
||||||
var label = IPA.get_method_option('sudorule_add_option', 'ipasudoopt').label;
|
var label = IPA.get_command_option('sudorule_add_option', 'ipasudoopt').label;
|
||||||
|
|
||||||
var title = IPA.messages.dialogs.add_title;
|
var title = IPA.messages.dialogs.add_title;
|
||||||
title = title.replace('${entity}', label);
|
title = title.replace('${entity}', label);
|
||||||
@@ -828,7 +828,7 @@ IPA.sudo.options_section = function(spec) {
|
|||||||
|
|
||||||
that.show_remove_dialog = function() {
|
that.show_remove_dialog = function() {
|
||||||
|
|
||||||
var label = IPA.get_method_option('sudorule_add_option', 'ipasudoopt').label;
|
var label = IPA.get_command_option('sudorule_add_option', 'ipasudoopt').label;
|
||||||
var values = that.table.get_selected_values();
|
var values = that.table.get_selected_values();
|
||||||
|
|
||||||
if (!values.length) {
|
if (!values.length) {
|
||||||
|
|||||||
@@ -220,6 +220,9 @@
|
|||||||
"hbacsvcgroup": {
|
"hbacsvcgroup": {
|
||||||
"services": "Services"
|
"services": "Services"
|
||||||
},
|
},
|
||||||
|
"hbactest": {
|
||||||
|
"label": "HBAC Test"
|
||||||
|
},
|
||||||
"host": {
|
"host": {
|
||||||
"certificate": "Host Certificate",
|
"certificate": "Host Certificate",
|
||||||
"cn": "Host Name",
|
"cn": "Host Name",
|
||||||
|
|||||||
10764
install/ui/test/data/ipa_init_commands.json
Normal file
10764
install/ui/test/data/ipa_init_commands.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -941,6 +941,17 @@ class Command(HasParam):
|
|||||||
|
|
||||||
return rv
|
return rv
|
||||||
|
|
||||||
|
# list of attributes we want exported to JSON
|
||||||
|
json_friendly_attributes = (
|
||||||
|
'name', 'takes_args', 'takes_options',
|
||||||
|
)
|
||||||
|
|
||||||
|
def __json__(self):
|
||||||
|
json_dict = dict(
|
||||||
|
(a, getattr(self, a)) for a in self.json_friendly_attributes
|
||||||
|
)
|
||||||
|
return json_dict
|
||||||
|
|
||||||
class LocalOrRemote(Command):
|
class LocalOrRemote(Command):
|
||||||
"""
|
"""
|
||||||
A command that is explicitly executed locally or remotely.
|
A command that is explicitly executed locally or remotely.
|
||||||
|
|||||||
@@ -48,16 +48,34 @@ class json_metadata(Command):
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
takes_options = (
|
||||||
|
Str('object?',
|
||||||
|
doc=_('Name of object to export'),
|
||||||
|
),
|
||||||
|
Str('method?',
|
||||||
|
doc=_('Name of method to export'),
|
||||||
|
),
|
||||||
|
Str('command?',
|
||||||
|
doc=_('Name of command to export'),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
has_output = (
|
has_output = (
|
||||||
Output('objects', dict, doc=_('Dict of JSON encoded IPA Objects')),
|
Output('objects', dict, doc=_('Dict of JSON encoded IPA Objects')),
|
||||||
Output('methods', dict, doc=_('Dict of JSON encoded IPA Methods')),
|
Output('methods', dict, doc=_('Dict of JSON encoded IPA Methods')),
|
||||||
|
Output('commands', dict, doc=_('Dict of JSON encoded IPA Commands')),
|
||||||
)
|
)
|
||||||
|
|
||||||
def execute(self, objname, methodname):
|
def execute(self, objname, methodname, **options):
|
||||||
objects = dict()
|
objects = dict()
|
||||||
methods = dict()
|
methods = dict()
|
||||||
|
commands = dict()
|
||||||
|
|
||||||
if objname :
|
empty = True
|
||||||
|
|
||||||
|
try:
|
||||||
|
if not objname:
|
||||||
|
objname = options['object']
|
||||||
if objname in self.api.Object:
|
if objname in self.api.Object:
|
||||||
o = self.api.Object[objname]
|
o = self.api.Object[objname]
|
||||||
objects = dict([(o.name, json_serialize(o))])
|
objects = dict([(o.name, json_serialize(o))])
|
||||||
@@ -65,25 +83,52 @@ class json_metadata(Command):
|
|||||||
objects = dict(
|
objects = dict(
|
||||||
(o.name, json_serialize(o)) for o in self.api.Object()
|
(o.name, json_serialize(o)) for o in self.api.Object()
|
||||||
)
|
)
|
||||||
elif methodname:
|
empty = False
|
||||||
if methodname in self.api.Method:
|
except KeyError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
if not methodname:
|
||||||
|
methodname = options['method']
|
||||||
|
if methodname in self.api.Method:
|
||||||
m = self.api.Method[methodname]
|
m = self.api.Method[methodname]
|
||||||
methods = dict([(m.name, json_serialize(m))])
|
methods = dict([(m.name, json_serialize(m))])
|
||||||
elif methodname == "all":
|
elif methodname == "all":
|
||||||
methods = dict(
|
methods = dict(
|
||||||
(m.name, json_serialize(m)) for m in self.api.Method()
|
(m.name, json_serialize(m)) for m in self.api.Method()
|
||||||
)
|
)
|
||||||
else:
|
empty = False
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
cmdname = options['command']
|
||||||
|
if cmdname in self.api.Command:
|
||||||
|
c = self.api.Command[cmdname]
|
||||||
|
commands = dict([(c.name, json_serialize(c))])
|
||||||
|
elif cmdname == "all":
|
||||||
|
commands = dict(
|
||||||
|
(c.name, json_serialize(c)) for c in self.api.Command()
|
||||||
|
)
|
||||||
|
empty = False
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
if empty:
|
||||||
objects = dict(
|
objects = dict(
|
||||||
(o.name, json_serialize(o)) for o in self.api.Object()
|
(o.name, json_serialize(o)) for o in self.api.Object()
|
||||||
)
|
)
|
||||||
methods = dict(
|
methods = dict(
|
||||||
(m.name, json_serialize(m)) for m in self.api.Method()
|
(m.name, json_serialize(m)) for m in self.api.Method()
|
||||||
)
|
)
|
||||||
|
commands = dict(
|
||||||
|
(c.name, json_serialize(c)) for c in self.api.Command()
|
||||||
|
)
|
||||||
|
|
||||||
retval = dict([
|
retval = dict([
|
||||||
("objects", objects),
|
("objects", objects),
|
||||||
("methods", methods),
|
("methods", methods),
|
||||||
|
("commands", commands),
|
||||||
])
|
])
|
||||||
|
|
||||||
return retval
|
return retval
|
||||||
@@ -313,6 +358,9 @@ class i18n_messages(Command):
|
|||||||
"hbacsvcgroup": {
|
"hbacsvcgroup": {
|
||||||
"services": _("Services"),
|
"services": _("Services"),
|
||||||
},
|
},
|
||||||
|
"hbactest": {
|
||||||
|
"label": _("HBAC Test"),
|
||||||
|
},
|
||||||
"host": {
|
"host": {
|
||||||
"certificate": _("Host Certificate"),
|
"certificate": _("Host Certificate"),
|
||||||
"cn": _("Host Name"),
|
"cn": _("Host Name"),
|
||||||
|
|||||||
Reference in New Issue
Block a user