package kube

// _base defines settings that apply to all cloud objects
_base: {
	name: string

	label <Key>: 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 <N>: int

	// port defines named ports that is not exposed in the service.
	port <N>: int

	arg <Key>: string
	args: [ "-\(k)=\(v)" for k, v in arg ] | [...string]

	// Environment variables
	env <Key>: string

	envSpec <Key>: {}
	envSpec: {"\(k)" value: v for k, v in env}

	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
		targetPort: int | *port
		protocol:   *"TCP" | "UDP"
	}

	kubernetes: {}
}

configMap <Name>: {
}

// define services implied by deployments
service "\(k)": {

	// Copy over all ports exposed from containers.
	port "\(Name)": {
		// Set default external port to Port.
		port:       int | *Port
		targetPort: int | *Port
		// TODO(verify): jba: I don't think you need targetPort, because it's defined above in terms of port.
		// Should probably be Port fixed.
	} for Name, Port in spec.expose.port

	// Copy over the labels
	label: spec.label

} for k, spec in deployment if len(spec.expose.port) > 0
