summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Babinsky <mbabinsk@redhat.com>2016-07-18 13:18:44 +0200
committerJan Cholasta <jcholast@redhat.com>2016-07-20 13:57:01 +0200
commitf0a61546f552d4df887617167f7dc1378cb95083 (patch)
treee41f1d0bca4d0859ce1fcde1ea1854c89ead0ec1
parent90704df59dbe996ef1db58d7a11f826c008d08a3 (diff)
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>
-rw-r--r--API.txt10
-rw-r--r--VERSION4
-rw-r--r--ipalib/output.py10
-rw-r--r--ipaserver/plugins/automember.py3
-rw-r--r--ipaserver/plugins/trust.py2
5 files changed, 22 insertions, 7 deletions
diff --git a/API.txt b/API.txt
index eb33c1fb7..535d8ec9a 100644
--- a/API.txt
+++ b/API.txt
@@ -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')
diff --git a/VERSION b/VERSION
index 055974145..ca4899650 100644
--- a/VERSION
+++ b/VERSION
@@ -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
diff --git a/ipalib/output.py b/ipalib/output.py
index 19dd9adad..b10458463 100644
--- a/ipalib/output.py
+++ b/ipalib/output.py
@@ -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']),
+)
diff --git a/ipaserver/plugins/automember.py b/ipaserver/plugins/automember.py
index dfa8498a6..8e9356a9d 100644
--- a/ipaserver/plugins/automember.py
+++ b/ipaserver/plugins/automember.py
@@ -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,
diff --git a/ipaserver/plugins/trust.py b/ipaserver/plugins/trust.py
index 8536202b9..d4676bd57 100644
--- a/ipaserver/plugins/trust.py
+++ b/ipaserver/plugins/trust.py
@@ -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)