Synchronization service synchronizes IM objects with external accounts hosted on remote applications, such as an LDAP directory, or even a CSV file (CSV files are indeed also considered as "remote applications", just like an LDAP directory). The synchronization is bidirectional, which means:
IDM objects may be imported or updated from one or more external application repositories acting as "sources" (typically CSV files); this is the inbound synchronization
IDM objects may be provisioned on one or more external applications, thus creating/updating external accounts; this is the outbound provisioning
Inbound Synchronization
Synchronization service runs synchronization tasks. The term "synchronization" is a general-purpose word that designates one of the following tasks:
reconciliation: compare the content of a remote application's repository with the IM repository. The reconciliation task starts by scanning all the application's objects (accounts, organizations...), detecting changes regarding the IM state; new applicative accounts added, accounts that no longer exist (i.e. removed by the application's administrator), accounts modified. Reconciliation is usually executed as a scheduled task
import : very similar to the reconciliation, except that accounts deleted locally on the remote application are ignored. In fact, the import task considers that all application's account should be added to the IM, overwriting IM objects that already exist. The import pretends thus that all accounts on the application were just created
Thus, when configuring a synchronization task, via a Synchronization Task Definition, the task type must be chosen, among reconciliation or import.
Outbound Synchronization
provisioning : scan the content of the IDM repository and ensure that all remote accounts that should theoretically be assigned to IM objects (according to the configured settings) really exist and are up-to-date. This may result in creation, deletion or modification of remote accounts, and modification of account group membership.
REST API
Configuring Synchronization Tasks
Very much like Memority, the Synchronization service configuration can be achieved either by REST CRUD operations targeting individual resources, or by importing a whole XML configuration bundle.
REST CRUD Configuration
The usual REST methods enable to configure individual resources:
The execution of synchronization tasks is managed through the REST API.
Synchronization Execution tasks
Action
Resource
Example of Request Body
Description
Return value
Launch a synchronization task
POST /{tenant}/api/sync/sync-tasks/<taskDefinitionId>/instances
N/A
Launch a synchronization task by providing the identifier of a SynchronizationTaskDefinition task configuration with the taskDefinitionIdparameter.
Success
HTTP code 200.
Body: a task instance id as a simple string (not JSON): an identifier enabling to monitor the task progress, or interrupt the running task (see below).
Errors
HTTP code 404 if the task configuration id is not found.
HTTP code 409 (conflict) if the same task is already running. It is indeed forbidden to launch concurrent executions of the same task.
Monitor the execution of a synchronization task
GET /{tenant}/api/sync/sync-tasks/{taskDefinitionId}/~instances/{taskInstanceId}?option=expandErrorDetails:true/false
N/A
Monitor the execution of a synchronization task (if the task is still running) or get its execution outcome (if the task is not running anymore).
The taskInstanceIdparameter is the task instance id that was immediately returned when the task was launched (see above).
option=expandErrorDetails:true/false is an optional boolean parameter (true or false) enabling to include or not the errorDetails key in the JSON response. It is false by default.
Success
HTTP code 200.
Body: JSON task progress information of a given task instance (see example below)
Errors
HTTP code 404 if the task instance id is not found.
Get an history of all the executions of the given SynchronizationTaskDefinition
GET /{tenant}/api/sync/sync-tasks/{taskDefinitionId}/~instances
Default pagination:
Page size: 20 instances per page
Maximum page size: 500 instances per page
Sort order: Sorted by createdAt in descending order
N/A
Return the list of executions of a synchronization task by providing the identifier of a SynchronizationTaskDefinition task configuration with the taskDefinitionIdparameter.
Success
HTTP code 200.
Body: JSON list of task progress information
Get an history of all the synchronization task executions of all SynchronizationTaskDefinitions
GET /{tenant}/api/sync/sync-tasks/~instances?option=expandErrorDetails:true/false
N/A
Success
HTTP code 200.
Body: a JSON list of task progress informations (see above)
Interrupt a running synchronization task
POST /{tenant}/api/sync/sync-tasks/{taskDefinitionId}/instances/{taskInstanceId}/~cancel
N/A
Cancel a running task.
Success
HTTP code 200
Body: empty.
Errors
HTTP code 404 if the task instance id is not found.
HTTP code 409 ("conflict") if the task cannot be canceled because it is in a terminal state.
Get an history of all the synchronization task executions of all synchronization TaskDefinitions
GET /{tenant}/api/sync/sync-tasks/~instances
Parameters
filter: taskId
Options:
expandErrorDetails: true/false
kind
taskVisibility:PRIVATE/PUBLIC
actor
taskStatus
simulate: true/false
Default pagination:
Page size: 20 instances per page
Maximum page size: 500 instances per page
Sort order: Sorted by createdAt in descending order
Example of request with parameter and filter :
GET /{tenant}/api/sync/sync-tasks/~instances?filter=myImport-synctask&option=taskStatus:ERROR
N/A
Get all synchronization task
Success
HTTP code 200.
Body: JSON task information of task instances.
Here is an example of a task progress information returned by a monitoring request:
The execution of provisioning tasks is managed through the REST API.
Provisioning Execution tasks
Action
Resource
Example of Request Body
Description
Return value
Launch a provisioning task
POST /{tenant}/api/sync/prov-tasks/{taskDefinitionId}/instances
N/A
Launch a provisioning task by providing the identifier of a ProvisioningTaskDefinition task configuration with the taskDefinitionId parameter.
Success
HTTP code 200.
Body: a task instance id as a simple string (not JSON): an identifier enabling to monitor the task progress, or interrupt the running task (see below).
Errors
HTTP code 404 if the task configuration id is not found.
HTTP code 409 (conflict) if the same task is already running. It is indeed forbidden to launch concurrent executions of the same task.
Monitor the execution of a provisioning task
GET /{tenant}/api/sync/prov-tasks/{taskDefinitionId}/~instances/{taskInstanceId}?option=expandErrorDetails:true/false
N/A
Monitor the execution of a provisioning task (if the task is still running) or get its execution outcome (if the task is not running anymore).
The taskInstanceIdparameter is the task instance id that was immediately returned when the task was launched (see above).
option=expandErrorDetails:true/false is an optional boolean parameter (true or false) enabling to include or not the errorDetails key in the JSON response. It is false by default.
Success
HTTP code 200.
Body: JSON Task progress information of a given task instance (see example below)
Get an history of all the executions of the given ProvisioningTaskDefinition
GET /{tenant}/api/sync/prov-tasks/{taskDefinitionId}/~instances
Default pagination:
Page size: 20 instances per page
Maximum page size: 500 instances per page
Sort order: Sorted by createdAt in descending order
Return the list of executions of a provsioning task by providing the identifier of a ProvisioningTaskDefinition task configuration with the taskDefinitionIdparameter.
Success
HTTP code 200.
Body: JSON list of task progress information
Get an history of all the provisioning task executions of all ProvisioningTaskDefinitions
GET /{tenant}/api/sync/prov-tasks/~instances
Parameters
filter: taskId
Options:
expandErrorDetails: true/false
actor
taskStatus
simulate: true/false
Default pagination:
Page size: 20 instances per page
Maximum page size: 500 instances per page
Sort order: Sorted by createdAt in descending order
Example of request with parameter and filter :
GET /{tenant}/api/sync/prov-tasks/~instances?filter=allIdentities-provtask&option=taskStatus:ERROR
N/A
Success
HTTP code 200.
Body: a JSON list of task progress informations (see above)
Interrupt a running provisioning task
POST /{tenant}/api/sync/prov-tasks/{taskDefinitionId}/instances/{taskInstanceId}/~cancel
N/A
This method is idempotent. It may be launched consecutively several times without error, even if the task is not currently running.
Success
HTTP code 200
Body: empty.
Errors
HTTP code 404 if the task instance id is not found.
Pausing/Resuming Scheduled Synchronization Task Jobs
Scheduled synchronization task Jobs can be paused/resumed through the REST API.
Actions on Scheduled synchronization task Jobs
Action
Resource
Description
Return value
Pause a scheduled synchronization task Job
POST /{tenant}/api/sync/sync-tasks/{taskDefinitionId}/job/~pause
Pause a scheduled synchronization task Job by providing the identifier of a SynchronizationTaskDefinition task configuration with the taskDefinitionIdparameter.
Success
HTTP code 204 (no content).
Errors
HTTP code 404 if the task configuration id is not found.
Resume a paused synchronization task Job
POST /{tenant}/api/sync/sync-tasks/{taskDefinitionId}/job/~resume
Resume a paused synchronization task Job by providing the identifier of a SynchronizationTaskDefinition task configuration with the taskDefinitionIdparameter.
Success
HTTP code 204 (no content).
Errors
HTTP code 404 if the task configuration id is not found.
Report the scheduling state of a synchronization task Job
GET /{tenant}/api/sync/sync-tasks/{taskDefinitionId}/job/~scheduling
Get the scheduling status of a synchronization task Job by providing the identifier of a SynchronizationTaskDefinition task configuration with the taskDefinitionIdparameter.
Success
HTTP code 200.
Response body: properties indicating the Job scheduling status.
Errors
HTTP code 404 is the task configuration id is not found.
Pausing/Resuming Scheduled Provisioning Task Jobs
Scheduled provisioning task Jobs can be paused/resumed through the REST API.
Actions on Scheduled provisioning task Jobs
Action
Resource
Description
Return value
Pause a scheduled provisioning task Job
POST /{tenant}/api/sync/prov-tasks/{taskDefinitionId}/job/~pause
Pause a scheduled provisioning task Job by providing the identifier of a ProvisioningTaskDefinition task configuration with the taskDefinitionIdparameter.
Success
HTTP code 204 (no content).
Errors
HTTP code 404 if the task configuration id is not found.
Resume a paused provisioning task Job
POST /{tenant}/api/sync/prov-tasks/{taskDefinitionId}/job/~resume
Resume a paused provisioning task Job by providing the identifier of a ProvisioningTaskDefinition task configuration with the taskDefinitionIdparameter.
Success
HTTP code 204 (no content).
Errors
HTTP code 404 if the task configuration id is not found.
Report the scheduling state of a provisioning task Job
GET /{tenant}/api/sync/sync-tasks/{taskDefinitionId}/job/~scheduling
Get the scheduling status of a provisioning task Job by providing the identifier of a SynchronizationTaskDefinition task configuration with the taskDefinitionIdparameter.
Success
HTTP code 200.
Response body: properties indicating the Job scheduling status.
Errors
HTTP code 404 is the task configuration id is not found.
This page specifies the technical principles of the Synchronization service "outbound" provisioning, i.e. managing target accounts on remote Applications, such as creating or updating an LDAP account.
An Account Discovery Task searches accounts on a remote application, such as a LDAP directory, and reports the status of each account discovered on the application: