I was looking a way to run my Wildfly application in Kubernetes. I realized that my database hostname, database name, username and passwords are written in Wildfly's standalone-full.xml file. I don't want to make these details a part of container image. This information is secret and confidential. Kubernetes provide a way to manage secrets and can make these secret available as environment variables.
It will be good if I can use these environment variables in my config file. This way I don't have to hard code sensitive information in container image. Luckily Wildfly has a way of doing this. This is how you use it.
<datasource jta="true" jndi-name="java:/PostgresDS" pool-name="PostgresDS" enabled="true" use-java-context="true">
<connection-url>jdbc:postgresql://${env.DBHOST}:5432/${env.DBNAME}</connection-url>
<driver>postgresql</driver>
<pool>
<min-pool-size>20</min-pool-size>
<initial-pool-size>20</initial-pool-size>
<max-pool-size>200</max-pool-size>
<prefill>true</prefill>
</pool>
<security>
<user-name>${env.DBUSER}</user-name>
<password>${env.DBPASSWORD}</password>
</security>
</datasource>
As you can see environment variable name are prefixed with "env." it tells wildfly that we are looking for environment and not for system property. You can specify a default value also in case environment variable is undefined syntax for that is:
${env.DBUSER:sampleuser}
Here sampleuser is the default value.
No comments:
Post a Comment