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
}
}
}