blob: f9615c004e4fc9a1c211bb25136803b80914ab25 [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
Sergiusz Bazanski114edc22020-02-18 22:54:18 +010035 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 Bazanskid436de22020-02-21 17:10:42 +010046
47 // Make OpenAPI v3 schema specification less painful.
48 OpenAPI:: {
Serge Bazanski9cfc2a02021-09-11 20:07:52 +000049 local openapi = self,
Sergiusz Bazanskid436de22020-02-21 17:10:42 +010050 Validation(obj):: {
51 openAPIV3Schema: obj.render,
52 },
53
Serge Bazanski0b6d5d52020-08-22 18:59:17 +000054 Required(inner):: inner {
55 required:: true,
56 },
57
Serge Bazanski9cfc2a02021-09-11 20:07:52 +000058 renderable:: {
Sergiusz Bazanskid436de22020-02-21 17:10:42 +010059 required:: false,
Serge Bazanski9cfc2a02021-09-11 20:07:52 +000060 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 Bazanskid436de22020-02-21 17:10:42 +010095
96 local requiredList = [
Serge Bazanski9cfc2a02021-09-11 20:07:52 +000097 k for k in std.filter(function(k) d[k].required, std.objectFields(d))
Sergiusz Bazanskid436de22020-02-21 17:10:42 +010098 ],
99
Serge Bazanski9cfc2a02021-09-11 20:07:52 +0000100 render+: {
Sergiusz Bazanskid436de22020-02-21 17:10:42 +0100101 properties: {
Serge Bazanski9cfc2a02021-09-11 20:07:52 +0000102 [k]: d[k].render
103 for k in std.objectFields(d)
Sergiusz Bazanskid436de22020-02-21 17:10:42 +0100104 },
Serge Bazanski9cfc2a02021-09-11 20:07:52 +0000105 [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 Bazanskid436de22020-02-21 17:10:42 +0100120 },
121
Serge Bazanski9cfc2a02021-09-11 20:07:52 +0000122 Array(items):: parametrized("array") {
123 render+: {
Sergiusz Bazanskid436de22020-02-21 17:10:42 +0100124 items: items.render,
125 },
126 },
127
Serge Bazanski9cfc2a02021-09-11 20:07:52 +0000128 Enum(items):: parametrized("string") {
129 render+: {
130 enum: items,
Sergiusz Bazanskid436de22020-02-21 17:10:42 +0100131 },
132 },
133
Serge Bazanski9cfc2a02021-09-11 20:07:52 +0000134 KubeAny(nullable=false):: self.Object() {
135 [if nullable then "nullable"]: true,
136 "x-kubernetes-preserve-unknown-fields": true,
Sergiusz Bazanskid436de22020-02-21 17:10:42 +0100137 },
138 },
Sergiusz Bazanski4d9e72c2019-01-13 22:06:33 +0100139}