12.5. 添加 Fabric8 Karaf Config admin 支持

12.5.1. 添加 Fabric8 Karaf Config admin 支持

您可以将 Fabric8 Karaf Config admin 支持添加到自定义 Karaf 分发中。

流程

  • 打开项目的 pom.xml,并将 fabric8-karaf-cm 添加到 startupFeatures 部分。

    pom.xml

    <startupFeatures>
      ...
      <feature>fabric8-karaf-cm</feature>
      ...
    </startupFeatures>

12.5.2. 添加 ConfigMap 注入

fabric8-karaf-cm 提供了一个 ConfigAdmin 网桥,它将在 Karaf 的 ConfigAdmin 中注入 ConfigMap 值。

流程

  1. 要由 ConfigAdmin 网桥添加,ConfigMap 必须使用 karaf.pid 标签。karaf.pid 值对应于您的组件的 pid。例如,

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: myconfig
      labels:
        karaf.pid: com.mycompany.bundle
    data:
      example.property.1: my property one
      example.property.2: my property two
  2. 要定义配置,您可以使用单一属性名称。个别属性适用于大多数情况。它与 karaf/etc 中的 pid 文件相同。例如,

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: myconfig
      labels:
        karaf.pid: com.mycompany.bundle
    data:
      com.mycompany.bundle.cfg: |
        example.property.1: my property one
        example.property.2: my property two

12.5.3. 配置插件

fabric8-karaf-cm 提供了一个 ConfigurationPlugin,它可解析配置属性占位符。

要启用使用 fabric8-karaf-cm 插件的属性替换,您必须将 Java 属性 fabric8.config.plugin.enabled 设置为 true。例如,您可以使用 Karaf 镜像中的 JAVA_OPTIONS 环境变量设置此属性,如下所示:

JAVA_OPTIONS=-Dfabric8.config.plugin.enabled=true

12.5.4. config Property Placeholders

配置属性占位符示例如下所示。

my.service.cfg

    amq.usr = $[k8s:secret:$[env:ACTIVEMQ_SERVICE_NAME]/username]
    amq.pwd = $[k8s:secret:$[env:ACTIVEMQ_SERVICE_NAME]/password]
    amq.url = tcp://$[env+service:ACTIVEMQ_SERVICE_NAME]

my-service.xml

    <?xml version="1.0" encoding="UTF-8"?>

    <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
               xsi:schemaLocation="
                 http://www.osgi.org/xmlns/blueprint/v1.0.0
                 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
                 http://camel.apache.org/schema/blueprint
                 http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">

      <cm:property-placeholder persistent-id="my.service" id="my.service" update-strategy="reload"/>

      <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
         <property name="userName"  value="${amq.usr}"/>
         <property name="password"  value="${amq.pwd}"/>
         <property name="brokerURL" value="${amq.url}"/>
      </bean>
    </blueprint>

12.5.5. Fabric8 Karaf Config Admin 选项

Fabric8 Karaf Config Admin 支持以下选项:

名称default描述

fabric8.config.plugin.enabled

false

启用配置Plugin

fabric8.cm.bridge.enabled

true

启用 ConfigAdmin 网桥

fabric8.config.watch

true

启用对 ConfigMap 更改的监控

fabric8.config.merge

false

在 ConfigAdmin 中启用合并 ConfigMap 值

fabric8.config.meta

true

在 ConfigAdmin 网桥中启用注入 ConfigMap meta

fabric8.pid.label

karaf.pid

定义 ConfigAdmin 网桥查找的标签(即需要选择的 ConfigMap 必须具有该标签;它的值决定了它关联的 PID)

fabric8.pid.filters

empty

为 ConfigAdmin 网桥定义额外的条件来选择 ConfigMap。支持的语法是:

  • 不同标签上的条件通过 "," 分隔,它们各自以 AND 分隔。
  • 在标签内,分号(;)被视为 OR,可用作标签值中条件的分隔符。

例如: -Dfabric8.pid.filters=appName=A;B,database.name=my.oracle.datasource 等过滤器转换为 "give me of a label appName,值为 A 或 B,标签 database.name 等于 my.oracle.datasource"。

重要

ConfigurationPlugin 需要 Aries Blueprint CM 1.0.9 或更高版本。