Jose, Hi.
There are some issues using $brooklyn functions and deferred values
using Map valued ConfigKeys at the moment, which I am working on
resolving in pull request #182, however in the mean time I suggest you
try this:
Change the type of the key to MapConfigKey, declared like this:
MapConfigKey<Object> DB_CONNECTION_CONFIG_PARAMS = new
MapConfigKey<Object>(Object.class, "php.db.connection.config.params");
Then you should be able to specify the configuration in the YAML like this:
brooklyn.config:
db_connection_config_params:
g_DatabaseHost:
$brooklyn:component("db").attributeWhenReady("datastore.url")
g_DatabasePort:
$brooklyn:component("db").attributeWhenReady("mysql.port")
Hopefully this is helpful.
Cheers,
Andrew.
--
-- andrew kennedy ? cloud engineer : http://blog.abstractvisitorpattern.co.uk/ ;
On 25 September 2014 19:16, Jose Carrasco <[email protected]> wrote:
> Hello,
>
> I am currently developing a new entities for Brooklyn (into SeaClouds
> project context).
> I have found a problem using the ConfigKey.
>
> I am using a ConfigKey<Map< String, String>> to my entity the parameters
> necessaty to stablish a database
> connection. I have decided to use a Map because the user could find a smart
> and flexible way flexible to specify
> several attributes and their values, e.g.:
>
> name: PHP HelloWorld
> services:
> - serviceType: brooklyn.entity.webapp.apache.ApacheServer
> name: Apache Server
> location: localhost
> brooklyn.config:
> http_port: 80
> app_git_repo_url:https://bitbucket.org/seaclDem/nurocasestudyphp5-5.git
> <https://seaclDem:[email protected]/seaclDem/nurocasestudyphp5-5.git>
> db_connection_config_params:
> g_DatabaseHost: $brooklyn:formatString("%s",
> component("db").attributeWhenReady("datastore.url"))
> g_DatabasePort:
> $brooklyn:component("db").attributeWhenReady("mysql.port")
>
> - serviceType: brooklyn.entity.database.mysql.MySqlNode
> id: db
> name: My DB
> location: localhost
> brooklyn.config:
> datastore.creation.script.url: file:///root/Desktop/brooklynTest/create.sql
>
> In this example the db_connection_config_params is a MapConfigKey:
>
> @SetFromFlag("db_connection_config_params")
> public static final ConfigKey<Map<String,String>>
> DB_CONNECTION_CONFIG_PARAMS = new BasicConfigKey(
> Map.class, "php.db.connection.config.params", "PHP application
> file to start e.g. main.php, or launch.php");
>
> Which contains two items which are used to configure the database. In this
> case, the values of the
> aforementioned items are provided by MySQL entity. It works ok.
> Here, I find a problem getting the values of the g_DatabaseHost and
> g_DatabasePort in my java code. When
> I read the values of the aforementiond items the returned values are
> $brooklyn:formatString("%s").
>
> I have changed the YAML definition using:
>
> g_DatabaseHost:
> $brooklyn:component("db").attributeWhenReady("datastore.url"))
> g_DatabasePort:
> $brooklyn:component("db").attributeWhenReady("mysql.port")
>
> But I have obteined
> $brooklyn:component("db").attributeWhenReady("datastore.url")) and
> $brooklyn:component("db").attributeWhenReady("mysql.portl")) respectively.
>
> I thought the problem could be the component values request (e.g.
> $brooklyn:component("db").
> attributeWhenReady("datastore.url"))), then I assinged these values to
> simple ConfigKey<String> but
> they worked good.
>
> Thus, the problem may be ConfigKey<Map<,>> parser does not evalue the
> expresions which uses
> $brooklyn:... but I do not know.
>
> Could anyone point me in the right direction? Thank you very much.
>
> Thanks a lot,
> Jose.
>
>
>