blob: 5a1ad02c7abe40fb94009b22c67254c5f63c267e [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 {
6 ClusterIssuer(name): kube._Object("certmanager.k8s.io/v1alpha1", "ClusterIssuer", name) {
7 spec: error "spec must be defined",
Sergiusz Bazanski4d9e72c2019-01-13 22:06:33 +01008 },
Sergiusz Bazanskie31d64f2019-10-02 20:59:26 +02009 Issuer(name): kube._Object("certmanager.k8s.io/v1alpha1", "Issuer", name) {
10 spec: error "spec must be defined",
Sergiusz Bazanski4d9e72c2019-01-13 22:06:33 +010011 },
Sergiusz Bazanskie31d64f2019-10-02 20:59:26 +020012 Certificate(name): kube._Object("certmanager.k8s.io/v1alpha1", "Certificate", name) {
13 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
20 CephObjectStoreUser(name): kube._Object("ceph.rook.io/v1", "CephObjectStoreUser", name) {
21 local user = self,
22 spec: error "spec must be defined",
23
24 // Name of the secret that contains the login data for this user.
25 // This secret is created in the same namespace as the ceph cluster, so
26 // unfortunately you can't really refer to it directly.
27 // We should write some automation to copy these secrets over in a
28 // secure way.
29 secret_name:: "rook-ceph-object-user-%s-%s" % [user.spec.store, user.spec.displayName],
30 },
Sergiusz Bazanskid436de22020-02-21 17:10:42 +010031
32 // Make OpenAPI v3 schema specification less painful.
33 OpenAPI:: {
34 Validation(obj):: {
35 openAPIV3Schema: obj.render,
36 },
37
38 Dict:: {
39 local dict = self,
40 required:: false,
41
42 local requiredList = [
43 k for k in std.filter(function(k) dict[k].required, std.objectFields(dict))
44 ],
45
46 render:: {
47 properties: {
48 [k]: dict[k].render
49 for k in std.objectFields(dict)
50 },
51 } + (if std.length(requiredList) > 0 then {
52 required: requiredList,
53 } else {}),
54 },
55
56 Array(items):: {
57 required:: false,
58 render:: {
59 type: "array",
60 items: items.render,
61 },
62 },
63
64 Integer:: {
65 local integer = self,
66 required:: false,
67 render:: {
68 type: "integer",
69 } + (if integer.minimum != null then {
70 minimum: integer.minimum,
71 } else {}) + (if integer.maximum != null then {
72 maximum: integer.maximum,
73 } else {}),
74
75 minimum:: null,
76 maximum:: null,
77 },
78
79 String:: {
80 local string = self,
81 required:: false,
82 render:: {
83 type: "string",
84 } + (if string.pattern != null then {
85 pattern: string.pattern,
86 } else {}),
87
88 pattern:: null,
89 },
90
91 Boolean:: {
92 required:: false,
93 render:: {
94 type: "boolean",
95 },
96 },
97
98 Any:: {
99 required:: false,
100 render:: {},
101 },
102 },
Sergiusz Bazanski4d9e72c2019-01-13 22:06:33 +0100103}