Hi Christian,

You can always specific another value for karaf.etc variable.

It's also possible that you instanciate ConfigRepository with different constructor args.

However, for convenience, we can introduce a karaf.cfg.storage variable or so.

The purpose of the ConfigRepository is to be able to plug other backend to store the cfg (like database, LDAP, ...).

Regards
JB

On 03/20/2017 02:27 PM, Christian Wolf wrote:
Hi all,

Having a look at the implementation of the karaf config:* commands, I noticed
that pid storage is actually managed by
org.apache.karaf.config.core.ConfigRepository

The ConfigRepositoryImpl is instanciated as follow in karaf:

* ConfigRepository configRepository = new
ConfigRepositoryImpl(configurationAdmin, new 
File(System.getProperty("karaf.etc")));

This explains why setting new configuration with config:* commands (.cfg file
does not exist before) always creates <pid>.cfg under the "kara.etc" folder.

Two improvements around ConfigAdmin have been suggested in
"https://issues.apache.org/jira/browse/KARAF-888";

* we could create a Karaf Config Service on top of ConfigAdmin to be able to
choose and change the storage backend of configuration. For instance,
replace/concats the etc folder with a JDBC or LDAP backend. We could implement
something similar to JAAS with a kind of ConfigModule.

* the config:* commands shouldn't be responsible to writing the files. The
config:* commands could use the Karaf Config Service. The Karaf Config Service
will be responsible to updating the ConfigAdmin service, and flush the changes
to the storage backend.


Question:
As described in my first email, we would like to exeternalize our configuration
in a separate dedicated folder.
* Is it currenlty possible (karaf 4.0.8 or higher) to change the storage backend
somehow to externalize/route configuration ?

(Apparently, with the ConfigRepositoryImpl, new <pid>.cfg files are always
created under karaf.etc folder)

Thanks
Christian

On Fri, Mar 17, 2017 at 11:54 AM, Christian Wolf <[email protected]
<mailto:[email protected]>> wrote:

    Hi,

    I have a question regarding pid configuration files and "config:*" karaf
    commands.

    By default, pid configuration file goes here:

    * karaf/etc/*.cfg

    I would like to store only our own "foo.bar.*.cfg" pid files in an external
    folder (somewhere out of the karaf installation) such as:

    * /home/myuser/product/config/foo.bar.*.cfg

    My idea was to define this external folder in the "felix.fileinstall.dir"
    property in "karaf/etc/config.propertes" as follow:

    #
    # Configuration FileMonitor properties
    #
    felix.fileinstall.enableConfigSave = true
    felix.fileinstall.dir= /home/myuser/product/config , ${karaf.etc}
    felix.fileinstall.filter = .*\\.cfg
    ...

    If our pid files foo.bar.*.cfg are exising (even as empty file) in
    /home/myuser/product/config, it is working fine.
    I mean, we can edit the files either manuall or using the config:edit,
    config:update commands

    Now my problem is the following:
    I do have an scr @Component which becomes active only when configuration is
    created.

    So to activate it, I do the following with karaf commands:

    karaf@root()> config:edit foo.bar.connection
    karaf@root()> config:property-set url ldap://localhost:389
    karaf@root()> config:update

    My component is activated as expected, no problems here.

    Unfortunately, the foo.bar.connection.cfg pid file is created under
    ${karaf.etc} instead of /home/myuser/product/config

    Is there a way to external configuration somehow and ensure that matching
    pid files are store there?

    Please note that we are using
    org.osgi.service.metatype.annotations.ObjectClassDefinition to define our 
config

    @ObjectClassDefinition(pid = "foo.bar.connection")
    public @interface ConnectionConfig {
        String url() default "http://localhost:8080";;
    }

    We are currently using karaf 4.0.8.

    Thanks for help
    Regards,
    Christian





--
Jean-Baptiste Onofré
[email protected]
http://blog.nanthrax.net
Talend - http://www.talend.com

Reply via email to