blob: a8fe4443aec7137bafb0250044e52d211c76be22 [file] [log] [blame]
Sergiusz Bazanskie31d64f2019-10-02 20:59:26 +02001// Local extensions to kube.upstream.libsonnet.
Sergiusz Bazanski4d9e72c2019-01-13 22:06:33 +01002
Sergiusz Bazanskie31d64f2019-10-02 20:59:26 +02003local kube = import "kube.upstream.libsonnet";
Sergiusz Bazanski4d9e72c2019-01-13 22:06:33 +01004
Sergiusz Bazanskie31d64f2019-10-02 20:59:26 +02005kube {
Piotr Dobrowolski7e841062023-04-23 11:36:15 +02006 ClusterIssuer(name): kube._Object("cert-manager.io/v1", "ClusterIssuer", name) {
Sergiusz Bazanskie31d64f2019-10-02 20:59:26 +02007 spec: error "spec must be defined",
Sergiusz Bazanski4d9e72c2019-01-13 22:06:33 +01008 },
Piotr Dobrowolski7e841062023-04-23 11:36:15 +02009 Issuer(name): kube._Object("cert-manager.io/v1", "Issuer", name) {
Sergiusz Bazanskie31d64f2019-10-02 20:59:26 +020010 spec: error "spec must be defined",
Sergiusz Bazanski4d9e72c2019-01-13 22:06:33 +010011 },
Piotr Dobrowolski7e841062023-04-23 11:36:15 +020012 Certificate(name): kube._Object("cert-manager.io/v1", "Certificate", name) {
Sergiusz Bazanskie31d64f2019-10-02 20:59:26 +020013 spec: error "spec must be defined",
Sergiusz Bazanski4d9e72c2019-01-13 22:06:33 +010014 },
Serge Bazanski394dd832020-08-22 18:56:53 +000015 # For use in PodSpec.volumes_
16 CertificateVolume(certificate): {
17 secret: { secretName: certificate.spec.secretName },
18 },
Sergiusz Bazanski114edc22020-02-18 22:54:18 +010019
Serge Bazanski41bbf142021-02-06 18:12:52 +000020 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 Bazanski5a89d222020-08-22 18:57:30 +000025 # 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
Radek Pietruszewskif28cd622023-11-03 17:30:10 +010035 // Remove deprecated `volume.beta.kubernetes.io/storage-class` annotation
36 PersistentVolumeClaim(name): kube.PersistentVolumeClaim(name) {
37 metadata+: { annotations: {} },
38 },
39
Sergiusz Bazanski114edc22020-02-18 22:54:18 +010040 CephObjectStoreUser(name): kube._Object("ceph.rook.io/v1", "CephObjectStoreUser", name) {
41 local user = self,
42 spec: error "spec must be defined",
43
44 // Name of the secret that contains the login data for this user.
45 // This secret is created in the same namespace as the ceph cluster, so
46 // unfortunately you can't really refer to it directly.
47 // We should write some automation to copy these secrets over in a
48 // secure way.
49 secret_name:: "rook-ceph-object-user-%s-%s" % [user.spec.store, user.spec.displayName],
50 },
Sergiusz Bazanskid436de22020-02-21 17:10:42 +010051
52 // Make OpenAPI v3 schema specification less painful.
53 OpenAPI:: {
Serge Bazanski9cfc2a02021-09-11 20:07:52 +000054 local openapi = self,
Sergiusz Bazanskid436de22020-02-21 17:10:42 +010055 Validation(obj):: {
56 openAPIV3Schema: obj.render,
57 },
58
Serge Bazanski0b6d5d52020-08-22 18:59:17 +000059 Required(inner):: inner {
60 required:: true,
61 },
62
Serge Bazanski9cfc2a02021-09-11 20:07:52 +000063 renderable:: {
Sergiusz Bazanskid436de22020-02-21 17:10:42 +010064 required:: false,
Serge Bazanski9cfc2a02021-09-11 20:07:52 +000065 render:: {},
66 },
67 local renderable = self.renderable,
68
69 lift(f, keys):: {
70 [if f[k] != null then k]: f[k]
71 for k in keys
72 },
73 local lift = self.lift,
74
75 parametrized(type, keys=[]):: (
76 local keysp = keys + [
77 "description",
78 "nullable",
79 "x-kubernetes-preserve-unknown-fields",
80 ];
81 renderable {
82 render:: lift(self, keysp) {
83 type: type,
84 },
85 } + {
86 [k]: null
87 for k in keysp
88 }
89 ),
90 local parametrized = self.parametrized,
91
92 Any:: renderable,
93 Boolean:: parametrized("boolean"),
94 Integer:: parametrized("integer", ["minimum", "maximum", "format"]),
95 Number:: parametrized("number"),
96 String:: parametrized("string", ["pattern"]),
97
98 Dict:: renderable {
99 local d = self,
Sergiusz Bazanskid436de22020-02-21 17:10:42 +0100100
101 local requiredList = [
Serge Bazanski9cfc2a02021-09-11 20:07:52 +0000102 k for k in std.filter(function(k) d[k].required, std.objectFields(d))
Sergiusz Bazanskid436de22020-02-21 17:10:42 +0100103 ],
104
Serge Bazanski9cfc2a02021-09-11 20:07:52 +0000105 render+: {
Sergiusz Bazanskid436de22020-02-21 17:10:42 +0100106 properties: {
Serge Bazanski9cfc2a02021-09-11 20:07:52 +0000107 [k]: d[k].render
108 for k in std.objectFields(d)
Sergiusz Bazanskid436de22020-02-21 17:10:42 +0100109 },
Serge Bazanski9cfc2a02021-09-11 20:07:52 +0000110 [if std.length(requiredList) > 0 then 'required']: requiredList,
111 },
112 },
113 Object(props={}):: parametrized("object") {
114 local requiredList = [
115 k for k in std.filter(function(k) props[k].required, std.objectFields(props))
116 ],
117
118 render+: {
119 [if std.length(std.objectFields(props)) > 0 then "properties"]: {
120 [k]: props[k].render
121 for k in std.objectFields(props)
122 },
123 [if std.length(requiredList) > 0 then 'required']: requiredList,
124 },
Sergiusz Bazanskid436de22020-02-21 17:10:42 +0100125 },
126
Serge Bazanski9cfc2a02021-09-11 20:07:52 +0000127 Array(items):: parametrized("array") {
128 render+: {
Sergiusz Bazanskid436de22020-02-21 17:10:42 +0100129 items: items.render,
130 },
131 },
132
Serge Bazanski9cfc2a02021-09-11 20:07:52 +0000133 Enum(items):: parametrized("string") {
134 render+: {
135 enum: items,
Sergiusz Bazanskid436de22020-02-21 17:10:42 +0100136 },
137 },
138
Serge Bazanski9cfc2a02021-09-11 20:07:52 +0000139 KubeAny(nullable=false):: self.Object() {
140 [if nullable then "nullable"]: true,
141 "x-kubernetes-preserve-unknown-fields": true,
Sergiusz Bazanskid436de22020-02-21 17:10:42 +0100142 },
143 },
Sergiusz Bazanski4d9e72c2019-01-13 22:06:33 +0100144}