[Freeipa-devel] Newcomer's question

Martin Kosek mkosek at redhat.com
Tue Sep 17 09:03:19 UTC 2013


I would use Python dictionaries for that.

user_kw = dict(givenname=u'Test', sn=u'User')
user_kw['loginshell'] = u'/bin/sh'

api.Command['user_add'](u'testuser', **user_kw)

HTH,
Martin

On 09/17/2013 10:19 AM, Исаев Виталий Анатольевич wrote:
> Thanks, it has worked! Could you please explain what is the most convenient way to construct complex argument variables like this: (u'testuser', givenname=u'Test', sn=u'User', loginshell=u'/bin/sh') to pass them to commands with a variable number of args, such as 'user-add', 'group-add', 'config-mod' etc?
> 
> Thank you, 
> Виталий Исаев
> Инженер-программист
> Группа разработки и внедрения ПСЗИ
> Департамент информационной безопасности
> ОАО «Финтех»
> 
> -----Original Message-----
> From: Rob Crittenden [mailto:rcritten at redhat.com] 
> Sent: Monday, September 16, 2013 7:19 PM
> To: Исаев Виталий Анатольевич; freeipa-devel at redhat.com
> Subject: Re: [Freeipa-devel] Newcomer's question
> 
> Исаев Виталий Анатольевич wrote:
>> Dear Free IPA developers,
>>
>> Our team is working on the project based on the RHEL Virtualization 
>> and RHEL IdM server. It’s planned to run our software in enclosed 
>> internal enterprise network, and we would like to assign all the 
>> authentication and authorization tasks to the FreeIPA Python API. In 
>> fact we have already written this part of project on plain C; dialog 
>> with IdM server has been implemented over SSH interaction (libssh API 
>> + GNU flex). But some time ago we discovered FreeIPA API and since 
>> then we really want to migrate from C to Python.
>>
>> So the time has come, but the problem is our complete ignorance of the 
>> Python programming language. We faced a problem trying to modify the 
>> tutorial script */free-ipa-3.3.1/doc/python-api.py: /*ldap2 was 
>> refused to import. Which module should be included in this case?
>>
>> We use RHEL 6.4 desktop, all the IPA packages has 3.0.0-25 version.
>>
>> #!/usr/bin/python
>>
>> # -*- coding: utf-8 -*-
>>
>> from ipalib import api, errors
>>
>> from ipalib import Command
>>
>> from ipalib import Object
>>
>> from ipalib import Str
>>
>> from ipalib import output
>>
>> from ipalib.plugins import baseldap
>>
>> #Load environment
>>
>> api.finalize()
>>
>> if api.env.in_server:
>>
>>      api.Backend.ldap2.connect(
>>
>>          ccache=api.Backend.krb.default_ccname()
>>
>>       )
>>
>> else:
>>
>>      api.Backend.xmlclient.connect()
>>
>> #Execute command
>>
>> dn = api.Backend.ldap2.make_dn_from_attr(u'python_dev3',
>> loginshell=u'/bin/sh', givenname=u'Python', sn=u'User',
>> userpassword=u'redhat')
>>
>> try:
>>
>>                  api.Backend.user_add(dn)
>>
>> excepterrors.DuplicateEntry:
>>
>> print("Possibly duplicate…")
>>
>> else:
>>
>>                  print("User added…")
>>
>> Errors:
>>
>> ipa: INFO: trying https://ipa.dev.ru/ipa/xml
>>
>> Traceback (most recent call last):
>>
>>    File "./test.py", line 22, in <module>
>>
>>      dn = api.Backend.ldap2.make_dn_from_attr(u'python_dev3',
>> loginshell=u'/bin/sh', givenname=u'Python', sn=u'User',
>> userpassword=u'redhat')
>>
>> AttributeError: 'NameSpace' object has no attribute 'ldap2'
> 
> Try this:
> 
> from ipalib import api
> from ipalib import errors
> 
> api.bootstrap(context='cli')
> api.finalize()
> api.Backend.xmlclient.connect()
> 
> try:
>      api.Command['user_add'](u'testuser',
>                              givenname=u'Test', sn=u'User',
>                              loginshell=u'/bin/sh') except errors.DuplicateEntry:
>      print "user already exists"
> else:
>      print "User added"
> 
> _______________________________________________
> Freeipa-devel mailing list
> Freeipa-devel at redhat.com
> https://www.redhat.com/mailman/listinfo/freeipa-devel
> 




More information about the Freeipa-devel mailing list