cue: unknown reference are incomplete

- if referring to a non-closed struct
- an incomplete error in a field comprehension
  must not drop the field, though.

This does not yet fix exporting, which may
still convert incomplete errors to actual
errors in non-concrete mode.

Change-Id: Ifc371a9ed0980488f2bdfb0ddd2dc3fbc4ba8245
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/2870
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/cue/eval.go b/cue/eval.go
index f0f5cfb..3a99033 100644
--- a/cue/eval.go
+++ b/cue/eval.go
@@ -61,8 +61,15 @@
 			return ctx.mkErr(x, "invalid subject to selector (found %v)", v.kind())
 		}
 		n := sc.lookup(ctx, x.feature)
+		if n.optional {
+			field := ctx.labelStr(x.feature)
+			return ctx.mkErr(x, codeIncomplete, "field %q is optional", field)
+		}
 		if n.val() == nil {
 			field := ctx.labelStr(x.feature)
+			if _, ok := sc.(*structLit); ok {
+				return ctx.mkErr(x, codeIncomplete, "undefined field %q", field)
+			}
 			//	m.foo undefined (type map[string]bool has no field or method foo)
 			// TODO: mention x.x in error message?
 			return ctx.mkErr(x, "undefined field %q", field)
@@ -94,8 +101,11 @@
 			s := index.strValue()
 			// TODO: must lookup
 			n := v.lookup(ctx, ctx.strLabel(s))
+			if n.optional {
+				return ctx.mkErr(x, index, codeIncomplete, "field %q is optional", s)
+			}
 			if n.val() == nil {
-				return ctx.mkErr(x, index, "undefined field %q", s)
+				return ctx.mkErr(x, index, codeIncomplete, "undefined field %q", s)
 			}
 			return n.cache
 		}
diff --git a/cue/export.go b/cue/export.go
index 8f5a9c6..5f3611f 100644
--- a/cue/export.go
+++ b/cue/export.go
@@ -36,9 +36,13 @@
 	e := exporter{ctx, m, nil, map[label]bool{}, map[string]importInfo{}}
 	top, ok := v.evalPartial(ctx).(*structLit)
 	if ok {
-		top = top.expandFields(ctx)
-		for _, a := range top.arcs {
-			e.top[a.feature] = true
+		top, err := top.expandFields(ctx)
+		if err != nil {
+			v = err
+		} else {
+			for _, a := range top.arcs {
+				e.top[a.feature] = true
+			}
 		}
 	}
 
@@ -199,6 +203,8 @@
 }
 
 func (p *exporter) expr(v value) ast.Expr {
+	// TODO: use the raw expression for convert incomplete errors downstream
+	// as well.
 	if doEval(p.mode) {
 		e := v.evalPartial(p.ctx)
 		x := p.ctx.manifest(e)
@@ -352,7 +358,11 @@
 		return bin
 
 	case *structLit:
-		return p.structure(x)
+		expr, err := p.structure(x)
+		if err != nil {
+			return p.expr(err)
+		}
+		return expr
 
 	case *fieldComprehension:
 		panic("should be handled in structLit")
@@ -510,10 +520,13 @@
 	}
 }
 
