Skip to content
Kubernetes ICL templates
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
latest
src
tests
v1.5.0
v1.5.1
v1.5.2
v1.5.3
v1.5.4
v1.5.6
v1.6.0
v1.6.1
v1.6.2
v1.6.3
v1.6.4
v1.6.5
v1.6.6
v1.6.7
v1.6.8
v1.7.0
v1.7.1
v1.7.2
v1.7.3
v1.7.4
v1.7.5
.gitignore
.npmignore
README.md
package.json
tsconfig.json

README.md

Kubernetes ICL Templates

While rewriting our k8s YAML files in ICL, we wanted to make it easier for everyone to write self-documented configuration files, files that exposes all the expected fields, what are they for ? and make it crystal clear for everyone what we are doing in our configuration files. Thanks to the work already done by @garethr we could write easily this simple program that generates k8s ICL templates right from kurberntes json schemas

Usage

All k8s ICL templates are written as mixins, this is for 2 main reasons :

  • Readability : all the expected parameters are available and documented
  • Easy to use : you just have to call the mixins and apply the necessary arguments and it's done.

Here is an example of the "Deployment" template

take deploymentstatus,
     deploymentspec,
     ../v1/objectmeta

/**Deployment enables declarative updates for Pods and ReplicaSets.*/
::orch "kubernetes" "Deployment" as Deployment {
     /**Kind is a string value representing the REST resource this object represents. Servers may
      infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.
      More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds*/
     kind = "Deployment",
     /**APIVersion defines the versioned schema of this representation of an object. Servers should
      convert recognized schemas to the latest internal value, and may reject unrecognized values.
      More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources*/
     apiVersion = "v1beta1",
     /**Most recently observed status of the Deployment.*/
     DeploymentStatus "status" {}
     /**Specification of the desired behavior of the Deployment.*/
     DeploymentSpec "spec" {}
     /**Standard object metadata.*/
     ObjectMeta "metadata" {}
}

And here is how you can call it

take github.com/k8s-icl/latest/v1beta1/deployment,
	     github.com/k8s-icl/latest/v1/containerport,
	     github.com/k8s-icl/latest/v1/container

::variable "container-port" apply ContainerPort @@name="nginx", @@containerPort="8080"
::variable "container-ports" [variable.container-port]
::variable "container" apply Container @@image="nginx:1.13.0", @@name="nginx", @@ports=variable.container-ports
::variable "container-list" [variable.container]
::variable "pod-spec" apply PodSpec @@containers=variable.container-list
::variable "labels" table "app" = "nginx"
::variable "pod-metadata" apply ObjectMeta @@labels=variable.labels
::variable "template" apply PodTemplateSpec @@spec=variable.pod-spec, @@metadata=variable.pod-metadata
::variable "spec" apply DeploymentSpec @@replicas=5, @@template=variable.template
::variable "metadata" apply ObjectMeta @@name = "nginx"

_ "_" apply Deployment @@metadata=variable.metadata, @@spec=variable.spec

Generating the templates yourself

You can use the already generated templates directly, but if you want to regenerate them, you just have to perform a npm start, the program will fetch all the kubernetes schemas for the different versions and regenerate ICLs templates.

You can’t perform that action at this time.