summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Cholasta <jcholast@redhat.com>2011-11-21 10:50:27 -0500
committerMartin Kosek <mkosek@redhat.com>2011-11-30 17:08:35 +0100
commit135ccf89de866ea2cdda96993ed2743394e1e716 (patch)
tree1b3c7bef4d5653255b75014218d1d0be9b10d5bb
parent2ac9d4816a85822825257e16f4fcf74e15a8ea02 (diff)
downloadfreeipa-135ccf89de866ea2cdda96993ed2743394e1e716.tar.gz
freeipa-135ccf89de866ea2cdda96993ed2743394e1e716.tar.xz
freeipa-135ccf89de866ea2cdda96993ed2743394e1e716.zip
Parse comma-separated lists of values in all parameter types. This can be enabled for a specific parameter by setting the "csv" option to True.
Remove "List" parameter type and replace all occurences of it with appropriate multi-valued parameter ("Str" in most cases) with csv enabled. Add new parameter type "Any", capable of holding values of any type. This is needed by the "batch" command, as "Str" is not suitable type for the "methods" parameter. ticket 2007
-rw-r--r--API.txt712
-rw-r--r--TODO5
-rw-r--r--VERSION2
-rw-r--r--ipalib/__init__.py2
-rw-r--r--ipalib/parameters.py82
-rw-r--r--ipalib/plugins/aci.py8
-rw-r--r--ipalib/plugins/automember.py8
-rw-r--r--ipalib/plugins/baseldap.py24
-rw-r--r--ipalib/plugins/batch.py12
-rw-r--r--ipalib/plugins/config.py6
-rw-r--r--ipalib/plugins/delegation.py8
-rw-r--r--ipalib/plugins/dns.py14
-rw-r--r--ipalib/plugins/hbactest.py5
-rw-r--r--ipalib/plugins/migration.py28
-rw-r--r--ipalib/plugins/permission.py6
-rw-r--r--ipalib/plugins/selfservice.py8
-rwxr-xr-xmake-lint42
-rw-r--r--tests/test_ipalib/test_parameters.py110
18 files changed, 540 insertions, 542 deletions
diff --git a/API.txt b/API.txt
index 72e7025b9..95ae1d253 100644
--- a/API.txt
+++ b/API.txt
@@ -3,8 +3,8 @@ args: 1,15,3
arg: Str('aciname', attribute=True, cli_name='name', multivalue=False, primary_key=True, required=True)
option: Str('permission', attribute=False, cli_name='permission', multivalue=False, required=False)
option: Str('group', attribute=False, cli_name='group', multivalue=False, required=False)
-option: List('permissions', attribute=False, cli_name='permissions', multivalue=True, required=True)
-option: List('attrs', attribute=False, cli_name='attrs', multivalue=True, required=False)
+option: Str('permissions', attribute=False, cli_name='permissions', csv=True, multivalue=True, required=True)
+option: Str('attrs', attribute=False, cli_name='attrs', csv=True, multivalue=True, required=False)
option: StrEnum('type', attribute=False, cli_name='type', multivalue=False, required=False, values=(u'user', u'group', u'host', u'service', u'hostgroup', u'netgroup', u'dnsrecord'))
option: Str('memberof', attribute=False, cli_name='memberof', multivalue=False, required=False)
option: Str('filter', attribute=False, cli_name='filter', multivalue=False, required=False)
@@ -32,8 +32,8 @@ arg: Str('criteria?')
option: Str('aciname', attribute=False, autofill=False, cli_name='name', multivalue=False, primary_key=True, query=True, required=False)
option: Str('permission', attribute=False, autofill=False, cli_name='permission', multivalue=False, query=True, required=False)
option: Str('group', attribute=False, autofill=False, cli_name='group', multivalue=False, query=True, required=False)
-option: List('permissions', attribute=False, autofill=False, cli_name='permissions', multivalue=True, query=True, required=False)
-option: List('attrs', attribute=False, autofill=False, cli_name='attrs', multivalue=True, query=True, required=False)
+option: Str('permissions', attribute=False, autofill=False, cli_name='permissions', csv=True, multivalue=True, query=True, required=False)
+option: Str('attrs', attribute=False, autofill=False, cli_name='attrs', csv=True, multivalue=True, query=True, required=False)
option: StrEnum('type', attribute=False, autofill=False, cli_name='type', multivalue=False, query=True, required=False, values=(u'user', u'group', u'host', u'service', u'hostgroup', u'netgroup', u'dnsrecord'))
option: Str('memberof', attribute=False, autofill=False, cli_name='memberof', multivalue=False, query=True, required=False)
option: Str('filter', attribute=False, autofill=False, cli_name='filter', multivalue=False, query=True, required=False)
@@ -53,8 +53,8 @@ args: 1,14,3
arg: Str('aciname', attribute=True, cli_name='name', multivalue=False, primary_key=True, query=True, required=True)
option: Str('permission', attribute=False, autofill=False, cli_name='permission', multivalue=False, required=False)
option: Str('group', attribute=False, autofill=False, cli_name='group', multivalue=False, required=False)
-option: List('permissions', attribute=False, autofill=False, cli_name='permissions', multivalue=True, required=False)
-option: List('attrs', attribute=False, autofill=False, cli_name='attrs', multivalue=True, required=False)
+option: Str('permissions', attribute=False, autofill=False, cli_name='permissions', csv=True, multivalue=True, required=False)
+option: Str('attrs', attribute=False, autofill=False, cli_name='attrs', csv=True, multivalue=True, required=False)
option: StrEnum('type', attribute=False, autofill=False, cli_name='type', multivalue=False, required=False, values=(u'user', u'group', u'host', u'service', u'hostgroup', u'netgroup', u'dnsrecord'))
option: Str('memberof', attribute=False, autofill=False, cli_name='memberof', multivalue=False, required=False)
option: Str('filter', attribute=False, autofill=False, cli_name='filter', multivalue=False, required=False)
@@ -73,8 +73,8 @@ args: 1,15,3
arg: Str('aciname', attribute=True, cli_name='name', multivalue=False, primary_key=True, query=True, required=True)
option: Str('permission', attribute=False, autofill=False, cli_name='permission', multivalue=False, required=False)
option: Str('group', attribute=False, autofill=False, cli_name='group', multivalue=False, required=False)
-option: List('permissions', attribute=False, autofill=False, cli_name='permissions', multivalue=True, required=False)
-option: List('attrs', attribute=False, autofill=False, cli_name='attrs', multivalue=True, required=False)
+option: Str('permissions', attribute=False, autofill=False, cli_name='permissions', csv=True, multivalue=True, required=False)
+option: Str('attrs', attribute=False, autofill=False, cli_name='attrs', csv=True, multivalue=True, required=False)
option: StrEnum('type', attribute=False, autofill=False, cli_name='type', multivalue=False, required=False, values=(u'user', u'group', u'host', u'service', u'hostgroup', u'netgroup', u'dnsrecord'))
option: Str('memberof', attribute=False, autofill=False, cli_name='memberof', multivalue=False, required=False)
option: Str('filter', attribute=False, autofill=False, cli_name='filter', multivalue=False, required=False)
@@ -114,8 +114,8 @@ command: automember_add_condition
args: 1,8,5
arg: Str('cn', cli_name='automember_rule')
option: Str('description', attribute=True, autofill=False, cli_name='desc', multivalue=False, required=False)
-option: List('automemberinclusiveregex?', alwaysask=True, cli_name='inclusive_regex', multivalue=True)
-option: List('automemberexclusiveregex?', alwaysask=True, cli_name='exclusive_regex', multivalue=True)
+option: Str('automemberinclusiveregex*', alwaysask=True, cli_name='inclusive_regex', csv=True)
+option: Str('automemberexclusiveregex*', alwaysask=True, cli_name='exclusive_regex', csv=True)
option: Str('key')
option: StrEnum('type', values=(u'group', u'hostgroup'))
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
@@ -190,8 +190,8 @@ command: automember_remove_condition
args: 1,8,5
arg: Str('cn', cli_name='automember_rule')
option: Str('description', attribute=True, autofill=False, cli_name='desc', multivalue=False, required=False)
-option: List('automemberinclusiveregex?', alwaysask=True, cli_name='inclusive_regex', multivalue=True)
-option: List('automemberexclusiveregex?', alwaysask=True, cli_name='exclusive_regex', multivalue=True)
+option: Str('automemberinclusiveregex*', alwaysask=True, cli_name='inclusive_regex', csv=True)
+option: Str('automemberexclusiveregex*', alwaysask=True, cli_name='exclusive_regex', csv=True)
option: Str('key')
option: StrEnum('type', values=(u'group', u'hostgroup'))
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
@@ -415,7 +415,7 @@ output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDA
output: Output('value', <type 'unicode'>, None)
command: batch
args: 1,0,2
-arg: List('methods?', multivalue=True)
+arg: Any('methods*')
output: Output('count', <type 'int'>, None)
output: Output('results', <type 'list'>, None)
command: cert_remove_hold
@@ -455,8 +455,8 @@ option: Int('ipasearchrecordslimit', attribute=True, autofill=False, cli_name='s
option: IA5Str('ipausersearchfields', attribute=True, autofill=False, cli_name='usersearch', multivalue=False, required=False)
option: IA5Str('ipagroupsearchfields', attribute=True, autofill=False, cli_name='groupsearch', multivalue=False, required=False)
option: Bool('ipamigrationenabled', attribute=True, autofill=False, cli_name='enable_migration', multivalue=False, required=False)
-option: List('ipagroupobjectclasses', attribute=True, autofill=False, cli_name='groupobjectclasses', multivalue=True, required=False)
-option: List('ipauserobjectclasses', attribute=True, autofill=False, cli_name='userobjectclasses', multivalue=True, required=False)
+option: Str('ipagroupobjectclasses', attribute=True, autofill=False, cli_name='groupobjectclasses', csv=True, multivalue=True, required=False)
+option: Str('ipauserobjectclasses', attribute=True, autofill=False, cli_name='userobjectclasses', csv=True, multivalue=True, required=False)
option: Int('ipapwdexpadvnotify', attribute=True, autofill=False, cli_name='pwdexpnotify', minvalue=0, multivalue=False, required=False)
option: Str('setattr*', cli_name='setattr', exclude='webui')
option: Str('addattr*', cli_name='addattr', exclude='webui')
@@ -541,8 +541,8 @@ output: Output('value', <type 'unicode'>, None)
command: delegation_add
args: 1,7,3
arg: Str('aciname', attribute=True, cli_name='name', multivalue=False, primary_key=True, required=True)
-option: List('permissions', attribute=True, cli_name='permissions', multivalue=True, required=False)
-option: List('attrs', attribute=True, cli_name='attrs', multivalue=True, required=True)
+option: Str('permissions', attribute=True, cli_name='permissions', csv=True, multivalue=True, required=False)
+option: Str('attrs', attribute=True, cli_name='attrs', csv=True, multivalue=True, required=True)
option: Str('memberof', attribute=True, cli_name='membergroup', multivalue=False, required=True)
option: Str('group', attribute=True, cli_name='group', multivalue=False, required=True)
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
@@ -561,8 +561,8 @@ command: delegation_find
args: 1,8,4
arg: Str('criteria?')
option: Str('aciname', attribute=True, autofill=False, cli_name='name', multivalue=False, primary_key=True, query=True, required=False)
-option: List('permissions', attribute=True, autofill=False, cli_name='permissions', multivalue=True, query=True, required=False)
-option: List('attrs', attribute=True, autofill=False, cli_name='attrs', multivalue=True, query=True, required=False)
+option: Str('permissions', attribute=True, autofill=False, cli_name='permissions', csv=True, multivalue=True, query=True, required=False)
+option: Str('attrs', attribute=True, autofill=False, cli_name='attrs', csv=True, multivalue=True, query=True, required=False)
option: Str('memberof', attribute=True, autofill=False, cli_name='membergroup', multivalue=False, query=True, required=False)
option: Str('group', attribute=True, autofill=False, cli_name='group', multivalue=False, query=True, required=False)
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
@@ -575,8 +575,8 @@ output: Output('truncated', <type 'bool'>, None)
command: delegation_mod
args: 1,7,3
arg: Str('aciname', attribute=True, cli_name='name', multivalue=False, primary_key=True, query=True, required=True)
-option: List('permissions', attribute=True, autofill=False, cli_name='permissions', multivalue=True, required=False)
-option: List('attrs', attribute=True, autofill=False, cli_name='attrs', multivalue=True, required=False)
+option: Str('permissions', attribute=True, autofill=False, cli_name='permissions', csv=True, multivalue=True, required=False)
+option: Str('attrs', attribute=True, autofill=False, cli_name='attrs', csv=True, multivalue=True, required=False)
option: Str('memberof', attribute=True, autofill=False, cli_name='membergroup', multivalue=False, required=False)
option: Str('group', attribute=True, autofill=False, cli_name='group', multivalue=False, required=False)
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
@@ -617,40 +617,40 @@ option: Flag('force', autofill=True, default=False)
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('arecord?', attribute=True, cli_name='a_rec', multivalue=True)
-option: List('aaaarecord?', attribute=True, cli_name='aaaa_rec', multivalue=True)
-option: List('a6record?', attribute=True, cli_name='a6_rec', multivalue=True)
-option: List('afsdbrecord?', attribute=True, cli_name='afsdb_rec', multivalue=True)
-option: List('aplrecord?', attribute=True, cli_name='apl_rec', multivalue=True)
-option: List('certrecord?', attribute=True, cli_name='cert_rec', multivalue=True)
-option: List('cnamerecord?', attribute=True, cli_name='cname_rec', multivalue=True)
-option: List('dhcidrecord?', attribute=True, cli_name='dhcid_rec', multivalue=True)
-option: List('dlvrecord?', attribute=True, cli_name='dlv_rec', multivalue=True)
-option: List('dnamerecord?', attribute=True, cli_name='dname_rec', multivalue=True)
-option: List('dnskeyrecord?', attribute=True, cli_name='dnskey_rec', multivalue=True)
-option: List('dsrecord?', attribute=True, cli_name='ds_rec', multivalue=True)
-option: List('hiprecord?', attribute=True, cli_name='hip_rec', multivalue=True)
-option: List('ipseckeyrecord?', attribute=True, cli_name='ipseckey_rec', multivalue=True)
-option: List('keyrecord?', attribute=True, cli_name='key_rec', multivalue=True)
-option: List('kxrecord?', attribute=True, cli_name='kx_rec', multivalue=True)
-option: List('locrecord?', attribute=True, cli_name='loc_rec', multivalue=True)
-option: List('mxrecord?', attribute=True, cli_name='mx_rec', multivalue=True)
-option: List('naptrrecord?', attribute=True, cli_name='naptr_rec', multivalue=True)
-option: List('nsrecord?', attribute=True, cli_name='ns_rec', multivalue=True)
-option: List('nsecrecord?', attribute=True, cli_name='nsec_rec', multivalue=True)
-option: List('nsec3record?', attribute=True, cli_name='nsec3_rec', multivalue=True)
-option: List('nsec3paramrecord?', attribute=True, cli_name='nsec3param_rec', multivalue=True)
-option: List('ptrrecord?', attribute=True, cli_name='ptr_rec', multivalue=True)
-option: List('rrsigrecord?', attribute=True, cli_name='rrsig_rec', multivalue=True)
-option: List('rprecord?', attribute=True, cli_name='rp_rec', multivalue=True)
-option: List('sigrecord?', attribute=True, cli_name='sig_rec', multivalue=True)
-option: List('spfrecord?', attribute=True, cli_name='spf_rec', multivalue=True)
-option: List('srvrecord?', attribute=True, cli_name='srv_rec', multivalue=True)
-option: List('sshfprecord?', attribute=True, cli_name='sshfp_rec', multivalue=True)
-option: List('tarecord?', attribute=True, cli_name='ta_rec', multivalue=True)
-option: List('tkeyrecord?', attribute=True, cli_name='tkey_rec', multivalue=True)
-option: List('tsigrecord?', attribute=True, cli_name='tsig_rec', multivalue=True)
-option: List('txtrecord?', attribute=True, cli_name='txt_rec', multivalue=True)
+option: Str('arecord*', attribute=True, cli_name='a_rec', csv=True)
+option: Str('aaaarecord*', attribute=True, cli_name='aaaa_rec', csv=True)
+option: Str('a6record*', attribute=True, cli_name='a6_rec', csv=True)
+option: Str('afsdbrecord*', attribute=True, cli_name='afsdb_rec', csv=True)
+option: Str('aplrecord*', attribute=True, cli_name='apl_rec', csv=True)
+option: Str('certrecord*', attribute=True, cli_name='cert_rec', csv=True)
+option: Str('cnamerecord*', attribute=True, cli_name='cname_rec', csv=True)
+option: Str('dhcidrecord*', attribute=True, cli_name='dhcid_rec', csv=True)
+option: Str('dlvrecord*', attribute=True, cli_name='dlv_rec', csv=True)
+option: Str('dnamerecord*', attribute=True, cli_name='dname_rec', csv=True)
+option: Str('dnskeyrecord*', attribute=True, cli_name='dnskey_rec', csv=True)
+option: Str('dsrecord*', attribute=True, cli_name='ds_rec', csv=True)
+option: Str('hiprecord*', attribute=True, cli_name='hip_rec', csv=True)
+option: Str('ipseckeyrecord*', attribute=True, cli_name='ipseckey_rec', csv=True)
+option: Str('keyrecord*', attribute=True, cli_name='key_rec', csv=True)
+option: Str('kxrecord*', attribute=True, cli_name='kx_rec', csv=True)
+option: Str('locrecord*', attribute=True, cli_name='loc_rec', csv=True)
+option: Str('mxrecord*', attribute=True, cli_name='mx_rec', csv=True)
+option: Str('naptrrecord*', attribute=True, cli_name='naptr_rec', csv=True)
+option: Str('nsrecord*', attribute=True, cli_name='ns_rec', csv=True)
+option: Str('nsecrecord*', attribute=True, cli_name='nsec_rec', csv=True)
+option: Str('nsec3record*', attribute=True, cli_name='nsec3_rec', csv=True)
+option: Str('nsec3paramrecord*', attribute=True, cli_name='nsec3param_rec', csv=True)
+option: Str('ptrrecord*', attribute=True, cli_name='ptr_rec', csv=True)
+option: Str('rrsigrecord*', attribute=True, cli_name='rrsig_rec', csv=True)
+option: Str('rprecord*', attribute=True, cli_name='rp_rec', csv=True)
+option: Str('sigrecord*', attribute=True, cli_name='sig_rec', csv=True)
+option: Str('spfrecord*', attribute=True, cli_name='spf_rec', csv=True)
+option: Str('srvrecord*', attribute=True, cli_name='srv_rec', csv=True)
+option: Str('sshfprecord*', attribute=True, cli_name='sshfp_rec', csv=True)
+option: Str('tarecord*', attribute=True, cli_name='ta_rec', csv=True)
+option: Str('tkeyrecord*', attribute=True, cli_name='tkey_rec', csv=True)
+option: Str('tsigrecord*', attribute=True, cli_name='tsig_rec', csv=True)
+option: Str('txtrecord*', attribute=True, cli_name='txt_rec', csv=True)
output: Output('summary', (<type 'unicode'>, <type 'NoneType'>), None)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('value', <type 'unicode'>, None)
@@ -661,40 +661,40 @@ arg: Str('idnsname', attribute=True, cli_name='name', multivalue=False, primary_
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('arecord?', attribute=True, cli_name='a_rec', multivalue=True)
-option: List('aaaarecord?', attribute=True, cli_name='aaaa_rec', multivalue=True)
-option: List('a6record?', attribute=True, cli_name='a6_rec', multivalue=True)
-option: List('afsdbrecord?', attribute=True, cli_name='afsdb_rec', multivalue=True)
-option: List('aplrecord?', attribute=True, cli_name='apl_rec', multivalue=True)
-option: List('certrecord?', attribute=True, cli_name='cert_rec', multivalue=True)
-option: List('cnamerecord?', attribute=True, cli_name='cname_rec', multivalue=True)
-option: List('dhcidrecord?', attribute=True, cli_name='dhcid_rec', multivalue=True)
-option: List('dlvrecord?', attribute=True, cli_name='dlv_rec', multivalue=True)
-option: List('dnamerecord?', attribute=True, cli_name='dname_rec', multivalue=True)
-option: List('dnskeyrecord?', attribute=True, cli_name='dnskey_rec', multivalue=True)
-option: List('dsrecord?', attribute=True, cli_name='ds_rec', multivalue=True)
-option: List('hiprecord?', attribute=True, cli_name='hip_rec', multivalue=True)
-option: List('ipseckeyrecord?', attribute=True, cli_name='ipseckey_rec', multivalue=True)
-option: List('keyrecord?', attribute=True, cli_name='key_rec', multivalue=True)
-option: List('kxrecord?', attribute=True, cli_name='kx_rec', multivalue=True)
-option: List('locrecord?', attribute=True, cli_name='loc_rec', multivalue=True)
-option: List('mxrecord?', attribute=True, cli_name='mx_rec', multivalue=True)
-option: List('naptrrecord?', attribute=True, cli_name='naptr_rec', multivalue=True)
-option: List('nsrecord?', attribute=True, cli_name='ns_rec', multivalue=True)
-option: List('nsecrecord?', attribute=True, cli_name='nsec_rec', multivalue=True)
-option: List('nsec3record?', attribute=True, cli_name='nsec3_rec', multivalue=True)
-option: List('nsec3paramrecord?', attribute=True, cli_name='nsec3param_rec', multivalue=True)
-option: List('ptrrecord?', attribute=True, cli_name='ptr_rec', multivalue=True)
-option: List('rrsigrecord?', attribute=True, cli_name='rrsig_rec', multivalue=True)
-option: List('rprecord?', attribute=True, cli_name='rp_rec', multivalue=True)
-option: List('sigrecord?', attribute=True, cli_name='sig_rec', multivalue=True)
-option: List('spfrecord?', attribute=True, cli_name='spf_rec', multivalue=True)
-option: List('srvrecord?', attribute=True, cli_name='srv_rec', multivalue=True)
-option: List('sshfprecord?', attribute=True, cli_name='sshfp_rec', multivalue=True)
-option: List('tarecord?', attribute=True, cli_name='ta_rec', multivalue=True)
-option: List('tkeyrecord?', attribute=True, cli_name='tkey_rec', multivalue=True)
-option: List('tsigrecord?', attribute=True, cli_name='tsig_rec', multivalue=True)
-option: List('txtrecord?', attribute=True, cli_name='txt_rec', multivalue=True)
+option: Str('arecord*', attribute=True, cli_name='a_rec', csv=True)
+option: Str('aaaarecord*', attribute=True, cli_name='aaaa_rec', csv=True)
+option: Str('a6record*', attribute=True, cli_name='a6_rec', csv=True)
+option: Str('afsdbrecord*', attribute=True, cli_name='afsdb_rec', csv=True)
+option: Str('aplrecord*', attribute=True, cli_name='apl_rec', csv=True)
+option: Str('certrecord*', attribute=True, cli_name='cert_rec', csv=True)
+option: Str('cnamerecord*', attribute=True, cli_name='cname_rec', csv=True)
+option: Str('dhcidrecord*', attribute=True, cli_name='dhcid_rec', csv=True)
+option: Str('dlvrecord*', attribute=True, cli_name='dlv_rec', csv=True)
+option: Str('dnamerecord*', attribute=True, cli_name='dname_rec', csv=True)
+option: Str('dnskeyrecord*', attribute=True, cli_name='dnskey_rec', csv=True)
+option: Str('dsrecord*', attribute=True, cli_name='ds_rec', csv=True)
+option: Str('hiprecord*', attribute=True, cli_name='hip_rec', csv=True)
+option: Str('ipseckeyrecord*', attribute=True, cli_name='ipseckey_rec', csv=True)
+option: Str('keyrecord*', attribute=True, cli_name='key_rec', csv=True)
+option: Str('kxrecord*', attribute=True, cli_name='kx_rec', csv=True)
+option: Str('locrecord*', attribute=True, cli_name='loc_rec', csv=True)
+option: Str('mxrecord*', attribute=True, cli_name='mx_rec', csv=True)
+option: Str('naptrrecord*', attribute=True, cli_name='naptr_rec', csv=True)
+option: Str('nsrecord*', attribute=True, cli_name='ns_rec', csv=True)
+option: Str('nsecrecord*', attribute=True, cli_name='nsec_rec', csv=True)
+option: Str('nsec3record*', attribute=True, cli_name='nsec3_rec', csv=True)
+option: Str('nsec3paramrecord*', attribute=True, cli_name='nsec3param_rec', csv=True)
+option: Str('ptrrecord*', attribute=True, cli_name='ptr_rec', csv=True)
+option: Str('rrsigrecord*', attribute=True, cli_name='rrsig_rec', csv=True)
+option: Str('rprecord*', attribute=True, cli_name='rp_rec', csv=True)
+option: Str('sigrecord*', attribute=True, cli_name='sig_rec', csv=True)
+option: Str('spfrecord*', attribute=True, cli_name='spf_rec', csv=True)
+option: Str('srvrecord*', attribute=True, cli_name='srv_rec', csv=True)
+option: Str('sshfprecord*', attribute=True, cli_name='sshfp_rec', csv=True)
+option: Str('tarecord*', attribute=True, cli_name='ta_rec', csv=True)
+option: Str('tkeyrecord*', attribute=True, cli_name='tkey_rec', csv=True)
+option: Str('tsigrecord*', attribute=True, cli_name='tsig_rec', csv=True)
+option: Str('txtrecord*', attribute=True, cli_name='txt_rec', csv=True)
output: Output('summary', (<type 'unicode'>, <type 'NoneType'>), None)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('value', <type 'unicode'>, None)
@@ -706,40 +706,40 @@ option: Flag('del_all', autofill=True, default=False)
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('arecord?', attribute=True, cli_name='a_rec', multivalue=True)
-option: List('aaaarecord?', attribute=True, cli_name='aaaa_rec', multivalue=True)
-option: List('a6record?', attribute=True, cli_name='a6_rec', multivalue=True)
-option: List('afsdbrecord?', attribute=True, cli_name='afsdb_rec', multivalue=True)
-option: List('aplrecord?', attribute=True, cli_name='apl_rec', multivalue=True)
-option: List('certrecord?', attribute=True, cli_name='cert_rec', multivalue=True)
-option: List('cnamerecord?', attribute=True, cli_name='cname_rec', multivalue=True)
-option: List('dhcidrecord?', attribute=True, cli_name='dhcid_rec', multivalue=True)
-option: List('dlvrecord?', attribute=True, cli_name='dlv_rec', multivalue=True)
-option: List('dnamerecord?', attribute=True, cli_name='dname_rec', multivalue=True)
-option: List('dnskeyrecord?', attribute=True, cli_name='dnskey_rec', multivalue=True)
-option: List('dsrecord?', attribute=True, cli_name='ds_rec', multivalue=True)
-option: List('hiprecord?', attribute=True, cli_name='hip_rec', multivalue=True)
-option: List('ipseckeyrecord?', attribute=True, cli_name='ipseckey_rec', multivalue=True)
-option: List('keyrecord?', attribute=True, cli_name='key_rec', multivalue=True)
-option: List('kxrecord?', attribute=True, cli_name='kx_rec', multivalue=True)
-option: List('locrecord?', attribute=True, cli_name='loc_rec', multivalue=True)
-option: List('mxrecord?', attribute=True, cli_name='mx_rec', multivalue=True)
-option: List('naptrrecord?', attribute=True, cli_name='naptr_rec', multivalue=True)
-option: List('nsrecord?', attribute=True, cli_name='ns_rec', multivalue=True)
-option: List('nsecrecord?', attribute=True, cli_name='nsec_rec', multivalue=True)
-option: List('nsec3record?', attribute=True, cli_name='nsec3_rec', multivalue=True)
-option: List('nsec3paramrecord?', attribute=True, cli_name='nsec3param_rec', multivalue=True)
-option: List('ptrrecord?', attribute=True, cli_name='ptr_rec', multivalue=True)
-option: List('rrsigrecord?', attribute=True, cli_name='rrsig_rec', multivalue=True)
-option: List('rprecord?', attribute=True, cli_name='rp_rec', multivalue=True)
-option: List('sigrecord?', attribute=True, cli_name='sig_rec', multivalue=True)
-option: List('spfrecord?', attribute=True, cli_name='spf_rec', multivalue=True)
-option: List('srvrecord?', attribute=True, cli_name='srv_rec', multivalue=True)
-option: List('sshfprecord?', attribute=True, cli_name='sshfp_rec', multivalue=True)
-option: List('tarecord?', attribute=True, cli_name='ta_rec', multivalue=True)
-option: List('tkeyrecord?', attribute=True, cli_name='tkey_rec', multivalue=True)
-option: List('tsigrecord?', attribute=True, cli_name='tsig_rec', multivalue=True)
-option: List('txtrecord?', attribute=True, cli_name='txt_rec', multivalue=True)
+option: Str('arecord*', attribute=True, cli_name='a_rec', csv=True)
+option: Str('aaaarecord*', attribute=True, cli_name='aaaa_rec', csv=True)
+option: Str('a6record*', attribute=True, cli_name='a6_rec', csv=True)
+option: Str('afsdbrecord*', attribute=True, cli_name='afsdb_rec', csv=True)
+option: Str('aplrecord*', attribute=True, cli_name='apl_rec', csv=True)
+option: Str('certrecord*', attribute=True, cli_name='cert_rec', csv=True)
+option: Str('cnamerecord*', attribute=True, cli_name='cname_rec', csv=True)
+option: Str('dhcidrecord*', attribute=True, cli_name='dhcid_rec', csv=True)
+option: Str('dlvrecord*', attribute=True, cli_name='dlv_rec', csv=True)
+option: Str('dnamerecord*', attribute=True, cli_name='dname_rec', csv=True)
+option: Str('dnskeyrecord*', attribute=True, cli_name='dnskey_rec', csv=True)
+option: Str('dsrecord*', attribute=True, cli_name='ds_rec', csv=True)
+option: Str('hiprecord*', attribute=True, cli_name='hip_rec', csv=True)
+option: Str('ipseckeyrecord*', attribute=True, cli_name='ipseckey_rec', csv=True)
+option: Str('keyrecord*', attribute=True, cli_name='key_rec', csv=True)
+option: Str('kxrecord*', attribute=True, cli_name='kx_rec', csv=True)
+option: Str('locrecord*', attribute=True, cli_name='loc_rec', csv=True)
+option: Str('mxrecord*', attribute=True, cli_name='mx_rec', csv=True)
+option: Str('naptrrecord*', attribute=True, cli_name='naptr_rec', csv=True)
+option: Str('nsrecord*', attribute=True, cli_name='ns_rec', csv=True)
+option: Str('nsecrecord*', attribute=True, cli_name='nsec_rec', csv=True)
+option: Str('nsec3record*', attribute=True, cli_name='nsec3_rec', csv=True)
+option: Str('nsec3paramrecord*', attribute=True, cli_name='nsec3param_rec', csv=True)
+option: Str('ptrrecord*', attribute=True, cli_name='ptr_rec', csv=True)
+option: Str('rrsigrecord*', attribute=True, cli_name='rrsig_rec', csv=True)
+option: Str('rprecord*', attribute=True, cli_name='rp_rec', csv=True)
+option: Str('sigrecord*', attribute=True, cli_name='sig_rec', csv=True)
+option: Str('spfrecord*', attribute=True, cli_name='spf_rec', csv=True)
+option: Str('srvrecord*', attribute=True, cli_name='srv_rec', csv=True)
+option: Str('sshfprecord*', attribute=True, cli_name='sshfp_rec', csv=True)
+option: Str('tarecord*', attribute=True, cli_name='ta_rec', csv=True)
+option: Str('tkeyrecord*', attribute=True, cli_name='tkey_rec', csv=True)
+option: Str('tsigrecord*', attribute=True, cli_name='tsig_rec', csv=True)
+option: Str('txtrecord*', attribute=True, cli_name='txt_rec', csv=True)
output: Output('summary', (<type 'unicode'>, <type 'NoneType'>), None)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('value', <type 'unicode'>, None)
@@ -764,40 +764,40 @@ option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
option: Flag('pkey_only?', autofill=True, default=False)
-option: List('arecord', attribute=True, cli_name='a_rec', multivalue=True, query=True, required=False)
-option: List('aaaarecord', attribute=True, cli_name='aaaa_rec', multivalue=True, query=True, required=False)
-option: List('a6record', attribute=True, cli_name='a6_rec', multivalue=True, query=True, required=False)
-option: List('afsdbrecord', attribute=True, cli_name='afsdb_rec', multivalue=True, query=True, required=False)
-option: List('aplrecord', attribute=True, cli_name='apl_rec', multivalue=True, query=True, required=False)
-option: List('certrecord', attribute=True, cli_name='cert_rec', multivalue=True, query=True, required=False)
-option: List('cnamerecord', attribute=True, cli_name='cname_rec', multivalue=True, query=True, required=False)
-option: List('dhcidrecord', attribute=True, cli_name='dhcid_rec', multivalue=True, query=True, required=False)
-option: List('dlvrecord', attribute=True, cli_name='dlv_rec', multivalue=True, query=True, required=False)
-option: List('dnamerecord', attribute=True, cli_name='dname_rec', multivalue=True, query=True, required=False)
-option: List('dnskeyrecord', attribute=True, cli_name='dnskey_rec', multivalue=True, query=True, required=False)
-option: List('dsrecord', attribute=True, cli_name='ds_rec', multivalue=True, query=True, required=False)
-option: List('hiprecord', attribute=True, cli_name='hip_rec', multivalue=True, query=True, required=False)
-option: List('ipseckeyrecord', attribute=True, cli_name='ipseckey_rec', multivalue=True, query=True, required=False)
-option: List('keyrecord', attribute=True, cli_name='key_rec', multivalue=True, query=True, required=False)
-option: List('kxrecord', attribute=True, cli_name='kx_rec', multivalue=True, query=True, required=False)
-option: List('locrecord', attribute=True, cli_name='loc_rec', multivalue=True, query=True, required=False)
-option: List('mxrecord', attribute=True, cli_name='mx_rec', multivalue=True, query=True, required=False)
-option: List('naptrrecord', attribute=True, cli_name='naptr_rec', multivalue=True, query=True, required=False)
-option: List('nsrecord', attribute=True, cli_name='ns_rec', multivalue=True, query=True, required=False)
-option: List('nsecrecord', attribute=True, cli_name='nsec_rec', multivalue=True, query=True, required=False)
-option: List('nsec3record', attribute=True, cli_name='nsec3_rec', multivalue=True, query=True, required=False)
-option: List('nsec3paramrecord', attribute=True, cli_name='nsec3param_rec', multivalue=True, query=True, required=False)
-option: List('ptrrecord', attribute=True, cli_name='ptr_rec', multivalue=True, query=True, required=False)
-option: List('rrsigrecord', attribute=True, cli_name='rrsig_rec', multivalue=True, query=True, required=False)
-option: List('rprecord', attribute=True, cli_name='rp_rec', multivalue=True, query=True, required=False)
-option: List('sigrecord', attribute=True, cli_name='sig_rec', multivalue=True, query=True, required=False)
-option: List('spfrecord', attribute=True, cli_name='spf_rec', multivalue=True, query=True, required=False)
-option: List('srvrecord', attribute=True, cli_name='srv_rec', multivalue=True, query=True, required=False)
-option: List('sshfprecord', attribute=True, cli_name='sshfp_rec', multivalue=True, query=True, required=False)
-option: List('tarecord', attribute=True, cli_name='ta_rec', multivalue=True, query=True, required=False)
-option: List('tkeyrecord', attribute=True, cli_name='tkey_rec', multivalue=True, query=True, required=False)
-option: List('tsigrecord', attribute=True, cli_name='tsig_rec', multivalue=True, query=True, required=False)
-option: List('txtrecord', attribute=True, cli_name='txt_rec', multivalue=True, query=True, required=False)
+option: Str('arecord', attribute=True, cli_name='a_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('aaaarecord', attribute=True, cli_name='aaaa_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('a6record', attribute=True, cli_name='a6_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('afsdbrecord', attribute=True, cli_name='afsdb_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('aplrecord', attribute=True, cli_name='apl_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('certrecord', attribute=True, cli_name='cert_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('cnamerecord', attribute=True, cli_name='cname_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('dhcidrecord', attribute=True, cli_name='dhcid_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('dlvrecord', attribute=True, cli_name='dlv_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('dnamerecord', attribute=True, cli_name='dname_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('dnskeyrecord', attribute=True, cli_name='dnskey_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('dsrecord', attribute=True, cli_name='ds_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('hiprecord', attribute=True, cli_name='hip_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('ipseckeyrecord', attribute=True, cli_name='ipseckey_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('keyrecord', attribute=True, cli_name='key_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('kxrecord', attribute=True, cli_name='kx_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('locrecord', attribute=True, cli_name='loc_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('mxrecord', attribute=True, cli_name='mx_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('naptrrecord', attribute=True, cli_name='naptr_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('nsrecord', attribute=True, cli_name='ns_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('nsecrecord', attribute=True, cli_name='nsec_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('nsec3record', attribute=True, cli_name='nsec3_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('nsec3paramrecord', attribute=True, cli_name='nsec3param_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('ptrrecord', attribute=True, cli_name='ptr_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('rrsigrecord', attribute=True, cli_name='rrsig_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('rprecord', attribute=True, cli_name='rp_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('sigrecord', attribute=True, cli_name='sig_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('spfrecord', attribute=True, cli_name='spf_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('srvrecord', attribute=True, cli_name='srv_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('sshfprecord', attribute=True, cli_name='sshfp_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('tarecord', attribute=True, cli_name='ta_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('tkeyrecord', attribute=True, cli_name='tkey_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('tsigrecord', attribute=True, cli_name='tsig_rec', csv=True, multivalue=True, query=True, required=False)
+option: Str('txtrecord', attribute=True, cli_name='txt_rec', csv=True, multivalue=True, query=True, required=False)
output: Output('summary', (<type 'unicode'>, <type 'NoneType'>), None)
output: ListOfEntries('result', (<type 'list'>, <type 'tuple'>), Gettext('A list of LDAP entries', domain='ipa', localedir=None))
output: Output('count', <type 'int'>, None)
@@ -809,40 +809,40 @@ arg: Str('idnsname', attribute=True, cli_name='name', multivalue=False, primary_
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('arecord?', attribute=True, cli_name='a_rec', multivalue=True)
-option: List('aaaarecord?', attribute=True, cli_name='aaaa_rec', multivalue=True)
-option: List('a6record?', attribute=True, cli_name='a6_rec', multivalue=True)
-option: List('afsdbrecord?', attribute=True, cli_name='afsdb_rec', multivalue=True)
-option: List('aplrecord?', attribute=True, cli_name='apl_rec', multivalue=True)
-option: List('certrecord?', attribute=True, cli_name='cert_rec', multivalue=True)
-option: List('cnamerecord?', attribute=True, cli_name='cname_rec', multivalue=True)
-option: List('dhcidrecord?', attribute=True, cli_name='dhcid_rec', multivalue=True)
-option: List('dlvrecord?', attribute=True, cli_name='dlv_rec', multivalue=True)
-option: List('dnamerecord?', attribute=True, cli_name='dname_rec', multivalue=True)
-option: List('dnskeyrecord?', attribute=True, cli_name='dnskey_rec', multivalue=True)
-option: List('dsrecord?', attribute=True, cli_name='ds_rec', multivalue=True)
-option: List('hiprecord?', attribute=True, cli_name='hip_rec', multivalue=True)
-option: List('ipseckeyrecord?', attribute=True, cli_name='ipseckey_rec', multivalue=True)
-option: List('keyrecord?', attribute=True, cli_name='key_rec', multivalue=True)
-option: List('kxrecord?', attribute=True, cli_name='kx_rec', multivalue=True)
-option: List('locrecord?', attribute=True, cli_name='loc_rec', multivalue=True)
-option: List('mxrecord?', attribute=True, cli_name='mx_rec', multivalue=True)
-option: List('naptrrecord?', attribute=True, cli_name='naptr_rec', multivalue=True)
-option: List('nsrecord?', attribute=True, cli_name='ns_rec', multivalue=True)
-option: List('nsecrecord?', attribute=True, cli_name='nsec_rec', multivalue=True)
-option: List('nsec3record?', attribute=True, cli_name='nsec3_rec', multivalue=True)
-option: List('nsec3paramrecord?', attribute=True, cli_name='nsec3param_rec', multivalue=True)
-option: List('ptrrecord?', attribute=True, cli_name='ptr_rec', multivalue=True)
-option: List('rrsigrecord?', attribute=True, cli_name='rrsig_rec', multivalue=True)
-option: List('rprecord?', attribute=True, cli_name='rp_rec', multivalue=True)
-option: List('sigrecord?', attribute=True, cli_name='sig_rec', multivalue=True)
-option: List('spfrecord?', attribute=True, cli_name='spf_rec', multivalue=True)
-option: List('srvrecord?', attribute=True, cli_name='srv_rec', multivalue=True)
-option: List('sshfprecord?', attribute=True, cli_name='sshfp_rec', multivalue=True)
-option: List('tarecord?', attribute=True, cli_name='ta_rec', multivalue=True)
-option: List('tkeyrecord?', attribute=True, cli_name='tkey_rec', multivalue=True)
-option: List('tsigrecord?', attribute=True, cli_name='tsig_rec', multivalue=True)
-option: List('txtrecord?', attribute=True, cli_name='txt_rec', multivalue=True)
+option: Str('arecord*', attribute=True, cli_name='a_rec', csv=True)
+option: Str('aaaarecord*', attribute=True, cli_name='aaaa_rec', csv=True)
+option: Str('a6record*', attribute=True, cli_name='a6_rec', csv=True)
+option: Str('afsdbrecord*', attribute=True, cli_name='afsdb_rec', csv=True)
+option: Str('aplrecord*', attribute=True, cli_name='apl_rec', csv=True)
+option: Str('certrecord*', attribute=True, cli_name='cert_rec', csv=True)
+option: Str('cnamerecord*', attribute=True, cli_name='cname_rec', csv=True)
+option: Str('dhcidrecord*', attribute=True, cli_name='dhcid_rec', csv=True)
+option: Str('dlvrecord*', attribute=True, cli_name='dlv_rec', csv=True)
+option: Str('dnamerecord*', attribute=True, cli_name='dname_rec', csv=True)
+option: Str('dnskeyrecord*', attribute=True, cli_name='dnskey_rec', csv=True)
+option: Str('dsrecord*', attribute=True, cli_name='ds_rec', csv=True)
+option: Str('hiprecord*', attribute=True, cli_name='hip_rec', csv=True)
+option: Str('ipseckeyrecord*', attribute=True, cli_name='ipseckey_rec', csv=True)
+option: Str('keyrecord*', attribute=True, cli_name='key_rec', csv=True)
+option: Str('kxrecord*', attribute=True, cli_name='kx_rec', csv=True)
+option: Str('locrecord*', attribute=True, cli_name='loc_rec', csv=True)
+option: Str('mxrecord*', attribute=True, cli_name='mx_rec', csv=True)
+option: Str('naptrrecord*', attribute=True, cli_name='naptr_rec', csv=True)
+option: Str('nsrecord*', attribute=True, cli_name='ns_rec', csv=True)
+option: Str('nsecrecord*', attribute=True, cli_name='nsec_rec', csv=True)
+option: Str('nsec3record*', attribute=True, cli_name='nsec3_rec', csv=True)
+option: Str('nsec3paramrecord*', attribute=True, cli_name='nsec3param_rec', csv=True)
+option: Str('ptrrecord*', attribute=True, cli_name='ptr_rec', csv=True)
+option: Str('rrsigrecord*', attribute=True, cli_name='rrsig_rec', csv=True)
+option: Str('rprecord*', attribute=True, cli_name='rp_rec', csv=True)
+option: Str('sigrecord*', attribute=True, cli_name='sig_rec', csv=True)
+option: Str('spfrecord*', attribute=True, cli_name='spf_rec', csv=True)
+option: Str('srvrecord*', attribute=True, cli_name='srv_rec', csv=True)
+option: Str('sshfprecord*', attribute=True, cli_name='sshfp_rec', csv=True)
+option: Str('tarecord*', attribute=True, cli_name='ta_rec', csv=True)
+option: Str('tkeyrecord*', attribute=True, cli_name='tkey_rec', csv=True)
+option: Str('tsigrecord*', attribute=True, cli_name='tsig_rec', csv=True)
+option: Str('txtrecord*', attribute=True, cli_name='txt_rec', csv=True)
output: Output('summary', (<type 'unicode'>, <type 'NoneType'>), None)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('value', <type 'unicode'>, None)
@@ -1056,8 +1056,8 @@ arg: Str('cn', attribute=True, cli_name='group_name', maxlength=255, multivalue=
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('user?', alwaysask=True, cli_name='users', multivalue=True)
-option: List('group?', alwaysask=True, cli_name='groups', multivalue=True)
+option: Str('user*', alwaysask=True, cli_name='users', csv=True)
+option: Str('group*', alwaysask=True, cli_name='groups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -1087,20 +1087,20 @@ option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
option: Flag('pkey_only?', autofill=True, default=False)
-option: List('user?', cli_name='users', multivalue=True)
-option: List('no_user?', cli_name='no_users', multivalue=True)
-option: List('group?', cli_name='groups', multivalue=True)
-option: List('no_group?', cli_name='no_groups', multivalue=True)
-option: List('in_group?', cli_name='in_groups', multivalue=True)
-option: List('not_in_group?', cli_name='not_in_groups', multivalue=True)
-option: List('in_netgroup?', cli_name='in_netgroups', multivalue=True)
-option: List('not_in_netgroup?', cli_name='not_in_netgroups', multivalue=True)
-option: List('in_role?', cli_name='in_roles', multivalue=True)
-option: List('not_in_role?', cli_name='not_in_roles', multivalue=True)
-option: List('in_hbacrule?', cli_name='in_hbacrules', multivalue=True)
-option: List('not_in_hbacrule?', cli_name='not_in_hbacrules', multivalue=True)
-option: List('in_sudorule?', cli_name='in_sudorules', multivalue=True)
-option: List('not_in_sudorule?', cli_name='not_in_sudorules', multivalue=True)
+option: Str('user*', cli_name='users', csv=True)
+option: Str('no_user*', cli_name='no_users', csv=True)
+option: Str('group*', cli_name='groups', csv=True)
+option: Str('no_group*', cli_name='no_groups', csv=True)
+option: Str('in_group*', cli_name='in_groups', csv=True)
+option: Str('not_in_group*', cli_name='not_in_groups', csv=True)
+option: Str('in_netgroup*', cli_name='in_netgroups', csv=True)
+option: Str('not_in_netgroup*', cli_name='not_in_netgroups', csv=True)
+option: Str('in_role*', cli_name='in_roles', csv=True)
+option: Str('not_in_role*', cli_name='not_in_roles', csv=True)
+option: Str('in_hbacrule*', cli_name='in_hbacrules', csv=True)
+option: Str('not_in_hbacrule*', cli_name='not_in_hbacrules', csv=True)
+option: Str('in_sudorule*', cli_name='in_sudorules', csv=True)
+option: Str('not_in_sudorule*', cli_name='not_in_sudorules', csv=True)
output: Output('summary', (<type 'unicode'>, <type 'NoneType'>), None)
output: ListOfEntries('result', (<type 'list'>, <type 'tuple'>), Gettext('A list of LDAP entries', domain='ipa', localedir=None))
output: Output('count', <type 'int'>, None)
@@ -1128,8 +1128,8 @@ arg: Str('cn', attribute=True, cli_name='group_name', maxlength=255, multivalue=
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('user?', alwaysask=True, cli_name='users', multivalue=True)
-option: List('group?', alwaysask=True, cli_name='groups', multivalue=True)
+option: Str('user*', alwaysask=True, cli_name='users', csv=True)
+option: Str('group*', alwaysask=True, cli_name='groups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -1166,8 +1166,8 @@ arg: Str('cn', attribute=True, cli_name='name', multivalue=False, primary_key=Tr
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('host?', alwaysask=True, cli_name='hosts', multivalue=True)
-option: List('hostgroup?', alwaysask=True, cli_name='hostgroups', multivalue=True)
+option: Str('host*', alwaysask=True, cli_name='hosts', csv=True)
+option: Str('hostgroup*', alwaysask=True, cli_name='hostgroups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -1177,8 +1177,8 @@ arg: Str('cn', attribute=True, cli_name='name', multivalue=False, primary_key=Tr
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('hbacsvc?', alwaysask=True, cli_name='hbacsvcs', multivalue=True)
-option: List('hbacsvcgroup?', alwaysask=True, cli_name='hbacsvcgroups', multivalue=True)
+option: Str('hbacsvc*', alwaysask=True, cli_name='hbacsvcs', csv=True)
+option: Str('hbacsvcgroup*', alwaysask=True, cli_name='hbacsvcgroups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -1188,8 +1188,8 @@ arg: Str('cn', attribute=True, cli_name='name', multivalue=False, primary_key=Tr
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('host?', alwaysask=True, cli_name='hosts', multivalue=True)
-option: List('hostgroup?', alwaysask=True, cli_name='hostgroups', multivalue=True)
+option: Str('host*', alwaysask=True, cli_name='hosts', csv=True)
+option: Str('hostgroup*', alwaysask=True, cli_name='hostgroups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -1199,8 +1199,8 @@ arg: Str('cn', attribute=True, cli_name='name', multivalue=False, primary_key=Tr
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('user?', alwaysask=True, cli_name='users', multivalue=True)
-option: List('group?', alwaysask=True, cli_name='groups', multivalue=True)
+option: Str('user*', alwaysask=True, cli_name='users', csv=True)
+option: Str('group*', alwaysask=True, cli_name='groups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -1268,8 +1268,8 @@ arg: Str('cn', attribute=True, cli_name='name', multivalue=False, primary_key=Tr
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('host?', alwaysask=True, cli_name='hosts', multivalue=True)
-option: List('hostgroup?', alwaysask=True, cli_name='hostgroups', multivalue=True)
+option: Str('host*', alwaysask=True, cli_name='hosts', csv=True)
+option: Str('hostgroup*', alwaysask=True, cli_name='hostgroups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -1279,8 +1279,8 @@ arg: Str('cn', attribute=True, cli_name='name', multivalue=False, primary_key=Tr
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('hbacsvc?', alwaysask=True, cli_name='hbacsvcs', multivalue=True)
-option: List('hbacsvcgroup?', alwaysask=True, cli_name='hbacsvcgroups', multivalue=True)
+option: Str('hbacsvc*', alwaysask=True, cli_name='hbacsvcs', csv=True)
+option: Str('hbacsvcgroup*', alwaysask=True, cli_name='hbacsvcgroups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -1290,8 +1290,8 @@ arg: Str('cn', attribute=True, cli_name='name', multivalue=False, primary_key=Tr
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('host?', alwaysask=True, cli_name='hosts', multivalue=True)
-option: List('hostgroup?', alwaysask=True, cli_name='hostgroups', multivalue=True)
+option: Str('host*', alwaysask=True, cli_name='hosts', csv=True)
+option: Str('hostgroup*', alwaysask=True, cli_name='hostgroups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -1301,8 +1301,8 @@ arg: Str('cn', attribute=True, cli_name='name', multivalue=False, primary_key=Tr
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('user?', alwaysask=True, cli_name='users', multivalue=True)
-option: List('group?', alwaysask=True, cli_name='groups', multivalue=True)
+option: Str('user*', alwaysask=True, cli_name='users', csv=True)
+option: Str('group*', alwaysask=True, cli_name='groups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -1392,7 +1392,7 @@ arg: Str('cn', attribute=True, cli_name='name', multivalue=False, primary_key=Tr
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('hbacsvc?', alwaysask=True, cli_name='hbacsvcs', multivalue=True)
+option: Str('hbacsvc*', alwaysask=True, cli_name='hbacsvcs', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -1438,7 +1438,7 @@ arg: Str('cn', attribute=True, cli_name='name', multivalue=False, primary_key=Tr
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('hbacsvc?', alwaysask=True, cli_name='hbacsvcs', multivalue=True)
+option: Str('hbacsvc*', alwaysask=True, cli_name='hbacsvcs', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -1458,7 +1458,7 @@ option: Str('user', cli_name='user', primary_key=True)
option: Str('sourcehost', cli_name='srchost')
option: Str('targethost', cli_name='host')
option: Str('service', cli_name='service')
-option: List('rules?', cli_name='rules', multivalue=True)
+option: Str('rules*', cli_name='rules', csv=True)
option: Flag('nodetail?', autofill=True, cli_name='nodetail', default=False)
option: Flag('enabled?', autofill=True, cli_name='enabled', default=False)
option: Flag('disabled?', autofill=True, cli_name='disabled', default=False)
@@ -1493,7 +1493,7 @@ arg: Str('fqdn', attribute=True, cli_name='hostname', maxlength=255, multivalue=
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('host?', alwaysask=True, cli_name='hosts', multivalue=True)
+option: Str('host*', alwaysask=True, cli_name='hosts', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -1527,20 +1527,20 @@ option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
option: Flag('pkey_only?', autofill=True, default=False)
-option: List('in_hostgroup?', cli_name='in_hostgroups', multivalue=True)
-option: List('not_in_hostgroup?', cli_name='not_in_hostgroups', multivalue=True)
-option: List('in_netgroup?', cli_name='in_netgroups', multivalue=True)
-option: List('not_in_netgroup?', cli_name='not_in_netgroups', multivalue=True)
-option: List('in_role?', cli_name='in_roles', multivalue=True)
-option: List('not_in_role?', cli_name='not_in_roles', multivalue=True)
-option: List('in_hbacrule?', cli_name='in_hbacrules', multivalue=True)
-option: List('not_in_hbacrule?', cli_name='not_in_hbacrules', multivalue=True)
-option: List('in_sudorule?', cli_name='in_sudorules', multivalue=True)
-option: List('not_in_sudorule?', cli_name='not_in_sudorules', multivalue=True)
-option: List('enroll_by_user?', cli_name='enroll_by_users', multivalue=True)
-option: List('not_enroll_by_user?', cli_name='not_enroll_by_users', multivalue=True)
-option: List('man_by_host?', cli_name='man_by_hosts', multivalue=True)
-option: List('not_man_by_host?', cli_name='not_man_by_hosts', multivalue=True)
+option: Str('in_hostgroup*', cli_name='in_hostgroups', csv=True)
+option: Str('not_in_hostgroup*', cli_name='not_in_hostgroups', csv=True)
+option: Str('in_netgroup*', cli_name='in_netgroups', csv=True)
+option: Str('not_in_netgroup*', cli_name='not_in_netgroups', csv=True)
+option: Str('in_role*', cli_name='in_roles', csv=True)
+option: Str('not_in_role*', cli_name='not_in_roles', csv=True)
+option: Str('in_hbacrule*', cli_name='in_hbacrules', csv=True)
+option: Str('not_in_hbacrule*', cli_name='not_in_hbacrules', csv=True)
+option: Str('in_sudorule*', cli_name='in_sudorules', csv=True)
+option: Str('not_in_sudorule*', cli_name='not_in_sudorules', csv=True)
+option: Str('enroll_by_user*', cli_name='enroll_by_users', csv=True)
+option: Str('not_enroll_by_user*', cli_name='not_enroll_by_users', csv=True)
+option: Str('man_by_host*', cli_name='man_by_hosts', csv=True)
+option: Str('not_man_by_host*', cli_name='not_man_by_hosts', csv=True)
output: Output('summary', (<type 'unicode'>, <type 'NoneType'>), None)
output: ListOfEntries('result', (<type 'list'>, <type 'tuple'>), Gettext('A list of LDAP entries', domain='ipa', localedir=None))
output: Output('count', <type 'int'>, None)
@@ -1573,7 +1573,7 @@ arg: Str('fqdn', attribute=True, cli_name='hostname', maxlength=255, multivalue=
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('host?', alwaysask=True, cli_name='hosts', multivalue=True)
+option: Str('host*', alwaysask=True, cli_name='hosts', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -1606,8 +1606,8 @@ arg: Str('cn', attribute=True, cli_name='hostgroup_name', multivalue=False, prim
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('host?', alwaysask=True, cli_name='hosts', multivalue=True)
-option: List('hostgroup?', alwaysask=True, cli_name='hostgroups', multivalue=True)
+option: Str('host*', alwaysask=True, cli_name='hosts', csv=True)
+option: Str('hostgroup*', alwaysask=True, cli_name='hostgroups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -1629,18 +1629,18 @@ option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
option: Flag('pkey_only?', autofill=True, default=False)
-option: List('host?', cli_name='hosts', multivalue=True)
-option: List('no_host?', cli_name='no_hosts', multivalue=True)
-option: List('hostgroup?', cli_name='hostgroups', multivalue=True)
-option: List('no_hostgroup?', cli_name='no_hostgroups', multivalue=True)
-option: List('in_hostgroup?', cli_name='in_hostgroups', multivalue=True)
-option: List('not_in_hostgroup?', cli_name='not_in_hostgroups', multivalue=True)
-option: List('in_netgroup?', cli_name='in_netgroups', multivalue=True)
-option: List('not_in_netgroup?', cli_name='not_in_netgroups', multivalue=True)
-option: List('in_hbacrule?', cli_name='in_hbacrules', multivalue=True)
-option: List('not_in_hbacrule?', cli_name='not_in_hbacrules', multivalue=True)
-option: List('in_sudorule?', cli_name='in_sudorules', multivalue=True)
-option: List('not_in_sudorule?', cli_name='not_in_sudorules', multivalue=True)
+option: Str('host*', cli_name='hosts', csv=True)
+option: Str('no_host*', cli_name='no_hosts', csv=True)
+option: Str('hostgroup*', cli_name='hostgroups', csv=True)
+option: Str('no_hostgroup*', cli_name='no_hostgroups', csv=True)
+option: Str('in_hostgroup*', cli_name='in_hostgroups', csv=True)
+option: Str('not_in_hostgroup*', cli_name='not_in_hostgroups', csv=True)
+option: Str('in_netgroup*', cli_name='in_netgroups', csv=True)
+option: Str('not_in_netgroup*', cli_name='not_in_netgroups', csv=True)
+option: Str('in_hbacrule*', cli_name='in_hbacrules', csv=True)
+option: Str('not_in_hbacrule*', cli_name='not_in_hbacrules', csv=True)
+option: Str('in_sudorule*', cli_name='in_sudorules', csv=True)
+option: Str('not_in_sudorule*', cli_name='not_in_sudorules', csv=True)
output: Output('summary', (<type 'unicode'>, <type 'NoneType'>), None)
output: ListOfEntries('result', (<type 'list'>, <type 'tuple'>), Gettext('A list of LDAP entries', domain='ipa', localedir=None))
output: Output('count', <type 'int'>, None)
@@ -1665,8 +1665,8 @@ arg: Str('cn', attribute=True, cli_name='hostgroup_name', multivalue=False, prim
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('host?', alwaysask=True, cli_name='hosts', multivalue=True)
-option: List('hostgroup?', alwaysask=True, cli_name='hostgroups', multivalue=True)
+option: Str('host*', alwaysask=True, cli_name='hosts', csv=True)
+option: Str('hostgroup*', alwaysask=True, cli_name='hostgroups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -1730,17 +1730,17 @@ arg: Password('bindpw', cli_name='password', confirm=False)
option: Str('binddn?', autofill=True, cli_name='bind_dn', default=u'cn=directory manager')
option: Str('usercontainer?', autofill=True, cli_name='user_container', default=u'ou=people')
option: Str('groupcontainer?', autofill=True, cli_name='group_container', default=u'ou=groups')
-option: List('userobjectclass?', autofill=True, cli_name='user_objectclass', default=(u'person',), multivalue=True)
-option: List('groupobjectclass?', autofill=True, cli_name='group_objectclass', default=(u'groupOfUniqueNames', u'groupOfNames'), multivalue=True)
-option: List('userignoreobjectclass?', autofill=True, cli_name='user_ignore_objectclass', default=(), multivalue=True)
-option: List('userignoreattribute?', autofill=True, cli_name='user_ignore_attribute', default=(), multivalue=True)
-option: List('groupignoreobjectclass?', autofill=True, cli_name='group_ignore_objectclass', default=(), multivalue=True)
-option: List('groupignoreattribute?', autofill=True, cli_name='group_ignore_attribute', default=(), multivalue=True)
+option: Str('userobjectclass*', autofill=True, cli_name='user_objectclass', csv=True, default=(u'person',))
+option: Str('groupobjectclass*', autofill=True, cli_name='group_objectclass', csv=True, default=(u'groupOfUniqueNames', u'groupOfNames'))
+option: Str('userignoreobjectclass*', autofill=True, cli_name='user_ignore_objectclass', csv=True, default=())
+option: Str('userignoreattribute*', autofill=True, cli_name='user_ignore_attribute', csv=True, default=())
+option: Str('groupignoreobjectclass*', autofill=True, cli_name='group_ignore_objectclass', csv=True, default=())
+option: Str('groupignoreattribute*', autofill=True, cli_name='group_ignore_attribute', csv=True, default=())
option: Flag('groupoverwritegid', autofill=True, cli_name='group_overwrite_gid', default=False)
option: StrEnum('schema?', autofill=True, cli_name='schema', default=u'RFC2307bis', values=(u'RFC2307bis', u'RFC2307'))
option: Flag('continue?', autofill=True, default=False)
-option: List('exclude_groups?', autofill=True, cli_name='exclude_groups', default=(), multivalue=True)
-option: List('exclude_users?', autofill=True, cli_name='exclude_users', default=(), multivalue=True)
+option: Str('exclude_groups*', autofill=True, cli_name='exclude_groups', csv=True, default=())
+option: Str('exclude_users*', autofill=True, cli_name='exclude_users', csv=True, default=())
output: Output('result', <type 'dict'>, None)
output: Output('failed', <type 'dict'>, None)
output: Output('enabled', <type 'bool'>, None)
@@ -1765,11 +1765,11 @@ arg: Str('cn', attribute=True, cli_name='name', multivalue=False, primary_key=Tr
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('user?', alwaysask=True, cli_name='users', multivalue=True)
-option: List('group?', alwaysask=True, cli_name='groups', multivalue=True)
-option: List('host?', alwaysask=True, cli_name='hosts', multivalue=True)
-option: List('hostgroup?', alwaysask=True, cli_name='hostgroups', multivalue=True)
-option: List('netgroup?', alwaysask=True, cli_name='netgroups', multivalue=True)
+option: Str('user*', alwaysask=True, cli_name='users', csv=True)
+option: Str('group*', alwaysask=True, cli_name='groups', csv=True)
+option: Str('host*', alwaysask=True, cli_name='hosts', csv=True)
+option: Str('hostgroup*', alwaysask=True, cli_name='hostgroups', csv=True)
+option: Str('netgroup*', alwaysask=True, cli_name='netgroups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -1797,18 +1797,18 @@ option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
option: Flag('pkey_only?', autofill=True, default=False)
-option: List('netgroup?', cli_name='netgroups', multivalue=True)
-option: List('no_netgroup?', cli_name='no_netgroups', multivalue=True)
-option: List('user?', cli_name='users', multivalue=True)
-option: List('no_user?', cli_name='no_users', multivalue=True)
-option: List('group?', cli_name='groups', multivalue=True)
-option: List('no_group?', cli_name='no_groups', multivalue=True)
-option: List('host?', cli_name='hosts', multivalue=True)
-option: List('no_host?', cli_name='no_hosts', multivalue=True)
-option: List('hostgroup?', cli_name='hostgroups', multivalue=True)
-option: List('no_hostgroup?', cli_name='no_hostgroups', multivalue=True)
-option: List('in_netgroup?', cli_name='in_netgroups', multivalue=True)
-option: List('not_in_netgroup?', cli_name='not_in_netgroups', multivalue=True)
+option: Str('netgroup*', cli_name='netgroups', csv=True)
+option: Str('no_netgroup*', cli_name='no_netgroups', csv=True)
+option: Str('user*', cli_name='users', csv=True)
+option: Str('no_user*', cli_name='no_users', csv=True)
+option: Str('group*', cli_name='groups', csv=True)
+option: Str('no_group*', cli_name='no_groups', csv=True)
+option: Str('host*', cli_name='hosts', csv=True)
+option: Str('no_host*', cli_name='no_hosts', csv=True)
+option: Str('hostgroup*', cli_name='hostgroups', csv=True)
+option: Str('no_hostgroup*', cli_name='no_hostgroups', csv=True)
+option: Str('in_netgroup*', cli_name='in_netgroups', csv=True)
+option: Str('not_in_netgroup*', cli_name='not_in_netgroups', csv=True)
output: Output('summary', (<type 'unicode'>, <type 'NoneType'>), None)
output: ListOfEntries('result', (<type 'list'>, <type 'tuple'>), Gettext('A list of LDAP entries', domain='ipa', localedir=None))
output: Output('count', <type 'int'>, None)
@@ -1836,11 +1836,11 @@ arg: Str('cn', attribute=True, cli_name='name', multivalue=False, primary_key=Tr
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('user?', alwaysask=True, cli_name='users', multivalue=True)
-option: List('group?', alwaysask=True, cli_name='groups', multivalue=True)
-option: List('host?', alwaysask=True, cli_name='hosts', multivalue=True)
-option: List('hostgroup?', alwaysask=True, cli_name='hostgroups', multivalue=True)
-option: List('netgroup?', alwaysask=True, cli_name='netgroups', multivalue=True)
+option: Str('user*', alwaysask=True, cli_name='users', csv=True)
+option: Str('group*', alwaysask=True, cli_name='groups', csv=True)
+option: Str('host*', alwaysask=True, cli_name='hosts', csv=True)
+option: Str('hostgroup*', alwaysask=True, cli_name='hostgroups', csv=True)
+option: Str('netgroup*', alwaysask=True, cli_name='netgroups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -1865,8 +1865,8 @@ output: Output('value', <type 'unicode'>, None)
command: permission_add
args: 1,12,3
arg: Str('cn', attribute=True, cli_name='name', multivalue=False, primary_key=True, required=True)
-option: List('permissions', attribute=True, cli_name='permissions', multivalue=True, required=True)
-option: List('attrs', alwaysask=True, attribute=True, autofill=False, cli_name='attrs', multivalue=True, query=True, required=False)
+option: Str('permissions', attribute=True, cli_name='permissions', csv=True, multivalue=True, required=True)
+option: Str('attrs', alwaysask=True, attribute=True, autofill=False, cli_name='attrs', csv=True, multivalue=True, query=True, required=False)
option: StrEnum('type', alwaysask=True, attribute=True, autofill=False, cli_name='type', multivalue=False, query=True, required=False, values=(u'user', u'group', u'host', u'service', u'hostgroup', u'netgroup', u'dnsrecord'))
option: Str('memberof', alwaysask=True, attribute=True, autofill=False, cli_name='memberof', multivalue=False, query=True, required=False)
option: Str('filter', alwaysask=True, attribute=True, autofill=False, cli_name='filter', multivalue=False, query=True, required=False)
@@ -1886,7 +1886,7 @@ arg: Str('cn', attribute=True, cli_name='name', multivalue=False, primary_key=Tr
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('privilege?', alwaysask=True, cli_name='privileges', multivalue=True)
+option: Str('privilege*', alwaysask=True, cli_name='privileges', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -1901,8 +1901,8 @@ command: permission_find
args: 1,14,4
arg: Str('criteria?', noextrawhitespace=False)
option: Str('cn', attribute=True, autofill=False, cli_name='name', multivalue=False, primary_key=True, query=True, required=False)
-option: List('permissions', attribute=True, autofill=False, cli_name='permissions', multivalue=True, query=True, required=False)
-option: List('attrs', attribute=True, autofill=False, cli_name='attrs', multivalue=True, query=True, required=False)
+option: Str('permissions', attribute=True, autofill=False, cli_name='permissions', csv=True, multivalue=True, query=True, required=False)
+option: Str('attrs', attribute=True, autofill=False, cli_name='attrs', csv=True, multivalue=True, query=True, required=False)
option: StrEnum('type', attribute=True, autofill=False, cli_name='type', multivalue=False, query=True, required=False, values=(u'user', u'group', u'host', u'service', u'hostgroup', u'netgroup', u'dnsrecord'))
option: Str('memberof', attribute=True, autofill=False, cli_name='memberof', multivalue=False, query=True, required=False)
option: Str('filter', attribute=True, autofill=False, cli_name='filter', multivalue=False, query=True, required=False)
@@ -1921,8 +1921,8 @@ output: Output('truncated', <type 'bool'>, None)
command: permission_mod
args: 1,15,3
arg: Str('cn', attribute=True, cli_name='name', multivalue=False, primary_key=True, query=True, required=True)
-option: List('permissions', attribute=True, autofill=False, cli_name='permissions', multivalue=True, required=False)
-option: List('attrs', alwaysask=True, attribute=True, autofill=False, cli_name='attrs', multivalue=True, query=True, required=False)
+option: Str('permissions', attribute=True, autofill=False, cli_name='permissions', csv=True, multivalue=True, required=False)
+option: Str('attrs', alwaysask=True, attribute=True, autofill=False, cli_name='attrs', csv=True, multivalue=True, query=True, required=False)
option: StrEnum('type', alwaysask=True, attribute=True, autofill=False, cli_name='type', multivalue=False, query=True, required=False, values=(u'user', u'group', u'host', u'service', u'hostgroup', u'netgroup', u'dnsrecord'))
option: Str('memberof', alwaysask=True, attribute=True, autofill=False, cli_name='memberof', multivalue=False, query=True, required=False)
option: Str('filter', alwaysask=True, attribute=True, autofill=False, cli_name='filter', multivalue=False, query=True, required=False)
@@ -1945,7 +1945,7 @@ arg: Str('cn', attribute=True, cli_name='name', multivalue=False, primary_key=Tr
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('privilege?', alwaysask=True, cli_name='privileges', multivalue=True)
+option: Str('privilege*', alwaysask=True, cli_name='privileges', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -1991,7 +1991,7 @@ arg: Str('cn', attribute=True, cli_name='name', multivalue=False, primary_key=Tr
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('role?', alwaysask=True, cli_name='roles', multivalue=True)
+option: Str('role*', alwaysask=True, cli_name='roles', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -2001,7 +2001,7 @@ arg: Str('cn', attribute=True, cli_name='name', multivalue=False, primary_key=Tr
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('permission?', alwaysask=True, cli_name='permissions', multivalue=True)
+option: Str('permission*', alwaysask=True, cli_name='permissions', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -2048,7 +2048,7 @@ arg: Str('cn', attribute=True, cli_name='name', multivalue=False, primary_key=Tr
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('role?', alwaysask=True, cli_name='roles', multivalue=True)
+option: Str('role*', alwaysask=True, cli_name='roles', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -2058,7 +2058,7 @@ arg: Str('cn', attribute=True, cli_name='name', multivalue=False, primary_key=Tr
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('permission?', alwaysask=True, cli_name='permissions', multivalue=True)
+option: Str('permission*', alwaysask=True, cli_name='permissions', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -2173,10 +2173,10 @@ arg: Str('cn', attribute=True, cli_name='name', multivalue=False, primary_key=Tr
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('user?', alwaysask=True, cli_name='users', multivalue=True)
-option: List('group?', alwaysask=True, cli_name='groups', multivalue=True)
-option: List('host?', alwaysask=True, cli_name='hosts', multivalue=True)
-option: List('hostgroup?', alwaysask=True, cli_name='hostgroups', multivalue=True)
+option: Str('user*', alwaysask=True, cli_name='users', csv=True)
+option: Str('group*', alwaysask=True, cli_name='groups', csv=True)
+option: Str('host*', alwaysask=True, cli_name='hosts', csv=True)
+option: Str('hostgroup*', alwaysask=True, cli_name='hostgroups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -2186,7 +2186,7 @@ arg: Str('cn', attribute=True, cli_name='name', multivalue=False, primary_key=Tr
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('privilege?', alwaysask=True, cli_name='privileges', multivalue=True)
+option: Str('privilege*', alwaysask=True, cli_name='privileges', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -2233,10 +2233,10 @@ arg: Str('cn', attribute=True, cli_name='name', multivalue=False, primary_key=Tr
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('user?', alwaysask=True, cli_name='users', multivalue=True)
-option: List('group?', alwaysask=True, cli_name='groups', multivalue=True)
-option: List('host?', alwaysask=True, cli_name='hosts', multivalue=True)
-option: List('hostgroup?', alwaysask=True, cli_name='hostgroups', multivalue=True)
+option: Str('user*', alwaysask=True, cli_name='users', csv=True)
+option: Str('group*', alwaysask=True, cli_name='groups', csv=True)
+option: Str('host*', alwaysask=True, cli_name='hosts', csv=True)
+option: Str('hostgroup*', alwaysask=True, cli_name='hostgroups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -2246,7 +2246,7 @@ arg: Str('cn', attribute=True, cli_name='name', multivalue=False, primary_key=Tr
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('privilege?', alwaysask=True, cli_name='privileges', multivalue=True)
+option: Str('privilege*', alwaysask=True, cli_name='privileges', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -2263,8 +2263,8 @@ output: Output('value', <type 'unicode'>, None)
command: selfservice_add
args: 1,5,3
arg: Str('aciname', attribute=True, cli_name='name', multivalue=False, primary_key=True, required=True)
-option: List('permissions', attribute=True, cli_name='permissions', multivalue=True, required=False)
-option: List('attrs', attribute=True, cli_name='attrs', multivalue=True, required=True)
+option: Str('permissions', attribute=True, cli_name='permissions', csv=True, multivalue=True, required=False)
+option: Str('attrs', attribute=True, cli_name='attrs', csv=True, multivalue=True, required=True)
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
@@ -2281,8 +2281,8 @@ command: selfservice_find
args: 1,6,4
arg: Str('criteria?')
option: Str('aciname', attribute=True, autofill=False, cli_name='name', multivalue=False, primary_key=True, query=True, required=False)
-option: List('permissions', attribute=True, autofill=False, cli_name='permissions', multivalue=True, query=True, required=False)
-option: List('attrs', attribute=True, autofill=False, cli_name='attrs', multivalue=True, query=True, required=False)
+option: Str('permissions', attribute=True, autofill=False, cli_name='permissions', csv=True, multivalue=True, query=True, required=False)
+option: Str('attrs', attribute=True, autofill=False, cli_name='attrs', csv=True, multivalue=True, query=True, required=False)
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
@@ -2293,8 +2293,8 @@ output: Output('truncated', <type 'bool'>, None)
command: selfservice_mod
args: 1,5,3
arg: Str('aciname', attribute=True, cli_name='name', multivalue=False, primary_key=True, query=True, required=True)
-option: List('permissions', attribute=True, autofill=False, cli_name='permissions', multivalue=True, required=False)
-option: List('attrs', attribute=True, autofill=False, cli_name='attrs', multivalue=True, required=False)
+option: Str('permissions', attribute=True, autofill=False, cli_name='permissions', csv=True, multivalue=True, required=False)
+option: Str('attrs', attribute=True, autofill=False, cli_name='attrs', csv=True, multivalue=True, required=False)
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
@@ -2327,7 +2327,7 @@ arg: Str('krbprincipalname', attribute=True, cli_name='principal', multivalue=Fa
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('host?', alwaysask=True, cli_name='hosts', multivalue=True)
+option: Str('host*', alwaysask=True, cli_name='hosts', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -2354,8 +2354,8 @@ option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
option: Flag('pkey_only?', autofill=True, default=False)
-option: List('man_by_host?', cli_name='man_by_hosts', multivalue=True)
-option: List('not_man_by_host?', cli_name='not_man_by_hosts', multivalue=True)
+option: Str('man_by_host*', cli_name='man_by_hosts', csv=True)
+option: Str('not_man_by_host*', cli_name='not_man_by_hosts', csv=True)
output: Output('summary', (<type 'unicode'>, <type 'NoneType'>), None)
output: ListOfEntries('result', (<type 'list'>, <type 'tuple'>), Gettext('A list of LDAP entries', domain='ipa', localedir=None))
output: Output('count', <type 'int'>, None)
@@ -2380,7 +2380,7 @@ arg: Str('krbprincipalname', attribute=True, cli_name='principal', multivalue=Fa
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('host?', alwaysask=True, cli_name='hosts', multivalue=True)
+option: Str('host*', alwaysask=True, cli_name='hosts', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -2471,7 +2471,7 @@ arg: Str('cn', attribute=True, cli_name='sudocmdgroup_name', multivalue=False, p
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('sudocmd?', alwaysask=True, cli_name='sudocmds', multivalue=True)
+option: Str('sudocmd*', alwaysask=True, cli_name='sudocmds', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -2517,7 +2517,7 @@ arg: Str('cn', attribute=True, cli_name='sudocmdgroup_name', multivalue=False, p
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('sudocmd?', alwaysask=True, cli_name='sudocmds', multivalue=True)
+option: Str('sudocmd*', alwaysask=True, cli_name='sudocmds', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -2557,8 +2557,8 @@ arg: Str('cn', attribute=True, cli_name='sudorule_name', multivalue=False, prima
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('sudocmd?', alwaysask=True, cli_name='sudocmds', multivalue=True)
-option: List('sudocmdgroup?', alwaysask=True, cli_name='sudocmdgroups', multivalue=True)
+option: Str('sudocmd*', alwaysask=True, cli_name='sudocmds', csv=True)
+option: Str('sudocmdgroup*', alwaysask=True, cli_name='sudocmdgroups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -2568,8 +2568,8 @@ arg: Str('cn', attribute=True, cli_name='sudorule_name', multivalue=False, prima
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('sudocmd?', alwaysask=True, cli_name='sudocmds', multivalue=True)
-option: List('sudocmdgroup?', alwaysask=True, cli_name='sudocmdgroups', multivalue=True)
+option: Str('sudocmd*', alwaysask=True, cli_name='sudocmds', csv=True)
+option: Str('sudocmdgroup*', alwaysask=True, cli_name='sudocmdgroups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -2579,8 +2579,8 @@ arg: Str('cn', attribute=True, cli_name='sudorule_name', multivalue=False, prima
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('host?', alwaysask=True, cli_name='hosts', multivalue=True)
-option: List('hostgroup?', alwaysask=True, cli_name='hostgroups', multivalue=True)
+option: Str('host*', alwaysask=True, cli_name='hosts', csv=True)
+option: Str('hostgroup*', alwaysask=True, cli_name='hostgroups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -2595,7 +2595,7 @@ arg: Str('cn', attribute=True, cli_name='sudorule_name', multivalue=False, prima
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('group?', alwaysask=True, cli_name='groups', multivalue=True)
+option: Str('group*', alwaysask=True, cli_name='groups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -2605,8 +2605,8 @@ arg: Str('cn', attribute=True, cli_name='sudorule_name', multivalue=False, prima
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('user?', alwaysask=True, cli_name='users', multivalue=True)
-option: List('group?', alwaysask=True, cli_name='groups', multivalue=True)
+option: Str('user*', alwaysask=True, cli_name='users', csv=True)
+option: Str('group*', alwaysask=True, cli_name='groups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -2616,8 +2616,8 @@ arg: Str('cn', attribute=True, cli_name='sudorule_name', multivalue=False, prima
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('user?', alwaysask=True, cli_name='users', multivalue=True)
-option: List('group?', alwaysask=True, cli_name='groups', multivalue=True)
+option: Str('user*', alwaysask=True, cli_name='users', csv=True)
+option: Str('group*', alwaysask=True, cli_name='groups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -2687,8 +2687,8 @@ arg: Str('cn', attribute=True, cli_name='sudorule_name', multivalue=False, prima
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('sudocmd?', alwaysask=True, cli_name='sudocmds', multivalue=True)
-option: List('sudocmdgroup?', alwaysask=True, cli_name='sudocmdgroups', multivalue=True)
+option: Str('sudocmd*', alwaysask=True, cli_name='sudocmds', csv=True)
+option: Str('sudocmdgroup*', alwaysask=True, cli_name='sudocmdgroups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -2698,8 +2698,8 @@ arg: Str('cn', attribute=True, cli_name='sudorule_name', multivalue=False, prima
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('sudocmd?', alwaysask=True, cli_name='sudocmds', multivalue=True)
-option: List('sudocmdgroup?', alwaysask=True, cli_name='sudocmdgroups', multivalue=True)
+option: Str('sudocmd*', alwaysask=True, cli_name='sudocmds', csv=True)
+option: Str('sudocmdgroup*', alwaysask=True, cli_name='sudocmdgroups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -2709,8 +2709,8 @@ arg: Str('cn', attribute=True, cli_name='sudorule_name', multivalue=False, prima
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('host?', alwaysask=True, cli_name='hosts', multivalue=True)
-option: List('hostgroup?', alwaysask=True, cli_name='hostgroups', multivalue=True)
+option: Str('host*', alwaysask=True, cli_name='hosts', csv=True)
+option: Str('hostgroup*', alwaysask=True, cli_name='hostgroups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -2725,7 +2725,7 @@ arg: Str('cn', attribute=True, cli_name='sudorule_name', multivalue=False, prima
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('group?', alwaysask=True, cli_name='groups', multivalue=True)
+option: Str('group*', alwaysask=True, cli_name='groups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -2735,8 +2735,8 @@ arg: Str('cn', attribute=True, cli_name='sudorule_name', multivalue=False, prima
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('user?', alwaysask=True, cli_name='users', multivalue=True)
-option: List('group?', alwaysask=True, cli_name='groups', multivalue=True)
+option: Str('user*', alwaysask=True, cli_name='users', csv=True)
+option: Str('group*', alwaysask=True, cli_name='groups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -2746,8 +2746,8 @@ arg: Str('cn', attribute=True, cli_name='sudorule_name', multivalue=False, prima
option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui')
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
-option: List('user?', alwaysask=True, cli_name='users', multivalue=True)
-option: List('group?', alwaysask=True, cli_name='groups', multivalue=True)
+option: Str('user*', alwaysask=True, cli_name='users', csv=True)
+option: Str('group*', alwaysask=True, cli_name='groups', csv=True)
output: Entry('result', <type 'dict'>, Gettext('A dictionary representing an LDAP entry', domain='ipa', localedir=None))
output: Output('failed', <type 'dict'>, None)
output: Output('completed', <type 'int'>, None)
@@ -2853,16 +2853,16 @@ option: Flag('all', autofill=True, cli_name='all', default=False, exclude='webui
option: Flag('raw', autofill=True, cli_name='raw', default=False, exclude='webui')
option: Str('version?', exclude='webui')
option: Flag('pkey_only?', autofill=True, default=False)
-option: List('in_group?', cli_name='in_groups', multivalue=True)
-option: List('not_in_group?', cli_name='not_in_groups', multivalue=True)
-option: List('in_netgroup?', cli_name='in_netgroups', multivalue=True)
-option: List('not_in_netgroup?', cli_name='not_in_netgroups', multivalue=True)
-option: List('in_role?', cli_name='in_roles', multivalue=True)
-option: List('not_in_role?', cli_name='not_in_roles', multivalue=True)
-option: List('in_hbacrule?', cli_name='in_hbacrules', multivalue=True)
-option: List('not_in_hbacrule?', cli_name='not_in_hbacrules', multivalue=True)
-option: List('in_sudorule?', cli_name='in_sudorules', multivalue=True)
-option: List('not_in_sudorule?', cli_name='not_in_sudorules', multivalue=True)
+option: Str('in_group*', cli_name='in_groups', csv=True)
+option: Str('not_in_group*', cli_name='not_in_groups', csv=True)
+option: Str('in_netgroup*', cli_name='in_netgroups', csv=True)
+option: Str('not_in_netgroup*', cli_name='not_in_netgroups', csv=True)
+option: Str('in_role*', cli_name='in_roles', csv=True)
+option: Str('not_in_role*', cli_name='not_in_roles', csv=True)
+option: Str('in_hbacrule*', cli_name='in_hbacrules', csv=True)
+option: Str('not_in_hbacrule*', cli_name='not_in_hbacrules', csv=True)
+option: Str('in_sudorule*', cli_name='in_sudorules', csv=True)
+option: Str('not_in_sudorule*', cli_name='not_in_sudorules', csv=True)
output: Output('summary', (<type 'unicode'>, <type 'NoneType'>), None)
output: ListOfEntries('result', (<type 'list'>, <type 'tuple'>), Gettext('A list of LDAP entries', domain='ipa', localedir=None))
output: Output('count', <type 'int'>, None)
diff --git a/TODO b/TODO
index 74f014b30..0b6299a63 100644
--- a/TODO
+++ b/TODO
@@ -63,11 +63,6 @@ Command Line interface
own replacement for optparse. The isn't way to make optparse deal with the
global options the way Jason would like, so that's another motivation.
- * All "comma-separated list of..." parameters should really be changed to
- multivalue and have a flag that tells the CLI whether a multivalue should
- be parsed as comma-separated. The List type currently satisfy this, but it
- would be nice to have a comma-separated multivalue of any type.
-
* Add a File param type so an argument may be read from a file. This is
needed for cert-request to pass along the CSR.
diff --git a/VERSION b/VERSION
index 0b0ff1939..4fbf7a9a0 100644
--- a/VERSION
+++ b/VERSION
@@ -79,4 +79,4 @@ IPA_DATA_VERSION=20100614120000
# #
########################################################
IPA_API_VERSION_MAJOR=2
-IPA_API_VERSION_MINOR=16
+IPA_API_VERSION_MINOR=17
diff --git a/ipalib/__init__.py b/ipalib/__init__.py
index c54717bf8..29ba0bb90 100644
--- a/ipalib/__init__.py
+++ b/ipalib/__init__.py
@@ -878,7 +878,7 @@ from backend import Backend
from frontend import Command, LocalOrRemote, Updater
from frontend import Object, Method, Property
from crud import Create, Retrieve, Update, Delete, Search
-from parameters import DefaultFrom, Bool, Flag, Int, Float, Bytes, Str, IA5Str, Password,List
+from parameters import DefaultFrom, Bool, Flag, Int, Float, Bytes, Str, IA5Str, Password
from parameters import BytesEnum, StrEnum, AccessTime, File
from errors import SkipPluginModule
from text import _, ngettext, GettextFactory, NGettextFactory
diff --git a/ipalib/parameters.py b/ipalib/parameters.py
index 96dde7fc2..287304d3b 100644
--- a/ipalib/parameters.py
+++ b/ipalib/parameters.py
@@ -381,6 +381,9 @@ class Param(ReadOnly):
('hint', (str, Gettext), None),
('alwaysask', bool, False),
('sortorder', int, 2), # see finalize()
+ ('csv', bool, False),
+ ('csv_separator', str, ','),
+ ('csv_skipspace', bool, True),
# The 'default' kwarg gets appended in Param.__init__():
# ('default', self.type, None),
@@ -493,6 +496,10 @@ class Param(ReadOnly):
)
)
+ # Check that if csv is set, multivalue is set too
+ if self.csv and not self.multivalue:
+ raise ValueError('%s: cannot have csv without multivalue' % self.nice)
+
# Check that all the rules are callable
self.class_rules = tuple(class_rules)
self.rules = rules
@@ -663,6 +670,23 @@ class Param(ReadOnly):
kw.update(overrides)
return klass(name, *self.rules, **kw)
+ # The following 2 functions were taken from the Python
+ # documentation at http://docs.python.org/library/csv.html
+ def __utf_8_encoder(self, unicode_csv_data):
+ for line in unicode_csv_data:
+ yield line.encode('utf-8')
+
+ def __unicode_csv_reader(self, unicode_csv_data, dialect=csv.excel, **kwargs):
+ # csv.py doesn't do Unicode; encode temporarily as UTF-8:
+ csv_reader = csv.reader(self.__utf_8_encoder(unicode_csv_data),
+ dialect=dialect,
+ delimiter=self.csv_separator, escapechar='\\',
+ skipinitialspace=self.csv_skipspace,
+ **kwargs)
+ for row in csv_reader:
+ # decode UTF-8 back to Unicode, cell by cell:
+ yield [unicode(cell, 'utf-8') for cell in row]
+
def normalize(self, value):
"""
Normalize ``value`` using normalizer callback.
@@ -686,15 +710,20 @@ class Param(ReadOnly):
:param value: A proposed value for this parameter.
"""
+ if self.multivalue:
+ if self.csv and isinstance(value, basestring):
+ csvreader = self.__unicode_csv_reader([unicode(value)])
+ value = tuple(csvreader.next()) #pylint: disable=E1101
+ elif type(value) not in (tuple, list):
+ value = (value,)
if self.normalizer is None:
return value
if self.multivalue:
- if type(value) in (tuple, list):
- return tuple(
- self._normalize_scalar(v) for v in value
- )
- return (self._normalize_scalar(value),) # Return a tuple
- return self._normalize_scalar(value)
+ return tuple(
+ self._normalize_scalar(v) for v in value
+ )
+ else:
+ return self._normalize_scalar(value)
def _normalize_scalar(self, value):
"""
@@ -1525,47 +1554,12 @@ class StrEnum(Enum):
type = unicode
-class List(Param):
+class Any(Param):
"""
- Base class for parameters as a list of values. The input is a delimited
- string.
+ A parameter capable of holding values of any type. For internal use only.
"""
- type = tuple
- kwargs = Param.kwargs + (
- ('separator', str, ','),
- ('skipspace', bool, True),
- )
-
- # The following 2 functions were taken from the Python
- # documentation at http://docs.python.org/library/csv.html
- def __utf_8_encoder(self, unicode_csv_data):
- for line in unicode_csv_data:
- yield line.encode('utf-8')
-
- def __unicode_csv_reader(self, unicode_csv_data, dialect=csv.excel, **kwargs):
- # csv.py doesn't do Unicode; encode temporarily as UTF-8:
- csv_reader = csv.reader(self.__utf_8_encoder(unicode_csv_data),
- dialect=dialect,
- delimiter=self.separator, escapechar='\\',
- skipinitialspace=self.skipspace,
- **kwargs)
- for row in csv_reader:
- # decode UTF-8 back to Unicode, cell by cell:
- yield [unicode(cell, 'utf-8') for cell in row]
-
- def __init__(self, name, *rules, **kw):
- kw['multivalue'] = True
- super(List, self).__init__(name, *rules, **kw)
-
- def normalize(self, value):
- if value and not type(value) in (list, tuple):
- reader = self.__unicode_csv_reader([value])
- value = []
- for row in reader:
- value = value + row
- value = tuple(value)
- return super(List, self).normalize(value)
+ type = object
def _convert_scalar(self, value, index=None):
return value
diff --git a/ipalib/plugins/aci.py b/ipalib/plugins/aci.py
index 04f25f289..7ace05eb4 100644
--- a/ipalib/plugins/aci.py
+++ b/ipalib/plugins/aci.py
@@ -120,7 +120,7 @@ targetattr REPLACES the current attributes, it does not add to them.
from ipalib import api, crud, errors
from ipalib import Object, Command
-from ipalib import Flag, Int, List, Str, StrEnum
+from ipalib import Flag, Int, Str, StrEnum
from ipalib.aci import ACI
from ipalib import output
from ipalib import _, ngettext
@@ -430,18 +430,20 @@ class aci(Object):
doc=_('User group ACI grants access to'),
flags=('virtual_attribute',),
),
- List('permissions', validate_permissions,
+ Str('permissions+', validate_permissions,
cli_name='permissions',
label=_('Permissions'),
doc=_('comma-separated list of permissions to grant' \
'(read, write, add, delete, all)'),
+ csv=True,
normalizer=_normalize_permissions,
flags=('virtual_attribute',),
),
- List('attrs?',
+ Str('attrs*',
cli_name='attrs',
label=_('Attributes'),
doc=_('Comma-separated list of attributes'),
+ csv=True,
flags=('virtual_attribute',),
),
StrEnum('type?',
diff --git a/ipalib/plugins/automember.py b/ipalib/plugins/automember.py
index db58a7aa3..ff5a2bafb 100644
--- a/ipalib/plugins/automember.py
+++ b/ipalib/plugins/automember.py
@@ -109,18 +109,18 @@ INCLUDE_RE = 'automemberinclusiveregex'
EXCLUDE_RE = 'automemberexclusiveregex'
regex_attrs = (
- List('automemberinclusiveregex?',
+ Str('automemberinclusiveregex*',
cli_name='inclusive_regex',
label=_('Inclusive Regex'),
doc=_('Inclusive Regex'),
- multivalue=True,
+ csv=True,
alwaysask=True,
),
- List('automemberexclusiveregex?',
+ Str('automemberexclusiveregex*',
cli_name='exclusive_regex',
label=_('Exclusive Regex'),
doc=_('Exclusive Regex'),
- multivalue=True,
+ csv=True,
alwaysask=True,
),
Str('key',
diff --git a/ipalib/plugins/baseldap.py b/ipalib/plugins/baseldap.py
index 1766077be..cda0c497f 100644
--- a/ipalib/plugins/baseldap.py
+++ b/ipalib/plugins/baseldap.py
@@ -27,7 +27,7 @@ from copy import deepcopy
from ipalib import api, crud, errors
from ipalib import Method, Object, Command
-from ipalib import Flag, Int, List, Str
+from ipalib import Flag, Int, Str
from ipalib.base import NameSpace
from ipalib.cli import to_cli, from_cli
from ipalib import output
@@ -1298,8 +1298,9 @@ class LDAPModMember(LDAPQuery):
ldap_obj = self.api.Object[ldap_obj_name]
name = to_cli(ldap_obj_name)
doc = self.member_param_doc % ldap_obj.object_name_plural
- yield List('%s?' % name, cli_name='%ss' % name, doc=doc,
- label=_('member %s') % ldap_obj.object_name, alwaysask=True)
+ yield Str('%s*' % name, cli_name='%ss' % name, doc=doc,
+ label=_('member %s') % ldap_obj.object_name,
+ csv=True, alwaysask=True)
def get_member_dns(self, **options):
dns = {}
@@ -1593,18 +1594,18 @@ class LDAPSearch(BaseLDAPCommand, crud.Search):
ldap_obj.object_name_plural
)
name = '%s%s' % (relationship[1], to_cli(ldap_obj_name))
- yield List(
- '%s?' % name, cli_name='%ss' % name, doc=doc,
- label=ldap_obj.object_name
+ yield Str(
+ '%s*' % name, cli_name='%ss' % name, doc=doc,
+ label=ldap_obj.object_name, csv=True
)
doc = self.member_param_excl_doc % (
self.obj.object_name_plural, relationship[0].lower(),
ldap_obj.object_name_plural
)
name = '%s%s' % (relationship[2], to_cli(ldap_obj_name))
- yield List(
- '%s?' % name, cli_name='%ss' % name, doc=doc,
- label=ldap_obj.object_name
+ yield Str(
+ '%s*' % name, cli_name='%ss' % name, doc=doc,
+ label=ldap_obj.object_name, csv=True
)
def get_member_filter(self, ldap, **options):
@@ -1784,8 +1785,9 @@ class LDAPModReverseMember(LDAPQuery):
ldap_obj = self.api.Object[ldap_obj_name]
name = to_cli(ldap_obj_name)
doc = self.reverse_param_doc % ldap_obj.object_name_plural
- yield List('%s?' % name, cli_name='%ss' % name, doc=doc,
- label=ldap_obj.object_name, alwaysask=True)
+ yield Str('%s*' % name, cli_name='%ss' % name, doc=doc,
+ label=ldap_obj.object_name, csv=True,
+ alwaysask=True)
class LDAPAddReverseMember(LDAPModReverseMember):
diff --git a/ipalib/plugins/batch.py b/ipalib/plugins/batch.py
index 72d7fe39e..4c5a6bd1e 100644
--- a/ipalib/plugins/batch.py
+++ b/ipalib/plugins/batch.py
@@ -47,7 +47,7 @@ And then a nested response for each IPA command method sent in the request
from ipalib import api, errors
from ipalib import Command
-from ipalib import Str, List
+from ipalib.parameters import Str, Any
from ipalib.output import Output
from ipalib import output
from ipalib.text import _
@@ -58,10 +58,10 @@ class batch(Command):
NO_CLI = True
takes_args = (
- List('methods?',
- doc=_('Nested Methods to execute'),
- ),
- )
+ Any('methods*',
+ doc=_('Nested Methods to execute'),
+ ),
+ )
take_options = (
Str('version',
@@ -71,7 +71,7 @@ class batch(Command):
flags=['no_option', 'no_output'],
default=API_VERSION,
autofill=True,
- )
+ ),
)
has_output = (
diff --git a/ipalib/plugins/config.py b/ipalib/plugins/config.py
index 2b7dd6a2f..ee4505f49 100644
--- a/ipalib/plugins/config.py
+++ b/ipalib/plugins/config.py
@@ -148,15 +148,17 @@ class config(LDAPObject):
doc=_('Base for certificate subjects (OU=Test,O=Example)'),
flags=['no_update'],
),
- List('ipagroupobjectclasses?',
+ Str('ipagroupobjectclasses*',
cli_name='groupobjectclasses',
label=_('Default group objectclasses'),
doc=_('Default group objectclasses (comma-separated list)'),
+ csv=True,
),
- List('ipauserobjectclasses?',
+ Str('ipauserobjectclasses*',
cli_name='userobjectclasses',
label=_('Default user objectclasses'),
doc=_('Default user objectclasses (comma-separated list)'),
+ csv=True,
),
Int('ipapwdexpadvnotify?',
cli_name='pwdexpnotify',
diff --git a/ipalib/plugins/delegation.py b/ipalib/plugins/delegation.py
index fad0be362..5fe1511f2 100644
--- a/ipalib/plugins/delegation.py
+++ b/ipalib/plugins/delegation.py
@@ -19,7 +19,7 @@
import copy
from ipalib import api, _, ngettext
-from ipalib import Flag, Str, List
+from ipalib import Flag, Str
from ipalib.request import context
from ipalib import api, crud, errors
from ipalib import output
@@ -110,16 +110,18 @@ class delegation(Object):
doc=_('Delegation name'),
primary_key=True,
),
- List('permissions?',
+ Str('permissions*',
cli_name='permissions',
label=_('Permissions'),
doc=_('Comma-separated list of permissions to grant ' \
'(read, write). Default is write.'),
+ csv=True,
),
- List('attrs',
+ Str('attrs+',
cli_name='attrs',
label=_('Attributes'),
doc=_('Comma-separated list of attributes'),
+ csv=True,
normalizer=lambda value: value.lower(),
),
Str('memberof',
diff --git a/ipalib/plugins/dns.py b/ipalib/plugins/dns.py
index b3a6abc67..7acb3df8a 100644
--- a/ipalib/plugins/dns.py
+++ b/ipalib/plugins/dns.py
@@ -24,7 +24,7 @@ import re
from ipalib import api, errors, output
from ipalib import Command
-from ipalib import Flag, Bool, Int, List, Str, StrEnum
+from ipalib import Flag, Bool, Int, Str, StrEnum
from ipalib.plugins.baseldap import *
from ipalib import _, ngettext
from ipalib.util import validate_zonemgr, normalize_zonemgr, validate_hostname
@@ -1040,16 +1040,16 @@ class dnsrecord_cmd_w_record_options(Command):
validator = _record_validators.get(rec_type)
normalizer = _record_normalizers.get(rec_type)
if validator:
- return List(
- '%srecord?' % rec_type.lower(), validator, normalizer=normalizer,
+ return Str(
+ '%srecord*' % rec_type.lower(), validator, normalizer=normalizer,
cli_name='%s_rec' % rec_type.lower(), doc=doc,
- label='%s record' % rec_type, attribute=True
+ label='%s record' % rec_type, csv=True, attribute=True
)
else:
- return List(
- '%srecord?' % rec_type.lower(), cli_name='%s_rec' % rec_type.lower(),
+ return Str(
+ '%srecord*' % rec_type.lower(), cli_name='%s_rec' % rec_type.lower(),
normalizer=normalizer, doc=doc, label='%s record' % rec_type,
- attribute=True
+ csv=True, attribute=True
)
def prompt_record_options(self, rec_type_list):
diff --git a/ipalib/plugins/hbactest.py b/ipalib/plugins/hbactest.py
index 6bbdada4e..fbc3dbb2e 100644
--- a/ipalib/plugins/hbactest.py
+++ b/ipalib/plugins/hbactest.py
@@ -18,7 +18,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from ipalib import api, errors, output
-from ipalib import Command, List, Str, Flag
+from ipalib import Command, Str, Flag
from types import NoneType
from ipalib.cli import to_cli
from ipalib import _, ngettext
@@ -186,9 +186,10 @@ class hbactest(Command):
cli_name='service',
label=_('Service'),
),
- List('rules?',
+ Str('rules*',
cli_name='rules',
label=_('Rules to test. If not specified, --enabled is assumed'),
+ csv=True,
),
Flag('nodetail?',
cli_name='nodetail',
diff --git a/ipalib/plugins/migration.py b/ipalib/plugins/migration.py
index 5d6631f58..9fe72d587 100644
--- a/ipalib/plugins/migration.py
+++ b/ipalib/plugins/migration.py
@@ -21,7 +21,7 @@ import re
import ldap as _ldap
from ipalib import api, errors, output
-from ipalib import Command, List, Password, Str, Flag, StrEnum
+from ipalib import Command, Password, Str, Flag, StrEnum
from ipalib.cli import to_cli
from ipalib.dn import *
if api.env.in_server and api.env.context in ['lite', 'server']:
@@ -351,45 +351,51 @@ class migrate_ds(Command):
default=u'ou=groups',
autofill=True,
),
- List('userobjectclass?',
+ Str('userobjectclass*',
cli_name='user_objectclass',
label=_('User object class'),
doc=_('Comma-separated list of objectclasses used to search for user entries in DS'),
+ csv=True,
default=(u'person',),
autofill=True,
),
- List('groupobjectclass?',
+ Str('groupobjectclass*',
cli_name='group_objectclass',
label=_('Group object class'),
doc=_('Comma-separated list of objectclasses used to search for group entries in DS'),
+ csv=True,
default=(u'groupOfUniqueNames', u'groupOfNames'),
autofill=True,
),
- List('userignoreobjectclass?',
+ Str('userignoreobjectclass*',
cli_name='user_ignore_objectclass',
label=_('Ignore user object class'),
doc=_('Comma-separated list of objectclasses to be ignored for user entries in DS'),
+ csv=True,
default=tuple(),
autofill=True,
),
- List('userignoreattribute?',
+ Str('userignoreattribute*',
cli_name='user_ignore_attribute',
label=_('Ignore user attribute'),
doc=_('Comma-separated list of attributes to be ignored for user entries in DS'),
+ csv=True,
default=tuple(),
autofill=True,
),
- List('groupignoreobjectclass?',
+ Str('groupignoreobjectclass*',
cli_name='group_ignore_objectclass',
label=_('Ignore group object class'),
doc=_('Comma-separated list of objectclasses to be ignored for group entries in DS'),
+ csv=True,
default=tuple(),
autofill=True,
),
- List('groupignoreattribute?',
+ Str('groupignoreattribute*',
cli_name='group_ignore_attribute',
label=_('Ignore group attribute'),
doc=_('Comma-separated list of attributes to be ignored for group entries in DS'),
+ csv=True,
default=tuple(),
autofill=True,
),
@@ -457,9 +463,9 @@ can use their Kerberos accounts.''')
ldap_obj = self.api.Object[ldap_obj_name]
name = 'exclude_%ss' % to_cli(ldap_obj_name)
doc = self.exclude_doc % ldap_obj.object_name_plural
- yield List(
- '%s?' % name, cli_name=name, doc=doc, default=tuple(),
- autofill=True
+ yield Str(
+ '%s*' % name, cli_name=name, doc=doc, csv=True,
+ default=tuple(), autofill=True
)
def normalize_options(self, options):
@@ -470,7 +476,7 @@ can use their Kerberos accounts.''')
plugin doesn't like that - convert back to empty lists.
"""
for p in self.params():
- if isinstance(p, List):
+ if p.csv:
if options[p.name]:
options[p.name] = tuple(
v.lower() for v in options[p.name]
diff --git a/ipalib/plugins/permission.py b/ipalib/plugins/permission.py
index e51e3b859..c48979f9d 100644
--- a/ipalib/plugins/permission.py
+++ b/ipalib/plugins/permission.py
@@ -114,16 +114,18 @@ class permission(LDAPObject):
label=_('Permission name'),
primary_key=True,
),
- List('permissions',
+ Str('permissions+',
cli_name='permissions',
label=_('Permissions'),
doc=_('Comma-separated list of permissions to grant ' \
'(read, write, add, delete, all)'),
+ csv=True,
),
- List('attrs?',
+ Str('attrs*',
cli_name='attrs',
label=_('Attributes'),
doc=_('Comma-separated list of attributes'),
+ csv=True,
normalizer=lambda value: value.lower(),
flags=('ask_create', 'ask_update'),
),
diff --git a/ipalib/plugins/selfservice.py b/ipalib/plugins/selfservice.py
index f68212539..902e16baf 100644
--- a/ipalib/plugins/selfservice.py
+++ b/ipalib/plugins/selfservice.py
@@ -19,7 +19,7 @@
import copy
from ipalib import api, _, ngettext
-from ipalib import Flag, Str, List
+from ipalib import Flag, Str
from ipalib.request import context
from ipalib import api, crud, errors
from ipalib import output
@@ -83,16 +83,18 @@ class selfservice(Object):
doc=_('Self-service name'),
primary_key=True,
),
- List('permissions?',
+ Str('permissions*',
cli_name='permissions',
label=_('Permissions'),
doc=_('Comma-separated list of permissions to grant ' \
'(read, write). Default is write.'),
+ csv=True,
),
- List('attrs',
+ Str('attrs+',
cli_name='attrs',
label=_('Attributes'),
doc=_('Comma-separated list of attributes'),
+ csv=True,
normalizer=lambda value: value.lower(),
),
)
diff --git a/make-lint b/make-lint
index 59c472221..b5df9e4a6 100755
--- a/make-lint
+++ b/make-lint
@@ -43,30 +43,30 @@ IGNORE_PATHS = ('build', 'dist', 'install/po/test_i18n.py', 'lite-server.py',
class IPATypeChecker(TypeChecker):
# 'class': ('generated', 'properties',)
ignore = {
- 'ipalib.base.NameSpace': ('find',),
- 'ipalib.cli.Collector': ('__options',),
- 'ipalib.config.Env': ('*'),
- 'ipalib.plugable.API': ('Command', 'Object', 'Method', 'Property',
- 'Backend', 'log', 'plugins'),
- 'ipalib.plugable.Plugin': ('Command', 'Object', 'Method', 'Property',
+ 'ipalib.base.NameSpace': ['find'],
+ 'ipalib.cli.Collector': ['__options'],
+ 'ipalib.config.Env': ['*'],
+ 'ipalib.plugable.API': ['Command', 'Object', 'Method', 'Property',
+ 'Backend', 'log', 'plugins'],
+ 'ipalib.plugable.Plugin': ['Command', 'Object', 'Method', 'Property',
'Backend', 'env', 'debug', 'info', 'warning', 'error', 'critical',
- 'exception', 'context', 'log'),
- 'ipalib.plugins.baseldap.CallbackInterface': ('pre_callback',
- 'post_callback', 'exc_callback'),
- 'ipalib.plugins.misc.env': ('env',),
- 'ipalib.parameters.Param': ('cli_name', 'cli_short_name', 'label',
+ 'exception', 'context', 'log'],
+ 'ipalib.plugins.baseldap.CallbackInterface': ['pre_callback',
+ 'post_callback', 'exc_callback'],
+ 'ipalib.plugins.misc.env': ['env'],
+ 'ipalib.parameters.Param': ['cli_name', 'cli_short_name', 'label',
'doc', 'required', 'multivalue', 'primary_key', 'normalizer',
'default', 'default_from', 'create_default', 'autofill', 'query',
- 'attribute', 'include', 'exclude', 'flags', 'hint', 'alwaysask'),
- 'ipalib.parameters.Bool': ('truths', 'falsehoods'),
- 'ipalib.parameters.Int': ('minvalue', 'maxvalue'),
- 'ipalib.parameters.Float': ('minvalue', 'maxvalue'),
- 'ipalib.parameters.Data': ('minlength', 'maxlength', 'length',
- 'pattern', 'pattern_errmsg'),
- 'ipalib.parameters.Enum': ('values',),
- 'ipalib.parameters.List': ('separator', 'skipspace'),
- 'ipalib.parameters.File': ('stdin_if_missing'),
- 'urlparse.SplitResult': ('netloc',),
+ 'attribute', 'include', 'exclude', 'flags', 'hint', 'alwaysask',
+ 'sortorder', 'csv', 'csv_separator', 'csv_skipspace'],
+ 'ipalib.parameters.Bool': ['truths', 'falsehoods'],
+ 'ipalib.parameters.Int': ['minvalue', 'maxvalue'],
+ 'ipalib.parameters.Float': ['minvalue', 'maxvalue'],
+ 'ipalib.parameters.Data': ['minlength', 'maxlength', 'length',
+ 'pattern', 'pattern_errmsg'],
+ 'ipalib.parameters.Enum': ['values'],
+ 'ipalib.parameters.File': ['stdin_if_missing'],
+ 'urlparse.SplitResult': ['netloc'],
}
def _related_classes(self, klass):
diff --git a/tests/test_ipalib/test_parameters.py b/tests/test_ipalib/test_parameters.py
index e63bbb736..5cb7abf2a 100644
--- a/tests/test_ipalib/test_parameters.py
+++ b/tests/test_ipalib/test_parameters.py
@@ -192,6 +192,10 @@ class test_Param(ClassChecker):
assert o.include is None
assert o.exclude is None
assert o.flags == frozenset()
+ assert o.sortorder == 2
+ assert o.csv is False
+ assert o.csv_separator == ','
+ assert o.csv_skipspace is True
# Test that doc defaults from label:
o = self.cls('my_param', doc=_('Hello world'))
@@ -267,6 +271,10 @@ class test_Param(ClassChecker):
'exclude', frozenset(['client', 'bar']),
)
+ # Test that ValueError is raised if csv is set and multivalue is not set:
+ e = raises(ValueError, self.cls, 'my_param', csv=True)
+ assert str(e) == '%s: cannot have csv without multivalue' % "Param('my_param')"
+
# Test that _get_default gets set:
call1 = lambda first, last: first[0] + last
call2 = lambda **kw: 'The Default'
@@ -626,6 +634,48 @@ class test_Param(ClassChecker):
assert o._convert_scalar.value is default
assert o.normalizer.value is default
+ def test_csv_normalize(self):
+ """
+ Test the `ipalib.parameters.Param.normalize` method with csv.
+ """
+ o = self.cls('my_list+', csv=True)
+ n = o.normalize('a,b')
+ assert type(n) is tuple
+ assert len(n) is 2
+
+ n = o.normalize('bar, "hi, there",foo')
+ assert type(n) is tuple
+ assert len(n) is 3
+
+ def test_csv_normalize_separator(self):
+ """
+ Test the `ipalib.parameters.Param.normalize` method with csv and a separator.
+ """
+ o = self.cls('my_list+', csv=True, csv_separator='|')
+
+ n = o.normalize('a')
+ assert type(n) is tuple
+ assert len(n) is 1
+
+ n = o.normalize('a|b')
+ assert type(n) is tuple
+ assert len(n) is 2
+
+ def test_csv_normalize_skipspace(self):
+ """
+ Test the `ipalib.parameters.Param.normalize` method with csv without skipping spaces.
+ """
+ o = self.cls('my_list+', csv=True, csv_skipspace=False)
+
+ n = o.normalize('a')
+ assert type(n) is tuple
+ assert len(n) is 1
+
+ n = o.normalize('a, "b,c", d')
+ assert type(n) is tuple
+ # the output w/o skipspace is ['a',' "b','c"',' d']
+ assert len(n) is 4
+
class test_Flag(ClassChecker):
"""
@@ -1324,66 +1374,6 @@ class test_Float(ClassChecker):
assert dummy.called() is True
dummy.reset()
-
-class test_List(ClassChecker):
- """
- Test the `ipalib.parameters.List` class.
- """
- _cls = parameters.List
-
- def test_init(self):
- """
- Test the `ipalib.parameters.List.__init__` method.
- """
- # Test with no kwargs:
- o = self.cls('my_list')
- assert o.type is tuple
- assert isinstance(o, parameters.List)
- assert o.multivalue is True
- assert o.skipspace is True
-
- def test_normalize(self):
- """
- Test the `ipalib.parameters.List.normalize` method.
- """
- o = self.cls('my_list')
- n = o.normalize('a,b')
- assert type(n) is tuple
- assert len(n) is 2
-
- n = o.normalize('bar, "hi, there",foo')
- assert type(n) is tuple
- assert len(n) is 3
-
- def test_normalize_separator(self):
- """
- Test the `ipalib.parameters.List.normalize` method with a separator.
- """
- o = self.cls('my_list', separator='|')
-
- n = o.normalize('a')
- assert type(n) is tuple
- assert len(n) is 1
-
- n = o.normalize('a|b')
- assert type(n) is tuple
- assert len(n) is 2
-
- def test_normalize_skipspace(self):
- """
- Test the `ipalib.parameters.List.normalize` method without skipping spaces.
- """
- o = self.cls('my_list', skipspace=False)
-
- n = o.normalize('a')
- assert type(n) is tuple
- assert len(n) is 1
-
- n = o.normalize('a, "b,c", d')
- assert type(n) is tuple
- # the output w/o skipspace is ['a',' "b','c"',' d']
- assert len(n) is 4
-
class test_AccessTime(ClassChecker):
"""
Test the `ipalib.parameters.AccessTime` class.