Grouper SQL provisioner example with folder metadata
Description
This provisioner provisioned SQL groups/subjects/memberships, and the group name is translated with folder metadata.
Note, pre v5.21.4 or v4.20.0, you need to configure the metadata to show on folders and groups. With this version or later you can configure solely on folders.
Tables
(this DDL is postgres but you can easily adjust it for other databases)
CREATE TABLE some_provisioning_table (
group_name varchar(1024) NOT NULL,
subject_id varchar(100) NOT NULL
);
CREATE TABLE some_provisioning_entity (
subject_id varchar(100) NOT NULL
);
CREATE TABLE some_provisioning_group (
group_name varchar(1024) NULL
);Assign the metadata on some folders and not others
You can see the metadata propagated to the group
Even though this group is not directly provisionable, it is inherited from the ancestor folder
See the translated values in the target
Note: the "doe" and "trin" have a subdomain suffix, "artsc" does not (since no metadata assigned there)
Configuration properties
Note the group name translation:
${grouperProvisioningGroup.name + grouperUtil.defaultString(grouperProvisioningGroup.retrieveAttributeValueString('md_subdomain'), '')}
provisioner.some_sql.addDisabledFullSyncDaemon = true
provisioner.some_sql.addDisabledIncrementalSyncDaemon = true
provisioner.some_sql.class = edu.internet2.middleware.grouper.app.sqlProvisioning.SqlProvisioner
provisioner.some_sql.configureMetadata = true
provisioner.some_sql.customizeEntityCrud = true
provisioner.some_sql.customizeGroupCrud = true
provisioner.some_sql.customizeMembershipCrud = true
provisioner.some_sql.dbExternalSystemConfigId = grouper
provisioner.some_sql.deleteEntitiesIfNotExistInGrouper = true
provisioner.some_sql.deleteGroupsIfNotExistInGrouper = true
provisioner.some_sql.deleteMembershipsIfNotExistInGrouper = true
provisioner.some_sql.deleteMembershipsOnlyInTrackedGroups = false
provisioner.some_sql.entityMatchingAttribute0name = subject_id
provisioner.some_sql.entityMatchingAttributeCount = 1
provisioner.some_sql.groupMatchingAttribute0name = group_name
provisioner.some_sql.groupMatchingAttributeCount = 1
provisioner.some_sql.groupTableIdColumn = group_name
provisioner.some_sql.groupTableName = some_provisioning_group
provisioner.some_sql.logAllObjectsVerbose = true
provisioner.some_sql.makeChangesToEntities = true
provisioner.some_sql.membershipEntityForeignKeyColumn = subject_id
provisioner.some_sql.membershipGroupForeignKeyColumn = group_name
provisioner.some_sql.membershipTableName = some_provisioning_table
provisioner.some_sql.metadata.0.dropdownValues = .doe, .trinity
provisioner.some_sql.metadata.0.formElementType = dropdown
provisioner.some_sql.metadata.0.name = md_subdomain
provisioner.some_sql.metadata.0.showForFolder = true
provisioner.some_sql.numberOfEntityAttributes = 1
provisioner.some_sql.numberOfGroupAttributes = 1
provisioner.some_sql.numberOfMembershipAttributes = 2
provisioner.some_sql.numberOfMetadata = 1
provisioner.some_sql.operateOnGrouperEntities = true
provisioner.some_sql.operateOnGrouperGroups = true
provisioner.some_sql.operateOnGrouperMemberships = true
provisioner.some_sql.provisioningType = membershipObjects
provisioner.some_sql.selectAllEntities = true
provisioner.some_sql.showAdvanced = true
provisioner.some_sql.startWith = this is start with read only
provisioner.some_sql.subjectSourcesToProvision = jdbc
provisioner.some_sql.targetEntityAttribute.0.name = subject_id
provisioner.some_sql.targetEntityAttribute.0.translateExpressionType = grouperProvisioningEntityField
provisioner.some_sql.targetEntityAttribute.0.translateFromGrouperProvisioningEntityField = subjectId
provisioner.some_sql.targetGroupAttribute.0.name = group_name
provisioner.some_sql.targetGroupAttribute.0.translateExpression = \u0024{grouperProvisioningGroup.name + grouperUtil.defaultString(grouperProvisioningGroup.retrieveAttributeValueString('md_subdomain'), '')}
provisioner.some_sql.targetGroupAttribute.0.translateExpressionType = translationScript
provisioner.some_sql.targetMembershipAttribute.0.name = group_name
provisioner.some_sql.targetMembershipAttribute.0.translateExpressionType = grouperTargetGroupField
provisioner.some_sql.targetMembershipAttribute.0.translateFromGrouperTargetGroupField = group_name
provisioner.some_sql.targetMembershipAttribute.1.name = subject_id
provisioner.some_sql.targetMembershipAttribute.1.translateExpressionType = grouperTargetEntityField
provisioner.some_sql.targetMembershipAttribute.1.translateFromGrouperTargetEntityField = subject_id
provisioner.some_sql.userPrimaryKey = subject_id
provisioner.some_sql.userTableName = some_provisioning_entity
Configuration UI