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.