Skip to main content

Configuration Type JSON Reference

JSON Syntax for /ConfigurationType endpoints.

ConfigurationType

A configuration type declares a basic cloud object or configuration, including properties.

The basic JSON declaration for a configuration type is:

{
// ID for configuration type, i.e. "AzureADUser"
"id": "string",

// Display name for configuration type, i.e. "Entra ID Users"
"name": "string",

// Table name of inventory table in Azure Table Storage, i.e. "Users"
"tableName": "string",

// Partition key of inventory table in Azure Table Storage, i.e. "AzureADUser"
"partitionName": "string",

// Enable/disable configuration type
"enabled": true,

// Configuration property to use as row key
"keyProperty": #ConfigurationProperty.id,

// Configuration properties to use for observation result mapping
"mappingProperties": [ #ConfigurationProperty.id, ... ],

// Name of list observation action, i.e. "AzureADUser/List"
"listObservation": "string",

// Name of object observation action, i.e. "AzureADUser/Object"
"objectObservation": "string",

// How long should inventory items be kept before the cleanup job removes them
"itemHold": "7d",

// Properties to include in basic search
"searchProperties": [ #ConfigurationProperty.id, ... ],

// UI Properties for inventory table page
"uiProperties"?: #ConfigurationType.uiProperties,

// Declaration of configuration properties for this configuration type
"properties": [ #ConfigurationProperty, ... ]
}

Important Side Notes

Each configuration type must declare at least one property of type "Condition" to indicate the object state to the reconciler. Otherwise the Object Status will be displayed as Unknown.

tableName, partitionName and keyProperty are required to address the inventory tables in Azure Table Storage.

Mapping properties are a left-over from early days and they are a bit tricky. It's a set of properties to map inventory items to governed objects. Hopefully, we can remove them soon. Usually, you can use the same property as you use as keyProperty.

listObservation and objectObservation declare the observation actions to send to Observer when observation is requested. Make sure the observer has a script binding for them. Otherwise, your observation will not work.

ConfigurationType.uiProperties

The UI Properties of a configuration type define how items in the inventory are displayed in the UI.

{
// Category for this configuration type, i.e. "AzureAD"
"uiCategory": "string",

// Table title to use when displaying as inventory table
"uiTitle": "string",

// Table subtitle to use when displaying as inventory table
"uiSubtitle": "string",

// Fontawesome icon to use for this configuration type
"uiIconClass": "string",

// Search terms for UI Search
"uiSearchTerms": ["string"],

// List of properties to display as inventory table columns
"uiColumns": [ #ConfigurationProperty.id ]
}

ConfigurationProperty

ConfigurationProperty items declare the properties for a configuration type. Each cloud setting or configuration value that is stored in Governor must be declared in a configuration type.

{
// Property ID, i.e. "id"
"id": "string",

// Display name for property, i.e. "User ID"
"displayName": "string",

// Property Type
"type": "Text" | "MultiLineText" | "Choice" | "YesNo" | "Integer" | "Number" | "TimeOfDay" | "Condition" | "ObjectRef" | "ObjectRefList",

// Display order (not used)
"order": 0,

// if a field is *notNullable*, any null value is replaced by default value. However if the default value is null as well, the field value can still become null.
"notNullable": true | false,

// *isSpec* fields are sent to observer when a single object observation is requested.
"isSpec": true | false,

// default value for this property
"defaultValue"?: "string" | boolean | number | ["string"],

// hint text to describe the property. can be shown in the UI or help a 3rd party integrator to understand your config type.
"helpText"?: "string",

// additional field-type dependent flags
"properties"?: #ConfigurationProperty.Properties
}

Type=Text

Store a text value.

{
"id": "string",
"displayName": "string",
"type": "Text",
"order": 0,
"notNullable": true | false,
"isSpec": true | false,
"defaultValue"?: "string",
"helpText"?: "string",
"properties"?: {
"autoUpdate"?: true, // property master value is always auto-updated from inventory on observation
"specOnly"?: true, // property cannot be observed, exists only in master
"limits"?: { // Text field limitation
"minValue"?: 0, // Minimum length
"maxValue"?: 0, // Maximum length
"type": "Soft" | "Hard" // Soft limit (=warning) or Hard limit (=error)
}
}
}

Type=MultiLineText

Store multi-line text value.

{
"id": "string",
"displayName": "string",
"type": "MultiLineText",
"order": 0,
"notNullable": true | false,
"isSpec": true | false,
"defaultValue"?: "string",
"helpText"?: "string",
"properties"?: {
"autoUpdate"?: true, // property master value is always auto-updated from inventory on observation
"specOnly"?: true, // property cannot be observed, exists only in master
"limits"?: { // Text field limitation
"minValue"?: 0, // Minimum length
"maxValue"?: 0, // Maximum length
"type": "Soft" | "Hard" // Soft limit (=warning) or Hard limit (=error)
}
}
}

Type=Choice

Store a selection from a given list of choices.

{
"id": "string",
"displayName": "string",
"type": "Choice",
"order": 0,
"notNullable": true | false,
"isSpec": true | false,
"defaultValue"?: "string",
"helpText"?: "string",
"properties": {
"autoUpdate"?: true, // property master value is always auto-updated from inventory on observation
"specOnly"?: true, // property cannot be observed, exists only in master
"choice": {
"allowedValues": ["string"] // list of choices to pick from
},
}
}

Type=YesNo

Store a yes/no value.

{
"id": "string",
"displayName": "string",
"type": "YesNo",
"order": 0,
"notNullable": true | false,
"isSpec": true | false,
"defaultValue"?: true | false,
"helpText"?: "string",
"properties"?: {
"autoUpdate"?: true, // property master value is always auto-updated from inventory on observation
"specOnly"?: true, // property cannot be observed, exists only in master
}
}

Type=Integer

Store an integer number without fractions.

{
"id": "string",
"displayName": "string",
"type": "Integer",
"order": 0,
"notNullable": true | false,
"isSpec": true | false,
"defaultValue"?: number,
"helpText"?: "string",
"properties"?: {
"autoUpdate"?: true, // property master value is always auto-updated from inventory on observation
"specOnly"?: true, // property cannot be observed, exists only in master
"limits"?: { // number field limitation
"minValue"?: 0, // Minimum value
"maxValue"?: 0, // Maximum value
"type": "Soft" | "Hard" // Soft limit (=warning) or Hard limit (=error)
}
}
}

Type=Number

Store a decimal number with fractions.

{
"id": "string",
"displayName": "string",
"type": "Number",
"order": 0,
"notNullable": true | false,
"isSpec": true | false,
"defaultValue"?: number,
"helpText"?: "string",
"properties"?: {
"autoUpdate"?: true, // property master value is always auto-updated from inventory on observation
"specOnly"?: true, // property cannot be observed, exists only in master
"limits"?: { // number field limitation
"minValue"?: 0, // Minimum value
"maxValue"?: 0, // Maximum value
"type": "Soft" | "Hard" // Soft limit (=warning) or Hard limit (=error)
}
}
}

Type=TimeOfDay

Store a time-of-day value. In GovernorDB we store "HH:MM" as string. In inventory we store seconds since midnight (= HH _ 3600 + MM _ 60).

This field is specialized for use with Exchange Online.

{
"id": "string",
"displayName": "string",
"type": "TimeOfDay",
"order": 0,
"notNullable": true | false,
"isSpec": true | false,
"defaultValue"?: "string" | boolean | number | object,
"helpText"?: "string",
"properties"?: {
"autoUpdate"?: true, // property master value is always auto-updated from inventory on observation
"specOnly"?: true, // property cannot be observed, exists only in master
}
}

Type=Condition

Indicate the desired/current presence of an object.

Conditions can be flagged as Preconditions to indicate the presence of pre-requisites for an object.

For example: You want to manage user license assignments with Governor. You declare a configuration type LicenseAssignment with one condition to indicate the presence of the license assignment and two pre-conditions to indicate the presence of the license and the user account.

A value of "true" on a condition means, the object should exist/does exist in the cloud. A value of "false" means, the object should not exist/does not exist in the cloud.

{
"id": "string",
"displayName": "string",
"type": "Condition",
"order": 0,
"notNullable": true | false,
"isSpec"?: true, // *isSpec* has no effect on condition fields. condition fields are always considered *isSpec*
"defaultValue"?: boolean,
"helpText"?: "string",
"properties"?: {
"condition"?: {
"precondition": true // if present, indicates a pre-condition property
}
}
}

Type=ObjectRef

Store a value taken from a certain property of an inventory object.

{
"id": "string",
"displayName": "string",
"type": "ObjectRef",
"order": 0,
"notNullable": true | false,
"isSpec": true | false,
"defaultValue"?: "string",
"helpText"?: "string",
"properties"?: {
"autoUpdate"?: true, // property master value is always auto-updated from inventory on observation
"specOnly"?: true, // property cannot be observed, exists only in master
"objectRef"?: { // object ref configuration
"configurationType": "string", // ConfigurationType.id to indicate which kind of objects you can pick from
"field": "string", // property to store as "value" of the property
"displayField": "string" // property to display in the lookup
}
}
}

Type=ObjectRefList

Store a list of values taken from a certain property of selected inventory objects.

{
"id": "string",
"displayName": "string",
"type": "ObjectRefList",
"order": 0,
"notNullable": true | false,
"isSpec": true | false,
"defaultValue"?: ["string"], // ObjectRefList stores multi-values
"helpText"?: "string",
"properties"?: {
"autoUpdate"?: true, // property master value is always auto-updated from inventory on observation
"specOnly"?: true, // property cannot be observed, exists only in master
"objectRef"?: { // object ref configuration
"configurationType": "string", // ConfigurationType.id to indicate which kind of objects you can pick from
"field": "string", // property to store as "value" of the property
"displayField": "string" // property to display in the lookup
}
}
}

ConfigurationProperty.Properties

{
"autoUpdate"?: true,
"specOnly"?: true,
"choice"?: {
"allowedValues": ["string"]
},
"objectRef"?: {
"configurationType": "string",
"field": "string",
"displayField": "string"
},
"condition"?: {
"precondition": true
},
"limits"?: {
"minValue"?: 0,
"maxValue"?: 0,
"type": "Soft" | "Hard"
}
}