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