Skip to content

Syntax differences considered deltas #658

@kkeinanen

Description

@kkeinanen

Description

Observed Behavior:

Found deltas for resource

{
    "controller": "hidden",
    "controllerGroup": "kro.run",
    "controllerKind": "hidden",
    "namespace": "hidden",
    "name": "hidden",
    "resourceID": "hidden",
    "delta": [
        {
            "path": "spec.template.spec.containers[0].args",
            "desired": [],
            "observed": null
        },
        {
            "path": "spec.template.spec.containers[0].resources.requests.cpu",
            "desired": "0.1",
            "observed": "100m"
        },
        {
            "path": "spec.minReadySeconds",
            "desired": 0,
            "observed": null
        }
    ]
}

My Deployment has, amongst other definitions

spec:
  minReadySeconds: 0
  template:
    spec:
    containers:
    - args: []
      resources:
        requests:
          cpu: '0.1'

Query to Kubernetes (Rancher desktop, 1.32.7), does not return the minReadySeconds or the args objects, and returns resources as

"resources": {
    "limits": {
      "memory": "477Mi"
    },
    "requests": {
      "cpu": "100m"
    }
  }

Seems that due to these differences the instance is not marked ready.

Expected Behavior:

Entering default values for deployment parameters, and use of alternative syntaxes ("0.1" == "100m") should be allowed.

Reproduction Steps (Please include ResourceGraphDefinition and Instances files):

apiVersion: kro.run/v1alpha1
kind: ResourceGraphDefinition
metadata:
  name: repro
spec:
  resources:
  - id: repro
    template:
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: app
        labels:
          app: repro
      spec:
        minReadySeconds: 0
        replicas: 1
        revisionHistoryLimit: 0
        selector:
          matchLabels:
            app: repro
        template:
          metadata:
            labels:
              app: repro
          spec:
            containers:
            - name: repro
              image: nginx:alpine
              args: []
              resources:
                limits:
                  memory: 477Mi
                requests:
                  cpu: "0.1"
  schema:
    apiVersion: v1alpha1
    group: kro.run
    kind: Repro
    spec: {}
apiVersion: kro.run/v1alpha1
kind: Repro
metadata:
  name: repro
spec: {}

Observe that Deployment "app" is created and ready, but the Repro object remains syncing.

Versions:

  • kro version: 0.4.1
  • Kubernetes Version (kubectl version): Client v1.32.5, Server v1.32.7+k3s1

Involved Controllers:

  • Controller URLs and Versions (if applicable):

Error Logs (if applicable)**:

% kubectl get pods | grep app
app-6d5bf79b95-mbbfc                                             1/1     Running     0          93s
% kubectl get deployment app                             
NAME   READY   UP-TO-DATE   AVAILABLE   AGE
app    1/1     1            1           2m49s
% kubectl get repro                                     
NAME    STATE         SYNCED   AGE
repro   IN_PROGRESS   False    3m26s

2025-09-02T14:33:33.710Z	DEBUG	dynamic-controller	Requeue needed after delay	{"item": {"NamespacedKey":"xx/repro","GVR":{"Group":"kro.run","Version":"v1alpha1","Resource":"reproes"}}, "error": "resource update in progress", "delay": "3s"}
2025-09-02T14:33:33.710Z	LEVEL(-2)	dynamic-controller	Skipping update due to unchanged generation	{"name": "repro", "namespace": "xx", "generation": 1}
2025-09-02T14:33:36.710Z	DEBUG	dynamic-controller	Syncing resourcegraphdefinition instance request	{"gvr": "kro.run/v1alpha1/reproes", "namespacedKey": "xx/repro"}
2025-09-02T14:33:36.724Z	DEBUG	reproes-controller	no service accounts configured, using default client	{"controller": "reproes", "controllerGroup": "kro.run", "controllerKind": "Repro"}
2025-09-02T14:33:36.724Z	LEVEL(-2)	reproes-controller	Using instance namespace	{"controller": "reproes", "controllerGroup": "kro.run", "controllerKind": "Repro", "namespace": "xx", "name": "repro", "resourceID": "repro", "namespace": "xx"}
2025-09-02T14:33:36.739Z	DEBUG	reproes-controller	Processing resource update	{"controller": "reproes", "controllerGroup": "kro.run", "controllerKind": "Repro", "namespace": "xx", "name": "repro", "resourceID": "repro"}
2025-09-02T14:33:36.739Z	DEBUG	reproes-controller	Found deltas for resource	{"controller": "reproes", "controllerGroup": "kro.run", "controllerKind": "Repro", "namespace": "xx", "name": "repro", "resourceID": "repro", "delta": [{"path":"spec.template.spec.containers[0].args","desired":[],"observed":null},{"path":"spec.template.spec.containers[0].resources.requests.cpu","desired":"0.1","observed":"100m"},{"path":"spec.minReadySeconds","desired":0,"observed":null}]}
2025-09-02T14:33:36.766Z	LEVEL(-2)	dynamic-controller	Skipping update due to unchanged generation	{"name": "repro", "namespace": "xx", "generation": 1}
2025-09-02T14:33:36.767Z	DEBUG	dynamic-controller	Finished syncing resourcegraphdefinition instance request	{"gvr": "kro.run/v1alpha1/reproes", "namespacedKey": "xx/repro", "duration": "55.958083ms"}
2025-09-02T14:33:36.767Z	DEBUG	dynamic-controller	Requeue needed after delay	{"item": {"NamespacedKey":"qvantel/repro","GVR":{"Group":"kro.run","Version":"v1alpha1","Resource":"reproes"}}, "error": "resource update in progress", "delay": "3s"}

  • Please vote on this issue by adding a 👍 reaction to the original issue to help the community and maintainers prioritize this request
  • Please do not leave "+1" or "me too" comments, they generate extra noise for issue followers and do not help prioritize the request
  • If you are interested in working on this issue or have submitted a pull request, please leave a comment

Which option describes the most your issue?

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind/bugCategorizes issue or PR as related to a bug.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions