[ 
https://issues.apache.org/jira/browse/KAFKA-6142?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16300193#comment-16300193
 ] 

Randall Hauch commented on KAFKA-6142:
--------------------------------------

It should be possible to have an empty string as the default: 
{{$\{foo1.prop,env.MY_ENV_VAR:\}}}

> Connect worker configurations and connector configurations should accept 
> environment variables
> ----------------------------------------------------------------------------------------------
>
>                 Key: KAFKA-6142
>                 URL: https://issues.apache.org/jira/browse/KAFKA-6142
>             Project: Kafka
>          Issue Type: Improvement
>          Components: KafkaConnect
>    Affects Versions: 1.0.0
>            Reporter: Randall Hauch
>              Labels: needs-kip
>
> Currently, when a worker or connector configuration is parsed, the values are 
> used as-is without any kind of pre-processing before the value is used. It 
> should be possible to define configuration properties such that string 
> literal values or default values can use *_configuration variables_* that 
> reference environment variables and/or system properties, and that these 
> configuration variables are resolved/replaced before the configuration value 
> is used.
> I propose doing this enhancement in Kafka client's {{ConfigDef}} by adding a 
> {{ConfigDef.Transformer}} interface:
> {code:java}
>     /**
>      * Transform the configuration value.
>      */
>     public interface Transformer {
>         /**
>          * Transform the configuration value.
>          * @param name The name of the configuration
>          * @param value The value of the configuration
>          * @return the preprocessed value
>          * @throws ConfigException if the value is invalid.
>          */
>         Object apply(String name, Object value);
>     }
> {code}
> and then allowing {{Transformer}} implementations to be passed to 
> {{ConfigDef.define(...)}} such all existing signatures are maintained for 
> backward compatibility. By default, the definition would use an identity 
> transform that simply returns the value. The transformers would be called in 
> {{ConfigDef.parseValue(...)}} before the {{parseType(...)}} method is called, 
> and would also be called on the default value if one is provided.
> Then, a {{ConfigDef.ReplaceSystemVariables}} implementation would be provided 
> to look in {{String}} values for zero or more variables defined with this 
> EBNF grammar:
> {noformat}
> '$' '{' varName { ',' varName } [ ':' defaultValue ] '}'
> {noformat}
> where:
> * {{varName}} is the name of a Java system property or {{env.}} followed by 
> the name of an environment variable, and 
> * {{defaultValue}} specifies the replacement value used when no environment 
> variable or system property is found, and defaults to an empty string. 
> The value of the first system property or environment variable resolved is 
> then used to replace the variable expression. This implementation would have 
> trace or debug level logging to describe what it is doing.
> For example, the variable {{$\{env.KAFKA_HOME\}}} would replace the variable 
> expression with the value of the {{KAFKA_HOME}} environment variable or an 
> blank string if that variable doesn't exist. 
> Likewise, the variable {{$\{foo.prop1,foo.prop2,env.MY_ENV_VAR:value\}}} 
> would be replaced with the value of the {{foo.prop1}} system property if it 
> exists, or with the value of the {{foo.prop2}} system property if it exists, 
> or with the value of the {{MY_ENV_VAR}} environment variable if it exists, or 
> {{value}} if none of the system properties exist.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to