blob: 8d7254a5a9ecfbbc353b31e64efed1241af85030 [file] [log] [blame]
// Local extensions to kube.upstream.libsonnet.
local kube = import "kube.upstream.libsonnet";
kube {
ClusterIssuer(name): kube._Object("certmanager.k8s.io/v1alpha1", "ClusterIssuer", name) {
spec: error "spec must be defined",
},
Issuer(name): kube._Object("certmanager.k8s.io/v1alpha1", "Issuer", name) {
spec: error "spec must be defined",
},
Certificate(name): kube._Object("certmanager.k8s.io/v1alpha1", "Certificate", name) {
spec: error "spec must be defined",
},
# For use in PodSpec.volumes_
CertificateVolume(certificate): {
secret: { secretName: certificate.spec.secretName },
},
ValidatingWebhookConfiguration(name): kube._Object("admissionregistration.k8s.io/v1", "ValidatingWebhookConfiguration", name) {
webhooks_:: error "webhooks_ must be defined",
webhooks: kube.mapToNamedList(self.webhooks_),
},
# Add .Contain method to Namespaces, allowing for easy marking of particular
# kube objects as contained in that namespace.
Namespace(name): kube.Namespace(name) {
Contain(o):: o {
metadata+: {
namespace: name,
},
},
},
CephObjectStoreUser(name): kube._Object("ceph.rook.io/v1", "CephObjectStoreUser", name) {
local user = self,
spec: error "spec must be defined",
// Name of the secret that contains the login data for this user.
// This secret is created in the same namespace as the ceph cluster, so
// unfortunately you can't really refer to it directly.
// We should write some automation to copy these secrets over in a
// secure way.
secret_name:: "rook-ceph-object-user-%s-%s" % [user.spec.store, user.spec.displayName],
},
// Make OpenAPI v3 schema specification less painful.
OpenAPI:: {
Validation(obj):: {
openAPIV3Schema: obj.render,
},
Required(inner):: inner {
required:: true,
},
Dict:: {
local dict = self,
required:: false,
local requiredList = [
k for k in std.filter(function(k) dict[k].required, std.objectFields(dict))
],
render:: {
properties: {
[k]: dict[k].render
for k in std.objectFields(dict)
},
} + (if std.length(requiredList) > 0 then {
required: requiredList,
} else {}),
},
Array(items):: {
required:: false,
render:: {
type: "array",
items: items.render,
},
},
Integer:: {
local integer = self,
required:: false,
render:: {
type: "integer",
} + (if integer.minimum != null then {
minimum: integer.minimum,
} else {}) + (if integer.maximum != null then {
maximum: integer.maximum,
} else {}),
minimum:: null,
maximum:: null,
},
String:: {
local string = self,
required:: false,
render:: {
type: "string",
} + (if string.pattern != null then {
pattern: string.pattern,
} else {}),
pattern:: null,
},
Boolean:: {
required:: false,
render:: {
type: "boolean",
},
},
Any:: {
required:: false,
render:: {},
},
},
}