configurator
configurator copied to clipboard
During the init process, configurator does not add the annotation 'config-sync-controller' to an existing deployment
Describe the bug Currently, whenever a new resource is created, say when deployment or a stateful set is created, the configurator checks whether this resource type is version controlled. If so, the configurator adds the annotation 'config-sync-controller' to the resource. For example, deployments and stateful sets are version controlled, whereas jobs are not version controlled. Hence the configurator does not add the annotation 'config-sync-controller' to a job resource. Similarly, the configurator is expected to add this annotation to all the versioned resources at the time of the init process as well. To Reproduce Steps to reproduce the behavior:
- Create a ConfigMap
$ vi ConfigMap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: demo-config
data:
# property-like keys; each key maps to a simple value
player_initial_lives: "3"
ui_properties_file_name: "user-interface.properties"
# file-like keys
game.properties: |
android.apk=free fire,bgmi
computer=stambled guys
user-interface.properties: |
color.good=purple
color.bad=yellow
allow.textmode=tru
$ kubectl apply -f ConfigMap.yaml
- Create a deployment referencing the ConfigMap to apply deployment using
$ vi apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-deployment
spec:
replicas: 1
selector:
matchLabels:
app: service-nginx
template:
metadata:
labels:
app: service-nginx
spec:
containers:
- name: nginx
image: nginx:1.14
ports:
- containerPort: 80
volumeMounts:
- name: nginx
mountPath: "/config"
readOnly: true
volumes:
- name: nginx
configMap:
name: demo-config
$ kubectl apply -f deployment.yml
- Check the annotations in the deployment.(Note:- there are no additional annotations.)
$ kubectl get deploy demo-deployment -o yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: "2022-02-25T07:31:24Z"
generation: 2
name: demo-deployment
namespace: default
resourceVersion: "29830"
uid: f9130536-e869-4e97-ae64-3d0dd6df8981
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: service-nginx
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
annotations:
ccm-demo2-config: ejxsw
config-sync-controller: configurator
creationTimestamp: null
labels:
app: service-nginx
spec:
containers:
- image: nginx:1.14
imagePullPolicy: IfNotPresent
name: nginx
ports:
- containerPort: 80
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /config
name: nginx
readOnly: true
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- configMap:
defaultMode: 420
name: demo2-config
name: nginx
status:
availableReplicas: 1
conditions:
- lastTransitionTime: "2022-02-25T07:31:29Z"
lastUpdateTime: "2022-02-25T07:31:29Z"
message: Deployment has minimum availability.
reason: MinimumReplicasAvailable
status: "True"
type: Available
- lastTransitionTime: "2022-02-25T07:31:24Z"
lastUpdateTime: "2022-02-25T07:32:51Z"
message: ReplicaSet "demo-deployment-76bb6dbb75" has successfully progressed.
reason: NewReplicaSetAvailable
status: "True"
type: Progressing
observedGeneration: 2
readyReplicas: 1
replicas: 1
updatedReplicas: 1
- Install configurator
- Check the annotation in the existing deployment ( Note:- configurator has added an annotation 'ccm-demo-config', but hasn't added the annotation 'config-sync-controller').
$ kubectl get deploy demo-deployment -o yaml
'annotations:
ccm-demo-config: xsszs'
- Create a new deployment referencing the ConfigMap apply the deployment.
$ vi apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-deployment
spec:
replicas: 1
selector:
matchLabels:
app: service-nginx
template:
metadata:
labels:
app: service-nginx
spec:
containers:
- name: nginx
image: nginx:1.14
ports:
- containerPort: 80
volumeMounts:
- name: nginx
mountPath: "/config"
readOnly: true
volumes:
- name: nginx
configMap:
name: demo-config
$ kubectl apply -f deployment.yaml
- Check the annotations in the newly created deployment. ( Note:- configurator has added 2 annotations - 'ccm-demo-config' and 'config-sync-controller' and in 'spec.template.metadata.annotation'
$ kubectl get deploy demo-deployment -o yaml
annotations:
ccm-demo-config: xsszs
Config-sync-controller: configurator
Expected behavior In step 5, the configurator must add the annotation 'config-sync-controller' to existing deployment at the time of the init process.
Please send pull requests to SODACODE-2022