cue语言(个人笔记)

cue为使用golang编写的一款配置语言。

安装

mac用户执行:brew install cue-lang/tap/cue,其他操作系统用户可以直接使用源码安装:go install cuelang.org/go/cmd/cue@latest

命令行使用

创建如下文件first.cue

1
2
3
4
5
6
7
8
9
a: 1.5
a: float
b: 1
b: int
d: [1, 2, 3]
g: {
h: "abc"
}
e: string
  • cue fmt first.cue:对代码进行格式化
  • cue vet first.cue:校验语法的正确性
  • cue eval first.cue:获得渲染结果
  • cue export first.cue:将渲染结果以json格式的形式导出,如果指定参数–out yaml,则可以以yaml方式导出。如果要导出某个变量,可以使用-e参数来指定变量。

语法

基础数据类型

支持的数据类型包括:float、int、string、array、bool、struct、null、自定义数据类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// float
a: 1.5

// int
b: 1

// string
c: "blahblahblah"

// array
d: [1, 2, 3, 1, 2, 3, 1, 2, 3]

// bool
e: true

// struct
f: {
a: 1.5
b: 1
d: [1, 2, 3, 1, 2, 3, 1, 2, 3]
g: {
h: "abc"
}
}

// null
j: null

// 表示两种类型的值,即可以是string,也可以是int
h: string | int

// 表示k的默认值为1,且类型为int
k: *1 | int

// 自定义数据类型
#abc: string

更复杂的自定义数据类型如下:

1
2
3
4
5
6
7
8
#abc: {
x: int
y: string
z: {
a: float
b: bool
}
}

定义cue模板

文件deployment.cue定义如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// 自定义结构体类型
#parameter: {
name: string
image: string
}

template: {
apiVersion: "apps/v1"
kind: "Deployment"
spec: {
selector: matchLabels: {
"app.oam.dev/component": parameter.name
}
template: {
metadata: labels: {
"app.oam.dev/component": parameter.name
}
spec: {
containers: [{
name: parameter.name // 引用自定义结构体变量parameter
image: parameter.image
}]
}}}
}

parameter:{
name: "mytest"
image: "nginx:v1"
}

执行 cue export deployment.cue -e template –out yaml 可获取到渲染结果。

引用