diff --git a/air.toml b/air.toml new file mode 100644 index 0000000..af2805a --- /dev/null +++ b/air.toml @@ -0,0 +1,8 @@ +# air.toml +root = "." # 监听的项目目录 + +[build] +cmd = "echo 'File changed, running KCL...' && kcl main.k" # 自定义命令 +bin = "" # 不生成二进制文件 +exclude_dir = ["vendor", "node_modules"] # 排除某些目录 +include_ext = ["k"] # 监听 `.k` 文件 diff --git a/base/deploy.k b/base/deploy.k index e6efce7..a8f58e3 100644 --- a/base/deploy.k +++ b/base/deploy.k @@ -1,22 +1,44 @@ import k8s.api.apps.v1 as appsv1 +import k8s.api.core.v1 as corev1 -a = appsv1.Deployment { - apiVersion = "apps/v1" - kind = "Deployment" - metadata = { - name = "nginx" - labels.app = "nginx" +schema App: + """App schema""" + name: str + replicas: int = 1 + image: str + port: int + +appRender = lambda a: App { + deployment = appsv1.Deployment { + apiVersion = "apps/v1" + kind = "Deployment" + metadata = { + name = a.name + labels.app = a.name + } + spec = { + replicas = a.replicas + selector.matchLabels = metadata.labels + template.metadata.labels = metadata.labels + template.spec.containers = [ + { + name = a.name + image = a.image + ports = [{containerPort = a.port}] + } + ] + } } - spec = { - replicas = 3 - selector.matchLabels = metadata.labels - template.metadata.labels = metadata.labels - template.spec.containers = [ - { - name = metadata.name - image = "nginx:1.14.2" - ports = [{ containerPort = 80 }] - } - ] + service = corev1.Service { + apiVersion = "v1" + kind = "Service" + metadata = { + name = a.name + } + spec = { + selector.app = a.name + ports = [{port = a.port, targetPort = a.port}] + } } + [deployment, service] } diff --git a/main.k b/main.k index fa7048e..2a5d391 100644 --- a/main.k +++ b/main.k @@ -1 +1,20 @@ -The_first_kcl_program = 'Hello World!' \ No newline at end of file +import base + +import manifests + +base.App { + name = "myapp" + replicas = 2 + image = "myimage" + port = 8080 +} +base.App { + name = "myapp122" + replicas = 2 + image = "myimage" + port = 8080 +} + + +# base.appRender(a) +manifests.yaml_stream([base.appRender(a) for a in base.App.instances()]) diff --git a/tmp/build-errors.log b/tmp/build-errors.log new file mode 100644 index 0000000..cba9c83 --- /dev/null +++ b/tmp/build-errors.log @@ -0,0 +1 @@ +exit status 1exit status 2exit status 1exit status 1exit status 1exit status 1 \ No newline at end of file