-func (p *exporter) structure(x *structLit) *ast.StructLit {
+func (p *exporter) structure(x *structLit) (ret *ast.StructLit, err *bottom) {
 	obj := &ast.StructLit{}
 	if doEval(p.mode) {
-		x = x.expandFields(p.ctx)
+		x, err = x.expandFields(p.ctx)
+		if err != nil {
+			return nil, err
+		}
 	}
 	for _, a := range x.arcs {
 		p.stack = append(p.stack, remap{
@@ -608,7 +621,7 @@
 			clauses = append(clauses, y)
 		}
 	}
-	return obj
+	return obj, nil
 }
 
 // quote quotes the given string.
diff --git a/cue/export_test.go b/cue/export_test.go
index b7b0de9..ce87d91 100644
--- a/cue/export_test.go
+++ b/cue/export_test.go
@@ -78,9 +78,9 @@
 					s: "abc"
 				}
 				b: 2.0
-				c: _|_ /* undefined field "c" */
-				d: _|_ /* undefined field "d" */
-				e: _|_ /* undefined field "t" */
+				c: a.c
+				d: a["d"]
+				e: a.t[2:3]
 			}`),
 	}, {
 		in: `{
diff --git a/cue/resolve_test.go b/cue/resolve_test.go
index d0a114c..f14e91d 100644
--- a/cue/resolve_test.go
+++ b/cue/resolve_test.go
@@ -357,7 +357,7 @@
 			g: {a: 1}["b"]
 			h: [3].b
 			`,
-		out: `<0>{obj: <1>{a: 1, b: 2}, index: 2, mulidx: 3, e: _|_(4:invalid struct index 4 (type int)), f: _|_(<2>{a: 1}.b:undefined field "b"), g: _|_(<3>{a: 1}["b"]:undefined field "b"), h: _|_([3]:invalid operation: [3].b (type list does not support selection))}`,
+		out: `<0>{obj: <1>{a: 1, b: 2}, index: 2, mulidx: 3, e: _|_(4:invalid struct index 4 (type int)), f: <2>{a: 1}.b, g: <3>{a: 1}["b"], h: _|_([3]:invalid operation: [3].b (type list does not support selection))}`,
 	}, {
 		desc: "obj unify",
 		in: `
@@ -1623,7 +1623,7 @@
 				a: 3 if a > 1
 			}
 		`,
-		out: `<0>{b: true, c: <1>{a: _|_(3:field a both generated by and referred to by field comprehension in same struct)}, a: "foo"}`,
+		out: `<0>{b: true, c: <1>{a: 3}, a: "foo"}`,
 	}, {
 		desc: "referencing field in field comprehension",
 		in: `
