[ 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)