cuelang.org/go@v0.10.1/cue/testdata/comprehensions/nested.txtar (about)

     1  -- in.cue --
     2  package kube
     3  
     4  service: "node-exporter": {
     5  	spec: {
     6  		ports: [{
     7  			name:     "metrics"
     8  			port:     9100
     9  			protocol: "TCP"
    10  		}]
    11  	}
    12  }
    13  deployment: "node-exporter": {
    14  	spec: template: {
    15  		spec: {
    16  			containers: [{
    17  				ports: [{
    18  					containerPort: 9100
    19  					name:          "scrape"
    20  				}]
    21  			}]
    22  		}
    23  	}
    24  }
    25  service: [ID=string]: {
    26  	spec: {
    27  		ports: [...{
    28  			port:     int
    29  			protocol: *"TCP" | "UDP"
    30  			name:     string | *"client"
    31  		}]
    32  	}
    33  }
    34  deployment: [ID=string]: {}
    35  deployment: [ID=_]: _spec & {}
    36  _spec: {
    37  	_name: string
    38  	spec: template: {
    39  		spec: containers: [{name: _name}]
    40  	}
    41  }
    42  _spec: spec: template: spec: containers: [...{
    43  	ports: [...{
    44  		_export: *true | false // include the port in the service
    45  	}]
    46  }]
    47  for k, v in deployment {
    48  	service: "\(k)": {
    49  		spec: selector: v.spec.template.metadata.labels
    50  		spec: ports: [
    51  			for c in v.spec.template.spec.containers
    52  			for p in c.ports
    53  			if p._export {
    54  				let Port = p.containerPort // Port is an alias
    55  				port:       *Port | int
    56  				targetPort: *Port | int
    57  			},
    58  		]
    59  	}
    60  }
    61  -- out/eval/stats --
    62  Leaks:  0
    63  Freed:  45
    64  Reused: 26
    65  Allocs: 19
    66  Retain: 33
    67  
    68  Unifications: 35
    69  Conjuncts:    95
    70  Disjuncts:    75
    71  -- out/eval --
    72  (struct){
    73    service: (struct){
    74      "node-exporter": (struct){
    75        spec: (struct){
    76          ports: (#list){
    77            0: (struct){
    78              name: (string){ "metrics" }
    79              port: (int){ 9100 }
    80              protocol: (string){ "TCP" }
    81              let Port#1 = (int){ 9100 }
    82              targetPort: (int){ |(*(int){ 9100 }, (int){ int }) }
    83            }
    84          }
    85          selector: (_|_){
    86            // [incomplete] service."node-exporter".spec.selector: undefined field: metadata:
    87            //     ./in.cue:48:35
    88          }
    89        }
    90      }
    91    }
    92    deployment: (struct){
    93      "node-exporter": (struct){
    94        spec: (struct){
    95          template: (struct){
    96            spec: (struct){
    97              containers: (#list){
    98                0: (struct){
    99                  ports: (#list){
   100                    0: (struct){
   101                      containerPort: (int){ 9100 }
   102                      name: (string){ "scrape" }
   103                      _export(:kube): (bool){ |(*(bool){ true }, (bool){ false }) }
   104                    }
   105                  }
   106                  name: (string){ string }
   107                }
   108              }
   109            }
   110          }
   111        }
   112        _name(:kube): (string){ string }
   113      }
   114    }
   115    _spec(:kube): (struct){
   116      _name(:kube): (string){ string }
   117      spec: (struct){
   118        template: (struct){
   119          spec: (struct){
   120            containers: (#list){
   121              0: (struct){
   122                name: (string){ string }
   123                ports: (list){
   124                }
   125              }
   126            }
   127          }
   128        }
   129      }
   130    }
   131  }
   132  -- out/compile --
   133  --- in.cue
   134  {
   135    service: {
   136      "node-exporter": {
   137        spec: {
   138          ports: [
   139            {
   140              name: "metrics"
   141              port: 9100
   142              protocol: "TCP"
   143            },
   144          ]
   145        }
   146      }
   147    }
   148    deployment: {
   149      "node-exporter": {
   150        spec: {
   151          template: {
   152            spec: {
   153              containers: [
   154                {
   155                  ports: [
   156                    {
   157                      containerPort: 9100
   158                      name: "scrape"
   159                    },
   160                  ]
   161                },
   162              ]
   163            }
   164          }
   165        }
   166      }
   167    }
   168    service: {
   169      [string]: {
   170        spec: {
   171          ports: [
   172            ...{
   173              port: int
   174              protocol: (*"TCP"|"UDP")
   175              name: (string|*"client")
   176            },
   177          ]
   178        }
   179      }
   180    }
   181    deployment: {
   182      [string]: {}
   183    }
   184    deployment: {
   185      [_]: (〈1;_spec〉 & {})
   186    }
   187    _spec: {
   188      _name: string
   189      spec: {
   190        template: {
   191          spec: {
   192            containers: [
   193              {
   194                name: 〈5;_name〉
   195              },
   196            ]
   197          }
   198        }
   199      }
   200    }
   201    _spec: {
   202      spec: {
   203        template: {
   204          spec: {
   205            containers: [
   206              ...{
   207                ports: [
   208                  ...{
   209                    _export: (*true|false)
   210                  },
   211                ]
   212              },
   213            ]
   214          }
   215        }
   216      }
   217    }
   218    for k, v in 〈0;deployment〉 {
   219      service: {
   220        "\(〈2;k〉)": {
   221          spec: {
   222            selector: 〈4;v〉.spec.template.metadata.labels
   223          }
   224          spec: {
   225            ports: [
   226              for _, c in 〈5;v〉.spec.template.spec.containers for _, p in 〈0;c〉.ports if 〈0;p〉._export {
   227                let Port#1 = 〈1;p〉.containerPort
   228                port: (*〈0;let Port#1〉|int)
   229                targetPort: (*〈0;let Port#1〉|int)
   230              },
   231            ]
   232          }
   233        }
   234      }
   235    }
   236  }