Yaml Issue in kodecloud-engineer Task

What could be wrong with this yaml ???
Am I missing something ?

=================================

kind: PersistentVolume            
metadata:
  name: mysql-pv
  labels: 
  type: local 
spec:
  storageClassName: standard      
  capacity:
    storage: 250Mi
  accessModes: 
    - ReadWriteOnce
  hostPath:                       
  path: "/mnt/data" 
  persistentVolumeReclaimPolicy:  
  -  Retain  
---    
apiVersion: apps/v1 
kind: PersistentVolumeClaim 
metadata:                          
  name: mysql-pv-claim
  labels:
  app: mysql-app 
spec:                              
  storageClassName: standard       
  accessModes:
    - ReadWriteOnce                
  resources:
    requests: 
      storage: 250MB 
---
apiVersion: v1                    
kind: Service                      
metadata:
  name: mysql         
  labels:             
    app: mysql-app
spec:
  type: NodePort
  ports:
    - targetPort: 3306
      port: 3306
      nodePort: 30011
  selector:    
    app: mysql-app
  tier: mysql
---
apiVersion: v1 
kind: Deployment            
metadata:
  name: mysql-deployment       
  labels:                       
    app: mysql-app 
spec:
  selector:
    matchLabels:
      app: mysql-app
    tier: mysql 
  strategy:
    type: Recreate
  template:                    
    metadata:
      labels:                  
        app: mysql-app
      tier: mysql 
    spec:                       
      containers: 
      - images: mysql:5.6 
        name: mysql
        env:                        
        - name: MYSQL_ROOT_PASSWORD 
          valueFrom:                
          secretKeyRef: 
            name: mysql-root-pass 
              key: password 
        - name: MYSQL_DATABASE
          valueFrom:
          secretKeyRef: 
            name: mysql-db-url 
              key: database 
        - name: MYSQL_USER
          valueFrom:
            secretKeyRef:
              name: mysql-user-pass
              key: username
        - name: MYSQL_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-user-pass
              key: password
        ports:
        - containerPort: 3306        
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage 
          mountPath: /var/lib/mysql
      volumes:                       
      - name: mysql-persistent-storage
          persistentVolumeClaim:
          claimName: mysql-pv-claim

I correct it to

==================================

kind: PersistentVolume 
metadata: 
  name: mysql-pv
  labels: 
  type: local
spec:
  storageClassName: standard
  capacity:
    storage: 250Mi
  accessModes:
    - ReadWriteOnce
  hostPath:
  path: "/mnt/data"
  persistentVolumeReclaimPolicy: Retain
  
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  labels:
  app: mysql-app
spec:
  storageClassName: standard
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 250Mi
	  
apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
  name: mysql
spec:
  type: NodePort
  ports:
    - port: 3036
      nodePort: 30036
	  name: http selector: app: mysql_app
  tier: mysql
  
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-deployment
  labels:
  app: mysql-app
spec:
  selector:
    matchLabels:
      app: mysql-app
	tier: mysql
  strategy:
    type: Recreate
  template:
    metadata:
	  labels:
        app: mysql-app
      tier: mysql
    spec:
      containers:
	  - image: mysql:5.6 
	    name: mysql 
		env:
		- name: MYSQL_ROOT_PASSWORD
          valueFrom:
		  secretKeyRef:
    	    name: mysql-root-pass
			  key: password
	    - name: MYSQLDATABASE 
	      valueFrom:
		  secretKeyRef:
            name: mysql-db-url
              key: database
	    - name: MYSQLUSER 
		  valueFrom:
		  secretKeyRef:
		    name: mysql-user-pass
			  key: username
		- name: MYSQL_PASSWORD
		  valueFrom:
		  secretKeyRef:
            name: mysql-user-pass
              key: password 
	    ports: 
	    - containerPort: 3306
          name: mysql 
		volumeMounts:
		- name: mysql-persistent-storage
		  mountPath: /var/lib/mysql
	  volumes:
	  - name: mysql-persistent-storage
          persistentVolumeClaim:
		  claimName: mysql-pv-claim

===============================
But now I am getting ,

=======================

thor@jump_host ~$ kubectl apply --validate=true -f /home/thor/mysql_deployment1.yml
error: error parsing /home/thor/mysql_deployment1.yml: error converting YAML to JSON: yaml: line 74: mapping values are not allowed in this context
thor@jump_host ~$ 

=====================

Hello, @iVaibhav
Can you please use triple backtick to explore the YAML?
start with triple backtick(```)

YAML HERE

end with triple backtick (```)

It would be easy to read and understand the indentation issues.

1 Like

Thanks @Tej-Singh-Rana for the trick

I updated the post and now it looks much better

I corrected it. There are so many indentation issues. Please correct your .vimrc file to escape from indentation issues.

---
apiVersion: v1
kind: PersistentVolume 
metadata: 
  name: mysql-pv
  labels: 
   type: local
spec:
  storageClassName: standard
  capacity:
    storage: 250Mi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"
  persistentVolumeReclaimPolicy: Retain

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  labels:
   app: mysql-app
spec:
  storageClassName: standard
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 250Mi
--- 
apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
    name: mysql
spec:
  type: NodePort
  ports:
    - port: 3036
      nodePort: 30036
      name: http 
  selector: 
    app: mysql_app
    tier: mysql
--- 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-deployment
  labels:
    app: mysql-app
spec:
  selector:
    matchLabels:
      app: mysql-app
      tier: mysql
  strategy:
     type: Recreate
  template:
    metadata:
      labels:
       app: mysql-app
       tier: mysql
    spec:
      containers:
      - image: mysql:5.6 
        name: mysql 
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
             secretKeyRef:
                name: mysql-root-pass
                key: password
        - name: MYSQLDATABASE 
          valueFrom:
            secretKeyRef:
               name: mysql-db-url
               key: database
        - name: MYSQLUSER 
          valueFrom:
             secretKeyRef:
                name: mysql-user-pass
                key: username
        - name: MYSQL_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-user-pass
              key: password 
        ports: 
        - containerPort: 3306
          name: mysql 
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
            claimName: mysql-pv-claim

Thanks @Tej-Singh-Rana ,

I will compare this with what I tried in lab.

I dont think i will ever be able to come to terms with indentation in python and yaml :roll_eyes: . Wish they were better designed.