k8s之cue模板
cuelang隨筆:
1、通過context.CompileString把string轉換為cue.value,或通過context.encode把go類型轉換為cue.value,或通過context.BuildInstance把instance轉換為cue.value。之后通過value.Syntax把cue.value轉換為抽象語法樹ast,通過format.Node格式化打印AST。
2、CUE 將?類型(types)?和?數據(values)?合并為一個概念:格,且CUE非常重視約束,用 約束條件(constraint)來管理值的規則或限制,像其他所有的實體一樣,它存在于結構和具體數值中間。
3、cue的值不能被改變,在 CUE 中沒有重載或重寫的概念,只能由大范圍到小范圍,且lists must have the same elements and cannot change length。
[...sting] string的數組,close,賦值之后則長度不可變; [string,...] 容量是1的數組,open,長度可變;4、Top 和 Bottom 是 CUE 的特殊類型,他們是?格?的兩端。
“_” 用來表示 top,可以匹配所有值,即?“any”;
“_|_” 用來表示 bottom,代表錯誤;
5、Definition?主要用于定義結構,也就是變量,默認情況下是封閉(Close)的,而且 CUE 導出時不會被輸出。默認情況下,struct 是開放的,而 definition 是封閉的。
6、隱式字段和值通過在前面增加下劃線定義,只可以在當前 package 進行引用
基礎知識:
CUE能夠安全地更改可修改配置中成千上萬個對象的值。
1、數據類型:int、float、bool、string、array、struct、null
2、運算符#定義變量: #abc: string
3、運算符...定義開放的結構體和數組: close的數組對象?[...string]?,open的數組對象[string,...],說明該對象可以容納多個字符串元素結構體對象;
{abc: string ??...}說明結構體可以包含未知字段;
4、運算符 | 表示兩種類型的值。a: string | int?說明變量 a 表示類型可以是字符串或者整數類型。
5、運算符?*?定義變量的默認值。通常與符號?|?配合使用,代表某種類型的默認值。a: *1 | int說明變量?a?類型為?int,默認值為?1。
6、運算符 ?: 定義可選變量,某些情況下一些變量不一定被使用,這些變量就是選填。a ?: int說明a是可選填的變量。并且,選填變量通常和條件判斷邏輯一起使用。 ?_ | _?可選變量是否被填充。
7、運算符 if...else
price: numberfeel: *"good" | stringif price > 100 {feel: "bad"}price: 2008、運算符for循環
????????8.1、切片遍歷
package cueparameter: {name: stringimage: stringenv: [...{name:string,value:string}] } output: {spec: {containers: [{name: parameter.nameimage: parameter.imageenv: [for _, v in parameter.env {name: v.namevalue: v.value},]}]} }parameter:{name: "mytest"image: "nginx:v1"env: [{name:"a",value:"b"},{name:"c",value:"d"},] }????????8.2、類型遍歷
package cue#a: {"hello": "Barcelona""nihao": "Shanghai" }for k, v in #a {"\(k)": {nameLen: len(v)value: v} }????????8.3、映射遍歷
package cueparameter: {name: stringimage: stringenv: [string]: string } output: {spec: {containers: [{name: parameter.nameimage: parameter.imageenv: [for k, v in parameter.env {name: kvalue: v},]}]} } parameter:{name: "mytest"image: "nginx:v1"env: "a": "b" }9、運算符\()?進行字符串內部計算,"\(k)"說明取k變量的實際值。
10、cue命令
// 計算、渲染結果 cue eval first.cue// 計算、渲染結果,指定只計算某個值 cue eval first.cue -e out// 導出最終渲染結果 cue export first.cue --out yaml > first.yaml總結
- 上一篇: 最近学到的「短链接」知识
- 下一篇: 再有人问你为什么MySQL用B+树做索引