Константы#

IDM может использоваться в нескольких различных окружениях — например, тестовой и производственной средах. При этом, как правило, оба окружения имеют практически идентичные конфигурации, различаясь только хостами и портами. Однако требуемые значения используются во многих различных местах системы IDM — в конфигурациях ресурсов, в исходящих маппингах и так далее. И при изменении этих значений поддержка изменений в IDM может быть нетривиальной.

Поэтому IDM поддерживает использование констант, которые определяются в одном месте в системе, и чье значение можно затем использовать для конфигурации других объектов.

Создание констант#

Константы определяются одним из трех способов:

  • В конфигурационном файле IDM config.xml, расположенном в домашней директории (как правило, /var/opt/midpoint/):

    <configuration>
        <midpoint>
            <repository>
                ...
            </repository>
            ...
            <constants>
                <orgName>Example, Inc.</orgName>
                <ldapHost>ldap.example.com</ldapHost>
                <ldapPort>3389</ldapPort>
                <ldapBaseContext>dc=example,dc=com</ldapBaseContext>
            </constants>
        </midpoint>
    </configuration>
    
  • Как JVM параметр запуска:

    -Dmidpoint.constants.ldapHost="ldap.example.com"
    
  • Как переменную окружения с префиксом MP_SET_midpoint_constants_:

    MP_SET_midpoint_constants_orgName="Example, Inc."
    

Использование констант#

Как правило константы используются в выражениях через оператор <const>:

    <outbound>
        <expression>
            <const>orgName</const>
        </expression>
    </outbound>

При таком использовании, каждый раз когда выражение обрабатывается, оно вернет значение, определенное для константы, а маппинг запишет это значение в параметр ресурса. Константа может использоваться в нескольких маппингах, и для всех связанных с этими маппингами ресурсов можно легко изменить значение, изменив значение константы.

Однако константы можно использовать не только в маппингах. Например, при конфигурировании ресурсов также можно использовать переменные для передачи значений:

<resource>
    ...
    <connectorConfiguration>
        <configurationProperties>
			<ldap:host>
                <expression>
                    <const>ldapHost</const>
                </expression>
            </ldap:host>
            <ldap:port>
                <expression>
                    <const>ldapPort</const>
                </expression>
            </ldap:port>
            ...
        </configurationProperties>
    </connectorConfiguration>
    ...
</resource>

Константы в выражениях#

Часто возникает необходимость использовать константные значения внутри выражений, для вычисления какого-либо значения на основе константы. В таких случаях оператор <const> неприменим.

Чтобы получить значение константы внутри выражения, вы можете использовать скриптовое выражение с библиотечной функцией getConst():

    <attribute>
        <ref>ri:dn</ref>
        <outbound>
            ...
            <expression>
                <script>
                    <code>'uid=' + name + ',' + midpoint.getConst('ldapBaseContext')</code>
                </script>
            </expression>
        </outbound>
    </attribute>

Ограничения констант#

При использовании констант существует ряд ограничений:

  • Константы загружаются в систему только один раз, во время запуска IDM. Нет возможности обновить значение константы без перезапуска.

  • Константы не поддерживаются в конфигурационном визарде конфигурации ресурса в UI. Визард конфигурации ресурса не поддерживает использование выражений при конфигурации параметров ресурса, и не поддерживает константный оператор выражений. Для использования констант в конфигурации ресурсов следует работать с XML-конфигурацией напрямую