none
Predicting and validating SKU conflicts ahead of attempting license assignments RRS feed

  • Question

  • Here's our problem space:

    You cant assign a license of EOP1 SKU to the same user who already has a full license of E3 SKU because they both have Exchange.  They conflict, but not in an programmatically identifiable way (at least not to our knowledge).  They have conflicting services (Exchange) but their Service Plans used to describe that service component are different between the two licenses and therefore are not easily comparable.

    Ideally, there would an API to retrieve, in advance, this information so that we can process it and use it for user validation ahead of attempting to assign licenses on behalf of the user that conflict.  Also, SKUs change over time (some added, others removed) and so there needs to be a way of keeping on top of these compatibility issues.  

    But worst case, I would expect a well structured official document or spreadsheet that contains this compatibility matrix across SKUs.

    Does anyone know if either of these exist?  I'm starting here because the conflicts become problems at the point of assignment via GRAPH... but maybe we should be looking elsewhere?!

    Thanks,

    -Greg


    Thursday, June 30, 2016 4:25 PM

Answers

  • Hi Greg,

    Thanks for detail information for this issue. At present, there is no such API we can determine the conflicts of licences. If you want the Azure AD REST API to support this feature, you may submit the feedback from here.

    Regards & Jupiter

    Monday, July 11, 2016 3:09 AM

