crossplane-contrib / provider-kubernetes

Crossplane provider to provision and manage Kubernetes objects on (remote) Kubernetes clusters.
Apache License 2.0
140 stars 82 forks source link

Patch existing resource in merge patch way #57

Closed kertzi closed 2 weeks ago

kertzi commented 2 years ago

Scenario: I have EKS cluster and I need to update aws-node daemonset environment variable. I try to do it with following Object definition, this is part of composition:

  - name: aws-node-daemonset
    base:
      apiVersion: kubernetes.crossplane.io/v1alpha1
      kind: Object
      spec:
        managementPolicy: ObserveCreateUpdate
        providerConfigRef:
          name: kubernetes-provider
        forProvider:
          manifest:
            apiVersion: apps/v1
            kind: DaemonSet
            metadata:
              name: aws-node
              namespace: kube-system
            spec:
              template:
                spec:
                  containers:
                  - env:
                    - name: ENABLE_PREFIX_DELEGATION
                      value: "true"
                    name: aws-node

Result is that I get error update failed: cannot apply object: cannot patch object: DaemonSet.apps "aws-node" is invalid: spec.template.spec.containers[0].image: Required value

So it looks like I have to add complete daemonset definition to make it work but that's not optimal, I just want to modify existing a little bit. Is there anyway to do some kind of "merge patch" to existing kubernetes object? I think that way this could work

turkenh commented 1 year ago

Could you try with SSA and see if helps? https://github.com/crossplane-contrib/provider-kubernetes/pull/134