@@ -1897,7 +1897,11 @@
 		fib7: (fib & {n: 7}).out
 		fib12: (fib & {n: 12}).out
 		`,
-		out: `<0>{fibRec: <1>{nn: int, out: _|_((<2>.fib & <3>{n: <4>.nn}).out:undefined field "out")}, fib: <5>{n: int}, ` +
+		out: `<0>{` +
+			`fibRec: <1>{` +
+			`nn: int, ` +
+			`out: (<2>.fib & <3>{n: <4>.nn}).out}, ` +
+			`fib: <5>{n: int if (<5>.n >= 2) yield ("out"): ((<2>.fibRec & <6>{nn: (<5>.n - 2)}).out + (<2>.fibRec & <7>{nn: (<5>.n - 1)}).out),  if (<5>.n < 2) yield ("out"): <5>.n}, ` +
 			`fib2: 1, ` +
 			`fib7: 13, ` +
 			`fib12: 144}`,
diff --git a/cue/rewrite_test.go b/cue/rewrite_test.go
index 7f27066..4a6acc5 100644
--- a/cue/rewrite_test.go
+++ b/cue/rewrite_test.go
@@ -52,7 +52,14 @@
 			}
 			x = e.(*structLit)
 		}
-		x = x.expandFields(ctx)
+		var err *bottom
+		x, err = x.expandFields(ctx)
+		if err != nil {
+			if isIncomplete(err) {
+				return raw
+			}
+			return err
+		}
 		arcs := make(arcs, len(x.arcs))
 		for i, a := range x.arcs {
 			v := x.at(ctx, i)
diff --git a/cue/strip.go b/cue/strip.go
index 54a7a5a..5d82834 100644
--- a/cue/strip.go
+++ b/cue/strip.go
@@ -43,7 +43,10 @@
 			}
 			return v.evalPartial(ctx)
 		}
-		o = o.expandFields(ctx)
+		o, err := o.expandFields(ctx)
+		if err != nil {
+			return err
+		}
 		structs = append(structs, o)
 	}
 
diff --git a/cue/types.go b/cue/types.go
index c1c9e3a..c95af87 100644
--- a/cue/types.go
+++ b/cue/types.go
@@ -1049,7 +1049,10 @@
 	obj := v.eval(ctx).(*structLit)
 
 	// TODO: This is expansion appropriate?
-	obj = obj.expandFields(ctx) // expand comprehensions
+	obj, err := obj.expandFields(ctx) // expand comprehensions
+	if err != nil {
+		return structValue{}, err
+	}
 
 	// check if any fields can be omitted
 	needFilter := false
@@ -1096,7 +1099,10 @@
 	obj := v.eval(ctx).(*structLit)
 
 	// TODO: This is expansion appropriate?
-	obj = obj.expandFields(ctx)
+	obj, err := obj.expandFields(ctx)
+	if err != nil {
+		return nil, v.toErr(err)
+	}
 
 	return &Struct{v, obj}, nil
 }
diff --git a/cue/validate.go b/cue/validate.go
index 02a4984..5673524 100644
--- a/cue/validate.go
+++ b/cue/validate.go
@@ -15,14 +15,17 @@
 package cue
 
 // validate returns whether there is any error, recursively.
-func validate(ctx *context, v value) *bottom {
+func validate(ctx *context, v value) (err *bottom) {
 	eval := v.evalPartial(ctx)
 	if err, ok := eval.(*bottom); ok && err.code != codeIncomplete && err.code != codeCycle {
 		return eval.(*bottom)
 	}
 	switch x := eval.(type) {
 	case *structLit:
-		x = x.expandFields(ctx)
+		x, err = x.expandFields(ctx)
+		if err != nil {
+			return err
+		}
 		if ctx.maxDepth++; ctx.maxDepth > 20 {
 			return nil
 		}
diff --git a/cue/value.go b/cue/value.go
index cfcee96..8d58770 100644
--- a/cue/value.go
+++ b/cue/value.go
@@ -630,7 +630,7 @@
 
 	// TODO: consider hoisting the template arc to its own value.
 	arcs     []arc
-	expanded *structLit
+	expanded evaluated
 }
 
 func newStruct(src source) *structLit {
@@ -647,7 +647,10 @@
 
 // lookup returns the node for the given label f, if present, or nil otherwise.
 func (x *structLit) lookup(ctx *context, f label) arc {
-	x = x.expandFields(ctx)
+	x, err := x.expandFields(ctx)
+	if err != nil {
+		return arc{}
+	}
 	// Lookup is done by selector or index references. Either this is done on
 	// literal nodes or nodes obtained from references. In the later case,
 	// noderef will have ensured that the ancestors were evaluated.
@@ -661,8 +664,8 @@
 }
 
 func (x *structLit) iterAt(ctx *context, i int) arc {
-	x = x.expandFields(ctx)
-	if i >= len(x.arcs) {
+	x, err := x.expandFields(ctx)
+	if err != nil || i >= len(x.arcs) {
 		return arc{}
 	}
 	a := x.arcs[i]
@@ -671,7 +674,11 @@
 }
 
 func (x *structLit) at(ctx *context, i int) evaluated {
-	x = x.expandFields(ctx)
+	x, err := x.expandFields(ctx)
+	if err != nil {
+		return err
+	}
+
 	// if x.emit != nil && isBottom(x.emit) {
 	// 	return x.emit.(evaluated)
 	// }
@@ -727,13 +734,17 @@
 	return x.arcs[i].cache
 }
 
-func (x *structLit) expandFields(ctx *context) *structLit {
-	if x.expanded != nil {
-		return x.expanded
+func (x *structLit) expandFields(ctx *context) (st *structLit, err *bottom) {
+	switch v := x.expanded.(type) {
+	case nil:
+	case *structLit:
+		return v, nil
+	default:
+		return nil, x.expanded.(*bottom)
 	}
 	if x.comprehensions == nil {
 		x.expanded = x
-		return x
+		return x, nil
 	}
 
 	x.expanded = x
@@ -775,53 +786,33 @@
 		switch {
 		case result == nil:
 		case isBottom(result):
-			emit = result
+			return nil, result.(*bottom)
 		default:
 			panic("should not happen")
 		}
 	}
 
-	// new arcs may be merged with old ones, but only if the old ones were not
-	// referred to in the evaluation of any of the arcs.
-	// TODO(perf): improve big O
-	arcs := make([]arc, 0, len(x.arcs)+len(newArcs))
-	arcs = append(arcs, x.arcs...)
-	orig := x
-	x = &structLit{
+	// TODO: new arcs may be merged with old ones, but only if the old ones were
+	// not referred to in the evaluation of any of the arcs. Or should we relax
+	// the specs?
+
+	orig := *x
+	orig.comprehensions = nil
+
+	res := orig.binOp(ctx, x, opUnify, &structLit{
 		x.baseValue, // baseValue
 		emit,        // emit
 		template,    // template
 		nil,         // comprehensions
-		arcs,        // arcs
+		newArcs,     // arcs
 		nil,         // attributes
-	}
-	x.expanded = x
-	orig.expanded = x
+	})
 
-outer:
-	for _, na := range newArcs {
-		f := na.feature
-		for i, a := range x.arcs {
-			if a.feature == f {
-				if x.arcs[i].cache != nil {
-					x.arcs[i].cache = ctx.mkErr(na.v, "field %s both generated by and referred to by field comprehension in same struct",
-						ctx.labelStr(f))
-				} else {
-					x.arcs[i].v = mkBin(ctx, x.Pos(), opUnify, a.v, na.v)
-					x.arcs[i].optional = x.arcs[i].optional && na.optional
-					x.arcs[i].docs = mergeDocs(na.docs, a.docs)
-				}
-				continue outer
-			}
-		}
-		x.arcs = append(x.arcs, arc{
-			feature:  f,
-			optional: na.optional,
-			v:        na.v,
-		})
+	x.expanded = res
+	if isBottom(res) {
+		return nil, res.(*bottom)
 	}
-	sort.Stable(x)
-	return x
+	return x.expanded.(*structLit), nil
 }
 
 func (x *structLit) applyTemplate(ctx *context, i int, v evaluated) (evaluated, *ast.Field) {
@@ -1408,7 +1399,11 @@
 
 	switch src := source.(type) {
 	case *structLit:
-		src = src.expandFields(ctx)
+		var err *bottom
+		src, err = src.expandFields(ctx)
+		if err != nil {
+			return err
+		}
 		for i, a := range src.arcs {
 			key := &stringLit{
 				x.baseValue,
diff --git a/doc/tutorial/kubernetes/testdata/manual.out b/doc/tutorial/kubernetes/testdata/manual.out
index 5112aa9..8e1b30f 100644
--- a/doc/tutorial/kubernetes/testdata/manual.out
+++ b/doc/tutorial/kubernetes/testdata/manual.out
@@ -31,27 +31,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -92,27 +81,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -270,27 +248,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -450,27 +417,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -628,27 +584,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -806,27 +751,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -986,27 +920,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -1164,27 +1087,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -1344,27 +1256,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -1405,27 +1306,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -1569,27 +1459,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -1906,27 +1785,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -1989,12 +1857,7 @@
                                 name:          "grpc"
                                 containerPort: 7788
                             }]
-                            volumeMounts: [{
-                                _|_ /* non-concrete value bool */
-
-                                name:      "secret-volume"
-                                mountPath: "/etc/ssl"
-                            }]
+                            volumeMounts: [_|_ /* non-concrete value bool */]
                         }]
                         affinity: {
                             podAntiAffinity: {
@@ -2143,27 +2006,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -2229,12 +2081,7 @@
                                 name:          "https"
                                 containerPort: 7443
                             }]
-                            volumeMounts: [{
-                                _|_ /* non-concrete value bool */
-
-                                name:      "secret-volume"
-                                mountPath: "/etc/ssl"
-                            }]
+                            volumeMounts: [_|_ /* non-concrete value bool */]
                         }]
                         volumes: [{
                             name: "secret-volume"
@@ -2355,27 +2202,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -2435,12 +2271,7 @@
                                 name:          "http"
                                 containerPort: 8080
                             }]
-                            volumeMounts: [{
-                                _|_ /* non-concrete value bool */
-
-                                name:      "secret-updater"
-                                mountPath: "/etc/certs"
-                            }]
+                            volumeMounts: [_|_ /* non-concrete value bool */]
                         }]
                         volumes: [{
                             name: "secret-updater"
@@ -2541,27 +2372,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -2626,12 +2446,7 @@
                                 name:          "https"
                                 containerPort: 7788
                             }]
-                            volumeMounts: [{
-                                _|_ /* non-concrete value bool */
-
-                                name:      "secret-volume"
-                                mountPath: "/etc/ssl"
-                            }]
+                            volumeMounts: [_|_ /* non-concrete value bool */]
                         }]
                         volumes: [{
                             name: "secret-volume"
@@ -2743,27 +2558,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -2804,27 +2608,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -2837,10 +2630,7 @@
         "event-server": "events:7788"
         logdir:         "/logs"
     }
-    volume: {
-        _|_ /* incomplete */
-
-    }
+    volume: _|_ /* incomplete */
 }
 
 
@@ -2896,24 +2686,7 @@
                                 name:          "client"
                                 containerPort: 8080
                             }]
-                            volumeMounts: [{
-                                _|_ /* non-concrete value bool */
-
-                                name:      "ssd-caller"
-                                mountPath: "/logs"
-                            }, {
-                                _|_ /* non-concrete value bool */
-
-                                name:      "secret-ssh-key"
-                                mountPath: "/sslcerts"
-                                readOnly:  true
-                            }, {
-                                _|_ /* non-concrete value bool */
-
-                                name:      "secret-caller"
-                                mountPath: "/etc/certs"
-                                readOnly:  true
-                            }]
+                            volumeMounts: [_|_ /* non-concrete value bool */, _|_ /* non-concrete value bool */, _|_ /* non-concrete value bool */]
                             livenessProbe: {
                                 httpGet: {
                                     path: "/debug/health"
@@ -3084,27 +2857,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -3117,10 +2879,7 @@
         "event-server": "events:7788"
         logdir:         "/logs"
     }
-    volume: {
-        _|_ /* incomplete */
-
-    }
+    volume: _|_ /* incomplete */
 }
 
 
@@ -3176,24 +2935,7 @@
                                 name:          "client"
                                 containerPort: 8080
                             }]
-                            volumeMounts: [{
-                                _|_ /* non-concrete value bool */
-
-                                name:      "secret-ssh-key"
-                                mountPath: "/sslcerts"
-                                readOnly:  true
-                            }, {
-                                _|_ /* non-concrete value bool */
-
-                                name:      "dishwasher-disk"
-                                mountPath: "/logs"
-                            }, {
-                                _|_ /* non-concrete value bool */
-
-                                name:      "secret-dishwasher"
-                                mountPath: "/etc/certs"
-                                readOnly:  true
-                            }]
+                            volumeMounts: [_|_ /* non-concrete value bool */, _|_ /* non-concrete value bool */, _|_ /* non-concrete value bool */]
                             livenessProbe: {
                                 httpGet: {
                                     path: "/debug/health"
@@ -3361,27 +3103,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -3394,10 +3125,7 @@
         "event-server": "events:7788"
         logdir:         "/logs"
     }
-    volume: {
-        _|_ /* incomplete */
-
-    }
+    volume: _|_ /* incomplete */
 }
 
 
@@ -3453,18 +3181,7 @@
                                 name:          "client"
                                 containerPort: 8080
                             }]
-                            volumeMounts: [{
-                                _|_ /* non-concrete value bool */
-
-                                name:      "expiditer-disk"
-                                mountPath: "/logs"
-                            }, {
-                                _|_ /* non-concrete value bool */
-
-                                name:      "secret-expiditer"
-                                mountPath: "/etc/certs"
-                                readOnly:  true
-                            }]
+                            volumeMounts: [_|_ /* non-concrete value bool */, _|_ /* non-concrete value bool */]
                             livenessProbe: {
                                 httpGet: {
                                     path: "/debug/health"
@@ -3617,27 +3334,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -3650,10 +3356,7 @@
         "event-server": "events:7788"
         logdir:         "/logs"
     }
-    volume: {
-        _|_ /* incomplete */
-
-    }
+    volume: _|_ /* incomplete */
 }
 
 
@@ -3709,18 +3412,7 @@
                                 name:          "client"
                                 containerPort: 8080
                             }]
-                            volumeMounts: [{
-                                _|_ /* non-concrete value bool */
-
-                                name:      "secret-headchef"
-                                mountPath: "/sslcerts"
-                                readOnly:  true
-                            }, {
-                                _|_ /* non-concrete value bool */
-
-                                name:      "headchef-disk"
-                                mountPath: "/logs"
-                            }]
+                            volumeMounts: [_|_ /* non-concrete value bool */, _|_ /* non-concrete value bool */]
                             livenessProbe: {
                                 httpGet: {
                                     path: "/debug/health"
@@ -3872,27 +3564,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -3905,10 +3586,7 @@
         "event-server": "events:7788"
         logdir:         "/logs"
     }
-    volume: {
-        _|_ /* incomplete */
-
-    }
+    volume: _|_ /* incomplete */
 }
 
 
@@ -3964,18 +3642,7 @@
                                 name:          "client"
                                 containerPort: 8080
                             }]
-                            volumeMounts: [{
-                                _|_ /* non-concrete value bool */
-
-                                name:      "secret-kitchen"
-                                mountPath: "/etc/certs"
-                                readOnly:  true
-                            }, {
-                                _|_ /* non-concrete value bool */
-
-                                name:      "linecook-disk"
-                                mountPath: "/logs"
-                            }]
+                            volumeMounts: [_|_ /* non-concrete value bool */, _|_ /* non-concrete value bool */]
                             livenessProbe: {
                                 httpGet: {
                                     path: "/debug/health"
@@ -4131,27 +3798,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -4164,10 +3820,7 @@
         "event-server": "events:7788"
         logdir:         "/logs"
     }
-    volume: {
-        _|_ /* incomplete */
-
-    }
+    volume: _|_ /* incomplete */
 }
 
 
@@ -4223,18 +3876,7 @@
                                 name:          "client"
                                 containerPort: 8080
                             }]
-                            volumeMounts: [{
-                                _|_ /* non-concrete value bool */
-
-                                name:      "secret-ssh-key"
-                                mountPath: "/etc/certs"
-                                readOnly:  true
-                            }, {
-                                _|_ /* non-concrete value bool */
-
-                                name:      "pastrychef-disk"
-                                mountPath: "/logs"
-                            }]
+                            volumeMounts: [_|_ /* non-concrete value bool */, _|_ /* non-concrete value bool */]
                             livenessProbe: {
                                 httpGet: {
                                     path: "/debug/health"
@@ -4390,27 +4032,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -4423,10 +4054,7 @@
         "event-server": "events:7788"
         logdir:         "/logs"
     }
-    volume: {
-        _|_ /* incomplete */
-
-    }
+    volume: _|_ /* incomplete */
 }
 
 
@@ -4598,27 +4226,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -4631,10 +4248,7 @@
         "event-server": "events:7788"
         logdir:         "/logs"
     }
-    volume: {
-        _|_ /* incomplete */
-
-    }
+    volume: _|_ /* incomplete */
 }
 
 
@@ -4671,27 +4285,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -4762,17 +4365,7 @@
                                 name:          "alertmanager"
                                 containerPort: 9093
                             }]
-                            volumeMounts: [{
-                                _|_ /* non-concrete value bool */
-
-                                name:      "alertmanager"
-                                mountPath: "/alertmanager"
-                            }, {
-                                _|_ /* non-concrete value bool */
-
-                                name:      "config-volume"
-                                mountPath: "/etc/alertmanager"
-                            }]
+                            volumeMounts: [_|_ /* non-concrete value bool */, _|_ /* non-concrete value bool */]
                         }]
                         volumes: [{
                             name: "alertmanager"
@@ -4947,27 +4540,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -5040,12 +4622,7 @@
                                 name:          "web"
                                 containerPort: 8080
                             }]
-                            volumeMounts: [{
-                                _|_ /* non-concrete value bool */
-
-                                name:      "grafana-volume"
-                                mountPath: "/var/lib/grafana"
-                            }]
+                            volumeMounts: [_|_ /* non-concrete value bool */]
                             resources: {
                                 requests: {
                                     cpu:    "100m"
@@ -5188,27 +4765,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -5277,19 +4843,7 @@
                                 containerPort: 9100
                                 hostPort:      9100
                             }]
-                            volumeMounts: [{
-                                _|_ /* non-concrete value bool */
-
-                                name:      "proc"
-                                mountPath: "/host/proc"
-                                readOnly:  true
-                            }, {
-                                _|_ /* non-concrete value bool */
-
-                                name:      "sys"
-                                mountPath: "/host/sys"
-                                readOnly:  true
-                            }]
+                            volumeMounts: [_|_ /* non-concrete value bool */, _|_ /* non-concrete value bool */]
                             resources: {
                                 requests: {
                                     cpu:    "100m"
@@ -5445,27 +4999,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -5537,12 +5080,7 @@
                                 name:          "web"
                                 containerPort: 9090
                             }]
-                            volumeMounts: [{
-                                _|_ /* non-concrete value bool */
-
-                                name:      "config-volume"
-                                mountPath: "/etc/prometheus"
-                            }]
+                            volumeMounts: [_|_ /* non-concrete value bool */]
                         }]
                         volumes: [{
                             name: "config-volume"
@@ -6152,27 +5690,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -6213,27 +5740,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -6293,12 +5809,7 @@
                                 name:          "client"
                                 containerPort: 4180
                             }]
-                            volumeMounts: [{
-                                _|_ /* non-concrete value bool */
-
-                                name:      "config-volume"
-                                mountPath: "/etc/authproxy"
-                            }]
+                            volumeMounts: [_|_ /* non-concrete value bool */]
                         }]
                         volumes: [{
                             name: "config-volume"
@@ -6519,27 +6030,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -6605,12 +6105,7 @@
                                 name:          "https"
                                 containerPort: 7443
                             }]
-                            volumeMounts: [{
-                                _|_ /* non-concrete value bool */
-
-                                name:      "secret-volume"
-                                mountPath: "/etc/ssl"
-                            }]
+                            volumeMounts: [_|_ /* non-concrete value bool */]
                         }]
                         volumes: [{
                             name: "secret-volume"
@@ -6720,27 +6215,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }
@@ -6809,12 +6293,7 @@
                                 name:          "https"
                                 containerPort: 443
                             }]
-                            volumeMounts: [{
-                                _|_ /* non-concrete value bool */
-
-                                name:      "secret-volume"
-                                mountPath: "/etc/ssl"
-                            }, {
+                            volumeMounts: [_|_ /* non-concrete value bool */, {
                                 name:      "config-volume"
                                 mountPath: "/etc/nginx/nginx.conf"
                                 subPath:   "nginx.conf"
@@ -7350,27 +6829,16 @@
         kubernetes: {
             spec: {
                 template: {
-                    spec: {
-                        _|_ /* undefined field "volume" */
-
-                        containers: [{
-                            _|_ /* undefined field "volume" */
-
-                            name:  _|_ /* undefined field "name" */
-                            image: _|_ /* undefined field "image" */
-                            args:  _|_ /* undefined field "args" */
-                            ports: _|_ /* undefined field "expose" */
-                        }]
-                    }
+                    spec: _|_ /* undefined field "volume" */
                     metadata: {
-                        labels: _|_ /* undefined field "label" */
+                        labels: label
                     }
                 }
             }
             metadata: {
-                name: _|_ /* undefined field "name" */
+                name: name
                 labels: {
-                    component: _|_ /* undefined field "label" */
+                    component: label.component
                 }
             }
         }