Константы#
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-конфигурацией напрямую