cue: implement "front-style" list comprehensions

This now also allows any of the non-JSON keywords
to be used as references. Previously, these were already
supported as field names.

Issue #339
Issue #165

Change-Id: I721d054c8220ba3536f680fe2e3e502a62f99b6b
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/5683
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/doc/tutorial/basics/6_expressions/40_listcomp.txt b/doc/tutorial/basics/6_expressions/40_listcomp.txt
index 88eb177..dbc5132 100644
--- a/doc/tutorial/basics/6_expressions/40_listcomp.txt
+++ b/doc/tutorial/basics/6_expressions/40_listcomp.txt
@@ -11,7 +11,7 @@
 The example shows the use of `for` loops and `if` guards.
 
 -- listcomp.cue --
-[ x*x for x in items if x rem 2 == 0]
+[ for x in items if x rem 2 == 0 { x*x } ]
 
 items :: [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
 
diff --git a/doc/tutorial/kubernetes/README.md b/doc/tutorial/kubernetes/README.md
index 19c86df..4c998e1 100644
--- a/doc/tutorial/kubernetes/README.md
+++ b/doc/tutorial/kubernetes/README.md
@@ -498,13 +498,15 @@
     service: "\(k)": {
         spec: selector: v.spec.template.metadata.labels
 
-        spec: ports: [ {
-            Port = p.containerPort // Port is an alias
-            port:       *Port | int
-            targetPort: *Port | int
-        } for c in v.spec.template.spec.containers
+        spec: ports: [
+            for c in v.spec.template.spec.containers
             for p in c.ports
-            if p._export ]
+            if p._export {
+                Port = p.containerPort // Port is an alias
+                port:       *Port | int
+                targetPort: *Port | int
+            }  
+        ]
     }
 }
 EOF
@@ -856,7 +858,7 @@
 $ cat <<EOF > kube_tool.cue
 package kube
 
-objects: [ x for v in objectSets for x in v ]
+objects: [ for v in objectSets for x in v { x } ]
 
 objectSets: [
 	service,
@@ -891,8 +893,9 @@
 command: ls: {
 	task: print: cli.Print & {
 		text: tabwriter.Write([
-			"\(x.kind)  \t\(x.metadata.labels.component)  \t\(x.metadata.name)"
-			for x in objects
+			for x in objects {
+				"\(x.kind)  \t\(x.metadata.labels.component)  \t\(x.metadata.name)"
+			}
 		])
 	}
 
@@ -1176,7 +1179,7 @@
 Arguments can be specified as a map.
 ```
     arg: [string]: string
-    args: [ "-\(k)=\(v)" for k, v in arg ] | [...string]
+    args: [ for k, v in arg { "-\(k)=\(v)" } ] | [...string]
 ```
 
 If order matters, users could explicitly specify the list as well.
@@ -1281,7 +1284,7 @@
             metadata: labels: x.label
             spec: selector:   x.label
 
-            spec: ports: [ p for p in x.port ]
+            spec: ports: [ for p in x.port { p } ]
         }
     }
 }
diff --git a/doc/tutorial/kubernetes/manual/services/cloud.cue b/doc/tutorial/kubernetes/manual/services/cloud.cue
index bf86197..e16bbff 100644
--- a/doc/tutorial/kubernetes/manual/services/cloud.cue
+++ b/doc/tutorial/kubernetes/manual/services/cloud.cue
@@ -26,7 +26,7 @@
 	port: [string]: int
 
 	arg: [string]: string
-	args: [ "-\(k)=\(v)" for k, v in arg ] | [...string]
+	args: [ for k, v in arg { "-\(k)=\(v)" } ] | [...string]
 
 	// Environment variables
 	env: [string]: string
diff --git a/doc/tutorial/kubernetes/manual/services/k8s.cue b/doc/tutorial/kubernetes/manual/services/k8s.cue
index cefab64..381e483 100644
--- a/doc/tutorial/kubernetes/manual/services/k8s.cue
+++ b/doc/tutorial/kubernetes/manual/services/k8s.cue
@@ -84,13 +84,13 @@
 			image: X.image
 			args:  X.args
 			if len(X.envSpec) > 0 {
-				env: [ {name: k} & v for k, v in X.envSpec ]
+				env: [ for k, v in X.envSpec {v, name: k} ]
 			}
 
