Azure DevOps is methodology that supports cohesiveness between development and operations into a smooth sailing event allowing organizations to create and improve products at a faster pace than they can with traditional software development approaches.
Supervisor configuration parameters
To configure the connector, following parameters are required.
-
Connector name
-
PAT (Personal Access Token)
NOTE: For more information related to generating a PAT, see Retrieving Personal Access Token.
-
Target URL (https://vsaex.dev.azure.com/{ORGANIZATION_NAME})
-
Project Target URL (https://dev.azure.com/{ORGANIZATION_NAME})
-
Instance DateTime Offset (refer Configuring additional datetime offset in connectors for more details).
Required Azure DevOps Organization Permissions
The account used by the connector must have one of the following:
-
An Organization Owner role
or
-
A Project Collection Administrator role
Supported objects and operations
Users
|
Operation |
VERB |
|---|---|
|
Create User |
POST |
|
Get User by Id |
GET |
|
List Users |
GET |
|
Update User |
PUT |
|
Delete User |
DELETE |
Groups
|
Operation |
VERB |
|---|---|
|
Create Group |
POST |
|
Get Group by Id |
GET |
|
List Groups |
GET |
|
Update Group |
PUT |
|
Delete Group |
DELETE |
Projects
|
Operation |
VERB |
|---|---|
|
Create Project |
POST |
|
Get Project by Id |
GET |
|
List Projects |
GET |
|
Update Project |
PUT |
|
Delete Project |
DELETE |
Mandatory fields
This section lists the mandatory field required to CREATE a user.
Users (for v1.0 & v2.0)
-
userName
Groups (for v1.0 & v2.0)
-
displayName
-
enterpriseExtension.licenseRule.accountLicenseType
-
enterpriseExtension.licenseRule.licensingSource
-
enterpriseExtension.licenseRule.msdnLicenseType
Projects (for v1.0 & v2.0)
-
displayName
-
capabilities.processTemplateTypeId
-
capabilities.versionSourceControlType
Attributes Mappings
Different mappings associated with this connector are listed in the tables below.
| SCIM User | Azure DevOps Parameter |
|---|---|
| id | id |
| userName | user.principalName |
| displayName | user.displayName |
| emails[].value | user.mailAddress |
| enterpriseExtension.accessLevel.licensingSource | accessLevel.licensingSource |
| enterpriseExtension.accessLevel.accountLicenseType | accessLevel.accountLicenseType |
| enterpriseExtension.accessLevel.msdnLicenseType | accessLevel.msdnLicenseType |
| enterpriseExtension.accessLevel.licenseDisplayName | accessLevel.licenseDisplayName |
| enterpriseExtension.accessLevel.status | accessLevel.status |
| enterpriseExtension.accessLevel.statusMessage | accessLevel.statusMessage |
| enterpriseExtension.accessLevel.assignmentSource | accessLevel.assignmentSource |
| enterpriseExtension.originId | user.originId |
| enterpriseExtension.origin | user.origin |
| enterpriseExtension.descriptor | user.descriptor |
| enterpriseExtension.subjectKind | user.subjectKind |
| enterpriseExtension.metaType | user.metaType |
| enterpriseExtension.domain | user.domain |
| enterpriseExtension.directoryAlias | user.directoryAlias |
| enterpriseExtension.projectEntitlements[].assignmentSource | projectEntitlements[].assignmentSource |
| enterpriseExtension.projectEntitlements[].isProjectPermissionInherited | projectEntitlements[].projectPermissionInherited |
| enterpriseExtension.projectEntitlements[].projectRefId | projectEntitlements[].projectRef.id |
| enterpriseExtension.projectEntitlements[].projectRefName | projectEntitlements[].projectRef.name |
| enterpriseExtension.projectEntitlements[].projectGroupType | projectEntitlements[].group.groupType |
| enterpriseExtension.projectEntitlements[].projectGroupDisplayName | projectEntitlements[].group.displayName |
| enterpriseExtension.groupAssignments[].groupId | groupAssignments[].id |
| enterpriseExtension.groupAssignments[].groupDescription | groupAssignments[].group.description |
| enterpriseExtension.groupAssignments[].groupDescriptor | groupAssignments[].group.descriptor |
| enterpriseExtension.groupAssignments[].groupDisplayName | groupAssignments[].group.displayName |
| enterpriseExtension.groupAssignments[].groupDomain | groupAssignments[].group.domain |
| enterpriseExtension.groupAssignments[].groupMailAddress | groupAssignments[].group.mailAddress |
| enterpriseExtension.groupAssignments[].groupOrigin | groupAssignments[].group.origin |
| enterpriseExtension.groupAssignments[].groupOriginId | groupAssignments[].group.originId |
| enterpriseExtension.groupAssignments[].groupPrincipalName | groupAssignments[].group.principalName |
| enterpriseExtension.groupAssignments[].groupSubjectkind | groupAssignments[].group.subjectKind |
| enterpriseExtension.groupAssignments[].status | groupAssignments[].status |
| enterpriseExtension.groupAssignments[].groupLicensingSource | groupAssignments[].licenseRule.licensingSource |
| enterpriseExtension.groupAssignments[].groupAccountLicenseType | groupAssignments[].licenseRule.accountLicenseType |
| enterpriseExtension.groupAssignments[].groupMsdnLicenseType | groupAssignments[].licenseRule.msdnLicenseType |
| enterpriseExtension.groupAssignments[].groupLicenseDisplayName | groupAssignments[].licenseRule.licenseDisplayName |
| enterpriseExtension.groupAssignments[].groupLicensingRuleStatus | groupAssignments[].licenseRule.status |
| enterpriseExtension.groupAssignments[].groupLicensingRuleStatusMessage | groupAssignments[].licenseRule.statusMessage |
| enterpriseExtension.groupAssignments[].groupLicensingRuleAssignmentSource | groupAssignments[].licenseRuleAssignmentSource |
| meta.created | dateCreated |
| SCIM User | Azure DevOps Parameter |
|---|---|
| id | user.descriptor |
| userName | user.principalName |
| displayName | user.displayName |
| emails[].value | user.mailAddress |
| enterpriseExtension.originId | user.originId |
| enterpriseExtension.origin | user.origin |
| enterpriseExtension.subjectKind | user.subjectKind |
| enterpriseExtension.metaType | user.metaType |
| enterpriseExtension.domain | user.domain |
| enterpriseExtension.directoryAlias | user.directoryAlias |
| enterpriseExtension.projectEntitlements[].assignmentSource | projectEntitlements[].assignmentSource |
| enterpriseExtension.projectEntitlements[].isProjectPermissionInherited | projectEntitlements[].projectPermissionInherited |
| enterpriseExtension.projectEntitlements[].projectRefId | projectEntitlements[].projectRef.id |
| enterpriseExtension.projectEntitlements[].projectRefName | projectEntitlements[].projectRef.name |
| enterpriseExtension.projectEntitlements[].projectGroupType | projectEntitlements[].group.groupType |
| enterpriseExtension.projectEntitlements[].projectGroupDisplayName | projectEntitlements[].group.displayName |
| enterpriseExtension.accessLevel.licensingSource | accessLevel.licensingSource |
| enterpriseExtension.accessLevel.accountLicenseType | accessLevel.accountLicenseType |
| enterpriseExtension.accessLevel.msdnLicenseType | accessLevel.msdnLicenseType |
| enterpriseExtension.accessLevel.licenseDisplayName | accessLevel.licenseDisplayName |
| enterpriseExtension.accessLevel.status | accessLevel.status |
| enterpriseExtension.accessLevel.statusMessage | accessLevel.statusMessage |
| enterpriseExtension.accessLevel.assignmentSource | accessLevel.assignmentSource |
| SCIM Group | Azure DevOps Parameter |
|---|---|
| id | id |
| displayName | group.displayName |
| members[].value | members[].id |
| enterpriseExtension.licenseRule.licensingSource | licenseRule.licensingSource |
| enterpriseExtension.licenseRule.accountLicenseType | licenseRule.accountLicenseType |
| enterpriseExtension.licenseRule.msdnLicenseType | licenseRule.msdnLicenseType |
| enterpriseExtension.licenseRule.licenseDisplayName | licenseRule.licenseDisplayName |
| enterpriseExtension.licenseRule.status | licenseRule.status |
| enterpriseExtension.licenseRule.statusMessage | licenseRule.statusMessage |
| enterpriseExtension.licenseRule.assignmentSource | licenseRule.assignmentSource |
| enterpriseExtension.originId | group.originId |
| enterpriseExtension.origin | group.origin |
| enterpriseExtension.descriptor | group.descriptor |
| enterpriseExtension.subjectKind | group.subjectKind |
| enterpriseExtension.description | group.description |
| enterpriseExtension.domain | group.domain |
| enterpriseExtension.status | group.status |
| enterpriseExtension.principalName | group.principalName |
| enterpriseExtension.projectEntitlements[].assignmentSource | projectEntitlements[].assignmentSource |
| enterpriseExtension.projectEntitlements[].isProjectPermissionInherited | projectEntitlements[].projectPermissionInherited |
| enterpriseExtension.projectEntitlements[].projectRefId | projectEntitlements[].projectRef.id |
| enterpriseExtension.projectEntitlements[].projectRefName | projectEntitlements[].projectRef.name |
| enterpriseExtension.projectEntitlements[].projectGroupType | projectEntitlements[].group.groupType |
| enterpriseExtension.projectEntitlements[].projectGroupDisplayName | projectEntitlements[].group.displayName |
| SCIM Group | Azure DevOps Parameter |
|---|---|
| id | group.descriptor |
| displayName | group.displayName |
| members[].value | members[].id |
| enterpriseExtension.licenseRule.licensingSource | licenseRule.licensingSource |
| enterpriseExtension.licenseRule.accountLicenseType | licenseRule.accountLicenseType |
| enterpriseExtension.licenseRule.msdnLicenseType | licenseRule.msdnLicenseType |
| enterpriseExtension.licenseRule.licenseDisplayName | licenseRule.licenseDisplayName |
| enterpriseExtension.licenseRule.status | licenseRule.status |
| enterpriseExtension.licenseRule.statusMessage | licenseRule.statusMessage |
| enterpriseExtension.licenseRule.assignmentSource | licenseRule.assignmentSource |
| enterpriseExtension.originId | group.originId |
| enterpriseExtension.origin | group.origin |
| enterpriseExtension.subjectKind | group.subjectKind |
| enterpriseExtension.description | group.description |
| enterpriseExtension.domain | group.domain |
| enterpriseExtension.status | group.status |
| enterpriseExtension.principalName | group.principalName |
| enterpriseExtension.projectEntitlements[].assignmentSource | projectEntitlements[].assignmentSource |
| enterpriseExtension.projectEntitlements[].isProjectPermissionInherited | projectEntitlements[].projectPermissionInherited |
| enterpriseExtension.projectEntitlements[].projectRefId | projectEntitlements[].projectRef.id |
| enterpriseExtension.projectEntitlements[].projectRefName | projectEntitlements[].projectRef.name |
| enterpriseExtension.projectEntitlements[].projectGroupType | projectEntitlements[].group.groupType |
| enterpriseExtension.projectEntitlements[].projectGroupDisplayName | projectEntitlements[].group.displayName |
| SCIM Projects | Azure DevOps Parameter |
|---|---|
| id | id |
| displayName | name |
| description | description |
| state | state |
| visibility | visibility |
| revision | revision |
| capabilities.processTemplateName | capabilities.processTemplate.templateName |
| capabilities.processTemplateTypeId | capabilities.processTemplate.templateTypeId |
| capabilities.versionSourceControlType | capabilities.versioncontrol.sourceControlType |
| capabilities.versionControlGitEnabled | capabilities.versioncontrol.gitEnabled |
| capabilities.versionControlTfvcEnabled | capabilities.versioncontrol.tfvcEnabled |
| defaultTeam.id | defaultTeam.id |
| defaultTeam.name | defaultTeam.name |
| meta.lastModified | lastUpdatedTime |
Connector limitations
-
The userName should be in the format of the email address (The email address of the user which has to be added to the organization).
-
If we use the username that is already existing, the system will not throw a conflict error; instead, it will update that user or return the existing data.
-
Extensions[] are not mapped because the data is not returning from the target in response.
-
If we add a user that already exists in the organisation but is deleted, that user will have the same user ID as it had previously.
-
Only one email per user is supported by target system.
-
Azure DevOps Target System does not return important meta information lastModified for users, lastModified & created for groups and created for projects.
-
At least one writable attribute should be provided while updating a user, group and project.
-
Projects and access levels added indirectly when groups are associated for users are not updatable.
-
Providing an already used display name to a group will return error even though the old group is deleted in target instance.
-
The create or update of a group will be successful even though the target API fails with errors during the membership management operations on the group. This is because the create or update of a group in connector internally handles create/update and membership management.
-
Adding a project with different group types is not supported currently.
-
Pagination in users and projects returns records in multiples of 100.
-
Pagination is not supported in groups.