Mahesh
Mahesh

Reputation: 41

How to use ENV vars in golang to pass DB connection values dynamically when deployed in kubernetes

I am currently developing a small API in golang which will connect to a sql database. Below is the snip where I am passing the database connection string details statically ( hardcoded in the code ) .

const (
DB_USER     = "username"
DB_PASSWORD = "password"
DB_NAME     = "db_name"
DB_HOST     = "db_server_name"
DB_PORT     = db_port )

Now I want to use ENV variables to make this static hardcoded values to become dynamic, so anyone on the fly can set these details using ENV vars. Can someone help me how I can achieve this. How to set them in such way from code so it can be dynamically passed as ENV vars in k8's deployment ?

My current deployment.yaml file as below

apiVersion: apps/v1
kind: Deployment
metadata:
  name: go-demo-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: go-demo-app
  template:
    metadata:
      labels:
        app: go-demo-app
    spec:
      containers:
        - name: go-demo-app
          image: dockerhub/go-api:latest
          resources: {}
          ports:
            - containerPort: 8001

The above is working fine as the db server name is hardcoded in the code and now I can looking to pass it dynamically using ENV vars via code which I can refer in k8's deployment

Upvotes: 0

Views: 2178

Answers (1)

David Yappeter
David Yappeter

Reputation: 1612

Change the .yaml to

apiVersion: apps/v1
kind: Deployment
metadata:
  name: go-demo-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: go-demo-app
  template:
    metadata:
      labels:
        app: go-demo-app
    spec:
      containers:
        - name: go-demo-app
          image: dockerhub/go-api:latest
          resources: {}
          ports:
            - containerPort: 8001
          env:
            - name: DB_USER
              value: username
            - name: DB_PASSWORD 
              value: password
            - name: DB_NAME     
              value: db_name
            - name: DB_HOST     
              value: db_server_name
            - name: DB_PORT     
              value: "3306"

kubectl apply -f /path/to/file

on your code, change the initialization into

var (
    DB_USER     = os.Getenv("DB_USER")
    DB_PASSWORD = os.Getenv("DB_PASSWORD")
    DB_NAME     = os.Getenv("DB_NAME")
    DB_HOST     = os.Getenv("DB_HOST")
    DB_PORT     = os.Getenv("DB_PORT")
)

I change const to var because it is not allowed

Upvotes: 3

Related Questions