Documentation
¶
Overview ¶
Package v1 contains API Schema definitions for the olm v1 API group +kubebuilder:object:generate=true +groupName=olm.operatorframework.io
Index ¶
- Constants
- Variables
- type AvailabilityMode
- type BundleMetadata
- type CRDUpgradeSafetyEnforcement
- type CRDUpgradeSafetyPreflightConfig
- type CatalogFilter
- type CatalogSource
- type ClusterCatalog
- type ClusterCatalogList
- type ClusterCatalogSpec
- type ClusterCatalogStatus
- type ClusterCatalogURLs
- type ClusterExtension
- type ClusterExtensionConfig
- type ClusterExtensionConfigType
- type ClusterExtensionInstallConfig
- type ClusterExtensionInstallStatus
- type ClusterExtensionList
- type ClusterExtensionSpec
- type ClusterExtensionStatus
- type ImageSource
- type PreflightConfig
- type ResolvedCatalogSource
- type ResolvedImageSource
- type ServiceAccountReference
- type SourceConfig
- type SourceType
- type UpgradeConstraintPolicy
Constants ¶
const ( SourceTypeImage SourceType = "Image" MetadataNameLabel = "olm.operatorframework.io/metadata.name" AvailabilityModeAvailable AvailabilityMode = "Available" // Condition types TypeServing = "Serving" // Serving Reasons ReasonAvailable = "Available" )
const ( // The extension will only upgrade if the new version satisfies // the upgrade constraints set by the package author. UpgradeConstraintPolicyCatalogProvided UpgradeConstraintPolicy = "CatalogProvided" // Unsafe option which allows an extension to be // upgraded or downgraded to any available version of the package and // ignore the upgrade path designed by package authors. // This assumes that users independently verify the outcome of the changes. // Use with caution as this can lead to unknown and potentially // disastrous results such as data loss. UpgradeConstraintPolicySelfCertified UpgradeConstraintPolicy = "SelfCertified" ClusterExtensionConfigTypeInline ClusterExtensionConfigType = "Inline" )
const ( // TypeDeprecated is a rollup condition that is present when // any of the deprecated conditions are present. TypeDeprecated = "Deprecated" TypePackageDeprecated = "PackageDeprecated" TypeChannelDeprecated = "ChannelDeprecated" TypeBundleDeprecated = "BundleDeprecated" // None will not perform CRD upgrade safety checks. CRDUpgradeSafetyEnforcementNone CRDUpgradeSafetyEnforcement = "None" // Strict will enforce the CRD upgrade safety check and block the upgrade if the CRD would not pass the check. CRDUpgradeSafetyEnforcementStrict CRDUpgradeSafetyEnforcement = "Strict" )
const ( TypeInstalled = "Installed" TypeProgressing = "Progressing" // Progressing reasons ReasonSucceeded = "Succeeded" ReasonRetrying = "Retrying" ReasonBlocked = "Blocked" // Terminal reasons ReasonDeprecated = "Deprecated" ReasonFailed = "Failed" )
const SourceTypeCatalog = "Catalog"
Variables ¶
var ( // GroupVersion is group version used to register these objects GroupVersion = schema.GroupVersion{Group: "olm.operatorframework.io", Version: "v1"} // SchemeBuilder is used to add go types to the GroupVersionKind scheme SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion} // AddToScheme adds the types in this group-version to the given scheme. AddToScheme = SchemeBuilder.AddToScheme )
var ClusterExtensionKind = "ClusterExtension"
Functions ¶
This section is empty.
Types ¶
type AvailabilityMode ¶ added in v1.2.0
type AvailabilityMode string
AvailabilityMode defines the availability of the catalog
type BundleMetadata ¶
type BundleMetadata struct {
// name is required and follows the DNS subdomain standard
// as defined in [RFC 1123]. It must contain only lowercase alphanumeric characters,
// hyphens (-) or periods (.), start and end with an alphanumeric character,
// and be no longer than 253 characters.
//
// +kubebuilder:validation:Required
// +kubebuilder:validation:XValidation:rule="self.matches(\"^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$\")",message="packageName must be a valid DNS1123 subdomain. It must contain only lowercase alphanumeric characters, hyphens (-) or periods (.), start and end with an alphanumeric character, and be no longer than 253 characters"
Name string `json:"name"`
// version is a required field and is a reference to the version that this bundle represents
// version follows the semantic versioning standard as defined in https://semver.org/.
//
// +kubebuilder:validation:Required
// +kubebuilder:validation:XValidation:rule="self.matches(\"^([0-9]+)(\\\\.[0-9]+)?(\\\\.[0-9]+)?(-([-0-9A-Za-z]+(\\\\.[-0-9A-Za-z]+)*))?(\\\\+([-0-9A-Za-z]+(-\\\\.[-0-9A-Za-z]+)*))?\")",message="version must be well-formed semver"
Version string `json:"version"`
}
BundleMetadata is a representation of the identifying attributes of a bundle.
func (*BundleMetadata) DeepCopy ¶
func (in *BundleMetadata) DeepCopy() *BundleMetadata
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BundleMetadata.
func (*BundleMetadata) DeepCopyInto ¶
func (in *BundleMetadata) DeepCopyInto(out *BundleMetadata)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type CRDUpgradeSafetyEnforcement ¶
type CRDUpgradeSafetyEnforcement string
type CRDUpgradeSafetyPreflightConfig ¶
type CRDUpgradeSafetyPreflightConfig struct {
// enforcement is a required field, used to configure the state of the CRD Upgrade Safety pre-flight check.
//
// Allowed values are "None" or "Strict". The default value is "Strict".
//
// When set to "None", the CRD Upgrade Safety pre-flight check will be skipped
// when performing an upgrade operation. This should be used with caution as
// unintended consequences such as data loss can occur.
//
// When set to "Strict", the CRD Upgrade Safety pre-flight check will be run when
// performing an upgrade operation.
//
// +kubebuilder:validation:Enum:="None";"Strict"
// +kubebuilder:validation:Required
Enforcement CRDUpgradeSafetyEnforcement `json:"enforcement"`
}
CRDUpgradeSafetyPreflightConfig is the configuration for CRD upgrade safety preflight check.
func (*CRDUpgradeSafetyPreflightConfig) DeepCopy ¶
func (in *CRDUpgradeSafetyPreflightConfig) DeepCopy() *CRDUpgradeSafetyPreflightConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CRDUpgradeSafetyPreflightConfig.
func (*CRDUpgradeSafetyPreflightConfig) DeepCopyInto ¶
func (in *CRDUpgradeSafetyPreflightConfig) DeepCopyInto(out *CRDUpgradeSafetyPreflightConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type CatalogFilter ¶ added in v1.2.0
type CatalogFilter struct {
// packageName is a reference to the name of the package to be installed
// and is used to filter the content from catalogs.
//
// packageName is required, immutable, and follows the DNS subdomain standard
// as defined in [RFC 1123]. It must contain only lowercase alphanumeric characters,
// hyphens (-) or periods (.), start and end with an alphanumeric character,
// and be no longer than 253 characters.
//
// Some examples of valid values are:
// - some-package
// - 123-package
// - 1-package-2
// - somepackage
//
// Some examples of invalid values are:
// - -some-package
// - some-package-
// - thisisareallylongpackagenamethatisgreaterthanthemaximumlength
// - some.package
//
// [RFC 1123]: https://tools.ietf.org/html/rfc1123
//
// +kubebuilder:validation.Required
// +kubebuilder:validation:MaxLength:=253
// +kubebuilder:validation:XValidation:rule="self == oldSelf",message="packageName is immutable"
// +kubebuilder:validation:XValidation:rule="self.matches(\"^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$\")",message="packageName must be a valid DNS1123 subdomain. It must contain only lowercase alphanumeric characters, hyphens (-) or periods (.), start and end with an alphanumeric character, and be no longer than 253 characters"
// +kubebuilder:validation:Required
PackageName string `json:"packageName"`
// version is an optional semver constraint (a specific version or range of versions). When unspecified, the latest version available will be installed.
//
// Acceptable version ranges are no longer than 64 characters.
// Version ranges are composed of comma- or space-delimited values and one or
// more comparison operators, known as comparison strings. Additional
// comparison strings can be added using the OR operator (||).
//
// # Range Comparisons
//
// To specify a version range, you can use a comparison string like ">=3.0,
// <3.6". When specifying a range, automatic updates will occur within that
// range. The example comparison string means "install any version greater than
// or equal to 3.0.0 but less than 3.6.0.". It also states intent that if any
// upgrades are available within the version range after initial installation,
// those upgrades should be automatically performed.
//
// # Pinned Versions
//
// To specify an exact version to install you can use a version range that
// "pins" to a specific version. When pinning to a specific version, no
// automatic updates will occur. An example of a pinned version range is
// "0.6.0", which means "only install version 0.6.0 and never
// upgrade from this version".
//
// # Basic Comparison Operators
//
// The basic comparison operators and their meanings are:
// - "=", equal (not aliased to an operator)
// - "!=", not equal
// - "<", less than
// - ">", greater than
// - ">=", greater than OR equal to
// - "<=", less than OR equal to
//
// # Wildcard Comparisons
//
// You can use the "x", "X", and "*" characters as wildcard characters in all
// comparison operations. Some examples of using the wildcard characters:
// - "1.2.x", "1.2.X", and "1.2.*" is equivalent to ">=1.2.0, < 1.3.0"
// - ">= 1.2.x", ">= 1.2.X", and ">= 1.2.*" is equivalent to ">= 1.2.0"
// - "<= 2.x", "<= 2.X", and "<= 2.*" is equivalent to "< 3"
// - "x", "X", and "*" is equivalent to ">= 0.0.0"
//
// # Patch Release Comparisons
//
// When you want to specify a minor version up to the next major version you
// can use the "~" character to perform patch comparisons. Some examples:
// - "~1.2.3" is equivalent to ">=1.2.3, <1.3.0"
// - "~1" and "~1.x" is equivalent to ">=1, <2"
// - "~2.3" is equivalent to ">=2.3, <2.4"
// - "~1.2.x" is equivalent to ">=1.2.0, <1.3.0"
//
// # Major Release Comparisons
//
// You can use the "^" character to make major release comparisons after a
// stable 1.0.0 version is published. If there is no stable version published, // minor versions define the stability level. Some examples:
// - "^1.2.3" is equivalent to ">=1.2.3, <2.0.0"
// - "^1.2.x" is equivalent to ">=1.2.0, <2.0.0"
// - "^2.3" is equivalent to ">=2.3, <3"
// - "^2.x" is equivalent to ">=2.0.0, <3"
// - "^0.2.3" is equivalent to ">=0.2.3, <0.3.0"
// - "^0.2" is equivalent to ">=0.2.0, <0.3.0"
// - "^0.0.3" is equvalent to ">=0.0.3, <0.0.4"
// - "^0.0" is equivalent to ">=0.0.0, <0.1.0"
// - "^0" is equivalent to ">=0.0.0, <1.0.0"
//
// # OR Comparisons
// You can use the "||" character to represent an OR operation in the version
// range. Some examples:
// - ">=1.2.3, <2.0.0 || >3.0.0"
// - "^0 || ^3 || ^5"
//
// For more information on semver, please see https://semver.org/
//
// +kubebuilder:validation:MaxLength:=64
// +kubebuilder:validation:XValidation:rule="self.matches(\"^(\\\\s*(=||!=|>|<|>=|=>|<=|=<|~|~>|\\\\^)\\\\s*(v?(0|[1-9]\\\\d*|[x|X|\\\\*])(\\\\.(0|[1-9]\\\\d*|x|X|\\\\*]))?(\\\\.(0|[1-9]\\\\d*|x|X|\\\\*))?(-([0-9A-Za-z\\\\-]+(\\\\.[0-9A-Za-z\\\\-]+)*))?(\\\\+([0-9A-Za-z\\\\-]+(\\\\.[0-9A-Za-z\\\\-]+)*))?)\\\\s*)((?:\\\\s+|,\\\\s*|\\\\s*\\\\|\\\\|\\\\s*)(=||!=|>|<|>=|=>|<=|=<|~|~>|\\\\^)\\\\s*(v?(0|[1-9]\\\\d*|x|X|\\\\*])(\\\\.(0|[1-9]\\\\d*|x|X|\\\\*))?(\\\\.(0|[1-9]\\\\d*|x|X|\\\\*]))?(-([0-9A-Za-z\\\\-]+(\\\\.[0-9A-Za-z\\\\-]+)*))?(\\\\+([0-9A-Za-z\\\\-]+(\\\\.[0-9A-Za-z\\\\-]+)*))?)\\\\s*)*$\")",message="invalid version expression"
// +optional
Version string `json:"version,omitempty"`
// channels is an optional reference to a set of channels belonging to
// the package specified in the packageName field.
//
// A "channel" is a package-author-defined stream of updates for an extension.
//
// Each channel in the list must follow the DNS subdomain standard
// as defined in [RFC 1123]. It must contain only lowercase alphanumeric characters,
// hyphens (-) or periods (.), start and end with an alphanumeric character,
// and be no longer than 253 characters. No more than 256 channels can be specified.
//
// When specified, it is used to constrain the set of installable bundles and
// the automated upgrade path. This constraint is an AND operation with the
// version field. For example:
// - Given channel is set to "foo"
// - Given version is set to ">=1.0.0, <1.5.0"
// - Only bundles that exist in channel "foo" AND satisfy the version range comparison will be considered installable
// - Automatic upgrades will be constrained to upgrade edges defined by the selected channel
//
// When unspecified, upgrade edges across all channels will be used to identify valid automatic upgrade paths.
//
// Some examples of valid values are:
// - 1.1.x
// - alpha
// - stable
// - stable-v1
// - v1-stable
// - dev-preview
// - preview
// - community
//
// Some examples of invalid values are:
// - -some-channel
// - some-channel-
// - thisisareallylongchannelnamethatisgreaterthanthemaximumlength
// - original_40
// - --default-channel
//
// [RFC 1123]: https://tools.ietf.org/html/rfc1123
//
// +kubebuilder:validation:items:MaxLength:=253
// +kubebuilder:validation:MaxItems:=256
// +kubebuilder:validation:items:XValidation:rule="self.matches(\"^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$\")",message="channels entries must be valid DNS1123 subdomains"
// +optional
Channels []string `json:"channels,omitempty"`
// selector is an optional field that can be used
// to filter the set of ClusterCatalogs used in the bundle
// selection process.
//
// When unspecified, all ClusterCatalogs will be used in
// the bundle selection process.
//
// +optional
Selector *metav1.LabelSelector `json:"selector,omitempty"`
// upgradeConstraintPolicy is an optional field that controls whether
// the upgrade path(s) defined in the catalog are enforced for the package
// referenced in the packageName field.
//
// Allowed values are: "CatalogProvided" or "SelfCertified", or omitted.
//
// When this field is set to "CatalogProvided", automatic upgrades will only occur
// when upgrade constraints specified by the package author are met.
//
// When this field is set to "SelfCertified", the upgrade constraints specified by
// the package author are ignored. This allows for upgrades and downgrades to
// any version of the package. This is considered a dangerous operation as it
// can lead to unknown and potentially disastrous outcomes, such as data
// loss. It is assumed that users have independently verified changes when
// using this option.
//
// When this field is omitted, the default value is "CatalogProvided".
//
// +kubebuilder:validation:Enum:=CatalogProvided;SelfCertified
// +kubebuilder:default:=CatalogProvided
// +optional
UpgradeConstraintPolicy UpgradeConstraintPolicy `json:"upgradeConstraintPolicy,omitempty"`
}
CatalogFilter defines the attributes used to identify and filter content from a catalog.
func (*CatalogFilter) DeepCopy ¶ added in v1.2.0
func (in *CatalogFilter) DeepCopy() *CatalogFilter
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CatalogFilter.
func (*CatalogFilter) DeepCopyInto ¶ added in v1.2.0
func (in *CatalogFilter) DeepCopyInto(out *CatalogFilter)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type CatalogSource ¶
type CatalogSource struct {
// type is a reference to the type of source the catalog is sourced from.
// type is required.
//
// The only allowed value is "Image".
//
// When set to "Image", the ClusterCatalog content will be sourced from an OCI image.
// When using an image source, the image field must be set and must be the only field defined for this type.
//
// +unionDiscriminator
// +kubebuilder:validation:Enum:="Image"
// +kubebuilder:validation:Required
Type SourceType `json:"type"`
// image is used to configure how catalog contents are sourced from an OCI image.
// This field is required when type is Image, and forbidden otherwise.
// +optional
Image *ImageSource `json:"image,omitempty"`
}
CatalogSource is a discriminated union of possible sources for a Catalog. CatalogSource contains the sourcing information for a Catalog +union +kubebuilder:validation:XValidation:rule="has(self.type) && self.type == 'Image' ? has(self.image) : !has(self.image)",message="image is required when source type is Image, and forbidden otherwise"
func (*CatalogSource) DeepCopy ¶
func (in *CatalogSource) DeepCopy() *CatalogSource
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CatalogSource.
func (*CatalogSource) DeepCopyInto ¶
func (in *CatalogSource) DeepCopyInto(out *CatalogSource)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ClusterCatalog ¶ added in v1.2.0
type ClusterCatalog struct {
metav1.TypeMeta `json:",inline"`
// metadata is the standard object's metadata.
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
metav1.ObjectMeta `json:"metadata"`
// spec is the desired state of the ClusterCatalog.
// spec is required.
// The controller will work to ensure that the desired
// catalog is unpacked and served over the catalog content HTTP server.
// +kubebuilder:validation:Required
Spec ClusterCatalogSpec `json:"spec"`
// status contains information about the state of the ClusterCatalog such as:
// - Whether or not the catalog contents are being served via the catalog content HTTP server
// - Whether or not the ClusterCatalog is progressing to a new state
// - A reference to the source from which the catalog contents were retrieved
// +optional
Status ClusterCatalogStatus `json:"status,omitempty"`
}
ClusterCatalog enables users to make File-Based Catalog (FBC) catalog data available to the cluster. For more information on FBC, see https://olm.operatorframework.io/docs/reference/file-based-catalogs/#docs
func (*ClusterCatalog) DeepCopy ¶ added in v1.2.0
func (in *ClusterCatalog) DeepCopy() *ClusterCatalog
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterCatalog.
func (*ClusterCatalog) DeepCopyInto ¶ added in v1.2.0
func (in *ClusterCatalog) DeepCopyInto(out *ClusterCatalog)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ClusterCatalog) DeepCopyObject ¶ added in v1.2.0
func (in *ClusterCatalog) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type ClusterCatalogList ¶ added in v1.2.0
type ClusterCatalogList struct {
metav1.TypeMeta `json:",inline"`
// metadata is the standard object's metadata.
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
metav1.ListMeta `json:"metadata"`
// items is a list of ClusterCatalogs.
// items is required.
// +kubebuilder:validation:Required
Items []ClusterCatalog `json:"items"`
}
ClusterCatalogList contains a list of ClusterCatalog
func (*ClusterCatalogList) DeepCopy ¶ added in v1.2.0
func (in *ClusterCatalogList) DeepCopy() *ClusterCatalogList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterCatalogList.
func (*ClusterCatalogList) DeepCopyInto ¶ added in v1.2.0
func (in *ClusterCatalogList) DeepCopyInto(out *ClusterCatalogList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ClusterCatalogList) DeepCopyObject ¶ added in v1.2.0
func (in *ClusterCatalogList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type ClusterCatalogSpec ¶ added in v1.2.0
type ClusterCatalogSpec struct {
// source allows a user to define the source of a catalog.
// A "catalog" contains information on content that can be installed on a cluster.
// Providing a catalog source makes the contents of the catalog discoverable and usable by
// other on-cluster components.
// These on-cluster components may do a variety of things with this information, such as
// presenting the content in a GUI dashboard or installing content from the catalog on the cluster.
// The catalog source must contain catalog metadata in the File-Based Catalog (FBC) format.
// For more information on FBC, see https://olm.operatorframework.io/docs/reference/file-based-catalogs/#docs.
// source is a required field.
//
// Below is a minimal example of a ClusterCatalogSpec that sources a catalog from an image:
//
// source:
// type: Image
// image:
// ref: quay.io/operatorhubio/catalog:latest
//
// +kubebuilder:validation:Required
Source CatalogSource `json:"source"`
// priority allows the user to define a priority for a ClusterCatalog.
// priority is optional.
//
// A ClusterCatalog's priority is used by clients as a tie-breaker between ClusterCatalogs that meet the client's requirements.
// A higher number means higher priority.
//
// It is up to clients to decide how to handle scenarios where multiple ClusterCatalogs with the same priority meet their requirements.
// When deciding how to break the tie in this scenario, it is recommended that clients prompt their users for additional input.
//
// When omitted, the default priority is 0 because that is the zero value of integers.
//
// Negative numbers can be used to specify a priority lower than the default.
// Positive numbers can be used to specify a priority higher than the default.
//
// The lowest possible value is -2147483648.
// The highest possible value is 2147483647.
//
// +kubebuilder:default:=0
// +kubebuilder:validation:minimum:=-2147483648
// +kubebuilder:validation:maximum:=2147483647
// +optional
Priority int32 `json:"priority"`
// availabilityMode allows users to define how the ClusterCatalog is made available to clients on the cluster.
// availabilityMode is optional.
//
// Allowed values are "Available" and "Unavailable" and omitted.
//
// When omitted, the default value is "Available".
//
// When set to "Available", the catalog contents will be unpacked and served over the catalog content HTTP server.
// Setting the availabilityMode to "Available" tells clients that they should consider this ClusterCatalog
// and its contents as usable.
//
// When set to "Unavailable", the catalog contents will no longer be served over the catalog content HTTP server.
// When set to this availabilityMode it should be interpreted the same as the ClusterCatalog not existing.
// Setting the availabilityMode to "Unavailable" can be useful in scenarios where a user may not want
// to delete the ClusterCatalog all together, but would still like it to be treated as if it doesn't exist.
//
// +kubebuilder:validation:Enum:="Unavailable";"Available"
// +kubebuilder:default:="Available"
// +optional
AvailabilityMode AvailabilityMode `json:"availabilityMode,omitempty"`
}
ClusterCatalogSpec defines the desired state of ClusterCatalog
func (*ClusterCatalogSpec) DeepCopy ¶ added in v1.2.0
func (in *ClusterCatalogSpec) DeepCopy() *ClusterCatalogSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterCatalogSpec.
func (*ClusterCatalogSpec) DeepCopyInto ¶ added in v1.2.0
func (in *ClusterCatalogSpec) DeepCopyInto(out *ClusterCatalogSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ClusterCatalogStatus ¶ added in v1.2.0
type ClusterCatalogStatus struct {
// conditions is a representation of the current state for this ClusterCatalog.
//
// The current condition types are Serving and Progressing.
//
// The Serving condition is used to represent whether or not the contents of the catalog is being served via the HTTP(S) web server.
// When it has a status of True and a reason of Available, the contents of the catalog are being served.
// When it has a status of False and a reason of Unavailable, the contents of the catalog are not being served because the contents are not yet available.
// When it has a status of False and a reason of UserSpecifiedUnavailable, the contents of the catalog are not being served because the catalog has been intentionally marked as unavailable.
//
// The Progressing condition is used to represent whether or not the ClusterCatalog is progressing or is ready to progress towards a new state.
// When it has a status of True and a reason of Retrying, there was an error in the progression of the ClusterCatalog that may be resolved on subsequent reconciliation attempts.
// When it has a status of True and a reason of Succeeded, the ClusterCatalog has successfully progressed to a new state and is ready to continue progressing.
// When it has a status of False and a reason of Blocked, there was an error in the progression of the ClusterCatalog that requires manual intervention for recovery.
//
// In the case that the Serving condition is True with reason Available and Progressing is True with reason Retrying, the previously fetched
// catalog contents are still being served via the HTTP(S) web server while we are progressing towards serving a new version of the catalog
// contents. This could occur when we've initially fetched the latest contents from the source for this catalog and when polling for changes
// to the contents we identify that there are updates to the contents.
//
// +listType=map
// +listMapKey=type
// +optional
Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,1,rep,name=conditions"`
// resolvedSource contains information about the resolved source based on the source type.
// +optional
ResolvedSource *ResolvedCatalogSource `json:"resolvedSource,omitempty"`
// urls contains the URLs that can be used to access the catalog.
// +optional
URLs *ClusterCatalogURLs `json:"urls,omitempty"`
// lastUnpacked represents the last time the contents of the
// catalog were extracted from their source format. As an example,
// when using an Image source, the OCI image will be pulled and the
// image layers written to a file-system backed cache. We refer to the
// act of this extraction from the source format as "unpacking".
// +optional
LastUnpacked *metav1.Time `json:"lastUnpacked,omitempty"`
}
ClusterCatalogStatus defines the observed state of ClusterCatalog
func (*ClusterCatalogStatus) DeepCopy ¶ added in v1.2.0
func (in *ClusterCatalogStatus) DeepCopy() *ClusterCatalogStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterCatalogStatus.
func (*ClusterCatalogStatus) DeepCopyInto ¶ added in v1.2.0
func (in *ClusterCatalogStatus) DeepCopyInto(out *ClusterCatalogStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ClusterCatalogURLs ¶ added in v1.2.0
type ClusterCatalogURLs struct {
// base is a cluster-internal URL that provides endpoints for
// accessing the content of the catalog.
//
// It is expected that clients append the path for the endpoint they wish
// to access.
//
// Currently, only a single endpoint is served and is accessible at the path
// /api/v1.
//
// The endpoints served for the v1 API are:
// - /all - this endpoint returns the entirety of the catalog contents in the FBC format
//
// As the needs of users and clients of the evolve, new endpoints may be added.
//
// +kubebuilder:validation:Required
// +kubebuilder:validation:MaxLength:=525
// +kubebuilder:validation:XValidation:rule="isURL(self)",message="must be a valid URL"
// +kubebuilder:validation:XValidation:rule="isURL(self) ? (url(self).getScheme() == \"http\" || url(self).getScheme() == \"https\") : true",message="scheme must be either http or https"
Base string `json:"base"`
}
ClusterCatalogURLs contains the URLs that can be used to access the catalog.
func (*ClusterCatalogURLs) DeepCopy ¶ added in v1.2.0
func (in *ClusterCatalogURLs) DeepCopy() *ClusterCatalogURLs
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterCatalogURLs.
func (*ClusterCatalogURLs) DeepCopyInto ¶ added in v1.2.0
func (in *ClusterCatalogURLs) DeepCopyInto(out *ClusterCatalogURLs)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ClusterExtension ¶
type ClusterExtension struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
// spec is an optional field that defines the desired state of the ClusterExtension.
// +optional
Spec ClusterExtensionSpec `json:"spec,omitempty"`
// status is an optional field that defines the observed state of the ClusterExtension.
// +optional
Status ClusterExtensionStatus `json:"status,omitempty"`
}
ClusterExtension is the Schema for the clusterextensions API
func (*ClusterExtension) DeepCopy ¶
func (in *ClusterExtension) DeepCopy() *ClusterExtension
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterExtension.
func (*ClusterExtension) DeepCopyInto ¶
func (in *ClusterExtension) DeepCopyInto(out *ClusterExtension)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ClusterExtension) DeepCopyObject ¶
func (in *ClusterExtension) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type ClusterExtensionConfig ¶ added in v1.5.1
type ClusterExtensionConfig struct {
// configType is a required reference to the type of configuration source.
//
// Allowed values are "Inline"
//
// When this field is set to "Inline", the cluster extension configuration is defined inline within the
// ClusterExtension resource.
//
// +unionDiscriminator
// +kubebuilder:validation:Enum:="Inline"
// +kubebuilder:validation:Required
ConfigType ClusterExtensionConfigType `json:"configType"`
// inline contains JSON or YAML values specified directly in the
// ClusterExtension.
//
// inline must be set if configType is 'Inline'.
//
// +kubebuilder:validation:Type=object
// +optional
Inline *apiextensionsv1.JSON `json:"inline,omitempty"`
}
ClusterExtensionConfig is a discriminated union which selects the source configuration values to be merged into the ClusterExtension's rendered manifests.
+kubebuilder:validation:XValidation:rule="has(self.configType) && self.configType == 'Inline' ?has(self.inline) : !has(self.inline)",message="inline is required when configType is Inline, and forbidden otherwise" +union
func (*ClusterExtensionConfig) DeepCopy ¶ added in v1.5.1
func (in *ClusterExtensionConfig) DeepCopy() *ClusterExtensionConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterExtensionConfig.
func (*ClusterExtensionConfig) DeepCopyInto ¶ added in v1.5.1
func (in *ClusterExtensionConfig) DeepCopyInto(out *ClusterExtensionConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ClusterExtensionConfigType ¶ added in v1.5.1
type ClusterExtensionConfigType string
type ClusterExtensionInstallConfig ¶
type ClusterExtensionInstallConfig struct {
// preflight is an optional field that can be used to configure the checks that are
// run before installation or upgrade of the content for the package specified in the packageName field.
//
// When specified, it replaces the default preflight configuration for install/upgrade actions.
// When not specified, the default configuration will be used.
//
// +optional
Preflight *PreflightConfig `json:"preflight,omitempty"`
}
ClusterExtensionInstallConfig is a union which selects the clusterExtension installation config. ClusterExtensionInstallConfig requires the namespace and serviceAccount which should be used for the installation of packages.
+kubebuilder:validation:XValidation:rule="has(self.preflight)",message="at least one of [preflight] are required when install is specified" +union
func (*ClusterExtensionInstallConfig) DeepCopy ¶
func (in *ClusterExtensionInstallConfig) DeepCopy() *ClusterExtensionInstallConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterExtensionInstallConfig.
func (*ClusterExtensionInstallConfig) DeepCopyInto ¶
func (in *ClusterExtensionInstallConfig) DeepCopyInto(out *ClusterExtensionInstallConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ClusterExtensionInstallStatus ¶
type ClusterExtensionInstallStatus struct {
// bundle is a required field which represents the identifying attributes of a bundle.
//
// A "bundle" is a versioned set of content that represents the resources that
// need to be applied to a cluster to install a package.
//
// +kubebuilder:validation:Required
Bundle BundleMetadata `json:"bundle"`
}
ClusterExtensionInstallStatus is a representation of the status of the identified bundle.
func (*ClusterExtensionInstallStatus) DeepCopy ¶
func (in *ClusterExtensionInstallStatus) DeepCopy() *ClusterExtensionInstallStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterExtensionInstallStatus.
func (*ClusterExtensionInstallStatus) DeepCopyInto ¶
func (in *ClusterExtensionInstallStatus) DeepCopyInto(out *ClusterExtensionInstallStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ClusterExtensionList ¶
type ClusterExtensionList struct {
metav1.TypeMeta `json:",inline"`
// +optional
metav1.ListMeta `json:"metadata,omitempty"`
// items is a required list of ClusterExtension objects.
//
// +kubebuilder:validation:Required
Items []ClusterExtension `json:"items"`
}
ClusterExtensionList contains a list of ClusterExtension
func (*ClusterExtensionList) DeepCopy ¶
func (in *ClusterExtensionList) DeepCopy() *ClusterExtensionList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterExtensionList.
func (*ClusterExtensionList) DeepCopyInto ¶
func (in *ClusterExtensionList) DeepCopyInto(out *ClusterExtensionList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*ClusterExtensionList) DeepCopyObject ¶
func (in *ClusterExtensionList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type ClusterExtensionSpec ¶
type ClusterExtensionSpec struct {
// namespace is a reference to a Kubernetes namespace.
// This is the namespace in which the provided ServiceAccount must exist.
// It also designates the default namespace where namespace-scoped resources
// for the extension are applied to the cluster.
// Some extensions may contain namespace-scoped resources to be applied in other namespaces.
// This namespace must exist.
//
// namespace is required, immutable, and follows the DNS label standard
// as defined in [RFC 1123]. It must contain only lowercase alphanumeric characters or hyphens (-),
// start and end with an alphanumeric character, and be no longer than 63 characters
//
// [RFC 1123]: https://tools.ietf.org/html/rfc1123
//
// +kubebuilder:validation:MaxLength:=63
// +kubebuilder:validation:XValidation:rule="self == oldSelf",message="namespace is immutable"
// +kubebuilder:validation:XValidation:rule="self.matches(\"^[a-z0-9]([-a-z0-9]*[a-z0-9])?$\")",message="namespace must be a valid DNS1123 label"
// +kubebuilder:validation:Required
Namespace string `json:"namespace"`
// serviceAccount is a reference to a ServiceAccount used to perform all interactions
// with the cluster that are required to manage the extension.
// The ServiceAccount must be configured with the necessary permissions to perform these interactions.
// The ServiceAccount must exist in the namespace referenced in the spec.
// serviceAccount is required.
//
// +kubebuilder:validation:Required
ServiceAccount ServiceAccountReference `json:"serviceAccount"`
// source is a required field which selects the installation source of content
// for this ClusterExtension. Selection is performed by setting the sourceType.
//
// Catalog is currently the only implemented sourceType, and setting the
// sourcetype to "Catalog" requires the catalog field to also be defined.
//
// Below is a minimal example of a source definition (in yaml):
//
// source:
// sourceType: Catalog
// catalog:
// packageName: example-package
//
// +kubebuilder:validation:Required
Source SourceConfig `json:"source"`
// install is an optional field used to configure the installation options
// for the ClusterExtension such as the pre-flight check configuration.
//
// +optional
Install *ClusterExtensionInstallConfig `json:"install,omitempty"`
// config contains optional configuration values applied during rendering of the
// ClusterExtension's manifests. Values can be specified inline.
//
// config is optional. When not specified, the default configuration of the resolved bundle will be used.
//
// <opcon:experimental>
// +optional
Config *ClusterExtensionConfig `json:"config,omitempty"`
}
ClusterExtensionSpec defines the desired state of ClusterExtension
func (*ClusterExtensionSpec) DeepCopy ¶
func (in *ClusterExtensionSpec) DeepCopy() *ClusterExtensionSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterExtensionSpec.
func (*ClusterExtensionSpec) DeepCopyInto ¶
func (in *ClusterExtensionSpec) DeepCopyInto(out *ClusterExtensionSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ClusterExtensionStatus ¶
type ClusterExtensionStatus struct {
// The set of condition types which apply to all spec.source variations are Installed and Progressing.
//
// The Installed condition represents whether or not the bundle has been installed for this ClusterExtension.
// When Installed is True and the Reason is Succeeded, the bundle has been successfully installed.
// When Installed is False and the Reason is Failed, the bundle has failed to install.
//
// The Progressing condition represents whether or not the ClusterExtension is advancing towards a new state.
// When Progressing is True and the Reason is Succeeded, the ClusterExtension is making progress towards a new state.
// When Progressing is True and the Reason is Retrying, the ClusterExtension has encountered an error that could be resolved on subsequent reconciliation attempts.
// When Progressing is False and the Reason is Blocked, the ClusterExtension has encountered an error that requires manual intervention for recovery.
//
// When the ClusterExtension is sourced from a catalog, if may also communicate a deprecation condition.
// These are indications from a package owner to guide users away from a particular package, channel, or bundle.
// BundleDeprecated is set if the requested bundle version is marked deprecated in the catalog.
// ChannelDeprecated is set if the requested channel is marked deprecated in the catalog.
// PackageDeprecated is set if the requested package is marked deprecated in the catalog.
// Deprecated is a rollup condition that is present when any of the deprecated conditions are present.
//
// +patchMergeKey=type
// +patchStrategy=merge
// +listType=map
// +listMapKey=type
// +optional
Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,1,rep,name=conditions"`
// install is a representation of the current installation status for this ClusterExtension.
//
// +optional
Install *ClusterExtensionInstallStatus `json:"install,omitempty"`
}
ClusterExtensionStatus defines the observed state of a ClusterExtension.
func (*ClusterExtensionStatus) DeepCopy ¶
func (in *ClusterExtensionStatus) DeepCopy() *ClusterExtensionStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterExtensionStatus.
func (*ClusterExtensionStatus) DeepCopyInto ¶
func (in *ClusterExtensionStatus) DeepCopyInto(out *ClusterExtensionStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ImageSource ¶ added in v1.2.0
type ImageSource struct {
// ref allows users to define the reference to a container image containing Catalog contents.
// ref is required.
// ref can not be more than 1000 characters.
//
// A reference can be broken down into 3 parts - the domain, name, and identifier.
//
// The domain is typically the registry where an image is located.
// It must be alphanumeric characters (lowercase and uppercase) separated by the "." character.
// Hyphenation is allowed, but the domain must start and end with alphanumeric characters.
// Specifying a port to use is also allowed by adding the ":" character followed by numeric values.
// The port must be the last value in the domain.
// Some examples of valid domain values are "registry.mydomain.io", "quay.io", "my-registry.io:8080".
//
// The name is typically the repository in the registry where an image is located.
// It must contain lowercase alphanumeric characters separated only by the ".", "_", "__", "-" characters.
// Multiple names can be concatenated with the "/" character.
// The domain and name are combined using the "/" character.
// Some examples of valid name values are "operatorhubio/catalog", "catalog", "my-catalog.prod".
// An example of the domain and name parts of a reference being combined is "quay.io/operatorhubio/catalog".
//
// The identifier is typically the tag or digest for an image reference and is present at the end of the reference.
// It starts with a separator character used to distinguish the end of the name and beginning of the identifier.
// For a digest-based reference, the "@" character is the separator.
// For a tag-based reference, the ":" character is the separator.
// An identifier is required in the reference.
//
// Digest-based references must contain an algorithm reference immediately after the "@" separator.
// The algorithm reference must be followed by the ":" character and an encoded string.
// The algorithm must start with an uppercase or lowercase alpha character followed by alphanumeric characters and may contain the "-", "_", "+", and "." characters.
// Some examples of valid algorithm values are "sha256", "sha256+b64u", "multihash+base58".
// The encoded string following the algorithm must be hex digits (a-f, A-F, 0-9) and must be a minimum of 32 characters.
//
// Tag-based references must begin with a word character (alphanumeric + "_") followed by word characters or ".", and "-" characters.
// The tag must not be longer than 127 characters.
//
// An example of a valid digest-based image reference is "quay.io/operatorhubio/catalog@sha256:200d4ddb2a73594b91358fe6397424e975205bfbe44614f5846033cad64b3f05"
// An example of a valid tag-based image reference is "quay.io/operatorhubio/catalog:latest"
//
// +kubebuilder:validation:Required
// +kubebuilder:validation:MaxLength:=1000
// +kubebuilder:validation:XValidation:rule="self.matches('^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])((\\\\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]))+)?(:[0-9]+)?\\\\b')",message="must start with a valid domain. valid domains must be alphanumeric characters (lowercase and uppercase) separated by the \".\" character."
// +kubebuilder:validation:XValidation:rule="self.find('(\\\\/[a-z0-9]+((([._]|__|[-]*)[a-z0-9]+)+)?((\\\\/[a-z0-9]+((([._]|__|[-]*)[a-z0-9]+)+)?)+)?)') != \"\"",message="a valid name is required. valid names must contain lowercase alphanumeric characters separated only by the \".\", \"_\", \"__\", \"-\" characters."
// +kubebuilder:validation:XValidation:rule="self.find('(@.*:)') != \"\" || self.find(':.*$') != \"\"",message="must end with a digest or a tag"
// +kubebuilder:validation:XValidation:rule="self.find('(@.*:)') == \"\" ? (self.find(':.*$') != \"\" ? self.find(':.*$').substring(1).size() <= 127 : true) : true",message="tag is invalid. the tag must not be more than 127 characters"
// +kubebuilder:validation:XValidation:rule="self.find('(@.*:)') == \"\" ? (self.find(':.*$') != \"\" ? self.find(':.*$').matches(':[\\\\w][\\\\w.-]*$') : true) : true",message="tag is invalid. valid tags must begin with a word character (alphanumeric + \"_\") followed by word characters or \".\", and \"-\" characters"
// +kubebuilder:validation:XValidation:rule="self.find('(@.*:)') != \"\" ? self.find('(@.*:)').matches('(@[A-Za-z][A-Za-z0-9]*([-_+.][A-Za-z][A-Za-z0-9]*)*[:])') : true",message="digest algorithm is not valid. valid algorithms must start with an uppercase or lowercase alpha character followed by alphanumeric characters and may contain the \"-\", \"_\", \"+\", and \".\" characters."
// +kubebuilder:validation:XValidation:rule="self.find('(@.*:)') != \"\" ? self.find(':.*$').substring(1).size() >= 32 : true",message="digest is not valid. the encoded string must be at least 32 characters"
// +kubebuilder:validation:XValidation:rule="self.find('(@.*:)') != \"\" ? self.find(':.*$').matches(':[0-9A-Fa-f]*$') : true",message="digest is not valid. the encoded string must only contain hex characters (A-F, a-f, 0-9)"
Ref string `json:"ref"`
// pollIntervalMinutes allows the user to set the interval, in minutes, at which the image source should be polled for new content.
// pollIntervalMinutes is optional.
// pollIntervalMinutes can not be specified when ref is a digest-based reference.
//
// When omitted, the image will not be polled for new content.
// +kubebuilder:validation:Minimum:=1
// +optional
PollIntervalMinutes *int `json:"pollIntervalMinutes,omitempty"`
}
ImageSource enables users to define the information required for sourcing a Catalog from an OCI image
If we see that there is a possibly valid digest-based image reference AND pollIntervalMinutes is specified, reject the resource since there is no use in polling a digest-based image reference. +kubebuilder:validation:XValidation:rule="self.ref.find('(@.*:)') != \"\" ? !has(self.pollIntervalMinutes) : true",message="cannot specify pollIntervalMinutes while using digest-based image"
func (*ImageSource) DeepCopy ¶ added in v1.2.0
func (in *ImageSource) DeepCopy() *ImageSource
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageSource.
func (*ImageSource) DeepCopyInto ¶ added in v1.2.0
func (in *ImageSource) DeepCopyInto(out *ImageSource)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type PreflightConfig ¶
type PreflightConfig struct {
// crdUpgradeSafety is used to configure the CRD Upgrade Safety pre-flight
// checks that run prior to upgrades of installed content.
//
// The CRD Upgrade Safety pre-flight check safeguards from unintended
// consequences of upgrading a CRD, such as data loss.
CRDUpgradeSafety *CRDUpgradeSafetyPreflightConfig `json:"crdUpgradeSafety"`
}
PreflightConfig holds the configuration for the preflight checks. If used, at least one preflight check must be non-nil.
+kubebuilder:validation:XValidation:rule="has(self.crdUpgradeSafety)",message="at least one of [crdUpgradeSafety] are required when preflight is specified"
func (*PreflightConfig) DeepCopy ¶
func (in *PreflightConfig) DeepCopy() *PreflightConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PreflightConfig.
func (*PreflightConfig) DeepCopyInto ¶
func (in *PreflightConfig) DeepCopyInto(out *PreflightConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ResolvedCatalogSource ¶ added in v1.2.0
type ResolvedCatalogSource struct {
// type is a reference to the type of source the catalog is sourced from.
// type is required.
//
// The only allowed value is "Image".
//
// When set to "Image", information about the resolved image source will be set in the 'image' field.
//
// +unionDiscriminator
// +kubebuilder:validation:Enum:="Image"
// +kubebuilder:validation:Required
Type SourceType `json:"type"`
// image is a field containing resolution information for a catalog sourced from an image.
// This field must be set when type is Image, and forbidden otherwise.
Image *ResolvedImageSource `json:"image"`
}
ResolvedCatalogSource is a discriminated union of resolution information for a Catalog. ResolvedCatalogSource contains the information about a sourced Catalog +union +kubebuilder:validation:XValidation:rule="has(self.type) && self.type == 'Image' ? has(self.image) : !has(self.image)",message="image is required when source type is Image, and forbidden otherwise"
func (*ResolvedCatalogSource) DeepCopy ¶ added in v1.2.0
func (in *ResolvedCatalogSource) DeepCopy() *ResolvedCatalogSource
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResolvedCatalogSource.
func (*ResolvedCatalogSource) DeepCopyInto ¶ added in v1.2.0
func (in *ResolvedCatalogSource) DeepCopyInto(out *ResolvedCatalogSource)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ResolvedImageSource ¶ added in v1.2.0
type ResolvedImageSource struct {
// ref contains the resolved image digest-based reference.
// The digest format is used so users can use other tooling to fetch the exact
// OCI manifests that were used to extract the catalog contents.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MaxLength:=1000
// +kubebuilder:validation:XValidation:rule="self.matches('^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])((\\\\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]))+)?(:[0-9]+)?\\\\b')",message="must start with a valid domain. valid domains must be alphanumeric characters (lowercase and uppercase) separated by the \".\" character."
// +kubebuilder:validation:XValidation:rule="self.find('(\\\\/[a-z0-9]+((([._]|__|[-]*)[a-z0-9]+)+)?((\\\\/[a-z0-9]+((([._]|__|[-]*)[a-z0-9]+)+)?)+)?)') != \"\"",message="a valid name is required. valid names must contain lowercase alphanumeric characters separated only by the \".\", \"_\", \"__\", \"-\" characters."
// +kubebuilder:validation:XValidation:rule="self.find('(@.*:)') != \"\"",message="must end with a digest"
// +kubebuilder:validation:XValidation:rule="self.find('(@.*:)') != \"\" ? self.find('(@.*:)').matches('(@[A-Za-z][A-Za-z0-9]*([-_+.][A-Za-z][A-Za-z0-9]*)*[:])') : true",message="digest algorithm is not valid. valid algorithms must start with an uppercase or lowercase alpha character followed by alphanumeric characters and may contain the \"-\", \"_\", \"+\", and \".\" characters."
// +kubebuilder:validation:XValidation:rule="self.find('(@.*:)') != \"\" ? self.find(':.*$').substring(1).size() >= 32 : true",message="digest is not valid. the encoded string must be at least 32 characters"
// +kubebuilder:validation:XValidation:rule="self.find('(@.*:)') != \"\" ? self.find(':.*$').matches(':[0-9A-Fa-f]*$') : true",message="digest is not valid. the encoded string must only contain hex characters (A-F, a-f, 0-9)"
Ref string `json:"ref"`
}
ResolvedImageSource provides information about the resolved source of a Catalog sourced from an image.
func (*ResolvedImageSource) DeepCopy ¶ added in v1.2.0
func (in *ResolvedImageSource) DeepCopy() *ResolvedImageSource
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResolvedImageSource.
func (*ResolvedImageSource) DeepCopyInto ¶ added in v1.2.0
func (in *ResolvedImageSource) DeepCopyInto(out *ResolvedImageSource)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type ServiceAccountReference ¶
type ServiceAccountReference struct {
// name is a required, immutable reference to the name of the ServiceAccount
// to be used for installation and management of the content for the package
// specified in the packageName field.
//
// This ServiceAccount must exist in the installNamespace.
//
// name follows the DNS subdomain standard as defined in [RFC 1123].
// It must contain only lowercase alphanumeric characters,
// hyphens (-) or periods (.), start and end with an alphanumeric character,
// and be no longer than 253 characters.
//
// Some examples of valid values are:
// - some-serviceaccount
// - 123-serviceaccount
// - 1-serviceaccount-2
// - someserviceaccount
// - some.serviceaccount
//
// Some examples of invalid values are:
// - -some-serviceaccount
// - some-serviceaccount-
//
// [RFC 1123]: https://tools.ietf.org/html/rfc1123
//
// +kubebuilder:validation:MaxLength:=253
// +kubebuilder:validation:XValidation:rule="self == oldSelf",message="name is immutable"
// +kubebuilder:validation:XValidation:rule="self.matches(\"^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$\")",message="name must be a valid DNS1123 subdomain. It must contain only lowercase alphanumeric characters, hyphens (-) or periods (.), start and end with an alphanumeric character, and be no longer than 253 characters"
// +kubebuilder:validation:Required
Name string `json:"name"`
}
ServiceAccountReference identifies the serviceAccount used fo install a ClusterExtension.
func (*ServiceAccountReference) DeepCopy ¶
func (in *ServiceAccountReference) DeepCopy() *ServiceAccountReference
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceAccountReference.
func (*ServiceAccountReference) DeepCopyInto ¶
func (in *ServiceAccountReference) DeepCopyInto(out *ServiceAccountReference)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type SourceConfig ¶
type SourceConfig struct {
// sourceType is a required reference to the type of install source.
//
// Allowed values are "Catalog"
//
// When this field is set to "Catalog", information for determining the
// appropriate bundle of content to install will be fetched from
// ClusterCatalog resources existing on the cluster.
// When using the Catalog sourceType, the catalog field must also be set.
//
// +unionDiscriminator
// +kubebuilder:validation:Enum:="Catalog"
// +kubebuilder:validation:Required
SourceType string `json:"sourceType"`
// catalog is used to configure how information is sourced from a catalog.
// This field is required when sourceType is "Catalog", and forbidden otherwise.
//
// +optional
Catalog *CatalogFilter `json:"catalog,omitempty"`
}
SourceConfig is a discriminated union which selects the installation source.
+union +kubebuilder:validation:XValidation:rule="has(self.sourceType) && self.sourceType == 'Catalog' ? has(self.catalog) : !has(self.catalog)",message="catalog is required when sourceType is Catalog, and forbidden otherwise"
func (*SourceConfig) DeepCopy ¶
func (in *SourceConfig) DeepCopy() *SourceConfig
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SourceConfig.
func (*SourceConfig) DeepCopyInto ¶
func (in *SourceConfig) DeepCopyInto(out *SourceConfig)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type SourceType ¶ added in v1.2.0
type SourceType string
SourceType defines the type of source used for catalogs. +enum
type UpgradeConstraintPolicy ¶
type UpgradeConstraintPolicy string