Skip to content

ExtraResources works as expected only in local environment #536

@tiagat

Description

@tiagat

Hi guys!

What happened?

I encountered a problem where the ExtraResources and getExtraResources function only work in a local environment when executing the crosplain render command.
The same composite does not work in a real Kubernetes cluster.

How can we reproduce it?

SandBox:

definition.yaml

apiVersion: apiextensions.crossplane.io/v2
kind: CompositeResourceDefinition
metadata:
  name: democlaims.example.io
spec:
  scope: Namespaced
  group: example.io
  names:
    kind: DemoClaim
    plural: democlaims
    singular: democlaim
  versions:
    - name: v1alpha1
      served: true
      referenceable: true
      schema:
        openAPIV3Schema:
          type: object
          properties:
            status:
              type: object
              properties:
                debug:
                  type: string
                  nullable: true

composition.yaml

apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
  name: democlaim
spec:
  compositeTypeRef:
    apiVersion: example.io/v1alpha1
    kind: DemoClaim
  mode: Pipeline
  pipeline:
    - step: extra-resources
      functionRef:
        name: crossplane-contrib-function-go-templating
      input:
        apiVersion: gotemplating.fn.crossplane.io/v1beta1
        kind: GoTemplate
        source: Inline
        inline:
          template: |
            apiVersion: meta.gotemplating.fn.crossplane.io/v1alpha1
            kind: ExtraResources
            requirements:
              config:
                apiVersion: v1
                kind: ConfigMap
                matchName: dummy-config
            ---
            {{ $debug := index . "extraResources" }}
            apiVersion: example.io/v1alpha1
            kind: DemoClaim
            status:
              debug: |
                {{ $debug | toJson }}    
    - step: automatically-detect-ready-composed-resources
      functionRef:
        name: crossplane-contrib-function-auto-ready
  

extraresources.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: dummy-config
data:
  debug: "dummy"

functions.yaml

apiVersion: pkg.crossplane.io/v1beta1
kind: Function
metadata:
  name: crossplane-contrib-function-go-templating
spec:
  package: xpkg.crossplane.io/crossplane-contrib/function-go-templating:v0.11.3
---
apiVersion: pkg.crossplane.io/v1beta1
kind: Function
metadata:
  name: crossplane-contrib-function-auto-ready
spec:
  package: xpkg.crossplane.io/crossplane-contrib/function-auto-ready:v0.5.2

xr.yaml

apiVersion: example.io/v1alpha1
kind: DemoClaim
metadata:
  name: dummy-claim
  namespace: default
spec: {}

on local machine I can see entire required object

$ crossplane render xr.yaml composition.yaml functions.yaml -e extraresources.yaml

---
apiVersion: example.io/v1alpha1
kind: DemoClaim
metadata:
  name: dummy-claim
  namespace: default
status:
  conditions:
  - lastTransitionTime: "2024-01-01T00:00:00Z"
    reason: Available
    status: "True"
    type: Ready
  debug: "{\"config\":{\"items\":[{\"resource\":{\"apiVersion\":\"v1\",\"data\":{\"debug\":\"dummy\"},\"kind\":\"ConfigMap\",\"metadata\":{\"name\":\"dummy-config\"}}}]}}
    \   \n"

But in a real Kubernetes cluster:

apiVersion: example.io/v1alpha1
kind: DemoClaim
metadata:
  ...
status:
  conditions:
    ...
debug: |
    {"config":{}}  

What environment did it happen in?

Crossplain

chart: crossplane
repoURL: "https://charts.crossplane.io/stable"
targetRevision: 2.1.1

Function

apiVersion: pkg.crossplane.io/v1beta1
kind: Function
metadata:
  name: crossplane-contrib-function-go-templating
spec:
  package: xpkg.crossplane.io/crossplane-contrib/function-go-templating:v0.11.3

Kubernetes

Client Version: v1.35.0
Kustomize Version: v5.7.1
Server Version: v1.33.4
$ k get xrd           
NAME                          ESTABLISHED   OFFERED   AGE
democlaims.example.io         True                    30m

$ k get composition      
NAME             XR-KIND          XR-APIVERSION          AGE
democlaim        DemoClaim        example.io/v1alpha1    29m

$ k get DemoClaim dummy-claim
NAME          SYNCED   READY   COMPOSITION   AGE
dummy-claim   True     True    democlaim     28m

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions