Difference between revisions of "Azure User Import"

From Hornbill
Jump to navigation Jump to search
 
(40 intermediate revisions by 7 users not shown)
Line 1: Line 1:
 +
This document can now be found at its new location in the [https://docs.hornbill.com/data-imports-guide/users/azure/overview Hornbill Document Library].
 +
 +
[[file:hornbill-document-library.png|Data Imports Guide|link=https://docs.hornbill.com/data-imports-guide/users/azure/overview]]
 +
 +
<!--
 +
 
<div style="border:1px solid #90C0FF; background:#D0E0FF; width:99%; padding:4px; margin-bottom:10px;">
 
<div style="border:1px solid #90C0FF; background:#D0E0FF; width:99%; padding:4px; margin-bottom:10px;">
 
{| style="width:100%"
 
{| style="width:100%"
Line 5: Line 11:
 
|}
 
|}
 
</div>
 
</div>
 +
 +
{|style="width: 100%"
 +
|- valign="top"
 +
|style="width:73%"|
 
== About the Hornbill Azure User Import Utility ==
 
== About the Hornbill Azure User Import Utility ==
 
The utility provides a simple, safe and secure way to create user accounts on the Hornbill platform by synchronizing with accounts held in your Azure AD.  The tool is designed to run behind your corporate firewall, connect to your Azure instance, query the required account information, transform and load into the Hornbill instance.  The tool connects to the Hornbill and Azure instances in the cloud over HTTPS/SSL so as long as you have standard internet access then you should be able to use tool without the need to make any firewall configuration changes.  The tool supports both the initial bulk import as well as incremental adds and updates.  You can schedule the tool to run periodically to perform the import/update tasks as required.
 
The utility provides a simple, safe and secure way to create user accounts on the Hornbill platform by synchronizing with accounts held in your Azure AD.  The tool is designed to run behind your corporate firewall, connect to your Azure instance, query the required account information, transform and load into the Hornbill instance.  The tool connects to the Hornbill and Azure instances in the cloud over HTTPS/SSL so as long as you have standard internet access then you should be able to use tool without the need to make any firewall configuration changes.  The tool supports both the initial bulk import as well as incremental adds and updates.  You can schedule the tool to run periodically to perform the import/update tasks as required.
  
The utility employs the Azure Graph API to query the contents of Azure AD. If you would like to know more about this API and it's capabilities, please refer to the relevant Microsoft documentation: [https://docs.microsoft.com/en-gb/azure/active-directory/develop/active-directory-graph-api '''Azure Graph API Information''']
+
=== Open Source ===
  
The last utility using the Azure Graph API is version 1.4.4 [https://github.com/hornbill/goAzure2HUserImport/tree/v1.4.4 (download from GitHub)]
+
The Azure User Import Utility is no longer provided open-source, and is maintained solely by Hornbill as a closed-source, but free-to-use, tool.
  
As of '''v2.0.0''' the utility uses the Microsoft Graph API instead. Please refer to [https://docs.microsoft.com/en-gb/graph/ '''Microsoft Graph API Information''']. Please note that you will likely need to set a different set of permissions AND generate a new ClientSecret for the changes to take effect.
+
|style="width:5%"|
 +
|
 +
|style="width:22%; border-style: solid; border-width: 1px; border-color:#e6e6e6; background-color:#f2f2f2;"|
  
Prior to '''v2.3.0''' the documentation is different and [[Special:Permalink/20877|can be found here]]
+
== Related Articles ==
 
+
:* [[Azure App Registration Instructions]]
=== Open Source ===
+
:* [[User Import TimeZone Fields Options]]
 
+
:* [[User Import DateTime Format Options]]
The Azure User Import Utility is provided open source under the [https://wiki.hornbill.com/index.php/The_Hornbill_Community_License_(HCL) Hornbill Community Licence] and can be found [https://github.com/hornbill/goAzure2HUserImport here] on GitHub
+
:* [[API keys|Hornbill API Keys]]
 +
:* [[Hornbill KeySafe]]
 +
:* [[Users|Hornbill Users]]
 +
:* [[Organisation|Hornbill Organisations]]
 +
|}
  
 
== Installation Overview ==
 
== Installation Overview ==
  
 
=== Windows Installation ===
 
=== Windows Installation ===
* Download the architecture specific [https://github.com/hornbill/goAzure2HUserImport/releases/latest latest package] from GitHub  
+
* Download the architecture specific [https://github.com/hornbill/user-import-azure/releases/latest latest package] from GitHub  
 
* Extract zip into a folder you would like the application to run from e.g. '''C:\Hornbill_Import\'''
 
* Extract zip into a folder you would like the application to run from e.g. '''C:\Hornbill_Import\'''
* Open '''conf.json''' and add in the necessary configration
+
* Open '''conf.json''' and add in the necessary configuration
 
* Open Command Line Prompt as Administrator
 
* Open Command Line Prompt as Administrator
 
* Change Directory to the folder with azure_user_import.exe '''C:\Hornbill_Import\'''
 
* Change Directory to the folder with azure_user_import.exe '''C:\Hornbill_Import\'''
Line 32: Line 48:
 
== HTTP Proxies ==
 
== HTTP Proxies ==
  
If you use a proxy for all of your internet traffic, the HTTP_PROXY Environment variable needs to be set. The https_proxy environment variable holds the hostname or IP address of your proxy server. It is a standard environment variable and like any such variable, the specific steps you use to set it depends on your operating system.
+
{{UtilityProxies}}
 
 
For windows machines, it can be set from the command line using the following:
 
<br>
 
<code>
 
set HTTP_PROXY=HOST:PORT
 
</code>
 
<br>
 
Where "HOST" is the IP address or host name of your Proxy Server and "PORT" is the specific port number.
 
 
 
=== URLs to White List ===
 
 
 
Occasionally on top of setting the HTTP_PROXY variable the following URLs need to be white listed to allow access out to our network
 
 
 
* https://files.hornbill.com/instances/INSTANCENAME/zoneinfo - Allows access to lookup your Instance API Endpoint
 
* https://files.hornbill.co/instances/INSTANCENAME/zoneinfo - Backup URL for when files.hornbill.com is unavailable
 
* https://eurapi.hornbill.com/INSTANCENAME/xmlmc/ - This is your Instance API Endpoint, eurapi can change so you should use the endpoint defined in the previous URL
 
* https://api.github.com/repos/hornbill/goAzure2HUserImport/tags - '''Optional''' Allows access to check for the latest version of the Import Tool
 
  
 
== Configuration Overview ==
 
== Configuration Overview ==
Line 58: Line 57:
  
 
   {
 
   {
     "APIKey": "", /* this is the API-key which is associated to a user in the Hornbill instance [1] */
+
     "KeysafeKeyID": 0, /* this is the Keysafe key ID, which contains your database credentials */
    "InstanceId": "", /* your Hornbill instance name : not likely to change. Please note this value is case sensitive. */
 
 
     "AzureConf": {
 
     "AzureConf": {
        "Tenant": "",
 
        "ClientID": "", /* [2] */
 
        "ClientSecret": "",
 
 
         "UserFilter": "startswith(displayName,'Dave')",
 
         "UserFilter": "startswith(displayName,'Dave')",
         "UserProperties": [
+
         "UserProperties": [ /* list all the fields that you require from Azure */
 +
            "businessPhones",
 
             "employeeId",
 
             "employeeId",
 
             "mailNickname",
 
             "mailNickname",
 +
            "mail",
 +
            "givenName",
 +
            "surname",
 +
            "telephoneNumber",
 
             "department"
 
             "department"
 
         ],
 
         ],
 
         "UserID": "mail",
 
         "UserID": "mail",
 
         "Debug": false,
 
         "Debug": false,
         "APIVersion":"v1.0",
+
         "APIVersion":"v1.0", /* Azure API Version - leave as-is */
 
         "Search":"groups",
 
         "Search":"groups",
 
         "UsersByGroupID":[
 
         "UsersByGroupID":[
Line 87: Line 87:
 
     "User": {
 
     "User": {
 
       "Operation":"Both", /* options : Create/Update/Both ; import actions to perform on the discovered user records */
 
       "Operation":"Both", /* options : Create/Update/Both ; import actions to perform on the discovered user records */
       "UserDN": "&#123;&#123;.keysearch&#125;&#125;",
+
       "UserDN": "&#123;&#123;.userPrincipalName&#125;&#125;",
 
       "AccountMapping":{ /* mapping of fields in the format: "Field in Hornbill": "data to insert" [4] */
 
       "AccountMapping":{ /* mapping of fields in the format: "Field in Hornbill": "data to insert" [4] */
 
           "UserID":"&#123;&#123;.mail&#125;&#125;",
 
           "UserID":"&#123;&#123;.mail&#125;&#125;",
Line 99: Line 99:
 
           "JobTitle":"",
 
           "JobTitle":"",
 
           "Site":"1", /* if set, see also comments below on SiteLookup [8] */
 
           "Site":"1", /* if set, see also comments below on SiteLookup [8] */
           "Phone":"&#123;&#123;.telephoneNumber&#125;&#125;",
+
           "Phone":"&#123;&#123;index .businessPhones 1&#125;&#125;",
 
           "Email":"&#123;&#123;.mail&#125;&#125;",
 
           "Email":"&#123;&#123;.mail&#125;&#125;",
 
           "Mobile":"",
 
           "Mobile":"",
Line 110: Line 110:
 
           "CurrencySymbol":"", /* any character */
 
           "CurrencySymbol":"", /* any character */
 
           "CountryCode":"" /* expects ISO 3166 Alpha 2 two Character Country Code [https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes (see here)] */
 
           "CountryCode":"" /* expects ISO 3166 Alpha 2 two Character Country Code [https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes (see here)] */
 +
          "Enable2FA": "disabled",
 +
          "DisableDirectLogin": "false",
 +
          "DisableDirectLoginPasswordReset": "false",
 +
          "DisableDevicePairing": "false"
 
         },
 
         },
 
         "Type":{
 
         "Type":{
Line 127: Line 131:
 
           "MiddleName":"",
 
           "MiddleName":"",
 
           "JobDescription":"",
 
           "JobDescription":"",
          "Manager":"&#123;&#123;.manager&#125;&#125;", /* full name of manager. If set, see also comments below on UserManagerMapping */
 
          "WorkPhone":"",
 
 
           "Qualifications":"",
 
           "Qualifications":"",
 
           "Interests":"",
 
           "Interests":"",
Line 158: Line 160:
 
         },
 
         },
 
         "Manager":{
 
         "Manager":{
             "Action": "Both" /* options : Create/Update/Both ; on what action to change the User's Manager */
+
             "Action": "Both" /* options : Create/Update/Both/__clear__/__clear_if_empty__ ; on what action to change the User's Manager */
             "Value": "&#123;&#123;.mgrfirstname&#125;&#125; &#123;&#123;.mgrlastname&#125;&#125;" /* full name of manager. If set, see also comments below on User Manager Mapping */
+
             , "AzField": "userPrincipalName" /* field in Azure containing the manager's unique identifier - (default: userPrincipalName) */
      , "Options": {
+
            , "HornbillUniqueColumn":"h_user_id" /* field in Hornbill to match resulting AzField to - (default:h_user_id) */
        "GetStringFromValue": {
 
          "Regex" : ""
 
          , "Reverse": false
 
        }
 
        , "MatchAgainstDistinguishedName": false
 
        , "Search": {
 
          "Enable": true /* options : true/false ; turn this on or off */
 
          , "SearchField": ""
 
 
         }
 
         }
 
       }
 
       }
 
     }
 
     }
     , "Image":{
+
     , "Image":{ /* Profile Image configuration section [10] */
 
       "Action":"Both" /* options : Create/Update/Both ; on what action to change the Image */
 
       "Action":"Both" /* options : Create/Update/Both ; on what action to change the Image */
 
       , "UploadType": "AZURE" /* options : URI/URL/AZURE ; local (network) drive or HTTP(S) served image */
 
       , "UploadType": "AZURE" /* options : URI/URL/AZURE ; local (network) drive or HTTP(S) served image */
 
       , "InsecureSkipVerify": false
 
       , "InsecureSkipVerify": false
 
       , "ImageType": "jpg" /* options : jpg/png */
 
       , "ImageType": "jpg" /* options : jpg/png */
       , "URI": "&#123;&#123;.userPrincipalName&#125;&#125;"
+
      , "ImageSize": "240" /* options: ""/48/64/96/120/240/360/432/504/648 [https://docs.microsoft.com/en-us/graph/api/profilephoto-get see  restrictions]; "" will use the default MS thumbnail size */
 +
       , "URI": "&#123;&#123;.id&#125;&#125;"
 
     }
 
     }
 
     , "Site":{
 
     , "Site":{
       "Action":"Both" /* options : Create/Update/Both ; on what action to change the User's Site */
+
       "Action":"Both" /* options : Create/Update/Both ; on what action to change the User's Site [9] */
 
       , "Value": "&#123;&#123;.physicalDeliveryOfficeName&#125;&#125;"
 
       , "Value": "&#123;&#123;.physicalDeliveryOfficeName&#125;&#125;"
 
     }
 
     }
Line 212: Line 207:
 
   }
 
   }
  
 
# An API key is set up against a user within Hornbill (accessed through: Administration > System > Organisationl Data > Users).
 
# There are instructions on-line on how to obtain the ClientID and ClientSecret from within Azure. We have found that the following permissions need to be granted within Azure, though these could differ for yourselves, so please rely on your own expertise. Application permissions on: ''Group.Read.All, GroupMember.Read.All, Team.ReadBasic.All, TeamMember.Read.All, User.Read.All''. Delegated permission on ''User.Read''. The permission settings need confirming.
 
 
# The fields are quite self-explanatory and part of the "Details"-section (as opposed to the "About"-section [5]), most can be left as-is. The mapping is done with some templating of the format &#123;&#123;fieldname&#125;&#125;. One can be a little adventurous, for instance "&#123;&#123;.mgrfirstname&#125;&#125; - &#123;&#123;.mgrlastname&#125;&#125;" puts a space, hyphen and space between the person's manager's first and last name. One can use this to prefix or suffix the values coming from the database or indeed to set a static value (as done for example with userType and Attribute under OrgLookup for the company (Type:5)).
 
# The fields are quite self-explanatory and part of the "Details"-section (as opposed to the "About"-section [5]), most can be left as-is. The mapping is done with some templating of the format &#123;&#123;fieldname&#125;&#125;. One can be a little adventurous, for instance "&#123;&#123;.mgrfirstname&#125;&#125; - &#123;&#123;.mgrlastname&#125;&#125;" puts a space, hyphen and space between the person's manager's first and last name. One can use this to prefix or suffix the values coming from the database or indeed to set a static value (as done for example with userType and Attribute under OrgLookup for the company (Type:5)).
# The same holds here as for [4], this is regarding the "About"-section of the user's details.
+
# The same holds here as for [1], this is regarding the "About"-section of the user's details.
 
# this is a non-ordered list of the organisation structure - it allows one to associate the imported user to one or more levels within the organisation. The delivered configuration file will associate each imported user with EACH of the three discernable levels (company, department and division) - depending on your requirements regarding the availability of services and such, you will likely want to manipulate this section and perhaps only leave behind the "department" level (Type: 2) with the TasksView and TasksAction set accordingly. Please note that this import only adds and not REMOVES any association.
 
# this is a non-ordered list of the organisation structure - it allows one to associate the imported user to one or more levels within the organisation. The delivered configuration file will associate each imported user with EACH of the three discernable levels (company, department and division) - depending on your requirements regarding the availability of services and such, you will likely want to manipulate this section and perhaps only leave behind the "department" level (Type: 2) with the TasksView and TasksAction set accordingly. Please note that this import only adds and not REMOVES any association.
 
# The password field should be left empty as the utility generates a secure password that adheres to the User Password Policy as specified on your Hornbill instance. This password will only be temporary as the user should use the "Forgot Password" link available on the Hornbill Login Screen to reset their password the first time they navigate to your Hornbill instance.
 
# The password field should be left empty as the utility generates a secure password that adheres to the User Password Policy as specified on your Hornbill instance. This password will only be temporary as the user should use the "Forgot Password" link available on the Hornbill Login Screen to reset their password the first time they navigate to your Hornbill instance.
 
# "Site" - Recognises a corresponding Hornbill site ID. E.g. "Site":"1" - The value of Site should be numeric. As an alternative, the import configuration provides a "Site Lookup" section (outlined in a later section) which can make a site association based on the contents of a directory attribute.
 
# "Site" - Recognises a corresponding Hornbill site ID. E.g. "Site":"1" - The value of Site should be numeric. As an alternative, the import configuration provides a "Site Lookup" section (outlined in a later section) which can make a site association based on the contents of a directory attribute.
 +
# If a lookup action is not needed, remove the action type so only empty quotes are left i.e. ''"Action":""''
 +
# "Image" - by default this will take the thumbnail image. IF ''.id'' does NOT work for the '''"URI"''', please try ''.userPrincipalName'' instead.
 
<br>
 
<br>
 
<br>
 
<br>
 +
===Keysafe===
 +
You will need to create a [[Hornbill_KeySafe|'''KeySafe record''']] of type "Azure Imports" and set Client ID, Client Secret and Tenant ID. The KeySafeID can be obtained from looking at the URL of the KeySafe record <nowiki>https://live.hornbill.com/</nowiki>'''instanceid'''<nowiki>/security/keysafe/</nowiki>''#KeySafeID''<nowiki>/</nowiki>
 +
 +
'''Note:''' There are relevant Microsoft instructions online on how to obtain the ClientID and ClientSecret from within Azure - [[Azure App Registration Instructions|our quickstart version]]. We have found that the following permissions need to be granted within Azure, though these could differ for you, so please rely on your own expertise. Application permissions on: ''Group.Read.All, GroupMember.Read.All, Team.ReadBasic.All, TeamMember.Read.All, User.Read.All''. Delegated permission on ''User.Read''. The permission settings need to be confirmed.
 +
 
=== Filtering ===
 
=== Filtering ===
There are two methods of filtering users that you can configure with this tool. They are both defined in the '''AzureConf''' section of the configuration.
+
There are two methods of filtering users that you can configure with this tool. They are both defined in the configuration's ''AzureConf''' section.
  
 
To import all direct User objects within one or more Azure Groups:
 
To import all direct User objects within one or more Azure Groups:
Line 253: Line 252:
 
# If a match is found, the import will associate the user to the group.
 
# If a match is found, the import will associate the user to the group.
 
# If no Hornbill organisation is found, the import will move onto the next user.
 
# If no Hornbill organisation is found, the import will move onto the next user.
i.e. The name of the Organization(Group) in Hornbill must match the value of the database field. More on Hornbill Organisational Groups can be found here: [[Organisation|'''Organisation Structure
+
i.e. The name of the Organization(Group) in Hornbill must match the value of the database field. More on Hornbill Organisational Groups can be found here: [[Organisation|'''Organisation Structure''']]
 
<br>
 
<br>
 
<br>
 
<br>
 
====User Manager Mapping in Hornbill====
 
====User Manager Mapping in Hornbill====
Hornbill can store a manager relationship between two users in Hornbill. The manager look up mechanism works as follows:
+
Both Hornbill and Azure can store a manager relationship between two users.
# The import reads the contents of the value attribute which will contain the some text identifying the manager eg "''mgrfirstname mgrlastname''"
+
 
# IF a regex it given, then this first will be applied to the data obtained above.
+
The utility will determine the manager for a user as it is stored in Azure and use the field given in '''AzField''' to match this against a user within Hornbill using the field defined in the '''HornbillUniqueColumn'''.
# The import is hard-coded to remove any slash and comma in the result.
+
 
# With the "Reverse" option enabled, the above string would be reversed to give: "''mgrlastname mgrfirstname''"
+
In instances whereby the userPrincipalName is used as the Hornbill User ID, the defaults should suffice.
# The import tries to match this value against an existing Hornbill user by looking up the "Handle" field i.e. h_name.
+
 
 +
IF, for instace, Azure's employeeId is used as User ID in Hornbill, then '''AzField''' should be set to '''employeeId'''.
 +
 
 +
The manager link is handled by the ProfileMapping part in the Hornbill API - so the link will be set on: Both, Create or Update based on what the regular Account is doing.
 +
 
 +
IF you do '''NOT''' want the Azure Import to set a manager, just do not use any value in the '''Action''' parameter. If you want to activate the manager mapping, then any of the three Both/Create/Update values will suffice.
 +
 
 +
You have two additional Actions:
 +
* __clear__ - this will remove the managers from each individual found in the Azure search
 +
* __clear_if_empty__ - will remove the managers from each individual found in the Azure search who do NOT have a manager
  
 
== Preparing to Run the Import ==
 
== Preparing to Run the Import ==
Ultimately, the executable will be scheduled in Windows task scheduler (see later) but to test, gain confidence, and perform the initial upload of users the utility can be executed from a command prompt window on an ad-hoc basis. The command used to execute the import can contain a number of command line parameters.
+
Ultimately, the executable will be scheduled in the Windows task scheduler (see later) but to test, gain confidence, and perform the initial upload of users the utility can be executed from a command prompt window on an ad-hoc basis. The command used to execute the import can contain a number of command line parameters.
* dryrun - Defaults to '''''false''''' - Set to True and the XMLMC for Create and Update users will not be called and instead the XML will be dumped to the log file, this is to aid in debugging the initial connection information.
+
* dryrun - Defaults to '''''false''''' - Set to True and the XMLMC for Create and Update users will not be called; instead, the XML will be dumped to the log file to aid in debugging the initial connection information.
 
* file - Defaults to '''''conf.json''''' - Name of the Configuration file to load
 
* file - Defaults to '''''conf.json''''' - Name of the Configuration file to load
 
* zone - Defaults to '''''eur''''' - Allows you to change the ZONE used for creating the XMLMC EndPoint URL: <nowiki>https://{ZONE}api.hornbill.com/{INSTANCE}/</nowiki>
 
* zone - Defaults to '''''eur''''' - Allows you to change the ZONE used for creating the XMLMC EndPoint URL: <nowiki>https://{ZONE}api.hornbill.com/{INSTANCE}/</nowiki>
* workers - Defaults to `3` - Allows you to change the number of worker threads used to process the import, this can improve performance on slow import but using too many workers have a detriment to performance of your Hornbill instance.
+
* workers - Defaults to `3` - Allows you to change the number of worker threads used to process the import; this can improve performance on slow import but using too many workers have a detriment to the performance of your Hornbill instance.
 
* debug - Defaults to '''''false''''' - outputs extra information to the log to help with debugging issues.
 
* debug - Defaults to '''''false''''' - outputs extra information to the log to help with debugging issues.
 +
 +
From version '''4.0.0''' of the Azure User Import Utility, when you first run the utility it will prompt you for two vital pieces of information:
 +
 +
* The Instance ID (also referred to as the instance name) can be found in the URL used by your organisation to access your Hornbill instance i.e. <nowiki>https://live.hornbill.com/</nowiki>'''instanceid'''/ (case sensitive).
 +
* A valid API key. This needs to be created against a Hornbill user account with enough rights to create and update user accounts. Details on how to create an API key can be found [[API_keys|'''here''']].
 +
 +
This information will be encrypted and stored locally on the client PC that will be running the tool. For each subsequent import run, the utility will decrypt your instance ID and API key and will use those to make the relevant API calls back into Hornbill.
 +
 +
NOTE - the encrypted information can only be decrypted on the computer and by the user that performed the encryption, so please keep this in mind when scheduling your imports.
 +
 +
Should you wish to use a different API key or Keysafe Key ID to what has been previously encrypted, delete the '''import.cfg''' file from the folder where the import binary resides, and re-run your import from the command line inputting the requested details as you would have on its first run.
  
 
== Testing Overview ==
 
== Testing Overview ==
Line 310: Line 329:
  
  
==Trouble Shooting==
+
== API Key Rules ==
=== Logging Overview ===
+
This utility uses ([[API keys]]):
 +
 
 +
* activity:profileImageSet
 +
* admin:keysafeGetKey
 +
* admin:sysOptionGet
 +
* admin:userAddGroup
 +
* admin:userAddRole
 +
* admin:userCreate
 +
* admin:userDeleteGroup
 +
* admin:userProfileSet
 +
* admin:userSetAccountStatus
 +
* admin:userUpdate
 +
* data:entityAddRecord
 +
* data:entityUpdateRecord
 +
* data:queryExec
 +
* session:getSystemLicenseInfo
 +
 
 +
=Troubleshooting=
 +
== Logging Overview ==
  
 
All Logging output is saved in the "log" directory which can be found in the same location as the executable. The file name contains the date and time the import was run '''''Azure_User_Import_2015-11-06T14-26-13Z.log'''''
 
All Logging output is saved in the "log" directory which can be found in the same location as the executable. The file name contains the date and time the import was run '''''Azure_User_Import_2015-11-06T14-26-13Z.log'''''
===Common Error Messages===
+
==Common Error Messages==
  
 
Below are some common errors that you may encounter in the log file and what they mean:
 
Below are some common errors that you may encounter in the log file and what they mean:
Line 326: Line 363:
 
* ''' ''[ERROR] Unable to Load LDAP Attribute: '[LDAP attribute name]' For Input Param: '[Hornbill Parameter name]' '' ''' - When the import utility is unable to load a particular LDAP attribute, this means that the attribute field in your directory does not contain a value. This error will not prevent the user account being created or updated in Hornbill and can be considered more as a warning rather than an outright failure or problem.
 
* ''' ''[ERROR] Unable to Load LDAP Attribute: '[LDAP attribute name]' For Input Param: '[Hornbill Parameter name]' '' ''' - When the import utility is unable to load a particular LDAP attribute, this means that the attribute field in your directory does not contain a value. This error will not prevent the user account being created or updated in Hornbill and can be considered more as a warning rather than an outright failure or problem.
 
* ''' ''[ERROR] Unable to Set User Status [status name]: You have reached your user subscription limit of [xx], you will need to expand your subscription level if you wish to add more users'' ''' - The utility is trying to update the user status of an existing user account from an inactive status (i.e. "archived" or "suspended") to "active" however in order for this to be successful you must have some subscriptions available.
 
* ''' ''[ERROR] Unable to Set User Status [status name]: You have reached your user subscription limit of [xx], you will need to expand your subscription level if you wish to add more users'' ''' - The utility is trying to update the user status of an existing user account from an inactive status (i.e. "archived" or "suspended") to "active" however in order for this to be successful you must have some subscriptions available.
 +
* ''' ''[ERROR] Unable to run import, a previous import is still running'' ''' - this can occur if the previous import failed to complete. Perform a manual (non-scheduled) run of the import from the command line including the argument "forcerun=true". Future imports should now run without issue.
  
 
=== Error Codes ===
 
=== Error Codes ===
Line 335: Line 373:
  
 
=== Windows ===
 
=== Windows ===
You can schedule .exe to run with any optional command line argument from Windows Task Scheduler.
+
You can schedule azure_user_import.exe to run with any optional command line argument from Windows Task Scheduler.
* Ensure the user account running the task has rights to Azure2UserImport.exe and the containing folder.
+
* Ensure the user account running the task has rights to azure_user_import.exe and the containing folder.
 +
* Ensure the user account running the task is the one who performed the first run of the tool on this PC, as the instance details are encrypted and can only be decrypted by that user on the current Windows machine
 
* Make sure the Start In parameter contains the folder where the executable resides in, otherwise it will not be able to pick up the correct path. eg:
 
* Make sure the Start In parameter contains the folder where the executable resides in, otherwise it will not be able to pick up the correct path. eg:
  
 
[[File:Ldap_import_schedule.png]]
 
[[File:Ldap_import_schedule.png]]
 +
 +
-->
 +
[[Category:HDOC]]

Latest revision as of 18:08, 10 April 2024

This document can now be found at its new location in the Hornbill Document Library.

Data Imports Guide