We are delighted to share our new EIC Delivery Methodology for efficiently managing Saviynt Implementations and delivering quick time to value. CLICK HERE.

GitHub Access not mapping to Accounts

AS5278
Regular Contributor II
Regular Contributor II

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

 

xurde
1 REPLY 1

rushikeshvartak
All-Star
All-Star

{
"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" }
}
}
]
}
}


Regards,
Rushikesh Vartak
If you find the response useful, kindly consider selecting Accept As Solution and clicking on the kudos button.