-			ports: [ {
+			ports: [ for k, p in X.expose.port & X.port {
 				name:          k
 				containerPort: p
-			} for k, p in X.expose.port & X.port ]
+			} ]
 		}]
 	}
 
@@ -98,7 +98,11 @@
 	spec: template: spec: {
 		if len(X.volume) > 0 {
 			volumes: [
-					v.kubernetes & {name: v.name} for v in X.volume
+				for v in X.volume {
+					v.kubernetes
+
+					name: v.name
+				}
 			]
 		}
 
@@ -106,16 +110,17 @@
 			// TODO: using conversions this would look like:
 			// volumeMounts: [ k8s.VolumeMount(v) for v in d.volume ]
 			if len(X.volume) > 0 {
-				volumeMounts: [ {
-					name:      v.name
-					mountPath: v.mountPath
-					if v.subPath != null | true {
-						subPath: v.subPath
+				volumeMounts: [
+					for v in X.volume {
+						name:      v.name
+						mountPath: v.mountPath
+						if v.subPath != null | true {
+							subPath: v.subPath
+						}
+						if v.readOnly {
+							readOnly: v.readOnly
+						}
 					}
-					if v.readOnly {
-						readOnly: v.readOnly
-					}
-				} for v in X.volume
 				]
 			}
 		}]
diff --git a/doc/tutorial/kubernetes/manual/services/kube_tool.cue b/doc/tutorial/kubernetes/manual/services/kube_tool.cue
index b41cea0..0ca9d0f 100644
--- a/doc/tutorial/kubernetes/manual/services/kube_tool.cue
+++ b/doc/tutorial/kubernetes/manual/services/kube_tool.cue
@@ -1,6 +1,6 @@
 package kube
 
-objects: [ x for v in objectSets for x in v ]
+objects: [ for v in objectSets for x in v { x } ]
 
 objectSets: [
 	kubernetes.services,
diff --git a/doc/tutorial/kubernetes/manual/services/ls_tool.cue b/doc/tutorial/kubernetes/manual/services/ls_tool.cue
index d82e2af..d5739ba 100644
--- a/doc/tutorial/kubernetes/manual/services/ls_tool.cue
+++ b/doc/tutorial/kubernetes/manual/services/ls_tool.cue
@@ -6,8 +6,10 @@
 	task: print: {
 		kind: "print"
 		Lines = [
-			"\(x.kind)  \t\(x.metadata.labels.component)   \t\(x.metadata.name)"
-			for x in objects ]
+			for x in objects {
+				"\(x.kind)  \t\(x.metadata.labels.component)   \t\(x.metadata.name)"
+			}
+		]
 		text: strings.Join(Lines, "\n")
 	}
 }
diff --git a/doc/tutorial/kubernetes/quick/services/kube.cue b/doc/tutorial/kubernetes/quick/services/kube.cue
index bf6ae39..394b15e 100644
--- a/doc/tutorial/kubernetes/quick/services/kube.cue
+++ b/doc/tutorial/kubernetes/quick/services/kube.cue
@@ -95,12 +95,14 @@
 	service: "\(k)": {
 		spec: selector: v.spec.template.metadata.labels
 
-		spec: ports: [ {
-			Port = p.containerPort // Port is an alias
-			port:       *Port | int
-			targetPort: *Port | int
-		} for c in v.spec.template.spec.containers
+		spec: ports: [
+			for c in v.spec.template.spec.containers
 			for p in c.ports
-			if p._export ]
+			if p._export {
+				Port = p.containerPort // Port is an alias
+				port:       *Port | int
+				targetPort: *Port | int
+			},
+		]
 	}
 }
diff --git a/doc/tutorial/kubernetes/quick/services/kube_tool.cue b/doc/tutorial/kubernetes/quick/services/kube_tool.cue
index 929ad34..b9c92f3 100644
--- a/doc/tutorial/kubernetes/quick/services/kube_tool.cue
+++ b/doc/tutorial/kubernetes/quick/services/kube_tool.cue
@@ -1,6 +1,6 @@
 package kube
 