All replies

  • Neelesh, moving this post to this forum seems like a mistake to me.

    My question isn't about Exchange at all.  It was the service example used.  The same problem exists for any of the Office 365 services including Skype for Business and SharePoint.

    My question is specifically about how to pragmatically determine which licenses conflict ahead of assigning them to a user via the GRAPH API.  I'd prefer to be able to get this info via API vs a human created document.

    Friday, July 1, 2016 4:42 PM
  • >>>My question is specifically about how to pragmatically determine which licenses conflict ahead of assigning them to a user via the GRAPH API.

    According to your description, which type Graph API you are using? Could you provide more information about your issue, that will help us reproduce and resolve it.

    Thanks for your understanding.
    Monday, July 4, 2016 5:37 AM
  • We are using the .net client for GRAPH.  So we get an instance of 'IActiveDirectoryClient' and then make the following call (this is a snippet and not intended to accurately represent our workflow) to assign E1 to a user:

    IActiveDirectoryClient.AssignLicenseAsync(new List<AssignedLicense> { new AssignedLicense { SkuId = {skiId for E1 license} } }, new List<Guid>());

    If we turn around and attempt to assign a conflicting license like E3 to the same user:

    IActiveDirectoryClient.AssignLicenseAsync(new List<AssignedLicense> { new AssignedLicense { SkuId = {skuId for E3 license} } }, new List<Guid>());

    We get an error message:

    “License assignment failed because service plans
    0feaeb32-d00e-4d66-bd5a-43b5b83db82c,0feaeb32-d00e-4d66-bd5a-43b5b83db82c are mutually exclusive ,service plans c7699d2e-19aa-44de-8edf-1736da088ca1,
    5dbe027f-2339-4123-9542-606e4d348a72 are mutually exclusive
    ,service plans 9aaf7827-d63c-4b61-89c3-182f06f82e5c,efb87545-963c-4e0d-99df-69c6916d9eb0 are mutually exclusive”

    As you can see, the two license types used in this example (which happen to contain Exchange and Skype for Business, but are not limited to those services) conflict.  This can happen for various services like Skype for Business, Exchange, Sharepoint, etc.  The conflict is on the service plan level.

    My question is about determining, in advance, if licenses for SKUs conflict so that we can avoid letting our customers 'attempt' to do conflicting assignments only to get error messages that they cant.  We want to validate license compatibility before attempting to assign (and ideally limit their input based on their choices).

    Where can we get the data on SKU/service plan conflicts today?  Is this data provided by GRAPH?  If not, how and where is it provided?

    Thanks

    Wednesday, July 6, 2016 3:40 PM
  • Hi Greg,

    To determine whether the plans in the SKU was already assigned to the user, we can get all the plans’ id of SKU using the REST below:

    https://graph.windows.net/myorganization/subscribedSkus

    It would return the result like below:

    "value": [
        {
          "capabilityStatus": "Enabled",
          "consumedUnits": 2,
          "objectId": "049bef5f-8841-4000-984b-c3f36bdb2d8c_a10d5e58-74da-4312-95c8-76be4e5b75a0",
          "prepaidUnits": {
            "enabled": 5,
            "suspended": 0,
            "warning": 0
          },
          "servicePlans": [
            {
              "servicePlanId": "fafd7243-e5c1-4a3a-9e40-495efcb1d3c3",
              "servicePlanName": "PROJECT_CLIENT_SUBSCRIPTION"
            }
          ],
          "skuId": "a10d5e58-74da-4312-95c8-76be4e5b75a0",
          "skuPartNumber": "PROJECTCLIENT"
        },
        {
          "capabilityStatus": "Enabled",
          "consumedUnits": 3,
          "objectId": "049bef5f-8841-4000-984b-c3f36bdb2d8c_87bbbc60-4754-4998-8c88-227dca264858",
          "prepaidUnits": {
            "enabled": 10000,
            "suspended": 0,
            "warning": 0
          },
          "servicePlans": [
            {
              "servicePlanId": "2c4ec2dc-c62d-4167-a966-52a3e6374015",
              "servicePlanName": "POWERVIDEOSFREE"
            },
            {
              "servicePlanId": "0b4346bb-8dc3-4079-9dfc-513696f56039",
              "servicePlanName": "POWERFLOWSFREE"
            },

    And we can get the plans which already assigned to the user using the REST below:

    https://graph.windows.net/O365E3W15.onmicrosoft.com/users?api-version=1.6

    "assignedLicenses": [
            {
              "disabledPlans": [],
              "skuId": "6fd2c87f-b296-42f0-b197-1e91e994b900"
            }
          ],
          "assignedPlans": [
            {
              "assignedTimestamp": "2016-03-25T02:28:24Z",
              "capabilityStatus": "Enabled",
              "service": "YammerEnterprise",
              "servicePlanId": "7547a3fe-08ee-4ccb-b430-5077c5041653"
            },
            {
              "assignedTimestamp": "2016-03-25T02:28:24Z",
              "capabilityStatus": "Enabled",
              "service": "Sway",
              "servicePlanId": "a23b959c-7ce8-4e57-9140-b90eb88a9e97"
            },

    Then we can check whether the id of plan we want to assign already assigned from the result above.


    Thursday, July 7, 2016 7:11 AM
  • Ah yes... I wish this were that simple. :|  Thanks for the reply Jupiter, but unfortunately, service plans can conflict with each other and not be equal in identity.

    For example:

    The following service plan 

    Name: SHAREPOINTSTANDARD 
    ID: 7547a3fe-08ee-4ccb-b430-5077c5041653

    conflicts with service plan

    Name: SHAREPOINTENTERPRISE
    ID: 5dbe027f-2339-4123-9542-606e4d348a72


    BTW, SHAREPOINTSTANDARD is a service plan contained in the Enterprise E1 SKU while SHAREPOINTENTERPRISE is contained in the Enterprise E3 SKU.

    There are many examples of this across the various types of services.

    As a human, I can certainly look at these and infer some conflict, but we cannot code that inference nor should we have to.  We really need a definitive service plan or SKU compatibility ’matrix’.


    Thursday, July 7, 2016 10:59 PM
  • Hi Greg,

    Thanks for detail information for this issue. At present, there is no such API we can determine the conflicts of licences. If you want the Azure AD REST API to support this feature, you may submit the feedback from here.

    Regards & Jupiter

    Monday, July 11, 2016 3:09 AM
  • Ok, thanks Jupiter. One last basic question about this and providing feedback. I've read that Microsoft Graph is going to overtake Azure AD Graph. The Microsoft blog I read just yesterday said that Microsoft Graph will have feature parity with Azure AD Graph this year and all new features will be implemented in Microsoft Graph. Give that statement, is there a different place to provide this feedback? Should I be engaging with the Microsoft Graph community (if on exists) instead? Thanks, -Greg
    • Edited by Greg Singleton Monday, July 11, 2016 11:54 AM Attempting to fix layout
    Monday, July 11, 2016 11:53 AM
  • Hi Greg,

    >>The Microsoft blog I read just yesterday said that Microsoft Graph will have feature parity with Azure AD Graph this year and all new features will be implemented in Microsoft Graph. Give that statement, is there a different place to provide this feedback? 

    Yes. You can try the link below for the feedback about Microsoft Graph REST API:
    UserVoice

    Tuesday, July 12, 2016 3:05 AM