and more in a single search tool across platforms. Read the announcement here. |
12/15/2023 03:26 AM
Hi,
We had setup GitHub Connection in Saviynt and imported all the accounts and entitlements(Organization, Teams, Repositories). Everything was imported and mapping was done properly. We were in version 23.4 at that time.
After we migrated to v23.8, when we run the GitHub Access Import Job, we are facing issues with the 'Organization' entitlement type. It is not getting mapped to Accounts. Teams and Repositories are getting mapped fine.
We found that a similar issue has been raised earlier:
Solved: GitHub - Account and Access Mapping issue - Import... - Saviynt Forums - 47838
There is no solution provided in the above post.
When I remove everything else from 'entitlementParams', and 'acctEntParams' and just try to import Organization, the job runs for a second and then stops, nothing is imported, we see nothing in the logs.
I am attaching the ImportAcctEntJson we are using.
We are using the 'GitHubRest' connector type.
Please help us fix this issue.
Thanks,
Atul Singh
12/15/2023 06:05 AM
{
"accountParams": {},
"entitlementParams": {
"connection": "acctAuth",
"processingType": "SequentialAndIterative",
"supportedEntitlementTypes": [
"Organization",
"Team",
"Repository" ],
"entTypes": {
"Organization": {
"entTypeOrder": 0,
"call": {
"call1": {
"callOrder": 0,
"stageNumber": 3,
"inputParams": {
"statusFilter": "(ev.status = 6 or ev.status = 1)" },
"http": {
"httpHeaders": {
"Authorization": "${access_token}" },
"url": "https://api.github.com/orgs/myorgnamehere",
"httpContentType": "application/x-www-form-urlencoded",
"httpMethod": "GET" },
"listField": "",
"keyField": "entitlementID",
"colsToPropsMap": {
"entitlementID": "id~#~char",
"entitlement_value": "login~#~char",
"customproperty6": "url~#~char",
"customproperty7": "description~#~char",
"customproperty8": "public_repos~#~char",
"customproperty9": "public_gists~#~char",
"customproperty10": "followers~#~char" }
},
"call2": {
"callOrder": 1,
"dummyCall": true,
"stageNumber": 4,
"inputParams": {
"statusFilter": "(ev.status = 6 or ev.status = 1)" },
"multiTrigger": {
"multiTriggerType": "MultiTriggerByEntitlementBatching",
"triggersCount": "1",
"params": {
"accountsoraccess": "access" }
}
}
}
},
"Team": {
"entTypeOrder": 1,
"entitlementOwnerConfig": {
"maxNumberOfOwner": 4,
"typeOfImportOwner": [
"maintainer" ]
},
"call": {
"call1": {
"callOrder": 0,
"stageNumber": 6,
"inputParams": {
"entitlementname": "Organization" },
"http": {
"httpHeaders": {
"Authorization": "${access_token}" },
"url": "https://api.github.com/orgs/${entitlementValue}/teams?per_page=100&page=1",
"httpContentType": "application/x-www-form-urlencoded",
"httpMethod": "GET" },
"pagination": {
"nextUrl": {
"nextUrlPath": "${headers?.Link==null?'':headers?.Link?.contains('next')?headers?.Link?.split(',')?.size()==2?headers?.Link?.split(',')[0]?.replace('<', '')?.replace('>; rel=\"next\"','')?.trim():headers?.Link?.split(',')[1].replace('<', '').replace('>; rel=\"next\"','').trim():''}" }
},
"listField": "",
"keyField": "entitlementID",
"colsToPropsMap": {
"entitlementID": "id~#~char",
"entitlement_value": "name~#~char",
"customproperty1": "url~#~char",
"customproperty6": "privacy~#~char",
"customproperty7": "permission~#~char",
"customproperty20": "STORE#ENT#MAPPINGINFO#PARENTID#TYPE##ENTMAP~#~char",
"entitlementMappingJson": "STORE#ENT#MAPPINGINFO#PARENTID~#~char" }
}
}
},
"Repository": {
"entTypeOrder": 2,
"call": {
"call1": {
"callOrder": 0,
"stageNumber": 7,
"inputParams": {
"entitlementname": "Organization",
"statusFilter": "(ev.status = 6 or ev.status = 1)" },
"http": {
"httpHeaders": {
"Authorization": "${access_token}" },
"url": "https://api.github.com/orgs/${entitlementValue}/repos?per_page=100&page=1",
"httpContentType": "application/x-www-form-urlencoded",
"httpMethod": "GET" },
"pagination": {
"nextUrl": {
"nextUrlPath": "${headers?.Link==null?'':headers?.Link?.contains('next')?headers?.Link?.split(',')?.size()==2?headers?.Link?.split(',')[0]?.replace('<', '')?.replace('>; rel=\"next\"','')?.trim():headers?.Link?.split(',')[1].replace('<', '').replace('>; rel=\"next\"','').trim():''}" }
},
"listField": "",
"keyField": "entitlementID",
"colsToPropsMap": {
"entitlementID": "id~#~char",
"entitlement_value": "name~#~char",
"customproperty1": "url~#~char",
"customproperty6": "private~#~char",
"customproperty7": "size~#~char",
"customproperty8": "permissions.admin~#~char",
"customproperty9": "permissions.push~#~char",
"customproperty10": "permissions.pull~#~char",
"customproperty11": "owner.login~#~char",
"customproperty20": "STORE#ENT#MAPPINGINFO#PARENTID#TYPE##ENTMAP~#~char",
"entitlementMappingJson": "STORE#ENT#MAPPINGINFO#PARENTID~#~char" }
}
}
}
}
},
"acctEntParams": {
"processingType": "httpEntToAcct",
"connection": "acctAuth",
"initPrivigesMap": [
{
"privName": "Permission",
"attrType": 3,
"entType": "Organization",
"cfgType": 1,
"attributeValues": "",
"defaultValue": "" },
{
"privName": "Permission",
"attrType": 3,
"entType": "Team",
"cfgType": 1,
"attributeValues": "",
"defaultValue": "" },
{
"privName": "Permission",
"attrType": 3,
"entType": "Repository",
"cfgType": 1,
"attributeValues": "",
"defaultValue": "" }
],
"entTypes": {
"Organization": {
"call": {
"call1": {
"callOrder": 0,
"stageNumber": 8,
"http": {
"httpHeaders": {
"Authorization": "${access_token}" },
"url": "https://api.github.com/orgs/${id}/members",
"httpContentType": "application/x-www-form-urlencoded",
"httpMethod": "GET" },
"listField": "",
"acctKeyField": "accountID",
"entKeyField": "entitlement_value",
"acctIdPath": "login",
"privilegeParams": {
"attrName": "Permission",
"attrValue": "member" }
},
"call2": {
"callOrder": 0,
"stageNumber": 9,
"http": {
"httpHeaders": {
"Authorization": "${access_token}" },
"url": "https://api.github.com/orgs/${id}/members?role=admin",
"httpContentType": "application/x-www-form-urlencoded",
"httpMethod": "GET" },
"listField": "",
"acctKeyField": "accountID",
"entKeyField": "entitlement_value",
"acctIdPath": "login",
"privilegeParams": {
"attrName": "Permission",
"attrValue": "admin" }
},
"call3": {
"callOrder": 0,
"stageNumber": 10,
"http": {
"httpHeaders": {
"Authorization": "${access_token}" },
"url": "https://api.github.com/orgs/${id}/outside_collaborators",
"httpContentType": "application/x-www-form-urlencoded",
"httpMethod": "GET" },
"listField": "",
"acctKeyField": "accountID",
"entKeyField": "entitlement_value",
"acctIdPath": "login",
"privilegeParams": {
"attrName": "Permission",
"attrValue": "outside_collaborator" }
}
}
},
"Team": {
"call": {
"call1": {
"callOrder": 0,
"stageNumber": 11,
"inputParams": {
"entitlementname": "Organization",
"statusFilter": "(ev.status = 6 or ev.status = 1)" },
"http": {
"httpHeaders": {
"Authorization": "${access_token}" },
"url": "https://api.github.com/teams/${id}/members?role=member",
"httpContentType": "application/x-www-form-urlencoded",
"httpMethod": "GET" },
"listField": "",
"acctKeyField": "accountID",
"entKeyField": "entitlementID",
"acctIdPath": "login",
"privilegeParams": {
"attrName": "Permission",
"attrValue": "member" }
},
"call2": {
"callOrder": 1,
"stageNumber": 12,
"inputParams": {
"entitlementname": "Organization",
"statusFilter": "(ev.status = 6 or ev.status = 1)" },
"http": {
"httpHeaders": {
"Authorization": "${access_token}" },
"url": "https://api.github.com/teams/${id}/members?role=maintainer",
"httpContentType": "application/x-www-form-urlencoded",
"httpMethod": "GET" },
"listField": "",
"acctKeyField": "accountID",
"entKeyField": "entitlementID",
"acctIdPath": "login",
"privilegeParams": {
"attrName": "Permission",
"attrValue": "maintainer" }
}
}
},
"Repository": {
"call": {
"call1": {
"callOrder": 0,
"stageNumber": 13,
"inputParams": {
"entitlementname": "Organization",
"statusFilter": "(ev.status = 6 or ev.status = 1)" },
"http": {
"httpHeaders": {
"Authorization": "${access_token}" },
"url": "${id}/collaborators",
"httpContentType": "application/x-www-form-urlencoded",
"httpMethod": "GET" },
"listField": "",
"acctKeyField": "accountID",
"entKeyField": "customproperty1",
"acctIdPath": "login",
"privilegeParams": {
"attrName": "Permission",
"attrValue": "member" }
},
"call2": {
"callOrder": 1,
"stageNumber": 14,
"inputParams": {
"entitlementname": "Organization",
"statusFilter": "(ev.status = 6 or ev.status = 1)" },
"acctEntMappingTypeParam": {
"mappingType": "ENT2PRIVREVERSE",
"entitlementName": "Team" },
"http": {
"httpHeaders": {
"Authorization": "${access_token}" },
"url": "${id}/teams",
"httpContentType": "application/x-www-form-urlencoded",
"httpMethod": "GET" },
"listField": "",
"entKeyField": "customproperty1",
"entIdPath": "url",
"privilegeParams": {
"attrName": "Permission",
"attrValuePath": "permission" }
}
}
}
}
},
"globalSettingParams": {
"globalTriggerParams": {
"maxLoopCountForLastTrigger": 5,
"lastTriggerCompletionSleep": 2000,
"lastTriggerCompletionIntermediateSleep": 1000
},
"supportedEntitlementTypes": [
{
"Organization": {
"custompropertyLabels": {
"customproperty3": "Tags",
"customproperty4": "ID",
"customproperty6": "Provision VM Agent",
"customproperty7": "Enable Automatic Updates" }
},
"Team": {
"custompropertyLabels": {
"customproperty3": "Tags",
"customproperty4": "ID",
"customproperty6": "Provision VM Agent",
"customproperty7": "Enable Automatic Updates" }
},
"Repository": {
"custompropertyLabels": {
"customproperty3": "Tags",
"customproperty4": "ID",
"customproperty6": "Provision VM Agent",
"customproperty7": "Enable Automatic Updates" }
}
}
]
}
}