pulumi-kubernetes-operator
pulumi-kubernetes-operator copied to clipboard
Support structured config
Context
Currently structured configs are not supported properly by Pulumi k8s operator.
As Pulumi programs can be configured using yaml files, it looks fair to be able to configure a structured, complex config using the Stack CRD as well.
Proposed changes
This PR proposes two approaches to support structured config:
makes the config
field support a JSON as value
It could be useful to keep compatibility with older versions. Declaring the config
field as a map[string]apiextensionsv1.JSON
, existing support to inline fields keeps working (as aws:region: whatever
) and expanding the config to a more complex object also works.
To make this work with Pulumi Automation API, in case the value is a json, the same rules used by Pulumi CLI to handle structured configs are applied. The implementation flattens all object keys to generate Pulumi-CLI compatible key names. For example:
config:
my-key: my-value
my-list:
- a
- b
- c
aws:region: us-east-1
aws:assumeRole:
roleArn: my-role-arn
sessionName: my-assumed-session-name
it will generate these config keys/values:
my-key: my-value
my-list[0]: a
my-list[1]: b
my-list[2]: c
aws:region: us-east-1
aws:assumeRole.roleArn: my-role-arn
aws:assumeRole.sessionName: my-assumed-session-name
and all those keys are send through Automation API as Path: true
adds a new field configRefs
adds to CRD a new field called configRefs
, that works in a similar way that EnvRefs
or SecretRefs
, adding two new possible values: configmap
and structured
configmap
adds support to read a K8s ConfigMap and get a specific key to use as a config value
structured
is a JSON value that can be used to pass a structured configuration, following the same previous pattern from the config
field.
integration tests
I was not able to make the tests pass in my local environment but right now it's just an initial implementation proposal. I can keep working on that if you people think is worth it.
Related issues (optional)
https://github.com/pulumi/pulumi-kubernetes-operator/issues/258