Sergiusz Bazanski | e31d64f | 2019-10-02 20:59:26 +0200 | [diff] [blame] | 1 | // Local extensions to kube.upstream.libsonnet. |
Sergiusz Bazanski | 4d9e72c | 2019-01-13 22:06:33 +0100 | [diff] [blame] | 2 | |
Sergiusz Bazanski | e31d64f | 2019-10-02 20:59:26 +0200 | [diff] [blame] | 3 | local kube = import "kube.upstream.libsonnet"; |
Sergiusz Bazanski | 4d9e72c | 2019-01-13 22:06:33 +0100 | [diff] [blame] | 4 | |
Sergiusz Bazanski | e31d64f | 2019-10-02 20:59:26 +0200 | [diff] [blame] | 5 | kube { |
| 6 | ClusterIssuer(name): kube._Object("certmanager.k8s.io/v1alpha1", "ClusterIssuer", name) { |
| 7 | spec: error "spec must be defined", |
Sergiusz Bazanski | 4d9e72c | 2019-01-13 22:06:33 +0100 | [diff] [blame] | 8 | }, |
Sergiusz Bazanski | e31d64f | 2019-10-02 20:59:26 +0200 | [diff] [blame] | 9 | Issuer(name): kube._Object("certmanager.k8s.io/v1alpha1", "Issuer", name) { |
| 10 | spec: error "spec must be defined", |
Sergiusz Bazanski | 4d9e72c | 2019-01-13 22:06:33 +0100 | [diff] [blame] | 11 | }, |
Sergiusz Bazanski | e31d64f | 2019-10-02 20:59:26 +0200 | [diff] [blame] | 12 | Certificate(name): kube._Object("certmanager.k8s.io/v1alpha1", "Certificate", name) { |
| 13 | spec: error "spec must be defined", |
Sergiusz Bazanski | 4d9e72c | 2019-01-13 22:06:33 +0100 | [diff] [blame] | 14 | }, |
Serge Bazanski | 394dd83 | 2020-08-22 18:56:53 +0000 | [diff] [blame] | 15 | # For use in PodSpec.volumes_ |
| 16 | CertificateVolume(certificate): { |
| 17 | secret: { secretName: certificate.spec.secretName }, |
| 18 | }, |
Sergiusz Bazanski | 114edc2 | 2020-02-18 22:54:18 +0100 | [diff] [blame] | 19 | |
Serge Bazanski | 41bbf14 | 2021-02-06 18:12:52 +0000 | [diff] [blame] | 20 | ValidatingWebhookConfiguration(name): kube._Object("admissionregistration.k8s.io/v1", "ValidatingWebhookConfiguration", name) { |
| 21 | webhooks_:: error "webhooks_ must be defined", |
| 22 | webhooks: kube.mapToNamedList(self.webhooks_), |
| 23 | }, |
| 24 | |
Serge Bazanski | 5a89d22 | 2020-08-22 18:57:30 +0000 | [diff] [blame] | 25 | # Add .Contain method to Namespaces, allowing for easy marking of particular |
| 26 | # kube objects as contained in that namespace. |
| 27 | Namespace(name): kube.Namespace(name) { |
| 28 | Contain(o):: o { |
| 29 | metadata+: { |
| 30 | namespace: name, |
| 31 | }, |
| 32 | }, |
| 33 | }, |
| 34 | |
Sergiusz Bazanski | 114edc2 | 2020-02-18 22:54:18 +0100 | [diff] [blame] | 35 | CephObjectStoreUser(name): kube._Object("ceph.rook.io/v1", "CephObjectStoreUser", name) { |
| 36 | local user = self, |
| 37 | spec: error "spec must be defined", |
| 38 | |
| 39 | // Name of the secret that contains the login data for this user. |
| 40 | // This secret is created in the same namespace as the ceph cluster, so |
| 41 | // unfortunately you can't really refer to it directly. |
| 42 | // We should write some automation to copy these secrets over in a |
| 43 | // secure way. |
| 44 | secret_name:: "rook-ceph-object-user-%s-%s" % [user.spec.store, user.spec.displayName], |
| 45 | }, |
Sergiusz Bazanski | d436de2 | 2020-02-21 17:10:42 +0100 | [diff] [blame] | 46 | |
| 47 | // Make OpenAPI v3 schema specification less painful. |
| 48 | OpenAPI:: { |
Serge Bazanski | 9cfc2a0 | 2021-09-11 20:07:52 +0000 | [diff] [blame] | 49 | local openapi = self, |
Sergiusz Bazanski | d436de2 | 2020-02-21 17:10:42 +0100 | [diff] [blame] | 50 | Validation(obj):: { |
| 51 | openAPIV3Schema: obj.render, |
| 52 | }, |
| 53 | |
Serge Bazanski | 0b6d5d5 | 2020-08-22 18:59:17 +0000 | [diff] [blame] | 54 | Required(inner):: inner { |
| 55 | required:: true, |
| 56 | }, |
| 57 | |
Serge Bazanski | 9cfc2a0 | 2021-09-11 20:07:52 +0000 | [diff] [blame] | 58 | renderable:: { |
Sergiusz Bazanski | d436de2 | 2020-02-21 17:10:42 +0100 | [diff] [blame] | 59 | required:: false, |
Serge Bazanski | 9cfc2a0 | 2021-09-11 20:07:52 +0000 | [diff] [blame] | 60 | render:: {}, |
| 61 | }, |
| 62 | local renderable = self.renderable, |
| 63 | |
| 64 | lift(f, keys):: { |
| 65 | [if f[k] != null then k]: f[k] |
| 66 | for k in keys |
| 67 | }, |
| 68 | local lift = self.lift, |
| 69 | |
| 70 | parametrized(type, keys=[]):: ( |
| 71 | local keysp = keys + [ |
| 72 | "description", |
| 73 | "nullable", |
| 74 | "x-kubernetes-preserve-unknown-fields", |
| 75 | ]; |
| 76 | renderable { |
| 77 | render:: lift(self, keysp) { |
| 78 | type: type, |
| 79 | }, |
| 80 | } + { |
| 81 | [k]: null |
| 82 | for k in keysp |
| 83 | } |
| 84 | ), |
| 85 | local parametrized = self.parametrized, |
| 86 | |
| 87 | Any:: renderable, |
| 88 | Boolean:: parametrized("boolean"), |
| 89 | Integer:: parametrized("integer", ["minimum", "maximum", "format"]), |
| 90 | Number:: parametrized("number"), |
| 91 | String:: parametrized("string", ["pattern"]), |
| 92 | |
| 93 | Dict:: renderable { |
| 94 | local d = self, |
Sergiusz Bazanski | d436de2 | 2020-02-21 17:10:42 +0100 | [diff] [blame] | 95 | |
| 96 | local requiredList = [ |
Serge Bazanski | 9cfc2a0 | 2021-09-11 20:07:52 +0000 | [diff] [blame] | 97 | k for k in std.filter(function(k) d[k].required, std.objectFields(d)) |
Sergiusz Bazanski | d436de2 | 2020-02-21 17:10:42 +0100 | [diff] [blame] | 98 | ], |
| 99 | |
Serge Bazanski | 9cfc2a0 | 2021-09-11 20:07:52 +0000 | [diff] [blame] | 100 | render+: { |
Sergiusz Bazanski | d436de2 | 2020-02-21 17:10:42 +0100 | [diff] [blame] | 101 | properties: { |
Serge Bazanski | 9cfc2a0 | 2021-09-11 20:07:52 +0000 | [diff] [blame] | 102 | [k]: d[k].render |
| 103 | for k in std.objectFields(d) |
Sergiusz Bazanski | d436de2 | 2020-02-21 17:10:42 +0100 | [diff] [blame] | 104 | }, |
Serge Bazanski | 9cfc2a0 | 2021-09-11 20:07:52 +0000 | [diff] [blame] | 105 | [if std.length(requiredList) > 0 then 'required']: requiredList, |
| 106 | }, |
| 107 | }, |
| 108 | Object(props={}):: parametrized("object") { |
| 109 | local requiredList = [ |
| 110 | k for k in std.filter(function(k) props[k].required, std.objectFields(props)) |
| 111 | ], |
| 112 | |
| 113 | render+: { |
| 114 | [if std.length(std.objectFields(props)) > 0 then "properties"]: { |
| 115 | [k]: props[k].render |
| 116 | for k in std.objectFields(props) |
| 117 | }, |
| 118 | [if std.length(requiredList) > 0 then 'required']: requiredList, |
| 119 | }, |
Sergiusz Bazanski | d436de2 | 2020-02-21 17:10:42 +0100 | [diff] [blame] | 120 | }, |
| 121 | |
Serge Bazanski | 9cfc2a0 | 2021-09-11 20:07:52 +0000 | [diff] [blame] | 122 | Array(items):: parametrized("array") { |
| 123 | render+: { |
Sergiusz Bazanski | d436de2 | 2020-02-21 17:10:42 +0100 | [diff] [blame] | 124 | items: items.render, |
| 125 | }, |
| 126 | }, |
| 127 | |
Serge Bazanski | 9cfc2a0 | 2021-09-11 20:07:52 +0000 | [diff] [blame] | 128 | Enum(items):: parametrized("string") { |
| 129 | render+: { |
| 130 | enum: items, |
Sergiusz Bazanski | d436de2 | 2020-02-21 17:10:42 +0100 | [diff] [blame] | 131 | }, |
| 132 | }, |
| 133 | |
Serge Bazanski | 9cfc2a0 | 2021-09-11 20:07:52 +0000 | [diff] [blame] | 134 | KubeAny(nullable=false):: self.Object() { |
| 135 | [if nullable then "nullable"]: true, |
| 136 | "x-kubernetes-preserve-unknown-fields": true, |
Sergiusz Bazanski | d436de2 | 2020-02-21 17:10:42 +0100 | [diff] [blame] | 137 | }, |
| 138 | }, |
Sergiusz Bazanski | 4d9e72c | 2019-01-13 22:06:33 +0100 | [diff] [blame] | 139 | } |