blob: 6be62766a6d5cb8d1889636a35a8d7838610eb33 [file] [log] [blame]
package kube
service <Name>: {
apiVersion: "v1"
kind: "Service"
metadata: {
name: Name
labels: {
app: Name // by convention
domain: "prod" // always the same in the given files
component: _component // varies per directory
}
}
spec: {
// Any port has the following properties.
ports: [...{
port: int
protocol: *"TCP" | "UDP" // from the Kubernetes definition
name: string | *"client"
}]
selector: metadata.labels // we want those to be the same
}
}
deployment <Name>: {
apiVersion: "extensions/v1beta1"
kind: "Deployment"
metadata name: Name
spec: {
// 1 is the default, but we allow any number
replicas: *1 | int
template: {
metadata labels: {
app: Name
domain: "prod"
component: _component
}
// we always have one namesake container
spec containers: [{name: Name}]
}
}
}
_component: string
daemonSet <Name>: _spec & {
apiVersion: "extensions/v1beta1"
kind: "DaemonSet"
_name: Name
}
statefulSet <Name>: _spec & {
apiVersion: "apps/v1beta1"
kind: "StatefulSet"
_name: Name
}
deployment <Name>: _spec & {
apiVersion: "extensions/v1beta1"
kind: "Deployment"
_name: Name
spec replicas: *1 | int
}
configMap <Name>: {
metadata name: Name
metadata labels component: _component
}
_spec: {
_name: string
metadata name: _name
metadata labels component: _component
spec template: {
metadata labels: {
app: _name
component: _component
domain: "prod"
}
spec containers: [{name: _name}]
}
}
// Define the _export option and set the default to true
// for all ports defined in all containers.
_spec spec template spec containers: [...{
ports: [...{
_export: *true | false // include the port in the service
}]
}]
service "\(k)": {
spec selector: v.spec.template.metadata.labels
spec ports: [ {
Port = p.containerPort // Port is an alias
port: *Port | int
targetPort: *Port | int
} for c in v.spec.template.spec.containers
for p in c.ports
if p._export ]
} for x in [deployment, daemonSet, statefulSet] for k, v in x