package kube // _base defines settings that apply to all cloud objects _base: { name: string label: [string]: string // k8s is a set of Kubernetes-specific settings that will be merged in at // the top-level. The allowed fields are type specfic. kubernetes: {} } deployment: [Name=_]: _base & { // Allow any string, but take Name by default. name: string | *Name kind: *"deployment" | "stateful" | "daemon" replicas: int | *1 image: string // expose port defines named ports that is exposed in the service expose: port: [string]: int // port defines named ports that is not exposed in the service. port: [string]: int arg: [string]: string args: *[for k, v in arg {"-\(k)=\(v)"}] | [...string] // Environment variables env: [string]: string envSpec: [string]: {} envSpec: { for k, v in env { "\(k)": value: v } } volume: [Name=_]: { name: string | *Name mountPath: string subPath: string | *null readOnly: *false | true kubernetes: {} } } service: [Name=_]: _base & { name: *Name | string port: [Name=_]: { name: string | *Name port: int protocol: *"TCP" | "UDP" } kubernetes: {} } configMap: [string]: { } // define services implied by deployments for k, spec in deployment if len(spec.expose.port) > 0 { service: "\(k)": { // Copy over all ports exposed from containers. for Name, Port in spec.expose.port { port: "\(Name)": { // Set default external port to Port. targetPort must be // the respective containerPort (Port) if it differs from port. port: int | *Port if port != Port { targetPort: Port } } } // Copy over the labels label: spec.label } }