package main

// Deployment template containing all the common boilerplate shared by
// deployments of this application.
#Deployment: {
	// Name of the deployment. This will be used to label resources automatically
	// and generate selectors.
	name: string

	// Container image.
	image: string

	// 80 is the default port.
	port: *80 | int

	// 1 is the default, but we allow any number.
	replicas: *1 | int

	// Deployment manifest. Uses the name, image, port and replicas above to
	// generate the resource manifest.
	manifest: {
		apiVersion: "apps/v1"
		kind:       "Deployment"
		metadata: {
			"name": name
			labels: app: name
		}
		spec: {
			"replicas": replicas
			selector: matchLabels: app: name
			template: {
				metadata: labels: app: name
				spec: containers: [{
					"name":  name
					"image": image
					ports: [{
						containerPort: port
					}]
				}]
			}
		}
	}
}