-objects: [ x for v in objectSets for x in v ]
+objects: [ for v in objectSets for x in v { x } ]
 
 objectSets: [
 	service,
diff --git a/doc/tutorial/kubernetes/quick/services/ls_tool.cue b/doc/tutorial/kubernetes/quick/services/ls_tool.cue
index 1c73beb..7fc5231 100644
--- a/doc/tutorial/kubernetes/quick/services/ls_tool.cue
+++ b/doc/tutorial/kubernetes/quick/services/ls_tool.cue
@@ -9,8 +9,9 @@
 command: ls: {
 	task: print: cli.Print & {
 		text: tabwriter.Write([
-			"\(x.kind)  \t\(x.metadata.labels.component)  \t\(x.metadata.name)"
-			for x in objects
+			for x in objects {
+				"\(x.kind)  \t\(x.metadata.labels.component)  \t\(x.metadata.name)"
+			}
 		])
 	}
 
diff --git a/doc/tutorial/kubernetes/testdata/manual.out b/doc/tutorial/kubernetes/testdata/manual.out
index e13b62f..4f0b732 100644
--- a/doc/tutorial/kubernetes/testdata/manual.out
+++ b/doc/tutorial/kubernetes/testdata/manual.out
@@ -27,17 +27,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -46,13 +47,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -98,17 +100,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -117,13 +120,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -284,17 +288,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -303,13 +308,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -473,17 +479,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -492,13 +499,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -659,17 +667,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -678,13 +687,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -845,17 +855,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -864,13 +875,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -1034,17 +1046,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -1053,13 +1066,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -1220,17 +1234,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -1239,13 +1254,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -1409,17 +1425,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -1428,13 +1445,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -1480,17 +1498,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -1499,13 +1518,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -1651,17 +1671,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -1670,13 +1691,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -2000,17 +2022,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -2019,13 +2042,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -2248,17 +2272,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -2267,13 +2292,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -2471,17 +2497,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -2490,13 +2517,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -2665,17 +2693,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -2684,13 +2713,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -2877,17 +2907,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -2896,13 +2927,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -2948,17 +2980,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -2967,13 +3000,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -3255,17 +3289,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -3274,13 +3309,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -3559,17 +3595,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -3578,13 +3615,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -3842,17 +3880,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -3861,13 +3900,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -4124,17 +4164,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -4143,13 +4184,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -4410,17 +4452,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -4429,13 +4472,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -4696,17 +4740,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -4715,13 +4760,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -4929,17 +4975,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -4948,13 +4995,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -5029,17 +5077,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -5048,13 +5097,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -5316,17 +5366,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -5335,13 +5386,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -5569,17 +5621,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -5588,13 +5641,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -5836,17 +5890,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -5855,13 +5910,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -6555,17 +6611,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -6574,13 +6631,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -6626,17 +6684,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -6645,13 +6704,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -6942,17 +7002,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -6961,13 +7022,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -7152,17 +7214,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -7171,13 +7234,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {
@@ -7792,17 +7856,18 @@
                             name:  X.name
                             image: X.image
                             args:  X.args
-                            ports: [ {
+                            ports: [ for k, p in X.expose.port & X.port {
                                 name:          k
                                 containerPort: p
-                            } for k, p in X.expose.port & X.port ]
+                            } ]
                             if len(X.envSpec) > 0 {
-                                env: [ {
+                                env: [ for k, v in X.envSpec {
                                     name: k
-                                } & v for k, v in X.envSpec ]
+                                    v
+                                } ]
                             }
                             if len(X.volume) > 0 {
-                                volumeMounts: [ {
+                                volumeMounts: [ for v in X.volume {
                                     name:      v.name
                                     mountPath: v.mountPath
                                     if v.subPath != null | true {
@@ -7811,13 +7876,14 @@
                                     if v.readOnly {
                                         readOnly: v.readOnly
                                     }
-                                } for v in X.volume ]
+                                } ]
                             }
                         }]
                         if len(X.volume) > 0 {
-                            volumes: [ v.kubernetes & {
+                            volumes: [ for v in X.volume {
                                 name: v.name
-                            } for v in X.volume ]
+                                v.kubernetes
+                            } ]
                         }
                     }
                     metadata: {