manifests
yaml_stream
yaml_stream(values: [any], opts: {str:} = {
sort_keys = False
ignore_private = True
ignore_none = False
sep = "---"
})
这个函数的功能是将 KCL 对象列表序列化为带 ---
分隔符的样式 YAML 输出,它具有两个参数:
values
- 一个 KCL 对象列表opts
- YAML 序列化选项sort_keys
:是否按属性名称的字典序对序列化结果进行排序(默认为False
)。ignore_private
:是否忽略名称以_
开头的属性序列化输出(默认为True
)。ignore_none
:是否忽略值为None
的属性(默认为False
)。sep
:在多个 YAML 文档之间选择怎样的分隔符(默认为"---"
)。
下面我们通过一个例子来说明:
# Use the `import` keyword to import the `manifests` module.
import manifests
# The schema `Deployment` definition.
schema Deployment:
apiVersion: str = "v1"
kind: str = "Deployment"
metadata: {str:} = {
name = "deploy"
}
spec: {str:} = {
replica = 2
}
# The schema `Service` definition.
schema Service:
apiVersion: str = "v1"
kind: str = "Service"
metadata: {str:} = {
name = "svc"
}
spec: {str:} = {}
# Define two `Deployment` resources.
deployments = [Deployment {}, Deployment {}]
# Define two `Service` resources.
services = [Service {}, Service {}]
# Put them into a KCL list and call the `manifests.yaml_stream` function.
manifests.yaml_stream(deployments + services)
首先我们通过 import
关键字导入 manifests
模块并定义 2 个 Deployment 以及 2 个 Service 资源,当我们想以 YAML stream 并以 ---
作为分隔符的格式依次输出这 4 个资源时,我们可以将它们合并为一个 KCL 列表并作为 manifests.yaml_stream
函数的 values
形参进行传入 (如无特殊需求,opts 参数一般使用默认值即可),最终得到 YAML 输出为:
apiVersion: v1
kind: Deployment
metadata:
name: deploy
spec:
replica: 2
---
apiVersion: v1
kind: Deployment
metadata:
name: deploy
spec:
replica: 2
---
apiVersion: v1
kind: Service
metadata:
name: svc
---
apiVersion: v1
kind: Service
metadata:
name: svc