前两天Chon为我推荐了Pkl,Apple的开源项目,用来写配置文件的编程语言。这是它的主页:https://pkl-lang.org/index.html
name = "Swallow"
job {
title = "Sr. Nest Maker"
company = "Nests R Us"
yearsOfExperience = 2
}
这里还有实现Kubernetes资源的例子:https://github.com/apple/pkl-k8s-examples。
import "@k8s/K8sResource.pkl"
import "@k8s/api/apps/v1/Deployment.pkl"
import "@k8s/api/core/v1/Service.pkl"
resources: Listing<K8sResource> = new {
new Service {
metadata {
name = "frontend"
labels {
["app"] = "guestbook"
["tier"] = "frontend"
}
}
spec {
type = "NodePort"
ports {
new {
port = 80
}
}
selector {
["app"] = "guestbook"
["tier"] = "frontend"
}
}
}
new Deployment {
metadata {
name = "frontend"
}
spec {
selector {
matchLabels {
["app"] = "guestbook"
["tier"] = "frontend"
}
}
replicas = 3
template {
metadata {
labels {
["app"] = "guestbook"
["tier"] = "frontend"
}
}
spec {
containers {
new {
name = "php-redis"
image = "gcr.io/google-samples/gb-frontend:v4"
resources {
requests {
["cpu"] = "100m"
["memory"] = "100Mi"
}
}
env {
new {
name = "GET_HOSTS_FROM"
value = "dns"
}
}
ports {
new {
containerPort = 80
}
}
}
}
}
}
}
}
}
output {
value = resources
renderer = (K8sResource.output.renderer as YamlRenderer) {
isStream = true
}
}
Pkl本身就是可编程的语言,而不仅仅是数据,所以这个配置文件就比YAML灵活很多。以前我们把Kubernetes资源转换成Helm Charts的时候需要写很多模版标签,非常的难用。以后应该转换成Pkl。