79417726

Date: 2025-02-06 11:34:42
Score: 0.5
Natty:
Report link

I managed to get it working. Here is the working code if anyone else needs it:

skaffold.yaml

apiVersion: skaffold/v2beta26
kind: Config

metadata:
  name: mongodb

deploy:
  kubectl:
    manifests:
    - "config/namespace.yaml"
    - "config/mongodb-credentials.yaml"
    - "config/configmap.yaml"
    - "config/mongodb.yaml"
    - "config/mongo-seed-job.yaml"
    defaultNamespace: "mongodb"

config/namespace.yaml

kind: Namespace
apiVersion: v1
metadata:
  name: mongodb
  labels:
    name: mongodb

config/mongodb-credentials.yaml

Note: username: admin password: password

Please change this to whatever you want

apiVersion: v1
kind: Secret
metadata:
  name: mongodb-credentials
type: Opaque
data:
  username: YWRtaW4=
  password: cGFzc3dvcmQ=

config/configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: seed-data
data:
  init.json: |
    [{"name":"Joe Smith","email":"[email protected]","age":40,"admin":false},{"name":"Jen Ford","email":"[email protected]","age":45,"admin":true}]

config/mongodb.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongodb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongodb
  template:
    metadata:
      labels:
        app: mongodb
    spec:
      containers:
        - name: mongodb
          image: mongo:latest
          ports:
          - containerPort: 27017
          volumeMounts:
          - name: mongo-data
            mountPath: /data/db
          env:
            - name: MONGO_INITDB_ROOT_USERNAME
              valueFrom:
                secretKeyRef:
                  name: mongodb-credentials
                  key: username
            - name: MONGO_INITDB_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mongodb-credentials
                  key: password
      volumes:
      - name: mongo-data
        emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
  name: mongodb
spec:
  ports:
    - port: 27017
  selector:
    app: mongodb

config/mongo-seed-job.yaml

apiVersion: batch/v1
kind: Job
metadata:
  name: mongo-seed
spec:
  template:
    spec:
      initContainers:
      - name: init-copy
        image: busybox
        command: ['sh', '-c', 'cp /config/init.json /data/']
        volumeMounts:
        - name: config-volume
          mountPath: /config
        - name: data-volume
          mountPath: /data
      containers:
      - name: seed
        image: mongo:latest
        command: ["sh", "-c", "mongoimport --uri mongodb://$(MONGO_USERNAME):$(MONGO_PASSWORD)@mongodb:27017/mydb --collection accounts --type json --file /data/init.json --jsonArray --authenticationDatabase=admin"]
        env:
          - name: MONGO_USERNAME
            valueFrom:
              secretKeyRef:
                name: mongodb-credentials
                key: username
          - name: MONGO_PASSWORD
            valueFrom:
              secretKeyRef:
                name: mongodb-credentials
                key: password
        volumeMounts: 
        - name: data-volume
          mountPath: /data
      restartPolicy: Never
      volumes:
      - name: config-volume
        configMap:
          name: seed-data
      - name: data-volume
        emptyDir: {}

If anyone has any alternate solutions it would be good to know.

Thanks @Imran Premnawaz for your help

Reasons:
  • Blacklisted phrase (0.5): Thanks
  • Long answer (-1):
  • Has code block (-0.5):
  • User mentioned (1): @Imran
  • Self-answer (0.5):
Posted by: mh377