Marcel van Lohuizen | 02173f8 | 2018-12-20 13:27:07 +0100 | [diff] [blame] | 1 | package kube |
| 2 | |
| 3 | // _base defines settings that apply to all cloud objects |
| 4 | _base: { |
| 5 | name: string |
| 6 | |
Marcel van Lohuizen | 23623fa | 2019-10-23 19:28:59 +0200 | [diff] [blame] | 7 | label: [string]: string |
Marcel van Lohuizen | 02173f8 | 2018-12-20 13:27:07 +0100 | [diff] [blame] | 8 | |
| 9 | // k8s is a set of Kubernetes-specific settings that will be merged in at |
| 10 | // the top-level. The allowed fields are type specfic. |
| 11 | kubernetes: {} |
| 12 | } |
| 13 | |
Marcel van Lohuizen | 23623fa | 2019-10-23 19:28:59 +0200 | [diff] [blame] | 14 | deployment: [Name=_]: _base & { |
Marcel van Lohuizen | c9b3cb2 | 2019-01-30 11:32:41 +0100 | [diff] [blame] | 15 | // Allow any string, but take Name by default. |
| 16 | name: string | *Name |
Marcel van Lohuizen | e5d8d09 | 2019-01-30 15:58:07 +0100 | [diff] [blame] | 17 | kind: *"deployment" | "stateful" | "daemon" |
Marcel van Lohuizen | c9b3cb2 | 2019-01-30 11:32:41 +0100 | [diff] [blame] | 18 | replicas: int | *1 |
Marcel van Lohuizen | 02173f8 | 2018-12-20 13:27:07 +0100 | [diff] [blame] | 19 | |
| 20 | image: string |
| 21 | |
| 22 | // expose port defines named ports that is exposed in the service |
Marcel van Lohuizen | 23623fa | 2019-10-23 19:28:59 +0200 | [diff] [blame] | 23 | expose: port: [string]: int |
Marcel van Lohuizen | 02173f8 | 2018-12-20 13:27:07 +0100 | [diff] [blame] | 24 | |
| 25 | // port defines named ports that is not exposed in the service. |
Marcel van Lohuizen | 23623fa | 2019-10-23 19:28:59 +0200 | [diff] [blame] | 26 | port: [string]: int |
Marcel van Lohuizen | 02173f8 | 2018-12-20 13:27:07 +0100 | [diff] [blame] | 27 | |
Marcel van Lohuizen | 23623fa | 2019-10-23 19:28:59 +0200 | [diff] [blame] | 28 | arg: [string]: string |
Marcel van Lohuizen | 1370f0a | 2020-04-15 11:27:13 +0200 | [diff] [blame^] | 29 | args: [ for k, v in arg { "-\(k)=\(v)" } ] | [...string] |
Marcel van Lohuizen | 02173f8 | 2018-12-20 13:27:07 +0100 | [diff] [blame] | 30 | |
| 31 | // Environment variables |
Marcel van Lohuizen | 23623fa | 2019-10-23 19:28:59 +0200 | [diff] [blame] | 32 | env: [string]: string |
Marcel van Lohuizen | 02173f8 | 2018-12-20 13:27:07 +0100 | [diff] [blame] | 33 | |
Marcel van Lohuizen | 23623fa | 2019-10-23 19:28:59 +0200 | [diff] [blame] | 34 | envSpec: [string]: {} |
Marcel van Lohuizen | 9af9a90 | 2019-09-07 20:30:10 +0200 | [diff] [blame] | 35 | envSpec: { |
| 36 | for k, v in env { |
Marcel van Lohuizen | 23623fa | 2019-10-23 19:28:59 +0200 | [diff] [blame] | 37 | "\(k)": value: v |
Marcel van Lohuizen | 9af9a90 | 2019-09-07 20:30:10 +0200 | [diff] [blame] | 38 | } |
| 39 | } |
Marcel van Lohuizen | 02173f8 | 2018-12-20 13:27:07 +0100 | [diff] [blame] | 40 | |
Marcel van Lohuizen | 23623fa | 2019-10-23 19:28:59 +0200 | [diff] [blame] | 41 | volume: [Name=_]: { |
Marcel van Lohuizen | c9b3cb2 | 2019-01-30 11:32:41 +0100 | [diff] [blame] | 42 | name: string | *Name |
Marcel van Lohuizen | 02173f8 | 2018-12-20 13:27:07 +0100 | [diff] [blame] | 43 | mountPath: string |
Marcel van Lohuizen | c9b3cb2 | 2019-01-30 11:32:41 +0100 | [diff] [blame] | 44 | subPath: string | *null |
| 45 | readOnly: *false | true |
Marcel van Lohuizen | 02173f8 | 2018-12-20 13:27:07 +0100 | [diff] [blame] | 46 | kubernetes: {} |
| 47 | } |
| 48 | } |
| 49 | |
Marcel van Lohuizen | 23623fa | 2019-10-23 19:28:59 +0200 | [diff] [blame] | 50 | service: [Name=_]: _base & { |
Marcel van Lohuizen | e5d8d09 | 2019-01-30 15:58:07 +0100 | [diff] [blame] | 51 | name: *Name | string |
Marcel van Lohuizen | 02173f8 | 2018-12-20 13:27:07 +0100 | [diff] [blame] | 52 | |
Marcel van Lohuizen | 23623fa | 2019-10-23 19:28:59 +0200 | [diff] [blame] | 53 | port: [Name=_]: { |
Marcel van Lohuizen | c9b3cb2 | 2019-01-30 11:32:41 +0100 | [diff] [blame] | 54 | name: string | *Name |
Marcel van Lohuizen | 02173f8 | 2018-12-20 13:27:07 +0100 | [diff] [blame] | 55 | |
Marcel van Lohuizen | e5d8d09 | 2019-01-30 15:58:07 +0100 | [diff] [blame] | 56 | port: int |
| 57 | protocol: *"TCP" | "UDP" |
Marcel van Lohuizen | 02173f8 | 2018-12-20 13:27:07 +0100 | [diff] [blame] | 58 | } |
| 59 | |
| 60 | kubernetes: {} |
| 61 | } |
| 62 | |
Marcel van Lohuizen | 23623fa | 2019-10-23 19:28:59 +0200 | [diff] [blame] | 63 | configMap: [string]: { |
Marcel van Lohuizen | 02173f8 | 2018-12-20 13:27:07 +0100 | [diff] [blame] | 64 | } |
| 65 | |
| 66 | // define services implied by deployments |
Marcel van Lohuizen | 9af9a90 | 2019-09-07 20:30:10 +0200 | [diff] [blame] | 67 | for k, spec in deployment if len(spec.expose.port) > 0 { |
Marcel van Lohuizen | 23623fa | 2019-10-23 19:28:59 +0200 | [diff] [blame] | 68 | service: "\(k)": { |
Marcel van Lohuizen | 02173f8 | 2018-12-20 13:27:07 +0100 | [diff] [blame] | 69 | |
Marcel van Lohuizen | 9af9a90 | 2019-09-07 20:30:10 +0200 | [diff] [blame] | 70 | // Copy over all ports exposed from containers. |
| 71 | for Name, Port in spec.expose.port { |
Marcel van Lohuizen | 23623fa | 2019-10-23 19:28:59 +0200 | [diff] [blame] | 72 | port: "\(Name)": { |
Marcel van Lohuizen | 9af9a90 | 2019-09-07 20:30:10 +0200 | [diff] [blame] | 73 | // Set default external port to Port. targetPort must be |
| 74 | // the respective containerPort (Port) if it differs from port. |
| 75 | port: int | *Port |
| 76 | if port != Port { |
| 77 | targetPort: Port |
| 78 | } |
| 79 | } |
| 80 | } |
Marcel van Lohuizen | 02173f8 | 2018-12-20 13:27:07 +0100 | [diff] [blame] | 81 | |
Marcel van Lohuizen | 9af9a90 | 2019-09-07 20:30:10 +0200 | [diff] [blame] | 82 | // Copy over the labels |
| 83 | label: spec.label |
| 84 | } |
| 85 | } |