On 12/11/2012 11:24, ernst Developer wrote:
> Hi Francesco,
> With the AD resource, I want to *sync* all attributes, but only
> propagate a limited set back. How can I achieve that kind of behavior?
Ah ok, now I understand why you have two separate resources!
Then, in order to avoid unwanted updates to "AD update" when syncing
from "AD Sync", you will have to extend the SyncJob [1] and change line
354 from
List<PropagationTask> tasks =
propagationManager.getCreateTaskIds(created, userTO.getPassword(), userTO
.getVirtualAttributes(),
Collections.singleton(((SyncTask) this.task).getResource().getName()));
to something like:
Set<String> resNotToPropagate = new HashSet<String>();
resNotToPropagate.add(((SyncTask)
this.task).getResource().getName());
resNotToPropagate.add("AD update");
List<PropagationTask> tasks =
propagationManager.getCreateTaskIds(created, userTO.getPassword(), userTO
.getVirtualAttributes(), resNotToPropagate);
so that during synchronization, no propagation will occur either towards
the synchronizing resource ("AD Sync" in your example) and "AD Update".
Hope this helps.
Regards.
[1]
https://svn.apache.org/repos/asf/incubator/syncope/branches/1_0_X/core/src/main/java/org/apache/syncope/core/scheduling/SyncJob.java
> 2012/11/12 Francesco Chicchiriccò <[email protected]
> <mailto:[email protected]>>
>
> On 12/11/2012 10:03, ernst Developer wrote:
>> Thanks for the reply Francesco.
>>
>> I have drawn a little diagram. Please find this diagram attached.
>>
>> We have a setup like drawn in the diagram:
>> - An AD instance, which is the source of the identities;
>> - An AD Sync resource for syncing the identities to Syncope;
>> - A Syncope instance;
>> - An AD Update resource for executing the updates to AD. We want
>> to use a separate AD Update resource, to be able to control what
>> (limited set of) fields in AD the resource can modify. This
>> resource is also responsible for the password provisioning to AD;
>> - An external service that performs updates in Syncope using the
>> rest interface;
>>
>> A typical flow when a new identity is created in AD is:
>> 1. the user is picked up by the sync enabled AD resource;
>> 2. the user is created in Syncope;
>> 3. the external service performs an update on the same user in
>> Syncope;
>> 4. the update is picked up by the AD Update resource *only*;
>> 5. and an update is performed in AD by the AD Update resource;
>>
>> A few questions remain:
>> 1. Is the update picked up by the AD Update resource only, if we
>> set the correct capabilities on the resource?
>
> Capabilities are set on connectors, not resources.
> Definitely: if you don't give the needed capability, no action is
> performed on the underlying connector.
>
>
>> 2. When the external service performs an update in Syncope, will
>> Syncope propagate this update using the AD Sync resource only
>> when we configure the correct capabilities on the resource?
>
> Again. capabilities are set on connectors, not resources. If the
> two AD resources share the same connectors, this is not possible.
>
>
>> 3. In the user template the AD Update resource is connected to
>> every user. How can we prevent an update performed by the AD Sync
>> connector to be propagated to the AD Update resource?
>
> For this purpose, you'd need to not assign the AD Update resource
> in the user template, but I guess that this is not what you want.
> Actually, I don't understand why are you defining two separate AD
> resources: why not have a single AD resource for either
> synchronization and propagation?
>
> With a single AD resource, having a connector with all
> capabilities set, you can just synchronize, assign the resource
> via user template and be safe that any synchronization won't
> generate updates back to AD, while updates from the external
> service will do that.
>
> Regards.
>
>
>>
>> 2012/11/12 Francesco Chicchiriccò <[email protected]
>> <mailto:[email protected]>>
>>
>> On 11/11/2012 21:21, ernst Developer wrote:
>> > Hi,
>> >
>> > I was wondering about the behavior of a setup in Syncope with 1
>> > connector having 2 resources (SYNCResource and UPDATEResource).
>> >
>> > SYNCResource : this resources is meant for handling the
>> synchronization.
>> > UPDATEResource: this resource is meant for updating. Only a
>> limited
>> > set of schema fields (subset of the configured mappings in the
>> > SYNCResource) is configured.
>> >
>> > When updating the user in Syncope, the propagation should
>> only execute
>> > on the UPDATEResource, not on the SYNCResource. Is this
>> possible by
>> > configuration in Syncope?
>>
>> Sure: by default SYNCed users are not assigned any role or
>> resource:
>> this means that by default no propagation occurs at all after
>> synchronization.
>>
>> You can, however, modify this behavior by editing the user
>> template
>> associated with the synchronization task you are running: in
>> this way
>> you can associate any role and/or resource (and customize any
>> attribute,
>> BTW).
>>
>> > What happens with the update in the corresponding connected
>> system?
>> > For the SYNCResource this is an update in its connector,
>> and the sync
>> > results in another update (the same) of the Syncope user,
>> including
>> > all the corresponding propagations. One of them is of
>> course the
>> > propagation by the UPDATEResource, and the party starts all
>> over again.
>>
>> In order to prevent circular endless updates, the immediate
>> propagation
>> on the same syncing resource is disabled: this means that
>> when you are
>> synchronizing from Active Directory and assigning a DB
>> resource and the
>> same Active Directory resource to synchronized users (via user
>> template), the actual propagation will only happen towards
>> the DB resource.
>>
>> > Is what I describe above the actual behavior, or am I
>> missing something?
>>
>> I hope this clarifies a bit.
>>
>> Regards.
>>
--
Francesco Chicchiriccò
ASF Member, Apache Cocoon PMC and Apache Syncope PPMC Member
http://people.apache.org/~ilgrosso/