GoogleContainerTools / skaffold

Easy and Repeatable Kubernetes Development
https://skaffold.dev/
Apache License 2.0
14.8k stars 1.61k forks source link

[Feature Request] Allow Config Override #7938

Open emanuele-leopardi opened 1 year ago

emanuele-leopardi commented 1 year ago

Hello Guys,

first of all thank you so much for this amazing tool! I'd like to suggest a possible advancement in the configuration: So let's say that I have a Config used by many services. For example

---
apiVersion: skaffold/v2beta29
kind: Config
metadata:
  name: postgresql
profiles:
  - name: kind-baz
    activation:
      - kubeContext: kind-baz
    deploy:
      helm:
        releases:
          - name: postgres
            repo: https://charts.bitnami.com/bitnami
            remoteChart: postgresql
            wait: true
            setValues:
              auth.enablePostgresUser: true
              auth.postgresPassword: postgres
              auth.database: foo

Usually I can include this in another config file like so

---
apiVersion: skaffold/v2beta29
kind: Config
metadata:
  name: minio
requires:
  - configs: ["postgresql"]
    path: "postgres.yaml"
profiles:
  - name: kind-baz
    activation:
      - kubeContext: kind-baz
    deploy:
      helm:
        releases:
          - name: minio
            repo: https://charts.bitnami.com/bitnami
            remoteChart: minio
            wait: true
            setValues:
              auth.rootUser: myaccesskey
              auth.rootPassword: mysecretkey
              defaultBuckets: foo-bar

This is totally fine but I believe one missing bit is the chance of overriding values in the config. Something like the following:

---
apiVersion: skaffold/v2beta29
kind: Config
metadata:
  name: minio
requires:
  - configs: ["postgresql"]
    path: "postgres.yaml"
    overrideValues:
      auth.enablePostgresUser: true
      auth.postgresPassword: bazinga
      auth.database: bazinga
profiles:
  - name: kind-baz
    activation:
      - kubeContext: kind-baz
    deploy:
      helm:
        releases:
          - name: minio
            repo: https://charts.bitnami.com/bitnami
            remoteChart: minio
            wait: true
            setValues:
              auth.rootUser: myaccesskey
              auth.rootPassword: mysecretkey
              defaultBuckets: foo-bar

In this example I've overridden all 3 values because they were already set, but I could potentially never set any default and have skaffold do the overriding job for me. In this way I could potentially fetch the base Config of postgres from another directory or anorther repository and override only what I need This would give skaffold more flexibility , unless there is another way to achieve all of this and I'm simply not aware of it. Wdyt?

Thank you

gsquared94 commented 1 year ago

Right now there isn't any way to achieve what you're wanting in Skaffold. The best you can do is have the common config have multiple profiles that set the different values for these properties, and in the main config import the common config by specifying the profile.

apiVersion: skaffold/v2beta29
kind: Config
metadata:
  name: minio
requires:
  - configs: ["postgresql"]
    path: "postgres.yaml"
    activeProfiles:
      - name: profile-with-different-values
emanuele-leopardi commented 1 year ago

thanks @gsquared94 for taking the time to answer me back, is this a feature that could be available in future? do you think it's worth it? ( I certainly belive it is)

renzodavid9 commented 1 year ago

Hi @emanuele-leopardi, this sounds like a good improvement. Currently this is not a high priority for the team, but if you or anyone from the community is willing to work on this, it would be great! A starting point for contributions is the How to Contribute doc and the Design Proposal Process doc