| 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 |
| } |
| } |