Changes for API support (#642)

This commit is contained in:
Pete Lumbis 2023-12-01 15:11:06 -05:00 committed by GitHub
parent 6feb7ce6fc
commit 5c360ba900
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
48 changed files with 19821 additions and 1334 deletions

View File

@ -52,6 +52,10 @@ module:
- "**/**.jpg"
- "**/**.jpeg"
- "**/**.gif"
- source: content
target: data/crds/
includeFiles:
- "**/api/**.yaml"
security:
funcs:

View File

@ -312,3 +312,15 @@ A second example tab.
Both `tab` and `tabs` require opening and closing tags. Unclosed tags causes
Hugo to fail.
## API documentation
The API documentation is auto generated from the Crossplane YAML files from the
[cluster/crds](https://github.com/crossplane/crossplane/tree/master/cluster/crds)
directory.
Place any updated files in the `/content/<version>/api/yaml` folder to update or
generate new API documentation.
The logic for parsing the YAML is in
`/themes/geekboot/layouts/partials/crds.html`.

View File

@ -0,0 +1,13 @@
---
title: Crossplane API
weight: 400
description: "API details for Crossplane's core types"
cascade:
product: crds
---
The Crossplane API describes the types and parameters for the core Crossplane
components.
For details on the components read the [Concepts]({{<ref "../concepts/">}})
section.

View File

@ -0,0 +1,517 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
name: compositeresourcedefinitions.apiextensions.crossplane.io
spec:
group: apiextensions.crossplane.io
names:
categories:
- crossplane
kind: CompositeResourceDefinition
listKind: CompositeResourceDefinitionList
plural: compositeresourcedefinitions
shortNames:
- xrd
- xrds
singular: compositeresourcedefinition
scope: Cluster
versions:
- additionalPrinterColumns:
- jsonPath: .status.conditions[?(@.type=='Established')].status
name: ESTABLISHED
type: string
- jsonPath: .status.conditions[?(@.type=='Offered')].status
name: OFFERED
type: string
- jsonPath: .metadata.creationTimestamp
name: AGE
type: date
name: v1
schema:
openAPIV3Schema:
description: A CompositeResourceDefinition defines a new kind of composite
infrastructure resource. The new resource is composed of other composite
or managed infrastructure resources.
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: CompositeResourceDefinitionSpec specifies the desired state
of the definition.
properties:
claimNames:
description: ClaimNames specifies the names of an optional composite
resource claim. When claim names are specified Crossplane will create
a namespaced 'composite resource claim' CRD that corresponds to
the defined composite resource. This composite resource claim acts
as a namespaced proxy for the composite resource; creating, updating,
or deleting the claim will create, update, or delete a corresponding
composite resource. You may add claim names to an existing CompositeResourceDefinition,
but they cannot be changed or removed once they have been set.
properties:
categories:
description: categories is a list of grouped resources this custom
resource belongs to (e.g. 'all'). This is published in API discovery
documents, and used by clients to support invocations like `kubectl
get all`.
items:
type: string
type: array
kind:
description: kind is the serialized kind of the resource. It is
normally CamelCase and singular. Custom resource instances will
use this value as the `kind` attribute in API calls.
type: string
listKind:
description: listKind is the serialized kind of the list for this
resource. Defaults to "`kind`List".
type: string
plural:
description: plural is the plural name of the resource to serve.
The custom resources are served under `/apis/<group>/<version>/.../<plural>`.
Must match the name of the CustomResourceDefinition (in the
form `<names.plural>.<group>`). Must be all lowercase.
type: string
shortNames:
description: shortNames are short names for the resource, exposed
in API discovery documents, and used by clients to support invocations
like `kubectl get <shortname>`. It must be all lowercase.
items:
type: string
type: array
singular:
description: singular is the singular name of the resource. It
must be all lowercase. Defaults to lowercased `kind`.
type: string
required:
- kind
- plural
type: object
connectionSecretKeys:
description: ConnectionSecretKeys is the list of keys that will be
exposed to the end user of the defined kind. If the list is empty,
all keys will be published.
items:
type: string
type: array
conversion:
description: Conversion defines all conversion settings for the defined
Composite resource.
properties:
strategy:
description: 'strategy specifies how custom resources are converted
between versions. Allowed values are: - `"None"`: The converter
only change the apiVersion and would not touch any other field
in the custom resource. - `"Webhook"`: API Server will call
to an external webhook to do the conversion. Additional information
is needed for this option. This requires spec.preserveUnknownFields
to be false, and spec.conversion.webhook to be set.'
type: string
webhook:
description: webhook describes how to call the conversion webhook.
Required when `strategy` is set to `"Webhook"`.
properties:
clientConfig:
description: clientConfig is the instructions for how to call
the webhook if strategy is `Webhook`.
properties:
caBundle:
description: caBundle is a PEM encoded CA bundle which
will be used to validate the webhook's server certificate.
If unspecified, system trust roots on the apiserver
are used.
format: byte
type: string
service:
description: "service is a reference to the service for
this webhook. Either service or url must be specified.
\n If the webhook is running within the cluster, then
you should use `service`."
properties:
name:
description: name is the name of the service. Required
type: string
namespace:
description: namespace is the namespace of the service.
Required
type: string
path:
description: path is an optional URL path at which
the webhook will be contacted.
type: string
port:
description: port is an optional service port at which
the webhook will be contacted. `port` should be
a valid port number (1-65535, inclusive). Defaults
to 443 for backward compatibility.
format: int32
type: integer
required:
- name
- namespace
type: object
url:
description: "url gives the location of the webhook, in
standard URL form (`scheme://host:port/path`). Exactly
one of `url` or `service` must be specified. \n The
`host` should not refer to a service running in the
cluster; use the `service` field instead. The host might
be resolved via external DNS in some apiservers (e.g.,
`kube-apiserver` cannot resolve in-cluster DNS as that
would be a layering violation). `host` may also be an
IP address. \n Please note that using `localhost` or
`127.0.0.1` as a `host` is risky unless you take great
care to run this webhook on all hosts which run an apiserver
which might need to make calls to this webhook. Such
installs are likely to be non-portable, i.e., not easy
to turn up in a new cluster. \n The scheme must be \"https\";
the URL must begin with \"https://\". \n A path is optional,
and if present may be any string permissible in a URL.
You may use the path to pass an arbitrary string to
the webhook, for example, a cluster identifier. \n Attempting
to use a user or basic auth e.g. \"user:password@\"
is not allowed. Fragments (\"#...\") and query parameters
(\"?...\") are not allowed, either."
type: string
type: object
conversionReviewVersions:
description: conversionReviewVersions is an ordered list of
preferred `ConversionReview` versions the Webhook expects.
The API server will use the first version in the list which
it supports. If none of the versions specified in this list
are supported by API server, conversion will fail for the
custom resource. If a persisted Webhook configuration specifies
allowed versions and does not include any versions known
to the API Server, calls to the webhook will fail.
items:
type: string
type: array
required:
- conversionReviewVersions
type: object
required:
- strategy
type: object
defaultCompositeDeletePolicy:
default: Background
description: DefaultCompositeDeletePolicy is the policy used when
deleting the Composite that is associated with the Claim if no policy
has been specified.
enum:
- Background
- Foreground
type: string
defaultCompositionRef:
description: DefaultCompositionRef refers to the Composition resource
that will be used in case no composition selector is given.
properties:
name:
description: Name of the Composition.
type: string
required:
- name
type: object
defaultCompositionUpdatePolicy:
default: Automatic
description: DefaultCompositionUpdatePolicy is the policy used when
updating composites after a new Composition Revision has been created
if no policy has been specified on the composite.
enum:
- Automatic
- Manual
type: string
enforcedCompositionRef:
description: EnforcedCompositionRef refers to the Composition resource
that will be used by all composite instances whose schema is defined
by this definition.
properties:
name:
description: Name of the Composition.
type: string
required:
- name
type: object
group:
description: Group specifies the API group of the defined composite
resource. Composite resources are served under `/apis/<group>/...`.
Must match the name of the XRD (in the form `<names.plural>.<group>`).
type: string
metadata:
description: Metadata specifies the desired metadata for the defined
composite resource and claim CRD's.
properties:
annotations:
additionalProperties:
type: string
description: 'Annotations is an unstructured key value map stored
with a resource that may be set by external tools to store and
retrieve arbitrary metadata. They are not queryable and should
be preserved when modifying objects. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations'
type: object
labels:
additionalProperties:
type: string
description: 'Map of string keys and values that can be used to
organize and categorize (scope and select) objects. May match
selectors of replication controllers More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels
and services. These labels are added to the composite resource
and claim CRD''s in addition to any labels defined by `CompositionResourceDefinition`
`metadata.labels`.'
type: object
type: object
names:
description: Names specifies the resource and kind names of the defined
composite resource.
properties:
categories:
description: categories is a list of grouped resources this custom
resource belongs to (e.g. 'all'). This is published in API discovery
documents, and used by clients to support invocations like `kubectl
get all`.
items:
type: string
type: array
kind:
description: kind is the serialized kind of the resource. It is
normally CamelCase and singular. Custom resource instances will
use this value as the `kind` attribute in API calls.
type: string
listKind:
description: listKind is the serialized kind of the list for this
resource. Defaults to "`kind`List".
type: string
plural:
description: plural is the plural name of the resource to serve.
The custom resources are served under `/apis/<group>/<version>/.../<plural>`.
Must match the name of the CustomResourceDefinition (in the
form `<names.plural>.<group>`). Must be all lowercase.
type: string
shortNames:
description: shortNames are short names for the resource, exposed
in API discovery documents, and used by clients to support invocations
like `kubectl get <shortname>`. It must be all lowercase.
items:
type: string
type: array
singular:
description: singular is the singular name of the resource. It
must be all lowercase. Defaults to lowercased `kind`.
type: string
required:
- kind
- plural
type: object
versions:
description: 'Versions is the list of all API versions of the defined
composite resource. Version names are used to compute the order
in which served versions are listed in API discovery. If the version
string is "kube-like", it will sort above non "kube-like" version
strings, which are ordered lexicographically. "Kube-like" versions
start with a "v", then are followed by a number (the major version),
then optionally the string "alpha" or "beta" and another number
(the minor version). These are sorted first by GA > beta > alpha
(where GA is a version with no suffix such as beta or alpha), and
then by comparing major version, then minor version. An example
sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1,
v12alpha1, v11alpha2, foo1, foo10.'
items:
description: CompositeResourceDefinitionVersion describes a version
of an XR.
properties:
additionalPrinterColumns:
description: 'AdditionalPrinterColumns specifies additional
columns returned in Table output. If no columns are specified,
a single column displaying the age of the custom resource
is used. See the following link for details: https://kubernetes.io/docs/reference/using-api/api-concepts/#receiving-resources-as-tables'
items:
description: CustomResourceColumnDefinition specifies a column
for server side printing.
properties:
description:
description: description is a human readable description
of this column.
type: string
format:
description: format is an optional OpenAPI type definition
for this column. The 'name' format is applied to the
primary identifier column to assist in clients identifying
column is the resource name. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types
for details.
type: string
jsonPath:
description: jsonPath is a simple JSON path (i.e. with
array notation) which is evaluated against each custom
resource to produce the value for this column.
type: string
name:
description: name is a human readable name for the column.
type: string
priority:
description: priority is an integer defining the relative
importance of this column compared to others. Lower
numbers are considered higher priority. Columns that
may be omitted in limited space scenarios should be
given a priority greater than 0.
format: int32
type: integer
type:
description: type is an OpenAPI type definition for this
column. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types
for details.
type: string
required:
- jsonPath
- name
- type
type: object
type: array
deprecated:
description: The deprecated field specifies that this version
is deprecated and should not be used.
type: boolean
deprecationWarning:
description: DeprecationWarning specifies the message that should
be shown to the user when using this version.
type: string
name:
description: Name of this version, e.g. “v1”, “v2beta1”, etc.
Composite resources are served under this version at `/apis/<group>/<version>/...`
if `served` is true.
type: string
referenceable:
description: Referenceable specifies that this version may be
referenced by a Composition in order to configure which resources
an XR may be composed of. Exactly one version must be marked
as referenceable; all Compositions must target only the referenceable
version. The referenceable version must be served. It's mapped
to the CRD's `spec.versions[*].storage` field.
type: boolean
schema:
description: Schema describes the schema used for validation,
pruning, and defaulting of this version of the defined composite
resource. Fields required by all composite resources will
be injected into this schema automatically, and will override
equivalently named fields in this schema. Omitting this schema
results in a schema that contains only the fields required
by all composite resources.
properties:
openAPIV3Schema:
description: OpenAPIV3Schema is the OpenAPI v3 schema to
use for validation and pruning.
type: object
x-kubernetes-preserve-unknown-fields: true
type: object
served:
description: Served specifies that this version should be served
via REST APIs.
type: boolean
required:
- name
- referenceable
- served
type: object
type: array
required:
- group
- names
- versions
type: object
status:
description: CompositeResourceDefinitionStatus shows the observed state
of the definition.
properties:
conditions:
description: Conditions of the resource.
items:
description: A Condition that may apply to a resource.
properties:
lastTransitionTime:
description: LastTransitionTime is the last time this condition
transitioned from one status to another.
format: date-time
type: string
message:
description: A Message containing details about this condition's
last transition from one status to another, if any.
type: string
reason:
description: A Reason for this condition's last transition from
one status to another.
type: string
status:
description: Status of this condition; is it currently True,
False, or Unknown?
type: string
type:
description: Type of this condition. At most one of each condition
type may apply to a resource at any point in time.
type: string
required:
- lastTransitionTime
- reason
- status
- type
type: object
type: array
x-kubernetes-list-map-keys:
- type
x-kubernetes-list-type: map
controllers:
description: Controllers represents the status of the controllers
that power this composite resource definition.
properties:
compositeResourceClaimType:
description: The CompositeResourceClaimTypeRef is the type of
composite resource claim that Crossplane is currently reconciling
for this definition. Its version will eventually become consistent
with the definition's referenceable version. Note that clients
may interact with any served type; this is simply the type that
Crossplane interacts with.
properties:
apiVersion:
description: APIVersion of the type.
type: string
kind:
description: Kind of the type.
type: string
required:
- apiVersion
- kind
type: object
compositeResourceType:
description: The CompositeResourceTypeRef is the type of composite
resource that Crossplane is currently reconciling for this definition.
Its version will eventually become consistent with the definition's
referenceable version. Note that clients may interact with any
served type; this is simply the type that Crossplane interacts
with.
properties:
apiVersion:
description: APIVersion of the type.
type: string
kind:
description: Kind of the type.
type: string
required:
- apiVersion
- kind
type: object
type: object
type: object
type: object
served: true
storage: true
subresources:
status: {}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,51 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
name: environmentconfigs.apiextensions.crossplane.io
spec:
group: apiextensions.crossplane.io
names:
categories:
- crossplane
kind: EnvironmentConfig
listKind: EnvironmentConfigList
plural: environmentconfigs
shortNames:
- envcfg
singular: environmentconfig
scope: Cluster
versions:
- additionalPrinterColumns:
- jsonPath: .metadata.creationTimestamp
name: AGE
type: date
name: v1alpha1
schema:
openAPIV3Schema:
description: A EnvironmentConfig contains a set of arbitrary, unstructured
values.
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
data:
additionalProperties:
x-kubernetes-preserve-unknown-fields: true
description: The data of this EnvironmentConfig. This may contain any
kind of structure that can be serialized into JSON.
type: object
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
type: object
served: true
storage: true
subresources: {}

View File

@ -0,0 +1,180 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
name: usages.apiextensions.crossplane.io
spec:
group: apiextensions.crossplane.io
names:
categories:
- crossplane
kind: Usage
listKind: UsageList
plural: usages
singular: usage
scope: Cluster
versions:
- additionalPrinterColumns:
- jsonPath: .metadata.annotations.crossplane\.io/usage-details
name: DETAILS
type: string
- jsonPath: .status.conditions[?(@.type=='Ready')].status
name: READY
type: string
- jsonPath: .metadata.creationTimestamp
name: AGE
type: date
name: v1alpha1
schema:
openAPIV3Schema:
description: A Usage defines a deletion blocking relationship between two
resources.
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: UsageSpec defines the desired state of Usage.
properties:
by:
description: By is the resource that is "using the other resource".
properties:
apiVersion:
description: API version of the referent.
type: string
kind:
description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
resourceRef:
description: Reference to the resource.
properties:
name:
description: Name of the referent.
type: string
required:
- name
type: object
resourceSelector:
description: Selector to the resource. This field will be ignored
if ResourceRef is set.
properties:
matchControllerRef:
description: MatchControllerRef ensures an object with the
same controller reference as the selecting object is selected.
type: boolean
matchLabels:
additionalProperties:
type: string
description: MatchLabels ensures an object with matching labels
is selected.
type: object
type: object
type: object
x-kubernetes-validations:
- message: either a resource reference or a resource selector should
be set.
rule: has(self.resourceRef) || has(self.resourceSelector)
of:
description: Of is the resource that is "being used".
properties:
apiVersion:
description: API version of the referent.
type: string
kind:
description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
resourceRef:
description: Reference to the resource.
properties:
name:
description: Name of the referent.
type: string
required:
- name
type: object
resourceSelector:
description: Selector to the resource. This field will be ignored
if ResourceRef is set.
properties:
matchControllerRef:
description: MatchControllerRef ensures an object with the
same controller reference as the selecting object is selected.
type: boolean
matchLabels:
additionalProperties:
type: string
description: MatchLabels ensures an object with matching labels
is selected.
type: object
type: object
type: object
x-kubernetes-validations:
- message: either a resource reference or a resource selector should
be set.
rule: has(self.resourceRef) || has(self.resourceSelector)
reason:
description: Reason is the reason for blocking deletion of the resource.
type: string
required:
- of
type: object
x-kubernetes-validations:
- message: either "spec.by" or "spec.reason" must be specified.
rule: has(self.by) || has(self.reason)
status:
description: UsageStatus defines the observed state of Usage.
properties:
conditions:
description: Conditions of the resource.
items:
description: A Condition that may apply to a resource.
properties:
lastTransitionTime:
description: LastTransitionTime is the last time this condition
transitioned from one status to another.
format: date-time
type: string
message:
description: A Message containing details about this condition's
last transition from one status to another, if any.
type: string
reason:
description: A Reason for this condition's last transition from
one status to another.
type: string
status:
description: Status of this condition; is it currently True,
False, or Unknown?
type: string
type:
description: Type of this condition. At most one of each condition
type may apply to a resource at any point in time.
type: string
required:
- lastTransitionTime
- reason
- status
- type
type: object
type: array
x-kubernetes-list-map-keys:
- type
x-kubernetes-list-type: map
type: object
required:
- spec
type: object
served: true
storage: true
subresources:
status: {}

View File

@ -0,0 +1,252 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
name: configurationrevisions.pkg.crossplane.io
spec:
group: pkg.crossplane.io
names:
categories:
- crossplane
- pkgrev
kind: ConfigurationRevision
listKind: ConfigurationRevisionList
plural: configurationrevisions
singular: configurationrevision
scope: Cluster
versions:
- additionalPrinterColumns:
- jsonPath: .status.conditions[?(@.type=='Healthy')].status
name: HEALTHY
type: string
- jsonPath: .spec.revision
name: REVISION
type: string
- jsonPath: .spec.image
name: IMAGE
type: string
- jsonPath: .spec.desiredState
name: STATE
type: string
- jsonPath: .status.foundDependencies
name: DEP-FOUND
type: string
- jsonPath: .status.installedDependencies
name: DEP-INSTALLED
type: string
- jsonPath: .metadata.creationTimestamp
name: AGE
type: date
name: v1
schema:
openAPIV3Schema:
description: A ConfigurationRevision that has been added to Crossplane.
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: PackageRevisionSpec specifies the desired state of a PackageRevision.
properties:
commonLabels:
additionalProperties:
type: string
description: 'Map of string keys and values that can be used to organize
and categorize (scope and select) objects. May match selectors of
replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels'
type: object
desiredState:
description: DesiredState of the PackageRevision. Can be either Active
or Inactive.
type: string
ignoreCrossplaneConstraints:
default: false
description: IgnoreCrossplaneConstraints indicates to the package
manager whether to honor Crossplane version constrains specified
by the package. Default is false.
type: boolean
image:
description: Package image used by install Pod to extract package
contents.
type: string
packagePullPolicy:
default: IfNotPresent
description: PackagePullPolicy defines the pull policy for the package.
It is also applied to any images pulled for the package, such as
a provider's controller image. Default is IfNotPresent.
type: string
packagePullSecrets:
description: PackagePullSecrets are named secrets in the same namespace
that can be used to fetch packages from private registries. They
are also applied to any images pulled for the package, such as a
provider's controller image.
items:
description: LocalObjectReference contains enough information to
let you locate the referenced object inside the same namespace.
properties:
name:
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
TODO: Add other useful fields. apiVersion, kind, uid?'
type: string
type: object
x-kubernetes-map-type: atomic
type: array
revision:
description: Revision number. Indicates when the revision will be
garbage collected based on the parent's RevisionHistoryLimit.
format: int64
type: integer
skipDependencyResolution:
default: false
description: SkipDependencyResolution indicates to the package manager
whether to skip resolving dependencies for a package. Setting this
value to true may have unintended consequences. Default is false.
type: boolean
required:
- desiredState
- image
- revision
type: object
status:
description: PackageRevisionStatus represents the observed state of a
PackageRevision.
properties:
conditions:
description: Conditions of the resource.
items:
description: A Condition that may apply to a resource.
properties:
lastTransitionTime:
description: LastTransitionTime is the last time this condition
transitioned from one status to another.
format: date-time
type: string
message:
description: A Message containing details about this condition's
last transition from one status to another, if any.
type: string
reason:
description: A Reason for this condition's last transition from
one status to another.
type: string
status:
description: Status of this condition; is it currently True,
False, or Unknown?
type: string
type:
description: Type of this condition. At most one of each condition
type may apply to a resource at any point in time.
type: string
required:
- lastTransitionTime
- reason
- status
- type
type: object
type: array
x-kubernetes-list-map-keys:
- type
x-kubernetes-list-type: map
foundDependencies:
description: Dependency information.
format: int64
type: integer
installedDependencies:
format: int64
type: integer
invalidDependencies:
format: int64
type: integer
objectRefs:
description: References to objects owned by PackageRevision.
items:
description: A TypedReference refers to an object by Name, Kind,
and APIVersion. It is commonly used to reference cluster-scoped
objects or objects where the namespace is already known.
properties:
apiVersion:
description: APIVersion of the referenced object.
type: string
kind:
description: Kind of the referenced object.
type: string
name:
description: Name of the referenced object.
type: string
uid:
description: UID of the referenced object.
type: string
required:
- apiVersion
- kind
- name
type: object
type: array
permissionRequests:
description: PermissionRequests made by this package. The package
declares that its controller needs these permissions to run. The
RBAC manager is responsible for granting them.
items:
description: PolicyRule holds information that describes a policy
rule, but does not contain information about who the rule applies
to or which namespace the rule applies to.
properties:
apiGroups:
description: APIGroups is the name of the APIGroup that contains
the resources. If multiple API groups are specified, any
action requested against one of the enumerated resources in
any API group will be allowed. "" represents the core API
group and "*" represents all API groups.
items:
type: string
type: array
nonResourceURLs:
description: NonResourceURLs is a set of partial urls that a
user should have access to. *s are allowed, but only as the
full, final step in the path Since non-resource URLs are not
namespaced, this field is only applicable for ClusterRoles
referenced from a ClusterRoleBinding. Rules can either apply
to API resources (such as "pods" or "secrets") or non-resource
URL paths (such as "/api"), but not both.
items:
type: string
type: array
resourceNames:
description: ResourceNames is an optional white list of names
that the rule applies to. An empty set means that everything
is allowed.
items:
type: string
type: array
resources:
description: Resources is a list of resources this rule applies
to. '*' represents all resources.
items:
type: string
type: array
verbs:
description: Verbs is a list of Verbs that apply to ALL the
ResourceKinds contained in this rule. '*' represents all verbs.
items:
type: string
type: array
required:
- verbs
type: object
type: array
type: object
type: object
served: true
storage: true
subresources:
status: {}

View File

@ -0,0 +1,168 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
name: configurations.pkg.crossplane.io
spec:
group: pkg.crossplane.io
names:
categories:
- crossplane
- pkg
kind: Configuration
listKind: ConfigurationList
plural: configurations
singular: configuration
scope: Cluster
versions:
- additionalPrinterColumns:
- jsonPath: .status.conditions[?(@.type=='Installed')].status
name: INSTALLED
type: string
- jsonPath: .status.conditions[?(@.type=='Healthy')].status
name: HEALTHY
type: string
- jsonPath: .spec.package
name: PACKAGE
type: string
- jsonPath: .metadata.creationTimestamp
name: AGE
type: date
name: v1
schema:
openAPIV3Schema:
description: Configuration is the CRD type for a request to add a configuration
to Crossplane.
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: ConfigurationSpec specifies details about a request to install
a configuration to Crossplane.
properties:
commonLabels:
additionalProperties:
type: string
description: 'Map of string keys and values that can be used to organize
and categorize (scope and select) objects. May match selectors of
replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels'
type: object
ignoreCrossplaneConstraints:
default: false
description: IgnoreCrossplaneConstraints indicates to the package
manager whether to honor Crossplane version constrains specified
by the package. Default is false.
type: boolean
package:
description: Package is the name of the package that is being requested.
type: string
packagePullPolicy:
default: IfNotPresent
description: PackagePullPolicy defines the pull policy for the package.
Default is IfNotPresent.
type: string
packagePullSecrets:
description: PackagePullSecrets are named secrets in the same namespace
that can be used to fetch packages from private registries.
items:
description: LocalObjectReference contains enough information to
let you locate the referenced object inside the same namespace.
properties:
name:
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
TODO: Add other useful fields. apiVersion, kind, uid?'
type: string
type: object
x-kubernetes-map-type: atomic
type: array
revisionActivationPolicy:
default: Automatic
description: RevisionActivationPolicy specifies how the package controller
should update from one revision to the next. Options are Automatic
or Manual. Default is Automatic.
type: string
revisionHistoryLimit:
default: 1
description: RevisionHistoryLimit dictates how the package controller
cleans up old inactive package revisions. Defaults to 1. Can be
disabled by explicitly setting to 0.
format: int64
type: integer
skipDependencyResolution:
default: false
description: SkipDependencyResolution indicates to the package manager
whether to skip resolving dependencies for a package. Setting this
value to true may have unintended consequences. Default is false.
type: boolean
required:
- package
type: object
status:
description: ConfigurationStatus represents the observed state of a Configuration.
properties:
conditions:
description: Conditions of the resource.
items:
description: A Condition that may apply to a resource.
properties:
lastTransitionTime:
description: LastTransitionTime is the last time this condition
transitioned from one status to another.
format: date-time
type: string
message:
description: A Message containing details about this condition's
last transition from one status to another, if any.
type: string
reason:
description: A Reason for this condition's last transition from
one status to another.
type: string
status:
description: Status of this condition; is it currently True,
False, or Unknown?
type: string
type:
description: Type of this condition. At most one of each condition
type may apply to a resource at any point in time.
type: string
required:
- lastTransitionTime
- reason
- status
- type
type: object
type: array
x-kubernetes-list-map-keys:
- type
x-kubernetes-list-type: map
currentIdentifier:
description: CurrentIdentifier is the most recent package source that
was used to produce a revision. The package manager uses this field
to determine whether to check for package updates for a given source
when packagePullPolicy is set to IfNotPresent. Manually removing
this field will cause the package manager to check that the current
revision is correct for the given package source.
type: string
currentRevision:
description: CurrentRevision is the name of the current package revision.
It will reflect the most up to date revision, whether it has been
activated or not.
type: string
type: object
type: object
served: true
storage: true
subresources:
status: {}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,295 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
name: functionrevisions.pkg.crossplane.io
spec:
group: pkg.crossplane.io
names:
categories:
- crossplane
- pkgrev
kind: FunctionRevision
listKind: FunctionRevisionList
plural: functionrevisions
singular: functionrevision
scope: Cluster
versions:
- additionalPrinterColumns:
- jsonPath: .status.conditions[?(@.type=='Healthy')].status
name: HEALTHY
type: string
- jsonPath: .spec.revision
name: REVISION
type: string
- jsonPath: .spec.image
name: IMAGE
type: string
- jsonPath: .spec.desiredState
name: STATE
type: string
- jsonPath: .status.foundDependencies
name: DEP-FOUND
type: string
- jsonPath: .status.installedDependencies
name: DEP-INSTALLED
type: string
- jsonPath: .metadata.creationTimestamp
name: AGE
type: date
name: v1beta1
schema:
openAPIV3Schema:
description: A FunctionRevision that has been added to Crossplane.
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: FunctionRevisionSpec specifies configuration for a FunctionRevision.
properties:
commonLabels:
additionalProperties:
type: string
description: 'Map of string keys and values that can be used to organize
and categorize (scope and select) objects. May match selectors of
replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels'
type: object
controllerConfigRef:
description: 'ControllerConfigRef references a ControllerConfig resource
that will be used to configure the packaged controller Deployment.
Deprecated: Use RuntimeConfigReference instead.'
properties:
name:
description: Name of the ControllerConfig.
type: string
required:
- name
type: object
desiredState:
description: DesiredState of the PackageRevision. Can be either Active
or Inactive.
type: string
ignoreCrossplaneConstraints:
default: false
description: IgnoreCrossplaneConstraints indicates to the package
manager whether to honor Crossplane version constrains specified
by the package. Default is false.
type: boolean
image:
description: Package image used by install Pod to extract package
contents.
type: string
packagePullPolicy:
default: IfNotPresent
description: PackagePullPolicy defines the pull policy for the package.
It is also applied to any images pulled for the package, such as
a provider's controller image. Default is IfNotPresent.
type: string
packagePullSecrets:
description: PackagePullSecrets are named secrets in the same namespace
that can be used to fetch packages from private registries. They
are also applied to any images pulled for the package, such as a
provider's controller image.
items:
description: LocalObjectReference contains enough information to
let you locate the referenced object inside the same namespace.
properties:
name:
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
TODO: Add other useful fields. apiVersion, kind, uid?'
type: string
type: object
x-kubernetes-map-type: atomic
type: array
revision:
description: Revision number. Indicates when the revision will be
garbage collected based on the parent's RevisionHistoryLimit.
format: int64
type: integer
runtimeConfigRef:
default:
name: default
description: RuntimeConfigRef references a RuntimeConfig resource
that will be used to configure the package runtime.
properties:
apiVersion:
default: pkg.crossplane.io/v1beta1
description: API version of the referent.
type: string
kind:
default: DeploymentRuntimeConfig
description: Kind of the referent.
type: string
name:
description: Name of the RuntimeConfig.
type: string
required:
- name
type: object
skipDependencyResolution:
default: false
description: SkipDependencyResolution indicates to the package manager
whether to skip resolving dependencies for a package. Setting this
value to true may have unintended consequences. Default is false.
type: boolean
tlsClientSecretName:
description: TLSClientSecretName is the name of the TLS Secret that
stores client certificates of the Provider.
type: string
tlsServerSecretName:
description: TLSServerSecretName is the name of the TLS Secret that
stores server certificates of the Provider.
type: string
required:
- desiredState
- image
- revision
type: object
status:
description: FunctionRevisionStatus represents the observed state of a
FunctionRevision.
properties:
conditions:
description: Conditions of the resource.
items:
description: A Condition that may apply to a resource.
properties:
lastTransitionTime:
description: LastTransitionTime is the last time this condition
transitioned from one status to another.
format: date-time
type: string
message:
description: A Message containing details about this condition's
last transition from one status to another, if any.
type: string
reason:
description: A Reason for this condition's last transition from
one status to another.
type: string
status:
description: Status of this condition; is it currently True,
False, or Unknown?
type: string
type:
description: Type of this condition. At most one of each condition
type may apply to a resource at any point in time.
type: string
required:
- lastTransitionTime
- reason
- status
- type
type: object
type: array
x-kubernetes-list-map-keys:
- type
x-kubernetes-list-type: map
endpoint:
description: Endpoint is the gRPC endpoint where Crossplane will send
RunFunctionRequests.
type: string
foundDependencies:
description: Dependency information.
format: int64
type: integer
installedDependencies:
format: int64
type: integer
invalidDependencies:
format: int64
type: integer
objectRefs:
description: References to objects owned by PackageRevision.
items:
description: A TypedReference refers to an object by Name, Kind,
and APIVersion. It is commonly used to reference cluster-scoped
objects or objects where the namespace is already known.
properties:
apiVersion:
description: APIVersion of the referenced object.
type: string
kind:
description: Kind of the referenced object.
type: string
name:
description: Name of the referenced object.
type: string
uid:
description: UID of the referenced object.
type: string
required:
- apiVersion
- kind
- name
type: object
type: array
permissionRequests:
description: PermissionRequests made by this package. The package
declares that its controller needs these permissions to run. The
RBAC manager is responsible for granting them.
items:
description: PolicyRule holds information that describes a policy
rule, but does not contain information about who the rule applies
to or which namespace the rule applies to.
properties:
apiGroups:
description: APIGroups is the name of the APIGroup that contains
the resources. If multiple API groups are specified, any
action requested against one of the enumerated resources in
any API group will be allowed. "" represents the core API
group and "*" represents all API groups.
items:
type: string
type: array
nonResourceURLs:
description: NonResourceURLs is a set of partial urls that a
user should have access to. *s are allowed, but only as the
full, final step in the path Since non-resource URLs are not
namespaced, this field is only applicable for ClusterRoles
referenced from a ClusterRoleBinding. Rules can either apply
to API resources (such as "pods" or "secrets") or non-resource
URL paths (such as "/api"), but not both.
items:
type: string
type: array
resourceNames:
description: ResourceNames is an optional white list of names
that the rule applies to. An empty set means that everything
is allowed.
items:
type: string
type: array
resources:
description: Resources is a list of resources this rule applies
to. '*' represents all resources.
items:
type: string
type: array
verbs:
description: Verbs is a list of Verbs that apply to ALL the
ResourceKinds contained in this rule. '*' represents all verbs.
items:
type: string
type: array
required:
- verbs
type: object
type: array
type: object
type: object
served: true
storage: true
subresources:
status: {}

View File

@ -0,0 +1,198 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
name: functions.pkg.crossplane.io
spec:
group: pkg.crossplane.io
names:
categories:
- crossplane
- pkg
kind: Function
listKind: FunctionList
plural: functions
singular: function
scope: Cluster
versions:
- additionalPrinterColumns:
- jsonPath: .status.conditions[?(@.type=='Installed')].status
name: INSTALLED
type: string
- jsonPath: .status.conditions[?(@.type=='Healthy')].status
name: HEALTHY
type: string
- jsonPath: .spec.package
name: PACKAGE
type: string
- jsonPath: .metadata.creationTimestamp
name: AGE
type: date
name: v1beta1
schema:
openAPIV3Schema:
description: Function is the CRD type for a request to deploy a long-running
Function.
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: FunctionSpec specifies the configuration of a Function.
properties:
commonLabels:
additionalProperties:
type: string
description: 'Map of string keys and values that can be used to organize
and categorize (scope and select) objects. May match selectors of
replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels'
type: object
controllerConfigRef:
description: 'ControllerConfigRef references a ControllerConfig resource
that will be used to configure the packaged controller Deployment.
Deprecated: Use RuntimeConfigReference instead.'
properties:
name:
description: Name of the ControllerConfig.
type: string
required:
- name
type: object
ignoreCrossplaneConstraints:
default: false
description: IgnoreCrossplaneConstraints indicates to the package
manager whether to honor Crossplane version constrains specified
by the package. Default is false.
type: boolean
package:
description: Package is the name of the package that is being requested.
type: string
packagePullPolicy:
default: IfNotPresent
description: PackagePullPolicy defines the pull policy for the package.
Default is IfNotPresent.
type: string
packagePullSecrets:
description: PackagePullSecrets are named secrets in the same namespace
that can be used to fetch packages from private registries.
items:
description: LocalObjectReference contains enough information to
let you locate the referenced object inside the same namespace.
properties:
name:
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
TODO: Add other useful fields. apiVersion, kind, uid?'
type: string
type: object
x-kubernetes-map-type: atomic
type: array
revisionActivationPolicy:
default: Automatic
description: RevisionActivationPolicy specifies how the package controller
should update from one revision to the next. Options are Automatic
or Manual. Default is Automatic.
type: string
revisionHistoryLimit:
default: 1
description: RevisionHistoryLimit dictates how the package controller
cleans up old inactive package revisions. Defaults to 1. Can be
disabled by explicitly setting to 0.
format: int64
type: integer
runtimeConfigRef:
default:
name: default
description: RuntimeConfigRef references a RuntimeConfig resource
that will be used to configure the package runtime.
properties:
apiVersion:
default: pkg.crossplane.io/v1beta1
description: API version of the referent.
type: string
kind:
default: DeploymentRuntimeConfig
description: Kind of the referent.
type: string
name:
description: Name of the RuntimeConfig.
type: string
required:
- name
type: object
skipDependencyResolution:
default: false
description: SkipDependencyResolution indicates to the package manager
whether to skip resolving dependencies for a package. Setting this
value to true may have unintended consequences. Default is false.
type: boolean
required:
- package
type: object
status:
description: FunctionStatus represents the observed state of a Function.
properties:
conditions:
description: Conditions of the resource.
items:
description: A Condition that may apply to a resource.
properties:
lastTransitionTime:
description: LastTransitionTime is the last time this condition
transitioned from one status to another.
format: date-time
type: string
message:
description: A Message containing details about this condition's
last transition from one status to another, if any.
type: string
reason:
description: A Reason for this condition's last transition from
one status to another.
type: string
status:
description: Status of this condition; is it currently True,
False, or Unknown?
type: string
type:
description: Type of this condition. At most one of each condition
type may apply to a resource at any point in time.
type: string
required:
- lastTransitionTime
- reason
- status
- type
type: object
type: array
x-kubernetes-list-map-keys:
- type
x-kubernetes-list-type: map
currentIdentifier:
description: CurrentIdentifier is the most recent package source that
was used to produce a revision. The package manager uses this field
to determine whether to check for package updates for a given source
when packagePullPolicy is set to IfNotPresent. Manually removing
this field will cause the package manager to check that the current
revision is correct for the given package source.
type: string
currentRevision:
description: CurrentRevision is the name of the current package revision.
It will reflect the most up to date revision, whether it has been
activated or not.
type: string
type: object
type: object
served: true
storage: true
subresources:
status: {}

View File

@ -0,0 +1,93 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
name: locks.pkg.crossplane.io
spec:
group: pkg.crossplane.io
names:
kind: Lock
listKind: LockList
plural: locks
singular: lock
scope: Cluster
versions:
- additionalPrinterColumns:
- jsonPath: .metadata.creationTimestamp
name: AGE
type: date
name: v1beta1
schema:
openAPIV3Schema:
description: Lock is the CRD type that tracks package dependencies.
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
packages:
items:
description: LockPackage is a package that is in the lock.
properties:
dependencies:
description: Dependencies are the list of dependencies of this package.
The order of the dependencies will dictate the order in which
they are resolved.
items:
description: A Dependency is a dependency of a package in the
lock.
properties:
constraints:
description: Constraints is a valid semver range, which will
be used to select a valid dependency version.
type: string
package:
description: Package is the OCI image name without a tag or
digest.
type: string
type:
description: Type is the type of package. Can be either Configuration
or Provider.
type: string
required:
- constraints
- package
- type
type: object
type: array
name:
description: Name corresponds to the name of the package revision
for this package.
type: string
source:
description: Source is the OCI image name without a tag or digest.
type: string
type:
description: Type is the type of package. Can be either Configuration
or Provider.
type: string
version:
description: Version is the tag or digest of the OCI image.
type: string
required:
- dependencies
- name
- source
- type
- version
type: object
type: array
type: object
served: true
storage: true
subresources:
status: {}

View File

@ -0,0 +1,291 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
name: providerrevisions.pkg.crossplane.io
spec:
group: pkg.crossplane.io
names:
categories:
- crossplane
- pkgrev
kind: ProviderRevision
listKind: ProviderRevisionList
plural: providerrevisions
singular: providerrevision
scope: Cluster
versions:
- additionalPrinterColumns:
- jsonPath: .status.conditions[?(@.type=='Healthy')].status
name: HEALTHY
type: string
- jsonPath: .spec.revision
name: REVISION
type: string
- jsonPath: .spec.image
name: IMAGE
type: string
- jsonPath: .spec.desiredState
name: STATE
type: string
- jsonPath: .status.foundDependencies
name: DEP-FOUND
type: string
- jsonPath: .status.installedDependencies
name: DEP-INSTALLED
type: string
- jsonPath: .metadata.creationTimestamp
name: AGE
type: date
name: v1
schema:
openAPIV3Schema:
description: A ProviderRevision that has been added to Crossplane.
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: ProviderRevisionSpec specifies configuration for a ProviderRevision.
properties:
commonLabels:
additionalProperties:
type: string
description: 'Map of string keys and values that can be used to organize
and categorize (scope and select) objects. May match selectors of
replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels'
type: object
controllerConfigRef:
description: 'ControllerConfigRef references a ControllerConfig resource
that will be used to configure the packaged controller Deployment.
Deprecated: Use RuntimeConfigReference instead.'
properties:
name:
description: Name of the ControllerConfig.
type: string
required:
- name
type: object
desiredState:
description: DesiredState of the PackageRevision. Can be either Active
or Inactive.
type: string
ignoreCrossplaneConstraints:
default: false
description: IgnoreCrossplaneConstraints indicates to the package
manager whether to honor Crossplane version constrains specified
by the package. Default is false.
type: boolean
image:
description: Package image used by install Pod to extract package
contents.
type: string
packagePullPolicy:
default: IfNotPresent
description: PackagePullPolicy defines the pull policy for the package.
It is also applied to any images pulled for the package, such as
a provider's controller image. Default is IfNotPresent.
type: string
packagePullSecrets:
description: PackagePullSecrets are named secrets in the same namespace
that can be used to fetch packages from private registries. They
are also applied to any images pulled for the package, such as a
provider's controller image.
items:
description: LocalObjectReference contains enough information to
let you locate the referenced object inside the same namespace.
properties:
name:
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
TODO: Add other useful fields. apiVersion, kind, uid?'
type: string
type: object
x-kubernetes-map-type: atomic
type: array
revision:
description: Revision number. Indicates when the revision will be
garbage collected based on the parent's RevisionHistoryLimit.
format: int64
type: integer
runtimeConfigRef:
default:
name: default
description: RuntimeConfigRef references a RuntimeConfig resource
that will be used to configure the package runtime.
properties:
apiVersion:
default: pkg.crossplane.io/v1beta1
description: API version of the referent.
type: string
kind:
default: DeploymentRuntimeConfig
description: Kind of the referent.
type: string
name:
description: Name of the RuntimeConfig.
type: string
required:
- name
type: object
skipDependencyResolution:
default: false
description: SkipDependencyResolution indicates to the package manager
whether to skip resolving dependencies for a package. Setting this
value to true may have unintended consequences. Default is false.
type: boolean
tlsClientSecretName:
description: TLSClientSecretName is the name of the TLS Secret that
stores client certificates of the Provider.
type: string
tlsServerSecretName:
description: TLSServerSecretName is the name of the TLS Secret that
stores server certificates of the Provider.
type: string
required:
- desiredState
- image
- revision
type: object
status:
description: PackageRevisionStatus represents the observed state of a
PackageRevision.
properties:
conditions:
description: Conditions of the resource.
items:
description: A Condition that may apply to a resource.
properties:
lastTransitionTime:
description: LastTransitionTime is the last time this condition
transitioned from one status to another.
format: date-time
type: string
message:
description: A Message containing details about this condition's
last transition from one status to another, if any.
type: string
reason:
description: A Reason for this condition's last transition from
one status to another.
type: string
status:
description: Status of this condition; is it currently True,
False, or Unknown?
type: string
type:
description: Type of this condition. At most one of each condition
type may apply to a resource at any point in time.
type: string
required:
- lastTransitionTime
- reason
- status
- type
type: object
type: array
x-kubernetes-list-map-keys:
- type
x-kubernetes-list-type: map
foundDependencies:
description: Dependency information.
format: int64
type: integer
installedDependencies:
format: int64
type: integer
invalidDependencies:
format: int64
type: integer
objectRefs:
description: References to objects owned by PackageRevision.
items:
description: A TypedReference refers to an object by Name, Kind,
and APIVersion. It is commonly used to reference cluster-scoped
objects or objects where the namespace is already known.
properties:
apiVersion:
description: APIVersion of the referenced object.
type: string
kind:
description: Kind of the referenced object.
type: string
name:
description: Name of the referenced object.
type: string
uid:
description: UID of the referenced object.
type: string
required:
- apiVersion
- kind
- name
type: object
type: array
permissionRequests:
description: PermissionRequests made by this package. The package
declares that its controller needs these permissions to run. The
RBAC manager is responsible for granting them.
items:
description: PolicyRule holds information that describes a policy
rule, but does not contain information about who the rule applies
to or which namespace the rule applies to.
properties:
apiGroups:
description: APIGroups is the name of the APIGroup that contains
the resources. If multiple API groups are specified, any
action requested against one of the enumerated resources in
any API group will be allowed. "" represents the core API
group and "*" represents all API groups.
items:
type: string
type: array
nonResourceURLs:
description: NonResourceURLs is a set of partial urls that a
user should have access to. *s are allowed, but only as the
full, final step in the path Since non-resource URLs are not
namespaced, this field is only applicable for ClusterRoles
referenced from a ClusterRoleBinding. Rules can either apply
to API resources (such as "pods" or "secrets") or non-resource
URL paths (such as "/api"), but not both.
items:
type: string
type: array
resourceNames:
description: ResourceNames is an optional white list of names
that the rule applies to. An empty set means that everything
is allowed.
items:
type: string
type: array
resources:
description: Resources is a list of resources this rule applies
to. '*' represents all resources.
items:
type: string
type: array
verbs:
description: Verbs is a list of Verbs that apply to ALL the
ResourceKinds contained in this rule. '*' represents all verbs.
items:
type: string
type: array
required:
- verbs
type: object
type: array
type: object
type: object
served: true
storage: true
subresources:
status: {}

View File

@ -0,0 +1,198 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
name: providers.pkg.crossplane.io
spec:
group: pkg.crossplane.io
names:
categories:
- crossplane
- pkg
kind: Provider
listKind: ProviderList
plural: providers
singular: provider
scope: Cluster
versions:
- additionalPrinterColumns:
- jsonPath: .status.conditions[?(@.type=='Installed')].status
name: INSTALLED
type: string
- jsonPath: .status.conditions[?(@.type=='Healthy')].status
name: HEALTHY
type: string
- jsonPath: .spec.package
name: PACKAGE
type: string
- jsonPath: .metadata.creationTimestamp
name: AGE
type: date
name: v1
schema:
openAPIV3Schema:
description: Provider is the CRD type for a request to add a provider to Crossplane.
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: ProviderSpec specifies details about a request to install
a provider to Crossplane.
properties:
commonLabels:
additionalProperties:
type: string
description: 'Map of string keys and values that can be used to organize
and categorize (scope and select) objects. May match selectors of
replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels'
type: object
controllerConfigRef:
description: 'ControllerConfigRef references a ControllerConfig resource
that will be used to configure the packaged controller Deployment.
Deprecated: Use RuntimeConfigReference instead.'
properties:
name:
description: Name of the ControllerConfig.
type: string
required:
- name
type: object
ignoreCrossplaneConstraints:
default: false
description: IgnoreCrossplaneConstraints indicates to the package
manager whether to honor Crossplane version constrains specified
by the package. Default is false.
type: boolean
package:
description: Package is the name of the package that is being requested.
type: string
packagePullPolicy:
default: IfNotPresent
description: PackagePullPolicy defines the pull policy for the package.
Default is IfNotPresent.
type: string
packagePullSecrets:
description: PackagePullSecrets are named secrets in the same namespace
that can be used to fetch packages from private registries.
items:
description: LocalObjectReference contains enough information to
let you locate the referenced object inside the same namespace.
properties:
name:
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
TODO: Add other useful fields. apiVersion, kind, uid?'
type: string
type: object
x-kubernetes-map-type: atomic
type: array
revisionActivationPolicy:
default: Automatic
description: RevisionActivationPolicy specifies how the package controller
should update from one revision to the next. Options are Automatic
or Manual. Default is Automatic.
type: string
revisionHistoryLimit:
default: 1
description: RevisionHistoryLimit dictates how the package controller
cleans up old inactive package revisions. Defaults to 1. Can be
disabled by explicitly setting to 0.
format: int64
type: integer
runtimeConfigRef:
default:
name: default
description: RuntimeConfigRef references a RuntimeConfig resource
that will be used to configure the package runtime.
properties:
apiVersion:
default: pkg.crossplane.io/v1beta1
description: API version of the referent.
type: string
kind:
default: DeploymentRuntimeConfig
description: Kind of the referent.
type: string
name:
description: Name of the RuntimeConfig.
type: string
required:
- name
type: object
skipDependencyResolution:
default: false
description: SkipDependencyResolution indicates to the package manager
whether to skip resolving dependencies for a package. Setting this
value to true may have unintended consequences. Default is false.
type: boolean
required:
- package
type: object
status:
description: ProviderStatus represents the observed state of a Provider.
properties:
conditions:
description: Conditions of the resource.
items:
description: A Condition that may apply to a resource.
properties:
lastTransitionTime:
description: LastTransitionTime is the last time this condition
transitioned from one status to another.
format: date-time
type: string
message:
description: A Message containing details about this condition's
last transition from one status to another, if any.
type: string
reason:
description: A Reason for this condition's last transition from
one status to another.
type: string
status:
description: Status of this condition; is it currently True,
False, or Unknown?
type: string
type:
description: Type of this condition. At most one of each condition
type may apply to a resource at any point in time.
type: string
required:
- lastTransitionTime
- reason
- status
- type
type: object
type: array
x-kubernetes-list-map-keys:
- type
x-kubernetes-list-type: map
currentIdentifier:
description: CurrentIdentifier is the most recent package source that
was used to produce a revision. The package manager uses this field
to determine whether to check for package updates for a given source
when packagePullPolicy is set to IfNotPresent. Manually removing
this field will cause the package manager to check that the current
revision is correct for the given package source.
type: string
currentRevision:
description: CurrentRevision is the name of the current package revision.
It will reflect the most up to date revision, whether it has been
activated or not.
type: string
type: object
type: object
served: true
storage: true
subresources:
status: {}

View File

@ -0,0 +1,162 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
name: storeconfigs.secrets.crossplane.io
spec:
group: secrets.crossplane.io
names:
categories:
- crossplane
- store
kind: StoreConfig
listKind: StoreConfigList
plural: storeconfigs
singular: storeconfig
scope: Cluster
versions:
- additionalPrinterColumns:
- jsonPath: .metadata.creationTimestamp
name: AGE
type: date
- jsonPath: .spec.type
name: TYPE
type: string
- jsonPath: .spec.defaultScope
name: DEFAULT-SCOPE
type: string
name: v1alpha1
schema:
openAPIV3Schema:
description: A StoreConfig configures how Crossplane controllers should store
connection details.
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: A StoreConfigSpec defines the desired state of a StoreConfig.
properties:
defaultScope:
description: DefaultScope used for scoping secrets for "cluster-scoped"
resources. If store type is "Kubernetes", this would mean the default
namespace to store connection secrets for cluster scoped resources.
In case of "Vault", this would be used as the default parent path.
Typically, should be set as Crossplane installation namespace.
type: string
kubernetes:
description: Kubernetes configures a Kubernetes secret store. If the
"type" is "Kubernetes" but no config provided, in cluster config
will be used.
properties:
auth:
description: Credentials used to connect to the Kubernetes API.
properties:
env:
description: Env is a reference to an environment variable
that contains credentials that must be used to connect to
the provider.
properties:
name:
description: Name is the name of an environment variable.
type: string
required:
- name
type: object
fs:
description: Fs is a reference to a filesystem location that
contains credentials that must be used to connect to the
provider.
properties:
path:
description: Path is a filesystem path.
type: string
required:
- path
type: object
secretRef:
description: A SecretRef is a reference to a secret key that
contains the credentials that must be used to connect to
the provider.
properties:
key:
description: The key to select.
type: string
name:
description: Name of the secret.
type: string
namespace:
description: Namespace of the secret.
type: string
required:
- key
- name
- namespace
type: object
source:
description: Source of the credentials.
enum:
- None
- Secret
- Environment
- Filesystem
type: string
required:
- source
type: object
required:
- auth
type: object
plugin:
description: Plugin configures External secret store as a plugin.
properties:
configRef:
description: ConfigRef contains store config reference info.
properties:
apiVersion:
description: APIVersion of the referenced config.
type: string
kind:
description: Kind of the referenced config.
type: string
name:
description: Name of the referenced config.
type: string
required:
- apiVersion
- kind
- name
type: object
endpoint:
description: Endpoint is the endpoint of the gRPC server.
type: string
type: object
type:
default: Kubernetes
description: Type configures which secret store to be used. Only the
configuration block for this store will be used and others will
be ignored if provided. Default is Kubernetes.
enum:
- Kubernetes
- Vault
- Plugin
type: string
required:
- defaultScope
type: object
required:
- spec
type: object
served: true
storage: true
subresources: {}

View File

@ -12,6 +12,11 @@ removed: 🗑️
moved: 🗺️
-->
## December 1, 2023
### New features 🎉
* Added [API documentation]({{<ref "../api">}}) for Crossplane core types.
## November 30, 2023
### New features 🎉

View File

@ -1,7 +1,7 @@
[build]
base = "/"
publish = "public/"
command = "hugo --minify "
command = "bash netlify_build.sh"
[build.environment]
HUGO_VERSION = "0.119.0"

View File

@ -11,6 +11,10 @@ cat config.yaml
if [ "$CONTEXT" = "production" ]; then
hugo --minify --baseURL https://docs.crossplane.io/
elif [ "$CONTEXT" = "branch-deploy" ]; then
echo "Building branch deploy with URL $DEPLOY_PRIME_URL"
hugo --minify --baseURL $DEPLOY_PRIME_URL
else
echo "Building other deploy $CONTEXT with URL https://deploy-preview-$REVIEW_ID--crossplane.netlify.app/"
hugo --minify --baseURL https://deploy-preview-$REVIEW_ID--crossplane.netlify.app/
fi

File diff suppressed because one or more lines are too long

View File

@ -11,4 +11,4 @@
* Licensed MIT © Zeno Rocha
*/
/*! instant.page v5.1.1 - (C) 2019-2020 Alexandre Dieulot - https://instant.page/license */
/*! instant.page v5.2.0 - (C) 2019-2023 Alexandre Dieulot - https://instant.page/license */

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,268 @@
@mixin vertical-bar {
content: "";
position: absolute;
background-color: #{$aqua-600};
width: 3px;
}
.crds {
padding-top: 24px;
@include media-breakpoint-down(xl) {
padding-right: 0px;
.mobile-hidden {
display: none;
}
.mobile-show {
padding-left: 27px;
color: var(--crd-description-color);
font-weight: 700;
padding-bottom: 24px;
}
}
@include media-breakpoint-up(xl) {
padding-right: 80px;
.mobile-show {
display: none;
}
}
.bigNameGroup {
padding-left: 27px;
color: var(--crd-description-color);
font-weight: 700;
padding-bottom: 24px;
display: block !important;
}
.expansion-link {
font-weight: 600;
color: var(--body-font-color);
&:hover {
text-decoration: none !important;
color: var(--body-font-color);
}
}
& :target {
padding-top: 0 !important;
margin-top: 0 !important;
}
/* can't use :target because the parent node needs padding */
.anchor-target {
padding-top: 60px !important;
}
.col {
padding-top: 10px;
padding-bottom: 10px;
}
.expand-link,
.collapse-link {
text-align: right;
color: var(--content-link-color);
cursor: pointer;
}
.crd-header-row {
font-weight: 800;
color: var(--crd-header-color);
padding-bottom: 10px;
cursor: pointer;
.sortable {
vertical-align: middle !important;
&.sorted {
color: var(--content-link-color);
}
}
.sort-icon {
margin-left: 6px;
display: inline-block;
vertical-align: middle !important;
width: 16px;
height: 16px;
opacity: 1;
background-repeat: no-repeat;
background-position: center;
&.sort-icon-down {
background-image: var(--sort-down);
}
&.sort-icon-up {
background-image: var(--sort-up);
}
}
.col {
padding-top: 0px !important;
padding-bottom: 0px !important;
}
}
button {
background-color: inherit !important;
border: none;
text-align: left;
}
.expand-button {
width: 17px;
height: 17px;
background-color: var(--expand-box-background) !important;
border-radius: 4px;
opacity: 1;
background-size: 11px;
background-repeat: no-repeat;
background-position: center;
position: relative;
&:not(.collapsed) {
background-image: var(--minus-svg);
background-color: #{$aqua-600} !important;
&::after {
@include vertical-bar;
height: 22px;
top: 17px;
left: 7px;
}
}
&.collapsed {
background-image: var(--plus-svg);
}
}
.crd-root-row,
.crd-header-row {
border-bottom: 1px solid var(--crd-row-border);
}
.crd-root-row {
>.crd-expand {
&::before {
left: 19px !important;
}
&.show {
margin-bottom: 15px;
}
}
}
.kind {
font-weight: 800 !important;
padding-right: 10px;
color: var(--body-font-color);
}
.kind-link {
>a>svg {
height: 12px;
fill: var(--link-icon-fill);
}
}
.description {
padding-top: 5px;
padding-left: 27px;
padding-bottom: 15px;
color: var(--crd-description-color);
}
.crd-child-container {
padding-top: 4px;
padding-left: 17px;
padding-bottom: 17px;
&:not(:last-of-type) {
padding-bottom: 15px;
}
}
.crd-expand {
position: relative;
&::before {
@include vertical-bar;
height: 100%;
top: 0px;
left: 7px;
}
// transition: margin 0ms;
}
.dataType,
.enum {
font-weight: 800;
border-radius: 4px;
padding-left: 5px;
padding-right: 5px;
padding-top: 2px;
padding-bottom: 2px;
border-style: solid;
border-width: 1px;
font-size: 14px;
margin-right: 5px;
}
.enum {
padding-top: 7px !important;
padding-bottom: 7px !important;
}
.required {
color: var(--required-color);
background-color: var(--required-background);
}
.string {
color: var(--string-color);
border-color: var(--string-border-color);
}
.object {
color: var(--object-color);
border-color: var(--object-border-color);
}
.boolean {
color: var(--boolean-color);
border-color: var(--boolean-border-color);
}
.integer {
color: var(--integer-color);
border-color: var(--integer-border-color);
}
.bigName-row {
overflow-x: auto;
white-space: nowrap;
}
.bigName-col {
display: inline-block;
float: none;
}
.bigName-reset {
white-space: initial;
}
}

View File

@ -41,6 +41,17 @@
grid-template-rows: auto 1fr;
grid-template-columns: 4fr 1fr;
}
&.no-toc{
@include media-breakpoint-up(lg) {
grid-template-areas:
"intro toc"
"content content" !important;
grid-template-rows: auto 1fr;
grid-template-columns: 4fr 1fr;
}
}
}
.bd-intro {

View File

@ -50,6 +50,32 @@
--search-box-background: var(--body-background);
--result-path: var(--body-background);
// API Page
--sort-up: url("/img/sort-up-light.svg");
--sort-down: url("/img/sort-down-light.svg");
--expand-box-background: #{$fog-800};
--minus-svg: url("/img/minus-white.svg");
--plus-svg: url("/img/plus-150.svg");
--crd-header-color: #{$fog-400};
--crd-row-border: #{$fog-800};
--crd-description-color: #{$fog-400};
--link-icon-fill: #{$fog-600};
--required-color: #{$fog-1000};
--required-background: #{$fog-200};
--string-color: #{$grass-300};
--string-border: #{$grass-300};
--object-color: #{$tangerine-300};
--object-border-color: #{$tangerine-300};
--boolean-color: #{$sun-300};
--boolean-border-color: #{$sun-300};
--integer-color: #{$salmon-300};
--integer-border-color: #{$salmon-300};
// Override Bootstrap accordion colors in the body
.accordion {
--bs-accordion-border-color: #{$fog-500};

View File

@ -46,6 +46,7 @@
/* purgecss start ignore */
@import "search-button";
@import "search-results";
@import "crds";
/* purgecss end ignore */
@import "skippy";
@import "fonts";

View File

@ -58,6 +58,32 @@
--search-box-background: var(--body-background);
--result-path: var(--body-background);
// API Page
--sort-up: url("/img/sort-up-light.svg");
--sort-down: url("/img/sort-down-light.svg");
--expand-box-background: #{$fog-100};
--minus-svg: url("/img/minus-white.svg");
--plus-svg: url("/img/plus-black.svg");
--crd-header-color: #{$fog-600};
--crd-row-border: #{$fog-600};
--crd-description-color: #{$fog-600};
--link-icon-fill: #{$fog-400};
--required-color: #{$fog-0};
--required-background: #{$fog-800};
--string-color: #{$grass-700};
--string-border: #{$grass-700};
--object-color: #{$tangerine-700};
--object-border-color: #{$tangerine-700};
--boolean-color: #{$sun-600};
--boolean-border-color: #{$sun-600};
--integer-color: #{$salmon-600};
--integer-border-color: #{$salmon-600};
// Override Bootstrap accordion colors in the body
.accordion {
--bs-accordion-border-color: #{$fog-400};

View File

@ -1,8 +1,8 @@
{
"main.js": {
"src": "js/main-ed51df05.bundle.min.js"
"src": "js/main-41e2db8f.bundle.min.js"
},
"main-ed51df05.bundle.min.js.map": {
"src": "js/main-ed51df05.bundle.min.js.map"
"main-41e2db8f.bundle.min.js.map": {
"src": "js/main-41e2db8f.bundle.min.js.map"
}
}

View File

@ -0,0 +1,417 @@
{{ .Content }}
<div class="crds">
<!-- Kind | Group | Version | Expand | Collapse header -->
<div class="row crd-header-row bigName-row" id="crd-header-row">
<div class="col col-xl-4 col-8 sortable" onclick="sortIt('kind')"><span data-sort="kind">Kind</span><span class="kind-sort sort-icon sort-icon-down d-none"></span><span class="kind-sort sort-icon sort-icon-up d-none"></span></div>
<div class="col col-lg-3 mobile-hidden sortable" onclick="sortIt('group')"><span data-sort="group">Group</span><span class="group-sort sort-icon sort-icon-down d-none"></span><span class="group-sort sort-icon sort-icon-up d-none"></span></div>
<div class="col col-lg-1 mobile-hidden sortable" onclick="sortIt('version')"><span data-sort="version" >Version</span><span class="version-sort sort-icon sort-icon-down d-none"></span><span class="version-sort sort-icon sort-icon-up d-none"></span></div>
<div class="col col-2 expand-link mobile-hidden text-truncate" onclick="showAll('all')"><a href="#">Expand All</a></div>
<div class="col col-2 collapse-link mobile-hidden text-truncate" onclick="hideAll('all')"><a href="#">Collapse All</a></div>
</div>
<div id="crd-rows-container">
{{/* Each level is a map with the key being the directory name */}}
{{/* $Site.Data.crds /$version/crds/yaml */}}
{{ range index $.Site.Data.crds (printf "v%s" .Page.Params.version) "api" "yaml" }}
{{ $kind := .spec.names.kind }}
{{ $group := .spec.group }}
{{ $version := "" }}
{{ $description := "" }}
{{ $schemaScratch := newScratch }} {{/* Temporary variable used to prune fields from the larger spec */}}
{{ $schemaWithStatus := dict }} {{/* The pruned schema to work with */}}
{{ $bigName := gt (len $kind) 32 }} {{/* Long names overrun the display and cause problems. This allows for applying custom styles */}}
{{/* Iterate over each version and find the "storage: true" version */}}
{{ range .spec.versions }}
{{ if index . "storage" }}
{{ $version = .name }}
{{ $schemaScratch.Set "oAPI" (index . "schema" "openAPIV3Schema" "properties") }}
{{/* Pull out the top-level Kind description and delete unnecessary fields */}}
{{ $description = (index . "schema" "openAPIV3Schema" "description") }}
{{ $schemaScratch.DeleteInMap "oAPI" "apiVersion" }}
{{ $schemaScratch.DeleteInMap "oAPI" "kind" }}
{{ $schemaScratch.DeleteInMap "oAPI" "metadata" }}
{{ $schemaScratch.DeleteInMap "oAPI" "description" }}
{{ $schemaWithStatus = $schemaScratch.Get "oAPI" }}
{{ end }}
{{ end }}
{{/* the crd-root-row is a top level CRD row */}}
<div class="crd-root-row crd-container row align-middle bigName-row" data-kind="{{ $kind }}" data-group="{{ $group }}-{{ $kind}}" data-version="{{ $version }}-{{ $kind }}">
{{/* Collapse/Expand Button and Kind name */}}
<div class="col col-xl-4 col-8 align-middle expand-buttons bigName-col">
{{/* Plus/Minus Button */}}
<button class="expand-button collapsed align-middle" data-bs-toggle="collapse" data-bs-target="#{{$kind}}" type="button" aria-expanded="false" aria-controls="{{$kind}}"></button>
{{/* CRD name text */}}
<button class="crd-root collapsed align-middle" data-bs-toggle="collapse" data-bs-target="#{{$kind}}" type="button" aria-expanded="false" aria-controls="{{$kind}}">
<span class="align-middle {{ $kind }}"><a class="expansion-link" name="{{ $kind }}">{{ $kind }}</a></span>
</button>
</div>
{{/* If the CRD name is longer than 24 characters hide the other fields, regardless of viewport size */}}
<div class="{{ if $bigName }}d-none{{end}} col col-lg-3 col-2 mobile-hidden group-name text-truncate">{{ $group }}</div>
<div class="{{ if $bigName }}d-none{{end}} col col-lg-1 col-2 mobile-hidden ">{{ $version }}</div>
<div class="{{ if $bigName }}d-none{{end}} col col-2 align-middle expand-link mobile-hidden text-truncate" onclick="showAll('.{{ $kind }}')">Expand All</div>
<div class="{{ if $bigName }}d-none{{end}} col col-2 align-middle collapse-link mobile-hidden text-truncate" onclick="hideAll('.{{ $kind }}')">Collapse All</div>
{{/* The container to show/hide with information related to the CRD */}}
<div class="collapse crd-expand {{$kind}}" id="{{$kind}}">
{{/* If the group and version are hidden from the row, display them here */}}
<div class="{{if $bigName }}bigNameGroup{{end}} mobile-group mobile-show">{{$group}}/{{$version}}</div>
{{/* bigName-reset prevents the description from expanding into the x-scroll */}}
<div class="description bigName-reset">{{ $description | markdownify}}</div>
{{/* Loop over the fields in the pruned Schema and generate their content */}}
{{ range $key,$schema := $schemaWithStatus }}
<div class="crd-children">
{{ template "buildCRD" (dict "key" $key "schema" $schema "isFirst" true "kind" $kind "requiredFields" .required "rootKind" $kind "permalink" $.Page.Permalink) }}
</div>
{{ end }}
</div>
</div>
{{ end }}
</div>
</div>
{{ define "buildCRD" }}
{{/* The first field (spec) has a different schema compared to the child nodes */}}
{{ if .isFirst }}
{{ $elemID := (printf "%s-%s" .kind .key) }}
{{ $dataTypeStyle := .schema.type }}
{{ $dataType := .schema.type }}
{{ $description := .schema.description }}
{{ $properties := .schema.properties }}
{{ $required := .schema.required }}
{{/* Special handling for arrays to check if it's a list of 'items' */}}
{{ if eq .schema.type "array" }}
{{ if .schema.items }}
{{ $dataType = (printf "[ ]%s" .schema.items.type) }}
{{ $dataTypeStyle = .schema.items.type }}
{{ $description = .schema.items.description }}
{{ $properties = .schema.items.properties }}
{{ $required = .schema.items.required }}
{{ else }}
{{ $dataType = (printf "[ ]%s" .schema.type) }}
{{ end }}
{{ end }}
<div class="crd-child-container crd-container align-middle expand-buttons">
{{/* Plus/Minus Button */}}
<button class="expand-button collapsed align-middle" data-bs-toggle="collapse" data-bs-target="#{{ $elemID }}" type="button" aria-expanded="false" aria-controls="{{ $elemID }}"></button>
{{/* CRD name text */}}
<button class="crd-root collapsed align-middle" data-bs-toggle="collapse" data-bs-target="#{{ $elemID }}" type="button" aria-expanded="false" aria-controls="{{ $elemID }}">
<div>
<span class="kind align-middle">{{ .key }}</span>
<span class="dataType {{ $dataTypeStyle }} align-middle">{{ $dataType }}</span>
</div>
</button>
{{/* Anchor link icon */}}
<span class="kind-link" data-bs-content="Link Copied!" data-clipboard-text="{{.permalink}}#{{$elemID}}"><a href="#{{ $elemID }}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path d="M579.8 267.7c56.5-56.5 56.5-148 0-204.5c-50-50-128.8-56.5-186.3-15.4l-1.6 1.1c-14.4 10.3-17.7 30.3-7.4 44.6s30.3 17.7 44.6 7.4l1.6-1.1c32.1-22.9 76-19.3 103.8 8.6c31.5 31.5 31.5 82.5 0 114L422.3 334.8c-31.5 31.5-82.5 31.5-114 0c-27.9-27.9-31.5-71.8-8.6-103.8l1.1-1.6c10.3-14.4 6.9-34.4-7.4-44.6s-34.4-6.9-44.6 7.4l-1.1 1.6C206.5 251.2 213 330 263 380c56.5 56.5 148 56.5 204.5 0L579.8 267.7zM60.2 244.3c-56.5 56.5-56.5 148 0 204.5c50 50 128.8 56.5 186.3 15.4l1.6-1.1c14.4-10.3 17.7-30.3 7.4-44.6s-30.3-17.7-44.6-7.4l-1.6 1.1c-32.1 22.9-76 19.3-103.8-8.6C74 372 74 321 105.5 289.5L217.7 177.2c31.5-31.5 82.5-31.5 114 0c27.9 27.9 31.5 71.8 8.6 103.9l-1.1 1.6c-10.3 14.4-6.9 34.4 7.4 44.6s34.4 6.9 44.6-7.4l1.1-1.6C433.5 260.8 427 182 377 132c-56.5-56.5-148-56.5-204.5 0L60.2 244.3z"/></svg></a></span>
{{/* The container to show/hide with information related to the CRD */}}
<div class="collapse crd-expand expand-buttons {{.rootKind}}" id="{{ $elemID }}">
<div class="description bigName-reset">
{{ $description | markdownify }}
</div>
<div class="crd-children align-middle">
{{ template "buildCRD" (dict "schema" $properties "isFirst" false "kind" $elemID "requiredFields" $required "rootKind" .rootKind "permalink" .permalink ) }}
</div>
</div>
</div>
{{ else }}
{{/* Iterate over all child CRD elements */}}
{{ range $key,$contents := .schema }}
{{ $bigName := gt (len $key) 24 }}
{{ $dataType := $contents.type }}
{{ $dataTypeStyle := $dataType }}
{{ $elemID := (printf "%s-%s" $.kind $key) }}
{{ $dataTypeStyle := $contents.type }}
{{ $dataType := $contents.type }}
{{ $description := $contents.description }}
{{ $properties := $contents.properties }}
{{ $required := $.requiredFields }}
{{/* enum fields handle "oneOf" type data lists */}}
{{ $enum := false }}
{{ $enumOf := "" }}
{{ $enumTypes := dict }}
{{ if $contents.oneOf }}
{{ $enum = true }}
{{ $enumOf = "One of" }}
{{ $enumTypes := $contents.oneOf }}
{{ else if $contents.anyOf }}
{{ $enum = true }}
{{ $enumOf = "Any of" }}
{{ $enumTypes := $contents }}
{{ else if $contents.allOf }}
{{ $enum = true }}
{{ $enumOf = "All of" }}
{{ $enumTypes := $contents.allOf }}
{{ end }}
{{ if eq $contents.type "array" }}
{{ if $contents.items }}
{{ $dataType = (printf "[ ]%s" $contents.items.type) }}
{{ $dataTypeStyle = $contents.items.type }}
{{/* Some "items" don't have nested elements. */}}
{{/* For example CompositeResourceDefinitions.Spec.ClaimNames.categories */}}
{{ if $contents.items.description }}
{{ $description = $contents.items.description }}
{{ end }}
{{ if $contents.items.properties }}
{{ $properties = $contents.items.properties }}
{{ end }}
{{ if $contents.items.required}}
{{ $required = $contents.items.required }}
{{ end }}
{{ else }}
{{ $dataType = (printf "[ ]%s" $contents.type) }}
{{ end }}
{{ end }}
<div class="crd-child-container crd-container align-middle expand-buttons expand-buttons bigName-row">
{{/* Plus/Minus Button */}}
<button class="expand-button collapsed align-middle" data-bs-toggle="collapse" data-bs-target="#{{$elemID}}" type="button" aria-expanded="false" aria-controls="{{$elemID}}"></button>
{{/* CRD name text */}}
<button class="crd-root collapsed align-middle" data-bs-toggle="collapse" data-bs-target="#{{$elemID}}" type="button" aria-expanded="false" aria-controls="{{$elemID}}">
<div>
<span class="kind align-middle">{{ $key }}</span>
{{/* An enum puts the data types inside the "One of" border box. */}}
{{ if $enum }}
<span class="enum">{{$enumOf}}
{{ range $contents.anyOf }}
{{ range . }}
<span class="dataType {{ . }} align-middle">{{ . }}</span>
{{ end }}
{{ end }}
</span>
{{ else }}
<span class="dataType {{ $dataTypeStyle }} align-middle">{{ $dataType }}</span>
{{ end }}
{{if in $.requiredFields $key}}<span class="dataType required align-middle">required</span>{{ end }}
</div>
</button>
{{/* Link icon */}}
<span class="kind-link" data-clipboard-text="{{$.permalink}}#{{$elemID}}"><a href="#{{$elemID}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path d="M579.8 267.7c56.5-56.5 56.5-148 0-204.5c-50-50-128.8-56.5-186.3-15.4l-1.6 1.1c-14.4 10.3-17.7 30.3-7.4 44.6s30.3 17.7 44.6 7.4l1.6-1.1c32.1-22.9 76-19.3 103.8 8.6c31.5 31.5 31.5 82.5 0 114L422.3 334.8c-31.5 31.5-82.5 31.5-114 0c-27.9-27.9-31.5-71.8-8.6-103.8l1.1-1.6c10.3-14.4 6.9-34.4-7.4-44.6s-34.4-6.9-44.6 7.4l-1.1 1.6C206.5 251.2 213 330 263 380c56.5 56.5 148 56.5 204.5 0L579.8 267.7zM60.2 244.3c-56.5 56.5-56.5 148 0 204.5c50 50 128.8 56.5 186.3 15.4l1.6-1.1c14.4-10.3 17.7-30.3 7.4-44.6s-30.3-17.7-44.6-7.4l-1.6 1.1c-32.1 22.9-76 19.3-103.8-8.6C74 372 74 321 105.5 289.5L217.7 177.2c31.5-31.5 82.5-31.5 114 0c27.9 27.9 31.5 71.8 8.6 103.9l-1.1 1.6c-10.3 14.4-6.9 34.4 7.4 44.6s34.4 6.9 44.6-7.4l1.1-1.6C433.5 260.8 427 182 377 132c-56.5-56.5-148-56.5-204.5 0L60.2 244.3z"/></svg></a></span>
{{/* The container to show/hide with information related to the CRD */}}
<div class="collapse crd-expand {{$.rootKind}} bigName-reset" id="{{$elemID}}">
<div class="description">
{{$description | markdownify }}
</div>
{{ if $properties }}
<div class="crd-children align-middle">
{{ template "buildCRD" (dict "schema" $properties "requiredFields" $required "kind" $elemID "rootKind" $.rootKind "permalink" $.permalink ) }}
</div>
{{ end }}
</div>
</div>
{{ end }} {{/* range $key,$contents */}}
{{ end }} {{/* if/else */}}
{{ end }} {{/* define */}}
<script>
function boxCloser(){
boxes = document.querySelectorAll(".crd-expand");
for(var index = 0; index < boxes.length; index++){
boxes[index].addEventListener("click", function (e){
if (e.offsetX < this.offsetWidth){
//hideAll("#" + this.id);
}
});
}
}
/**
* Add the "show" class and remove the "collapse" class from all elements
* matching the 'type' queryselector.
*
* Alternatively the type `all` will apply to all elements.
* @param {string} type - a CSS query selector or "all"
*/
function showAll(type){
if(type === "all"){
var root = document;
}
else{
var typeElem = document.querySelector(type);
var root = typeElem.closest(".crd-container")
}
var buttons = root.querySelectorAll(".expand-buttons > button");
var hiddenElems = root.querySelectorAll(".crd-expand");
// This works by changing the classes bootstrap uses.
// It would be more accurate to click() or invoke the bootstrap JS API.
// This has major performance problems for large APIs and isn't used.
for(var i = 0; i < buttons.length; i++){
buttons[i].classList.remove("collapsed");
}
for(var i = 0; i < hiddenElems.length; i++){
hiddenElems[i].classList.remove("collapse");
hiddenElems[i].classList.add("show");
}
}
/**
* Add the "collapse" class and remove the "show" class from all elements
* matching the 'type' queryselector.
*
* Alternatively the type `all` will apply to all elements.
* @param {string} type - a CSS query selector or "all"
*/
function hideAll(type){
if(type === "all"){
var root = document;
}
else{
var typeElem = document.querySelector(type);
var root = typeElem.closest(".crd-container")
}
var buttons = root.querySelectorAll(".expand-buttons > button");
var hiddenElems = root.querySelectorAll(".crd-expand");
// This works by changing the classes bootstrap uses.
// It would be more accurate to click() or invoke the bootstrap JS API.
// This has major performance problems for large APIs and isn't used.
for(var i = 0; i < buttons.length; i++){
buttons[i].classList.add("collapsed");
}
for(var i = 0; i < hiddenElems.length; i++){
hiddenElems[i].classList.add("collapse");
hiddenElems[i].classList.remove("show");
}
}
/**
* Sorts the API by 'kind', 'group' or 'version'.
*
* @param {string} sortOn - One of "kind", "group" or "version"
*/
function sortIt(sortOn="kind"){
// only look at elements labeled as "stortable"
var titleElements = document.getElementsByClassName("sortable");
// natural or reverse sort?
var reverseSort = false;
// iterate over the sortable items and set the proper sort icon
for(var i = 0; i < titleElements.length; i++){
if(titleElements[i].children[0].dataset.sort === sortOn){
titleElements[i].classList.add("sorted");
// If we can't see the first element then sort natural
if(titleElements[i].children[1].classList.contains("d-none")){
titleElements[i].children[1].classList.remove("d-none");
titleElements[i].children[2].classList.add("d-none");
}
// Otherwise, the first element is visible and the second isn't.
// Make it visible and reverse sort
else if(titleElements[i].children[2].classList.contains("d-none")){
titleElements[i].children[2].classList.remove("d-none");
titleElements[i].children[1].classList.add("d-none");
reverseSort = true
}
}
else {
titleElements[i].classList.remove("sorted");
titleElements[i].children[1].classList.add("d-none");
titleElements[i].children[2].classList.add("d-none");
}
}
// element sorting from https://jsfiddle.net/fkling/nXkDp/
var toSort = document.getElementById('crd-rows-container').children;
toSort = Array.prototype.slice.call(toSort, 0);
toSort.sort(function(a, b) {
var aord = a.dataset[sortOn];
var bord = b.dataset[sortOn];
if(reverseSort){
return (bord.localeCompare(aord));
}
else {
return (aord.localeCompare(bord));
}
});
var parent = document.getElementById('crd-rows-container');
parent.innerHTML = "";
for(var i = 0, l = toSort.length; i < l; i++) {
parent.appendChild(toSort[i]);
}
}
// on page load sort the fields and expand and scroll to the anchor if it's set.
document.addEventListener("DOMContentLoaded", function(event){
sortIt();
scrollToAnchor();
})
function scrollToAnchor(){
var hash = window.location.hash.replace("#","");
// hash on this page means they linked directly to an API object
if(hash.length > 0){
var hashes = hash.split("-");
// set an event listener on the last element to scroll it into view when expanded.
var lastElement = document.getElementById(hash);
lastElement.closest(".crd-child-container").classList.add("anchor-target");
// loop through the parent elements and click them to expand
var workingHash = [];
for(var index = 0; index < hashes.length; index++){
workingHash.push(hashes[index]);
document.querySelector("#" + workingHash.join("-")).classList.add("show");
}
}
}
</script>

View File

@ -0,0 +1,47 @@
{{ if .Page.Store.Get "hasMermaid" }}
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
<script type="module">
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs';
document.addEventListener("DOMContentLoaded", setMermaidStyle());
document.addEventListener("DOMContentLoaded", colorModeListener());
function getMermaidConfig(){
var style = getComputedStyle(document.body)
var font = style.getPropertyValue("font-family")
var fontColor = style.getPropertyValue('--body-font-color')
var backgroundColor = style.getPropertyValue('--body-background')
var config = {
"theme": "base",
"fontFamily": font,
"themeVariables": {
"background": backgroundColor,
"textColor": fontColor,
}
}
return config
}
function setMermaidStyle(){
var config = getMermaidConfig()
mermaid.initialize( config )
}
function colorModeListener(){
darkSwitch.addEventListener("click", resetMermaidStyle())
}
function resetMermaidStyle(){
console.log("resetting")
var config = getMermaidConfig()
console.log(config)
mermaid.mermaidAPI.setConfig( config )
mermaid.mermaidAPI.reset()
}
</script>
{{ end }}

View File

@ -0,0 +1,23 @@
{{ range .Pages.Reverse }}
{{ if ne .Title "Docs Changelog" }}
{{ if not .Page.Params.released }}
{{ errorf (printf "Release Notes Page %q requires 'released' Front Matter." .Page.File.Path ) }}
{{ end }}
{{ if not .Title }}
{{ errorf (printf "Release Notes Page %q requires 'title' Front Matter." .Page.File.Path ) }}
{{ end }}
<div class="rn-container pb-3">
<h2 class="rn-title">{{ .Title}}</h2>
<div class="rn-summary-meta">
Released: {{ .Page.Params.released }} -
<a href="https://github.com/crossplane/crossplane/releases/tag/{{.Title}}">GitHub</a>
</div>
<div class="rn-body ps-3">
{{ .Summary | markdownify }}
<a href="{{.Permalink}}">Full {{.Title}} release notes</a>
</div>
</div>
{{ end }}
{{ end }}

View File

@ -1,4 +1,4 @@
<div class="bd-layout docs-container">
<div class="bd-layout docs-container">
<aside class="bd-sidebar">
<div class="offcanvas-lg offcanvas-start bd-sidebar-container" tabindex="-1" id="bdSidebar" aria-labelledby="bdSidebarOffcanvasLabel">
<div class="offcanvas-header pb-4 border-bottom">
@ -15,7 +15,7 @@
{{ partial "left-nav" . }}
</aside>
<main class="bd-main order-1">
<main class="bd-main order-1 {{ if eq $.Params.Product "crds" }}no-toc{{end}} ">
<div class="bd-intro pt-2 ps-lg-2">
<div class="d-md-flex flex-md-row-reverse align-items-center justify-content-between">
<div class="mb-3 mb-md-0 d-flex">
@ -39,8 +39,7 @@
{{ end }}
</div>
<div class="bd-toc mt-3 mb-5 my-lg-0 ps-xl-3 mb-lg-5">
<div class="bd-toc mt-3 mb-5 my-lg-0 ps-xl-3 mb-lg-5 {{ if eq $.Params.Product "crds" }}d-none{{end}}">
{{ if (ne .Page.Params.toc false) }}
{{ if gt (len .TableOfContents) 40 }}
<button class="btn btn-link p-md-0 mb-2 mb-md-0 text-decoration-none bd-toc-toggle d-md-none" type="button" data-bs-toggle="collapse" data-bs-target="#tocContents" aria-expanded="false" aria-controls="tocContents">
@ -79,80 +78,14 @@
{{ end }}
{{ if eq $.Params.Product "Release Notes" }}
{{ range .Pages.Reverse }}
{{ if ne .Title "Docs Changelog" }}
{{ if not .Page.Params.released }}
{{ errorf (printf "Release Notes Page %q requires 'released' Front Matter." .Page.File.Path ) }}
{{ end }}
{{ if not .Title }}
{{ errorf (printf "Release Notes Page %q requires 'title' Front Matter." .Page.File.Path ) }}
{{ end }}
<div class="rn-container pb-3">
<h2 class="rn-title">{{ .Title}}</h2>
<div class="rn-summary-meta">
Released: {{ .Page.Params.released }} -
<a href="https://github.com/crossplane/crossplane/releases/tag/{{.Title}}">GitHub</a>
</div>
<div class="rn-body ps-3">
{{ .Summary | markdownify }}
<a href="{{.Permalink}}">Full {{.Title}} release notes</a>
</div>
</div>
{{ end }}
{{ end }}
{{ partial "release-notes" . }}
{{ else if eq $.Params.Product "crds" }}
{{ partial "crds" . }}
{{ else }}
{{ .Content }}
{{ end }}
</div>
</main>
</div>
</div>
{{ if .Page.Store.Get "hasMermaid" }}
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
<script type="module">
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs';
document.addEventListener("DOMContentLoaded", setMermaidStyle());
document.addEventListener("DOMContentLoaded", colorModeListener());
function getMermaidConfig(){
var style = getComputedStyle(document.body)
var font = style.getPropertyValue("font-family")
var fontColor = style.getPropertyValue('--body-font-color')
var backgroundColor = style.getPropertyValue('--body-background')
var config = {
"theme": "base",
"fontFamily": font,
"themeVariables": {
"background": backgroundColor,
"textColor": fontColor,
}
}
return config
}
function setMermaidStyle(){
var config = getMermaidConfig()
mermaid.initialize( config )
}
function colorModeListener(){
darkSwitch.addEventListener("click", resetMermaidStyle())
}
function resetMermaidStyle(){
console.log("resetting")
var config = getMermaidConfig()
console.log(config)
mermaid.mermaidAPI.setConfig( config )
mermaid.mermaidAPI.reset()
}
</script>
{{ end }}
{{ partial "mermaid" . }}

View File

@ -0,0 +1,6 @@
{{ range .Page.Resources.Match "**.yaml" }}
{{ . }} <br />
{{ end }}

View File

@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<g id="minus">
<path
d="M432 256c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l352 0c17.7 0 32 14.3 32 32z" />
</g>
</defs>
<use xlink:href="#minus" />
</svg>

After

Width:  |  Height:  |  Size: 349 B

View File

@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<g id="minus">
<path
d="M432 256c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l352 0c17.7 0 32 14.3 32 32z" />
</g>
</defs>
<use style="fill:white" xlink:href="#minus" />
</svg>

After

Width:  |  Height:  |  Size: 368 B

View File

@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<g id="plus">
<path d="M432 256C432 260.4 428.4 264 424 264h-192v192c0 4.422-3.578 8.006-8 8.006S216 460.4 216 456v-192h-192c-4.422 0-8-3.572-8-7.994C16 251.6 19.58 248 24 248h192v-192c0-4.422 3.578-7.994 8-7.994S232 51.58 232 56v192h192C428.4 248 432 251.6 432 256z"/>
</g>
</defs>
<use style="fill:#DADCDC" xlink:href="#plus" />
</svg>

After

Width:  |  Height:  |  Size: 494 B

View File

@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<g id="plus">
<path d="M432 256C432 260.4 428.4 264 424 264h-192v192c0 4.422-3.578 8.006-8 8.006S216 460.4 216 456v-192h-192c-4.422 0-8-3.572-8-7.994C16 251.6 19.58 248 24 248h192v-192c0-4.422 3.578-7.994 8-7.994S232 51.58 232 56v192h192C428.4 248 432 251.6 432 256z"/>
</g>
</defs>
<use xlink:href="#plus" />
</svg>

After

Width:  |  Height:  |  Size: 473 B

View File

@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<g id="plus">
<path d="M432 256C432 260.4 428.4 264 424 264h-192v192c0 4.422-3.578 8.006-8 8.006S216 460.4 216 456v-192h-192c-4.422 0-8-3.572-8-7.994C16 251.6 19.58 248 24 248h192v-192c0-4.422 3.578-7.994 8-7.994S232 51.58 232 56v192h192C428.4 248 432 251.6 432 256z"/>
</g>
</defs>
<use xlink:href="#plus" />
</svg>

After

Width:  |  Height:  |  Size: 473 B

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 576 512" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<g id="sort-down">
<path d="M151.6 469.6C145.5 476.2 137 480 128 480s-17.5-3.8-23.6-10.4l-88-96c-11.9-13-11.1-33.3 2-45.2s33.3-11.1 45.2 2L96 365.7V64c0-17.7 14.3-32 32-32s32 14.3 32 32V365.7l32.4-35.4c11.9-13 32.2-13.9 45.2-2s13.9 32.2 2 45.2l-88 96zM320 32h32c17.7 0 32 14.3 32 32s-14.3 32-32 32H320c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H320c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H320c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H320c-17.7 0-32-14.3-32-32s14.3-32 32-32z"/>
</g>
</defs>
<use style="fill:#5DD9C8" xlink:href="#sort-down" />
</svg>

After

Width:  |  Height:  |  Size: 846 B

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 576 512" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<g id="sort-down">
<path d="M151.6 469.6C145.5 476.2 137 480 128 480s-17.5-3.8-23.6-10.4l-88-96c-11.9-13-11.1-33.3 2-45.2s33.3-11.1 45.2 2L96 365.7V64c0-17.7 14.3-32 32-32s32 14.3 32 32V365.7l32.4-35.4c11.9-13 32.2-13.9 45.2-2s13.9 32.2 2 45.2l-88 96zM320 32h32c17.7 0 32 14.3 32 32s-14.3 32-32 32H320c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H320c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H320c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H320c-17.7 0-32-14.3-32-32s14.3-32 32-32z"/>
</g>
</defs>
<use style="fill:#248477" xlink:href="#sort-down" />
</svg>

After

Width:  |  Height:  |  Size: 847 B

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 576 512" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<g id="sort-up">
<path d="M151.6 42.4C145.5 35.8 137 32 128 32s-17.5 3.8-23.6 10.4l-88 96c-11.9 13-11.1 33.3 2 45.2s33.3 11.1 45.2-2L96 146.3V448c0 17.7 14.3 32 32 32s32-14.3 32-32V146.3l32.4 35.4c11.9 13 32.2 13.9 45.2 2s13.9-32.2 2-45.2l-88-96zM320 480h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32zm0-128h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32zm0-128H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32zm0-128H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32z"/>
</g>
</defs>
<use style="fill:#5DD9C8" xlink:href="#sort-up" />
</svg>

After

Width:  |  Height:  |  Size: 840 B

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 576 512" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<g id="sort-up">
<path d="M151.6 42.4C145.5 35.8 137 32 128 32s-17.5 3.8-23.6 10.4l-88 96c-11.9 13-11.1 33.3 2 45.2s33.3 11.1 45.2-2L96 146.3V448c0 17.7 14.3 32 32 32s32-14.3 32-32V146.3l32.4 35.4c11.9 13 32.2 13.9 45.2 2s13.9-32.2 2-45.2l-88-96zM320 480h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32zm0-128h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32zm0-128H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32zm0-128H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32z"/>
</g>
</defs>
<use style="fill:#248477" xlink:href="#sort-up" />
</svg>

After

Width:  |  Height:  |  Size: 841 B

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,9 @@
// Customize clipboard.js
import * as ClipboardJS from 'clipboard';
// copy API links to the clipboard
const crdURLCopier = new ClipboardJS('.kind-link');
// Most of the following is directly from the Bootstrap Website.
// https://github.com/twbs/bootstrap/blob/main/site/assets/js/code-examples.js
const btnHtml = [