cnoe-io / idpbuilder

Spin up a complete internal developer platform with only Docker required as a dependency.
https://cloud-native.slack.com/archives/C05TN9WFN5S
Apache License 2.0
168 stars 51 forks source link

Feature: Replace the cnoe:// in matrix and merge generators #355

Open csantanapr opened 1 month ago

csantanapr commented 1 month ago

Have you searched for this feature request?

Problem Statement

When using Application set I'm using matrix with git generators and the repoUrl with cnoe:// and not been replace

Here is the appset the first two occurences of cnoe://test-stacks don't get replace with gitea

apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: stacks
  namespace: argocd
spec:
  goTemplate: true
  goTemplateOptions: ["missingkey=error"]
  generators:
  - matrix:
      generators:
      - matrix:
          generators:
          - clusters: # for reason this is need it as second in the matrix, if not the above extracting .tenants doesn't work
              selector:
                matchLabels:
                  argocd.argoproj.io/secret-type: cluster
          - git:
              repoURL: cnoe://test-stacks
              revision: HEAD
              files:
              - path: stacks/k8s-v{{.metadata.labels.kubernetes_version}}/addons-config.yaml
              values:
                test_kubernetes_version: '{{.metadata.labels.kubernetes_version}}'
      - git:
          repoURL: cnoe://test-stacks
          revision: HEAD
          files:
          - path: 'stacks/k8s-v{{.metadata.labels.kubernetes_version}}/addons-{{- $tenant := default dict (index .tenants .metadata.labels.tenant) -}}
          {{- $cluster := index (default dict (index $tenant "clusters")) .name -}}
          {{- $env := index (default dict (index $tenant "environments")) .metadata.labels.environment -}}
          {{- if $cluster -}}
            {{ $cluster.addons_version }}
          {{- else if $env -}}
            {{ $env.addons_version }}
          {{- else if $tenant -}}
            {{ $tenant.addons_version }}
          {{- else -}}
            {{ .addons_version }}
          {{- end -}}.yaml'

  template:
    metadata:
      name: 'stacks-guestbook' # 'name' field of the Secret
    spec:
      project: "default"
      source:
        repoURL: cnoe://test-stacks
        path: "test/helm-guestbook"
        helm:
          values: |
            {{ . | mustToPrettyJson }}
      destination:
        name: 'in-cluster'
        namespace: guestbook
      syncPolicy:
        automated:
          selfHeal: false
          allowEmpty: true
          prune: false

I had to hardcode the first two like this

```yaml
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: stacks
  namespace: argocd
spec:
  goTemplate: true
  goTemplateOptions: ["missingkey=error"]
  generators:
  - matrix:
      generators:
      - matrix:
          generators:
          - clusters: # for reason this is need it as second in the matrix, if not the above extracting .tenants doesn't work
              selector:
                matchLabels:
                  argocd.argoproj.io/secret-type: cluster
          - git:
              repoURL: https://gitea.cnoe.localtest.me:8443/giteaAdmin/idpbuilder-localdev-stacks-test-stacks.git
              revision: HEAD
              files:
              - path: stacks/k8s-v{{.metadata.labels.kubernetes_version}}/addons-config.yaml
              values:
                test_kubernetes_version: '{{.metadata.labels.kubernetes_version}}'
      - git:
          repoURL: https://gitea.cnoe.localtest.me:8443/giteaAdmin/idpbuilder-localdev-stacks-test-stacks.git
          revision: HEAD
          files:
          - path: 'stacks/k8s-v{{.metadata.labels.kubernetes_version}}/addons-{{- $tenant := default dict (index .tenants .metadata.labels.tenant) -}}
          {{- $cluster := index (default dict (index $tenant "clusters")) .name -}}
          {{- $env := index (default dict (index $tenant "environments")) .metadata.labels.environment -}}
          {{- if $cluster -}}
            {{ $cluster.addons_version }}
          {{- else if $env -}}
            {{ $env.addons_version }}
          {{- else if $tenant -}}
            {{ $tenant.addons_version }}
          {{- else -}}
            {{ .addons_version }}
          {{- end -}}.yaml'

  template:
    metadata:
      name: 'stacks-guestbook' # 'name' field of the Secret
    spec:
      project: "default"
      source:
        repoURL: cnoe://test-stacks
        path: "test/helm-guestbook"
        helm:
          values: |
            {{ . | mustToPrettyJson }}
      destination:
        name: 'in-cluster'
        namespace: guestbook
      syncPolicy:
        automated:
          selfHeal: false
          allowEmpty: true
          prune: false

Possible Solution

replace the cnoe:// everywhere

Alternatives Considered

No response

nabuskey commented 1 month ago

I thought I added support for this already. https://github.com/cnoe-io/idpbuilder/pull/338

From my testing it did work. We have tests too: https://github.com/cnoe-io/idpbuilder/blob/main/pkg/controllers/custompackage/test/resources/customPackages/applicationSet/generator-matrix.yaml

Are you using v0.6.0?