From f02fd574126e6a6d94b12d5e8735f1f1c78fd359 Mon Sep 17 00:00:00 2001
From: Philippe Scorsolini
Date: Tue, 5 Sep 2023 14:58:06 +0200
Subject: [PATCH] feat: optional environment label selector fieldpath
Co-authored-by: Pete Lumbis
Signed-off-by: Philippe Scorsolini
---
.../master/concepts/environment-configs.md | 66 ++++++++++++++++++-
1 file changed, 63 insertions(+), 3 deletions(-)
diff --git a/content/master/concepts/environment-configs.md b/content/master/concepts/environment-configs.md
index 74dc3f13f..85366028b 100644
--- a/content/master/concepts/environment-configs.md
+++ b/content/master/concepts/environment-configs.md
@@ -196,16 +196,76 @@ spec:
- type: Selector
selector:
matchLabels:
- - key: my-label-key
+ - key: my-first-label-key
type: Value
- value: my-label-value
- - key: my-label-key
+ value: my-first-label-value
+ - key: my-second-label-key
type: FromCompositeFieldPath
valueFromFieldPath: spec.parameters.deploy
resources:
# Removed for brevity
```
+By default, Crossplane errors out if a
+{{}}valueFromFieldPath{{}}
+field doesn't exist in the composite resource at runtime.
+Set the
+{{}}fromFieldPathPolicy{{}}
+field to `Optional` to ignore fields that don't exist.
+
+```yaml {label="byLabelOptional",copy-lines="all"}
+apiVersion: apiextensions.crossplane.io/v1
+kind: Composition
+metadata:
+ name: example-composition
+spec:
+ environment:
+ environmentConfigs:
+ - type: Selector
+ selector:
+ matchLabels:
+ - key: my-first-label-key
+ type: Value
+ value: my-first-label-value
+ - key: my-second-label-key
+ type: FromCompositeFieldPath
+ valueFromFieldPath: spec.parameters.deploy
+ fromFieldPathPolicy: Optional
+ resources:
+ # Removed for brevity
+```
+
+Crossplane evaluates label selectors in order, so if a label set as optional
+isn't found, but if you already defined an explicit value for it, it uses that
+{{}}default value{{}}
+instead.
+
+```yaml {label="byLabelOptionalDefault",copy-lines="all"}
+apiVersion: apiextensions.crossplane.io/v1
+kind: Composition
+metadata:
+ name: example-composition
+spec:
+ environment:
+ environmentConfigs:
+ - type: Selector
+ selector:
+ matchLabels:
+ - key: my-first-label-key
+ type: Value
+ value: my-label-value
+ - key: my-second-label-key
+ type: Value
+ value: my-default-value
+ - key: my-second-label-key
+ type: FromCompositeFieldPath
+ valueFromFieldPath: spec.parameters.deploy
+ fromFieldPathPolicy: Optional
+ resources:
+ # Removed for brevity
+```
+
+
#### Manage selector results
Selecting environments by labels may return more than one environment.