allow 'value' output param in commands without primary key

`PrimaryKey` output param works only for API objects that have primary keys,
otherwise it expects None (nothing is associated with this param). Since the
validation of command output was tightened durng thin client effort, some
commands not honoring this contract began to fail output validation.

A custom output was implemented for them to restore their functionality. It
should however be considered as a fix for broken commands and not used
further.

https://fedorahosted.org/freeipa/ticket/6037
https://fedorahosted.org/freeipa/ticket/6061

Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
Reviewed-By: Jan Cholasta <jcholast@redhat.com>
This commit is contained in:
Martin Babinsky
2016-07-18 13:18:44 +02:00
committed by Jan Cholasta
parent 90704df59d
commit f0a61546f5
5 changed files with 22 additions and 7 deletions

10
API.txt
View File

@@ -144,7 +144,7 @@ option: StrEnum('type', values=[u'group', u'hostgroup'])
option: Str('version?')
output: Entry('result')
output: Output('summary', type=[<type 'unicode'>, <type 'NoneType'>])
output: PrimaryKey('value')
output: Output('value', type=[<type 'unicode'>])
command: automember_default_group_set/1
args: 0,6,3
option: Flag('all', autofill=True, cli_name='all', default=False)
@@ -155,7 +155,7 @@ option: StrEnum('type', values=[u'group', u'hostgroup'])
option: Str('version?')
output: Entry('result')
output: Output('summary', type=[<type 'unicode'>, <type 'NoneType'>])
output: PrimaryKey('value')
output: Output('value', type=[<type 'unicode'>])
command: automember_default_group_show/1
args: 0,4,3
option: Flag('all', autofill=True, cli_name='all', default=False)
@@ -164,7 +164,7 @@ option: StrEnum('type', values=[u'group', u'hostgroup'])
option: Str('version?')
output: Entry('result')
output: Output('summary', type=[<type 'unicode'>, <type 'NoneType'>])
output: PrimaryKey('value')
output: Output('value', type=[<type 'unicode'>])
command: automember_del/1
args: 1,2,3
arg: Str('cn+', cli_name='automember_rule')
@@ -5574,7 +5574,7 @@ option: StrEnum('trust_type', autofill=True, cli_name='type', default=u'ad', val
option: Str('version?')
output: Entry('result')
output: Output('summary', type=[<type 'unicode'>, <type 'NoneType'>])
output: PrimaryKey('value')
output: Output('value', type=[<type 'unicode'>])
command: trustconfig_show/1
args: 0,5,3
option: Flag('all', autofill=True, cli_name='all', default=False)
@@ -5584,7 +5584,7 @@ option: StrEnum('trust_type', autofill=True, cli_name='type', default=u'ad', val
option: Str('version?')
output: Entry('result')
output: Output('summary', type=[<type 'unicode'>, <type 'NoneType'>])
output: PrimaryKey('value')
output: Output('value', type=[<type 'unicode'>])
command: trustdomain_add/1
args: 2,8,3
arg: Str('trustcn', cli_name='trust')

View File

@@ -90,5 +90,5 @@ IPA_DATA_VERSION=20100614120000
# #
########################################################
IPA_API_VERSION_MAJOR=2
IPA_API_VERSION_MINOR=210
# Last change: Add --ca option to cert-status
IPA_API_VERSION_MINOR=211
# Last change: mbabinsk: allow 'value' output param in commands without primary key

View File

@@ -217,3 +217,13 @@ simple_value = (
Output('result', bool, _('True means the operation was successful')),
Output('value', unicode, flags=['no_display']),
)
# custom shim for commands like `trustconfig-show`,
# `automember-default-group-*` which put stuff into output['value'] despite not
# having primary key themselves. Designing commands like this is not a very
# good practice, so please do not use this for new code.
simple_entry = (
summary,
Entry('result'),
Output('value', unicode, flags=['no_display']),
)

View File

@@ -586,6 +586,7 @@ class automember_default_group_set(LDAPUpdate):
),
) + group_type
msg_summary = _('Set default (fallback) group for automember "%(value)s"')
has_output = output.simple_entry
def pre_callback(self, ldap, dn, entry_attrs, attrs_list, *keys, **options):
dn = DN(('cn', options['type']), api.env.container_automember,
@@ -609,6 +610,7 @@ class automember_default_group_remove(LDAPUpdate):
takes_options = group_type
msg_summary = _('Removed default (fallback) group for automember "%(value)s"')
has_output = output.simple_entry
def pre_callback(self, ldap, dn, entry_attrs, attrs_list, *keys, **options):
dn = DN(('cn', options['type']), api.env.container_automember,
@@ -644,6 +646,7 @@ class automember_default_group_show(LDAPRetrieve):
obj_name = 'automember_default_group'
takes_options = group_type
has_output = output.simple_entry
def pre_callback(self, ldap, dn, attrs_list, *keys, **options):
dn = DN(('cn', options['type']), api.env.container_automember,

View File

@@ -1288,6 +1288,7 @@ class trustconfig_mod(LDAPUpdate):
takes_options = LDAPUpdate.takes_options + (_trust_type_option,)
msg_summary = _('Modified "%(value)s" trust configuration')
has_output = output.simple_entry
def pre_callback(self, ldap, dn, entry_attrs, attrs_list, *keys, **options):
self.obj._normalize_groupdn(entry_attrs)
@@ -1310,6 +1311,7 @@ class trustconfig_show(LDAPRetrieve):
__doc__ = _('Show global trust configuration.')
takes_options = LDAPRetrieve.takes_options + (_trust_type_option,)
has_output = output.simple_entry
def execute(self, *keys, **options):
result = super(trustconfig_show, self).execute(*keys, **options)