RHEL 9.2 - Using IdM API
RHEL 9.2 - Using IdM API
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons
Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is
available at
http://creativecommons.org/licenses/by-sa/3.0/
. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must
provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert,
Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift,
Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States
and other countries.
Linux ® is the registered trademark of Linus Torvalds in the United States and other countries.
XFS ® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States
and/or other countries.
MySQL ® is a registered trademark of MySQL AB in the United States, the European Union and
other countries.
Node.js ® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the
official Joyent Node.js open source or commercial project.
The OpenStack ® Word Mark and OpenStack logo are either registered trademarks/service marks
or trademarks/service marks of the OpenStack Foundation, in the United States and other
countries and are used with the OpenStack Foundation's permission. We are not affiliated with,
endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
Abstract
The IdM API contains examples for using various types of request. Administrators and developers
can use the IdM API to write custom scripts in Python to integrate IdM with third-party applications.
Table of Contents
Table of Contents
. . . . . . . . . .OPEN
MAKING . . . . . . SOURCE
. . . . . . . . . .MORE
. . . . . . .INCLUSIVE
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. . . . . . . . . . . . .
. . . . . . . . . . . . . FEEDBACK
PROVIDING . . . . . . . . . . . . ON
. . . .RED
. . . . .HAT
. . . . .DOCUMENTATION
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4. . . . . . . . . . . . .
. . . . . . . . . . . 1.. .INTRODUCTION
CHAPTER . . . . . . . . . . . . . . . . . TO
. . . .IDM
. . . . API
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5. . . . . . . . . . . . .
.CHAPTER
. . . . . . . . . . 2.
. . BASICS
. . . . . . . . .OF
. . . IDM
. . . . .API
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6. . . . . . . . . . . . .
2.1. INITIALIZING IDM API 6
2.2. RUNNING IDM API COMMANDS 6
2.3. IDM API COMMANDS OUTPUT STRUCTURE 7
2.4. LISTING THE IDM API COMMANDS AND PARAMETERS 8
2.5. USING BATCHES FOR EXECUTING IDM API COMMANDS 9
2.6. IDM API CONTEXT 10
. . . . . . . . . . . 3.
CHAPTER . . IDM
. . . . .API
. . . .AND
. . . . . IDM
. . . . .CLI
. . . .COMMANDS
. . . . . . . . . . . . . COMPARISON
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11. . . . . . . . . . . . .
.CHAPTER
. . . . . . . . . . 4.
. . .IDM
. . . . API
. . . . EXAMPLE
. . . . . . . . . . .SCENARIOS
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
..............
4.1. MANAGING USERS WITH IDM API COMMANDS 12
4.2. MANAGING GROUPS WITH IDM API COMMANDS 13
4.3. MANAGING ACCESS CONTROL WITH IDM API COMMANDS 15
1
Red Hat Enterprise Linux 9 Using IdM API
2
MAKING OPEN SOURCE MORE INCLUSIVE
3
Red Hat Enterprise Linux 9 Using IdM API
4. Enter your suggestion for improvement in the Description field. Include links to the relevant
parts of the documentation.
4
CHAPTER 1. INTRODUCTION TO IDM API
The Identity Management API has the JavaScript Object Notation Remote Procedure Call (JSON-RPC)
interface. To use the automation for various important parts, access the Identity Management API
through Python. For example, you can retrieve metadata from the server with all available commands.
5
Red Hat Enterprise Linux 9 Using IdM API
Prerequisites
Procedure
1. To initialize the IdM API, include the following code in the beginning of your script:
api.bootstrap(context="server")
api.finalize()
2. To establish a connection with the LDAP server, add the following logic to your script after API
initialization:
if api.env.in_server:
api.Backend.ldap2.connect()
else:
api.Backend.rpcclient.connect()
If you run your script on the IdM server, this logic allows your script to connect directly to
LDAP server.
If you run your script on the IdM client, the script uses the Remote Procedure Call (RPC)
client.
Additional resources
Prerequisites
The IdM API is initialized. For more information, see Initializing IdM API.
Procedure
For example, to list the information about user, include the following code in your script:
6
CHAPTER 2. BASICS OF IDM API
In this example, you also pass arguments and options to the command user_show.
Additional resources
For the full list of the api.Command commands, see IPA API Commands web source.
result
This section provides the result of the command. It contains various details about the command
operation, such as options and arguments which were passed to the command.
values
This section indicates the argument for the command.
messages
This section shows various information which ipa tool provides after the execution of the command.
summary
This section shows the summary for the operation.
{
"result": {
"displayname": ["a b"],
"objectclass": [
"top",
"person",
"organizationalperson",
"inetorgperson",
"inetuser",
"posixaccount",
"krbprincipalaux",
"krbticketpolicyaux",
"ipaobject",
"ipasshuser",
"ipaSshGroupOfPubKeys",
"mepOriginEntry",
"ipantuserattrs",
],
"cn": ["a b"],
"gidnumber": ["1445000004"],
"mail": ["[email protected]"],
7
Red Hat Enterprise Linux 9 Using IdM API
"krbprincipalname": [ipapython.kerberos.Principal("[email protected]")],
"loginshell": ["/bin/sh"],
"initials": ["ab"],
"uid": ["test"],
"uidnumber": ["1445000004"],
"sn": ["b"],
"krbcanonicalname": [ipapython.kerberos.Principal("[email protected]")],
"homedirectory": ["/home/test"],
"givenname": ["a"],
"gecos": ["a b"],
"ipauniqueid": ["9f9c1df8-5073-11ed-9a56-fa163ea98bb3"],
"mepmanagedentry": [
ipapython.dn.DN("cn=test,cn=groups,cn=accounts,dc=ipa,dc=test")
],
"has_password": False,
"has_keytab": False,
"memberof_group": ["ipausers"],
"dn": ipapython.dn.DN("uid=test,cn=users,cn=accounts,dc=ipa,dc=test"),
},
"value": "test",
"messages": [
{
"type": "warning",
"name": "VersionMissing",
"message": "API Version number was not sent, forward compatibility not guaranteed.
Assuming server's API version, 2.248",
"code": 13001,
"data": {"server_version": "2.248"},
}
],
"summary": 'Added user "test"',
}
Prerequisites
The IdM API is initialized. For more information, see Initializing IdM API.
Procedure
api.Command.command_show("user_add")
{
"result": {
"name": "user_add",
"version": "1",
8
CHAPTER 2. BASICS OF IDM API
"full_name": "user_add/1",
"doc": "Add a new user.",
"topic_topic": "user/1",
"obj_class": "user/1",
"attr_name": "add",
},
"value": "user_add",
"messages": [
{
"type": "warning",
"name": "VersionMissing",
"message": "API Version number was not sent, forward compatibility not guaranteed.
Assuming server's API version, 2.251",
"code": 13001,
"data": {"server_version": "2.251"},
}
],
"summary": None,
}
2. To display information about the givenname parameter for the user_add command, execute
the following code:
api.Command.param_show("user_add", name="givenname")
{
"result": {
"name": "givenname",
"type": "str",
"positional": False,
"cli_name": "first",
"label": "First name",
},
"value": "givenname",
"messages": [
{
"type": "warning",
"name": "VersionMissing",
"message": "API Version number was not sent, forward compatibility not guaranteed.
Assuming server's API version, 2.251",
"code": 13001,
"data": {"server_version": "2.251"},
}
],
"summary": None,
}
Prerequisites
9
Red Hat Enterprise Linux 9 Using IdM API
Prerequisites
The IdM API is initialized. For more information, see Initializing IdM API.
Procedure
To create 100 IdM users in one batch, include the following code into your script:
batch_args = []
for i in range(100):
user_id = "user%i" % i
args = [user_id]
kw = {
'givenname' : user_id,
'sn' : user_id
}
batch_args.append({
'method' : 'user_add',
'params' : [args, kw]
})
ret = api.Command.batch(*batch_args)
server
Set of plug-ins which validate arguments and options that are passed to IdM API commands for
execution.
client
Set of plug-ins which validate arguments and options that are forwarded to the IdM server for
execution.
installer
Set of plug-ins which are specific to the installation process.
updates
Set of plug-ins which are specific to the updating process.
10
CHAPTER 3. IDM API AND IDM CLI COMMANDS COMPARISON
%Y%m%d%H%M%SZ
%Y-%m-%dT%H:%M:%SZ
%Y-%m-%dT%H:%MZ
%Y-%m-%dZ
%Y-%m-%d %H:%M:%SZ
%Y-%m-%d %H:%MZ
Additionally, the IdM API can use the Python built-in class datetime.
The console starts an interactive Python console, which you can use to run IdM API commands.
The help command shows description of the topics and the commands and includes various
examples.
The show-mapping command shows the mapping between CLI parameter names and LDAP
attributes.
11
Red Hat Enterprise Linux 9 Using IdM API
api.Command.user_show("exampleuser", all=True)
api.Command.user_mod("exampleuser", mail="[email protected]")
api.Command.user_find(criteria="exampleuser", in_group="admins")
api.Command.user_del("exampleuser")
To restore the user in future, use the preserve option. If you use this option, you can restore the user
with the user_undel command.
args = ["exampleuser"]
kw = {
"usercertificate": """
MIICYzCCAcygAwIBAgIBADANBgkqhkiG9w0BAQUFADAuMQswCQYDVQQGEwJVUzEMMAoGA
12
CHAPTER 4. IDM API EXAMPLE SCENARIOS
1UEC
hMDSUJNMREwDwYDVQQLEwhMb2NhbCBDQTAeFw05OTEyMjIwNTAwMDBaFw0wMDEyMjM
wNDU5NT
laMC4xCzAJBgNVBAYTAlVTMQwwCgYDVQQKEwNJQk0xETAPBgNVBAsTCExvY2FsIENBMIGf
MA0
GCSqGSIb3DQEBATOPA4GNADCBiQKBgQD2bZEo7xGaX2/0GHkrNFZvlxBou9v1Jmt/PDiTMPve
8r9FeJAQ0QdvFST/0JPQYD20rH0bimdDLgNdNynmyRoS2S/IInfpmf69iyc2G0TPyRvmHIiOZ
bdCd+YBHQi1adkj17NDcWj6S14tVurFX73zx0sNoMS79q3tuXKrDsxeuwIDAQABo4GQMIGNME
sGCVUdDwGG+EIBDQQ+EzxHZW5lcmF0ZWQgYnkgdGhlIFNlY3VyZVdheSBTZWN1cml0eSBTZ
XJ
2ZXIgZm9yIE9TLzM5MCAoUkFDRikwDgYDVR0PAQH/BAQDAgAGMA8GA1UdEwEB/wQFMAMB
Af8w
HQYDVR0OBBYEFJ3+ocRyCTJw067dLSwr/nalx6YMMA0GCSqGSIb3DQEBBQUAA4GBAMaQzt
+za
j1GU77yzlr8iiMBXgdQrwsZZWJo5exnAucJAEYQZmOfyLiMD6oYq+ZnfvM0n8G/Y79q8nhwvu
xpYOnRSAXFp6xSkrIOeZtJMY1h00LKp/JX3Ng1svZ2agE126JHsQ0bhzN5TKsYfbwfTwfjdWA
Gy6Vf1nYi/rO+ryMO
"""
}
api.Command.user_add_cert(*args, **kw)
api.Command.user_disable("exampleuser")
api.Command.group_add_member("developers", user="admin")
13
Red Hat Enterprise Linux 9 Using IdM API
api.Command.group_add_member("developers", service="HTTP/server.ipa.test")
api.Command.group_add_member("developers", group="admins")
api.Command.group_add_member_manager("developers", user="bob")
api.Command.group_find(membermanager_user="bob")
api.Command.group_show("developers", no_members=True)
api.Command.group_mod("testgroup", posix=True)
api.Command.group_remove_member("developers", user="admin")
api.Command.group_remove_member_manager("developers", user="bob")
api.Command.group_del("developers")
14
CHAPTER 4. IDM API EXAMPLE SCENARIOS
api.Command.privilege_add("User creation")
api.Command.privilege_add_permission("User creation", permission="Create users")
api.Command.privilege_add_permission("User creation", permission="Manage group
membership")
api.Command.privilege_add_permission("User creation", permission="Manage User certificates")
api.Command.role_add_member("usermanager", user="bob")
api.Command.role_add_member("usermanager", group="managers")
15
Red Hat Enterprise Linux 9 Using IdM API
16