| // 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 }, |
| }, |
| |
| # 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, |
| }, |
| |
| 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:: {}, |
| }, |
| }, |
| } |