Reputation: 41
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
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