v1alpha1

package
v3.29.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 27, 2021 License: Apache-2.0 Imports: 4 Imported by: 0

Documentation

Overview

+groupName=application.giantswarm.io

Index

Constants

View Source
const (
	AppCatalogEntryDocumentationLink = "https://docs.giantswarm.io/reference/cp-k8s-api/AppCatalogEntrys.application.giantswarm.io/"
)

Variables

View Source
var (

	// AddToScheme is used by the generated client.
	AddToScheme = schemeBuilder.AddToScheme
)
View Source
var SchemeGroupVersion = schema.GroupVersion{
	Group:   group,
	Version: version,
}

SchemeGroupVersion is group version used to register these objects

Functions

func NewAppCatalogEntryTypeMeta

func NewAppCatalogEntryTypeMeta() metav1.TypeMeta

func NewAppCatalogTypeMeta

func NewAppCatalogTypeMeta() metav1.TypeMeta

func NewAppTypeMeta

func NewAppTypeMeta() metav1.TypeMeta

func NewCatalogTypeMeta added in v3.24.0

func NewCatalogTypeMeta() metav1.TypeMeta

func NewChartTypeMeta

func NewChartTypeMeta() metav1.TypeMeta

Types

type App

type App struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`
	Spec              AppSpec `json:"spec"`
	// +kubebuilder:validation:Optional
	// Status Spec part of the App resource.
	// Initially, it would be left as empty until the operator successfully reconciles the helm release.
	Status AppStatus `json:"status,omitempty"`
}

+kubebuilder:printcolumn:name="Version",type=string,JSONPath=`.spec.version`,description="Version of the app" +kubebuilder:printcolumn:name="Last Deployed",type=date,JSONPath=`.status.release.lastDeployed`,description="Time since last deployment" +kubebuilder:printcolumn:name="Status",type=string,JSONPath=`.status.release.status`,description="Deployment status of the app" +genclient +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +kubebuilder:storageversion +kubebuilder:subresource:status +kubebuilder:resource:categories=common;giantswarm +k8s:openapi-gen=true App represents a managed app which a user intended to install. It is reconciled by app-operator.

func NewAppCR

func NewAppCR() *App

NewAppCR returns an App Custom Resource.

func (*App) DeepCopy

func (in *App) DeepCopy() *App

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new App.

func (*App) DeepCopyInto

func (in *App) DeepCopyInto(out *App)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*App) DeepCopyObject

func (in *App) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type AppCatalog

type AppCatalog struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`
	Spec              AppCatalogSpec `json:"spec"`
}

+genclient +genclient:nonNamespaced +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +kubebuilder:resource:categories=common;giantswarm,scope=Cluster +kubebuilder:storageversion +k8s:openapi-gen=true Deprecated, use Catalog CRD instead. AppCatalog represents a catalog of managed apps. It stores general information for potential apps to install. It is reconciled by app-operator.

func NewAppCatalogCR

func NewAppCatalogCR() *AppCatalog

NewAppCatalogCR returns an AppCatalog Custom Resource.

func (*AppCatalog) DeepCopy

func (in *AppCatalog) DeepCopy() *AppCatalog

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalog.

func (*AppCatalog) DeepCopyInto

func (in *AppCatalog) DeepCopyInto(out *AppCatalog)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*AppCatalog) DeepCopyObject

func (in *AppCatalog) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type AppCatalogEntry

type AppCatalogEntry struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`
	Spec              AppCatalogEntrySpec `json:"spec"`
}

AppCatalogEntry represents an entry of an app in a catalog of managed apps. It stores metadata for specific versions and apps. It is generated by app-operator and consumed by app-admission-controller.

func NewAppCatalogEntryCR

func NewAppCatalogEntryCR() *AppCatalogEntry

NewAppCatalogEntryCR returns an AppCatalogEntry Custom Resource.

func (*AppCatalogEntry) DeepCopy

func (in *AppCatalogEntry) DeepCopy() *AppCatalogEntry

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalogEntry.

func (*AppCatalogEntry) DeepCopyInto

func (in *AppCatalogEntry) DeepCopyInto(out *AppCatalogEntry)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*AppCatalogEntry) DeepCopyObject

func (in *AppCatalogEntry) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type AppCatalogEntryList

type AppCatalogEntryList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata"`
	Items           []AppCatalogEntry `json:"items"`
}

func (*AppCatalogEntryList) DeepCopy

func (in *AppCatalogEntryList) DeepCopy() *AppCatalogEntryList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalogEntryList.

func (*AppCatalogEntryList) DeepCopyInto

func (in *AppCatalogEntryList) DeepCopyInto(out *AppCatalogEntryList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*AppCatalogEntryList) DeepCopyObject

func (in *AppCatalogEntryList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type AppCatalogEntrySpec

type AppCatalogEntrySpec struct {
	// AppName is the name of the app this entry belongs to.
	// e.g. nginx-ingress-controller-app
	AppName string `json:"appName"`
	// AppVersion is the upstream version of the app for this entry.
	// e.g. v0.35.0
	AppVersion string `json:"appVersion"`
	// Catalog is the name of the app catalog this entry belongs to.
	// e.g. giantswarm
	Catalog AppCatalogEntrySpecCatalog `json:"catalog"`
	// Chart is metadata from the Chart.yaml of the app this entry belongs to.
	Chart AppCatalogEntrySpecChart `json:"chart,omitempty"`
	// DateCreated is when this entry was first created.
	// e.g. 2020-09-02T09:40:39.223638219Z
	DateCreated *metav1.Time `json:"dateCreated"`
	// DateUpdated is when this entry was last updated.
	// e.g. 2020-09-02T09:40:39.223638219Z
	DateUpdated *metav1.Time `json:"dateUpdated"`
	// +kubebuilder:validation:Optional
	// +nullable
	// Restrictions is metadata from Chart.yaml for this app and is used to validate app CRs.
	Restrictions *AppCatalogEntrySpecRestrictions `json:"restrictions,omitempty"`
	// Version is the version of the app chart for this entry.
	// e.g. 1.9.2
	Version string `json:"version"`
}

+k8s:openapi-gen=true

func (*AppCatalogEntrySpec) DeepCopy

func (in *AppCatalogEntrySpec) DeepCopy() *AppCatalogEntrySpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalogEntrySpec.

func (*AppCatalogEntrySpec) DeepCopyInto

func (in *AppCatalogEntrySpec) DeepCopyInto(out *AppCatalogEntrySpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AppCatalogEntrySpecCatalog

type AppCatalogEntrySpecCatalog struct {
	// Name is the name of the app catalog this entry belongs to.
	// e.g. giantswarm-catalog
	Name string `json:"name"`
	// +kubebuilder:validation:Optional
	// Namespace is the namespace of the catalog. It is empty while the
	// appcatalog CRD is cluster scoped.
	Namespace string `json:"namespace"`
}

+k8s:openapi-gen=true

func (*AppCatalogEntrySpecCatalog) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalogEntrySpecCatalog.

func (*AppCatalogEntrySpecCatalog) DeepCopyInto

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AppCatalogEntrySpecChart

type AppCatalogEntrySpecChart struct {
	// APIVersion is the Helm chart API version.
	APIVersion string `json:"apiVersion"`
	// +kubebuilder:validation:Optional
	// +nullable
	// Home is the URL of this projects home page.
	Home string `json:"home,omitempty"`
	// +kubebuilder:validation:Optional
	// +nullable
	// Icon is a URL to an SVG or PNG image to be used as an icon.
	Icon string `json:"icon,omitempty"`
}

+k8s:openapi-gen=true

func (*AppCatalogEntrySpecChart) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalogEntrySpecChart.

func (*AppCatalogEntrySpecChart) DeepCopyInto

func (in *AppCatalogEntrySpecChart) DeepCopyInto(out *AppCatalogEntrySpecChart)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AppCatalogEntrySpecRestrictions added in v3.8.0

type AppCatalogEntrySpecRestrictions struct {
	// ClusterSingleton is a flag for whether this app can be installed at most once per cluster. Default is false.
	ClusterSingleton bool `json:"clusterSingleton,omitempty"`
	// FixedNamespace is the namespace which this app must be installed in.
	FixedNamespace string `json:"fixedNamespace,omitempty"`
	// GpuInstances is a flag for whether this app requires GPU instances to run. Default is false.
	GpuInstances bool `json:"gpuInstances,omitempty"`
	// +kubebuilder:validation:Optional
	// +nullable
	// CompatibleProviders is a list of provider names which this app is compatible with. Default is empty.
	// Empty list means app is compatible with all providers.
	CompatibleProviders []Provider `json:"compatibleProviders,omitempty"`
	// NamespaceSingleton is a flag for whether this app can be installed at most once per namespace. Default is false.
	NamespaceSingleton bool `json:"namespaceSingleton,omitempty"`
}

+k8s:openapi-gen=true

func (*AppCatalogEntrySpecRestrictions) DeepCopy added in v3.8.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalogEntrySpecRestrictions.

func (*AppCatalogEntrySpecRestrictions) DeepCopyInto added in v3.8.0

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AppCatalogList

type AppCatalogList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata"`
	Items           []AppCatalog `json:"items"`
}

func (*AppCatalogList) DeepCopy

func (in *AppCatalogList) DeepCopy() *AppCatalogList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalogList.

func (*AppCatalogList) DeepCopyInto

func (in *AppCatalogList) DeepCopyInto(out *AppCatalogList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*AppCatalogList) DeepCopyObject

func (in *AppCatalogList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type AppCatalogSpec

type AppCatalogSpec struct {
	// Title is the name of the app catalog for this CR
	// e.g. Catalog of Apps by Giant Swarm
	Title       string `json:"title"`
	Description string `json:"description"`
	// +kubebuilder:validation:Optional
	// +nullable
	// Config is the config to be applied when apps belonging to this
	// catalog are deployed.
	Config AppCatalogSpecConfig `json:"config,omitempty"`
	// LogoURL contains the links for logo image file for this app catalog
	LogoURL string `json:"logoURL"`
	// Storage references a map containing values that should be applied to
	// the appcatalog.
	Storage AppCatalogSpecStorage `json:"storage"`
}

+k8s:openapi-gen=true

func (*AppCatalogSpec) DeepCopy

func (in *AppCatalogSpec) DeepCopy() *AppCatalogSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalogSpec.

func (*AppCatalogSpec) DeepCopyInto

func (in *AppCatalogSpec) DeepCopyInto(out *AppCatalogSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AppCatalogSpecConfig

type AppCatalogSpecConfig struct {
	// +kubebuilder:validation:Optional
	// +nullable
	// ConfigMap references a config map containing catalog values that
	// should be applied to apps in this catalog.
	ConfigMap AppCatalogSpecConfigConfigMap `json:"configMap,omitempty"`
	// +kubebuilder:validation:Optional
	// +nullable
	// Secret references a secret containing catalog values that should be
	// applied to apps in this catalog.
	Secret AppCatalogSpecConfigSecret `json:"secret,omitempty"`
}

+k8s:openapi-gen=true

func (*AppCatalogSpecConfig) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalogSpecConfig.

func (*AppCatalogSpecConfig) DeepCopyInto

func (in *AppCatalogSpecConfig) DeepCopyInto(out *AppCatalogSpecConfig)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AppCatalogSpecConfigConfigMap

type AppCatalogSpecConfigConfigMap struct {
	// Name is the name of the config map containing catalog values to
	// apply, e.g. app-catalog-values.
	Name string `json:"name"`
	// Namespace is the namespace of the catalog values config map,
	// e.g. giantswarm.
	Namespace string `json:"namespace"`
}

+k8s:openapi-gen=true

func (*AppCatalogSpecConfigConfigMap) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalogSpecConfigConfigMap.

func (*AppCatalogSpecConfigConfigMap) DeepCopyInto

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AppCatalogSpecConfigSecret

type AppCatalogSpecConfigSecret struct {
	// Name is the name of the secret containing catalog values to apply,
	// e.g. app-catalog-secret.
	Name string `json:"name"`
	// Namespace is the namespace of the secret,
	// e.g. giantswarm.
	Namespace string `json:"namespace"`
}

+k8s:openapi-gen=true

func (*AppCatalogSpecConfigSecret) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalogSpecConfigSecret.

func (*AppCatalogSpecConfigSecret) DeepCopyInto

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AppCatalogSpecStorage

type AppCatalogSpecStorage struct {
	// Type indicates which repository type would be used for this AppCatalog.
	// e.g. helm
	Type string `json:"type"`
	// URL is the link to where this AppCatalog's repository is located
	// e.g. https://example.com/app-catalog/
	URL string `json:"URL"`
}

+k8s:openapi-gen=true

func (*AppCatalogSpecStorage) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalogSpecStorage.

func (*AppCatalogSpecStorage) DeepCopyInto

func (in *AppCatalogSpecStorage) DeepCopyInto(out *AppCatalogSpecStorage)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AppList

type AppList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata"`
	Items           []App `json:"items"`
}

func (*AppList) DeepCopy

func (in *AppList) DeepCopy() *AppList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppList.

func (*AppList) DeepCopyInto

func (in *AppList) DeepCopyInto(out *AppList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*AppList) DeepCopyObject

func (in *AppList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type AppSpec

type AppSpec struct {
	// Catalog is the name of the app catalog this app belongs to.
	// e.g. giantswarm
	Catalog string `json:"catalog"`
	// +kubebuilder:validation:Optional
	// +nullable
	// CatalogNamespace is the namespace of the Catalog CR this app belongs to.
	// e.g. giantswarm
	CatalogNamespace string `json:"catalogNamespace,omitempty"`
	// +kubebuilder:validation:Optional
	// +nullable
	// Config is the config to be applied when the app is deployed.
	Config AppSpecConfig `json:"config,omitempty"`
	// +kubebuilder:validation:Optional
	// +nullable
	// Install is the config used when installing the app.
	Install AppSpecInstall `json:"install,omitempty"`
	// KubeConfig is the kubeconfig to connect to the cluster when deploying
	// the app.
	KubeConfig AppSpecKubeConfig `json:"kubeConfig"`
	// Name is the name of the app to be deployed.
	// e.g. kubernetes-prometheus
	Name string `json:"name"`
	// Namespace is the namespace where the app should be deployed.
	// e.g. monitoring
	Namespace string `json:"namespace"`
	// +kubebuilder:validation:Optional
	// +nullable
	// NamespaceConfig is the namespace config to be applied to the target namespace when the app is deployed.
	NamespaceConfig AppSpecNamespaceConfig `json:"namespaceConfig,omitempty"`
	// +kubebuilder:validation:Optional
	// +nullable
	// UserConfig is the user config to be applied when the app is deployed.
	UserConfig AppSpecUserConfig `json:"userConfig,omitempty"`
	// Version is the version of the app that should be deployed.
	// e.g. 1.0.0
	Version string `json:"version"`
}

+k8s:openapi-gen=true

func (*AppSpec) DeepCopy

func (in *AppSpec) DeepCopy() *AppSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpec.

func (*AppSpec) DeepCopyInto

func (in *AppSpec) DeepCopyInto(out *AppSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AppSpecConfig

type AppSpecConfig struct {
	// +kubebuilder:validation:Optional
	// +nullable
	// ConfigMap references a config map containing values that should be
	// applied to the app.
	ConfigMap AppSpecConfigConfigMap `json:"configMap,omitempty"`
	// +kubebuilder:validation:Optional
	// +nullable
	// Secret references a secret containing secret values that should be
	// applied to the app.
	Secret AppSpecConfigSecret `json:"secret,omitempty"`
}

+k8s:openapi-gen=true

func (*AppSpecConfig) DeepCopy

func (in *AppSpecConfig) DeepCopy() *AppSpecConfig

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecConfig.

func (*AppSpecConfig) DeepCopyInto

func (in *AppSpecConfig) DeepCopyInto(out *AppSpecConfig)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AppSpecConfigConfigMap

type AppSpecConfigConfigMap struct {
	// Name is the name of the config map containing app values to apply,
	// e.g. prometheus-values.
	Name string `json:"name" `
	// Namespace is the namespace of the values config map,
	// e.g. monitoring.
	Namespace string `json:"namespace"`
}

+k8s:openapi-gen=true

func (*AppSpecConfigConfigMap) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecConfigConfigMap.

func (*AppSpecConfigConfigMap) DeepCopyInto

func (in *AppSpecConfigConfigMap) DeepCopyInto(out *AppSpecConfigConfigMap)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AppSpecConfigSecret

type AppSpecConfigSecret struct {
	// Name is the name of the secret containing app values to apply,
	// e.g. prometheus-secret.
	Name string `json:"name"`
	// Namespace is the namespace of the secret,
	// e.g. kube-system.
	Namespace string `json:"namespace"`
}

func (*AppSpecConfigSecret) DeepCopy

func (in *AppSpecConfigSecret) DeepCopy() *AppSpecConfigSecret

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecConfigSecret.

func (*AppSpecConfigSecret) DeepCopyInto

func (in *AppSpecConfigSecret) DeepCopyInto(out *AppSpecConfigSecret)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AppSpecInstall added in v3.15.0

type AppSpecInstall struct {
	// +kubebuilder:validation:Optional
	// +nullable
	// SkipCRDs when true decides that CRDs which are supplied with the chart are not installed. Default: false.
	SkipCRDs bool `json:"skipCRDs,omitempty"`
}

+k8s:openapi-gen=true

func (*AppSpecInstall) DeepCopy added in v3.15.0

func (in *AppSpecInstall) DeepCopy() *AppSpecInstall

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecInstall.

func (*AppSpecInstall) DeepCopyInto added in v3.15.0

func (in *AppSpecInstall) DeepCopyInto(out *AppSpecInstall)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AppSpecKubeConfig

type AppSpecKubeConfig struct {
	// InCluster is a flag for whether to use InCluster credentials. When true the
	// context name and secret should not be set.
	InCluster bool `json:"inCluster"`
	// +kubebuilder:validation:Optional
	// +nullable
	// Context is the kubeconfig context.
	Context AppSpecKubeConfigContext `json:"context,omitempty"`
	// +kubebuilder:validation:Optional
	// +nullable
	// Secret references a secret containing the kubconfig.
	Secret AppSpecKubeConfigSecret `json:"secret,omitempty"`
}

+k8s:openapi-gen=true

func (*AppSpecKubeConfig) DeepCopy

func (in *AppSpecKubeConfig) DeepCopy() *AppSpecKubeConfig

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecKubeConfig.

func (*AppSpecKubeConfig) DeepCopyInto

func (in *AppSpecKubeConfig) DeepCopyInto(out *AppSpecKubeConfig)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AppSpecKubeConfigContext

type AppSpecKubeConfigContext struct {
	// Name is the name of the kubeconfig context.
	// e.g. giantswarm-12345.
	Name string `json:"name"`
}

+k8s:openapi-gen=true

func (*AppSpecKubeConfigContext) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecKubeConfigContext.

func (*AppSpecKubeConfigContext) DeepCopyInto

func (in *AppSpecKubeConfigContext) DeepCopyInto(out *AppSpecKubeConfigContext)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AppSpecKubeConfigSecret

type AppSpecKubeConfigSecret struct {
	// Name is the name of the secret containing the kubeconfig,
	// e.g. app-operator-kubeconfig.
	Name string `json:"name"`
	// Namespace is the namespace of the secret containing the kubeconfig,
	// e.g. giantswarm.
	Namespace string `json:"namespace"`
}

+k8s:openapi-gen=true

func (*AppSpecKubeConfigSecret) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecKubeConfigSecret.

func (*AppSpecKubeConfigSecret) DeepCopyInto

func (in *AppSpecKubeConfigSecret) DeepCopyInto(out *AppSpecKubeConfigSecret)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AppSpecNamespaceConfig added in v3.21.0

type AppSpecNamespaceConfig struct {
	// +kubebuilder:validation:Optional
	// +nullable
	// Annotations is a string map of annotations to apply to the target namespace.
	Annotations map[string]string `json:"annotations,omitempty"`
	// +kubebuilder:validation:Optional
	// +nullable
	// Labels is a string map of labels to apply to the target namespace.
	Labels map[string]string `json:"labels,omitempty"`
}

+k8s:openapi-gen=true

func (*AppSpecNamespaceConfig) DeepCopy added in v3.21.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecNamespaceConfig.

func (*AppSpecNamespaceConfig) DeepCopyInto added in v3.21.0

func (in *AppSpecNamespaceConfig) DeepCopyInto(out *AppSpecNamespaceConfig)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AppSpecUserConfig

type AppSpecUserConfig struct {
	// +kubebuilder:validation:Optional
	// +nullable
	// ConfigMap references a config map containing user values that should be
	// applied to the app.
	ConfigMap AppSpecUserConfigConfigMap `json:"configMap,omitempty"`
	// +kubebuilder:validation:Optional
	// +nullable
	// Secret references a secret containing user secret values that should be
	// applied to the app.
	Secret AppSpecUserConfigSecret `json:"secret,omitempty"`
}

+k8s:openapi-gen=true

func (*AppSpecUserConfig) DeepCopy

func (in *AppSpecUserConfig) DeepCopy() *AppSpecUserConfig

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecUserConfig.

func (*AppSpecUserConfig) DeepCopyInto

func (in *AppSpecUserConfig) DeepCopyInto(out *AppSpecUserConfig)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AppSpecUserConfigConfigMap

type AppSpecUserConfigConfigMap struct {
	// Name is the name of the config map containing user values to apply,
	// e.g. prometheus-user-values.
	Name string `json:"name"`
	// Namespace is the namespace of the user values config map on the management cluster,
	// e.g. 123ab.
	Namespace string `json:"namespace"`
}

+k8s:openapi-gen=true

func (*AppSpecUserConfigConfigMap) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecUserConfigConfigMap.

func (*AppSpecUserConfigConfigMap) DeepCopyInto

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AppSpecUserConfigSecret

type AppSpecUserConfigSecret struct {
	// Name is the name of the secret containing user values to apply,
	// e.g. prometheus-user-secret.
	Name string `json:"name"`
	// Namespace is the namespace of the secret,
	// e.g. kube-system.
	Namespace string `json:"namespace"`
}

+k8s:openapi-gen=true

func (*AppSpecUserConfigSecret) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecUserConfigSecret.

func (*AppSpecUserConfigSecret) DeepCopyInto

func (in *AppSpecUserConfigSecret) DeepCopyInto(out *AppSpecUserConfigSecret)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AppStatus

type AppStatus struct {
	// AppVersion is the value of the AppVersion field in the Chart.yaml of the
	// deployed app. This is an optional field with the version of the
	// component being deployed.
	// e.g. 0.21.0.
	// https://helm.sh/docs/topics/charts/#the-chartyaml-file
	AppVersion string `json:"appVersion"`
	// Release is the status of the Helm release for the deployed app.
	Release AppStatusRelease `json:"release"`
	// Version is the value of the Version field in the Chart.yaml of the
	// deployed app.
	// e.g. 1.0.0.
	Version string `json:"version"`
}

+k8s:openapi-gen=true

func (*AppStatus) DeepCopy

func (in *AppStatus) DeepCopy() *AppStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppStatus.

func (*AppStatus) DeepCopyInto

func (in *AppStatus) DeepCopyInto(out *AppStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type AppStatusRelease

type AppStatusRelease struct {
	// +kubebuilder:validation:Optional
	// +nullable
	// LastDeployed is the time when the app was last deployed.
	LastDeployed metav1.Time `json:"lastDeployed,omitempty"`
	// Reason is the description of the last status of helm release when the app is
	// not installed successfully, e.g. deploy resource already exists.
	Reason string `json:"reason,omitempty"`
	// Status is the status of the deployed app,
	// e.g. DEPLOYED.
	Status string `json:"status"`
}

+k8s:openapi-gen=true

func (*AppStatusRelease) DeepCopy

func (in *AppStatusRelease) DeepCopy() *AppStatusRelease

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppStatusRelease.

func (*AppStatusRelease) DeepCopyInto

func (in *AppStatusRelease) DeepCopyInto(out *AppStatusRelease)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type Catalog added in v3.24.0

type Catalog struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`
	Spec              CatalogSpec `json:"spec"`
}

+kubebuilder:printcolumn:name="Catalog URL",type=string,JSONPath=`.spec.storage.URL`,description="URL of the catalog" +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp`,description="Time since created" +genclient +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +kubebuilder:resource:categories=common;giantswarm +kubebuilder:storageversion +k8s:openapi-gen=true Catalog represents a catalog of managed apps. It stores general information for potential apps to install. It is reconciled by app-operator.

func NewCatalogCR added in v3.24.0

func NewCatalogCR() *Catalog

NewCatalogCR returns an Catalog Custom Resource.

func (*Catalog) DeepCopy added in v3.24.0

func (in *Catalog) DeepCopy() *Catalog

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Catalog.

func (*Catalog) DeepCopyInto added in v3.24.0

func (in *Catalog) DeepCopyInto(out *Catalog)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*Catalog) DeepCopyObject added in v3.24.0

func (in *Catalog) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type CatalogList added in v3.24.0

type CatalogList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata"`
	Items           []Catalog `json:"items"`
}

func (*CatalogList) DeepCopy added in v3.24.0

func (in *CatalogList) DeepCopy() *CatalogList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CatalogList.

func (*CatalogList) DeepCopyInto added in v3.24.0

func (in *CatalogList) DeepCopyInto(out *CatalogList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*CatalogList) DeepCopyObject added in v3.24.0

func (in *CatalogList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type CatalogSpec added in v3.24.0

type CatalogSpec struct {
	// Title is the name of the catalog for this CR
	// e.g. Catalog of Apps by Giant Swarm
	Title       string `json:"title"`
	Description string `json:"description"`
	// +kubebuilder:validation:Optional
	// +nullable
	// Config is the config to be applied when apps belonging to this
	// catalog are deployed.
	Config *CatalogSpecConfig `json:"config,omitempty"`
	// LogoURL contains the links for logo image file for this catalog
	LogoURL string `json:"logoURL"`
	// Storage references a map containing values that should be applied to
	// the catalog.
	Storage CatalogSpecStorage `json:"storage"`
}

+k8s:openapi-gen=true

func (*CatalogSpec) DeepCopy added in v3.24.0

func (in *CatalogSpec) DeepCopy() *CatalogSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CatalogSpec.

func (*CatalogSpec) DeepCopyInto added in v3.24.0

func (in *CatalogSpec) DeepCopyInto(out *CatalogSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type CatalogSpecConfig added in v3.24.0

type CatalogSpecConfig struct {
	// +kubebuilder:validation:Optional
	// +nullable
	// ConfigMap references a config map containing catalog values that
	// should be applied to apps in this catalog.
	ConfigMap *CatalogSpecConfigConfigMap `json:"configMap,omitempty"`
	// +kubebuilder:validation:Optional
	// +nullable
	// Secret references a secret containing catalog values that should be
	// applied to apps in this catalog.
	Secret *CatalogSpecConfigSecret `json:"secret,omitempty"`
}

+k8s:openapi-gen=true

func (*CatalogSpecConfig) DeepCopy added in v3.24.0

func (in *CatalogSpecConfig) DeepCopy() *CatalogSpecConfig

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CatalogSpecConfig.

func (*CatalogSpecConfig) DeepCopyInto added in v3.24.0

func (in *CatalogSpecConfig) DeepCopyInto(out *CatalogSpecConfig)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type CatalogSpecConfigConfigMap added in v3.24.0

type CatalogSpecConfigConfigMap struct {
	// Name is the name of the config map containing catalog values to
	// apply, e.g. app-catalog-values.
	Name string `json:"name"`
	// Namespace is the namespace of the catalog values config map,
	// e.g. giantswarm.
	Namespace string `json:"namespace"`
}

+k8s:openapi-gen=true

func (*CatalogSpecConfigConfigMap) DeepCopy added in v3.24.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CatalogSpecConfigConfigMap.

func (*CatalogSpecConfigConfigMap) DeepCopyInto added in v3.24.0

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type CatalogSpecConfigSecret added in v3.24.0

type CatalogSpecConfigSecret struct {
	// Name is the name of the secret containing catalog values to apply,
	// e.g. app-catalog-secret.
	Name string `json:"name"`
	// Namespace is the namespace of the secret,
	// e.g. giantswarm.
	Namespace string `json:"namespace"`
}

+k8s:openapi-gen=true

func (*CatalogSpecConfigSecret) DeepCopy added in v3.24.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CatalogSpecConfigSecret.

func (*CatalogSpecConfigSecret) DeepCopyInto added in v3.24.0

func (in *CatalogSpecConfigSecret) DeepCopyInto(out *CatalogSpecConfigSecret)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type CatalogSpecStorage added in v3.24.0

type CatalogSpecStorage struct {
	// Type indicates which repository type would be used for this Catalog.
	// e.g. helm
	Type string `json:"type"`
	// URL is the link to where this Catalog's repository is located
	// e.g. https://example.com/app-catalog/
	URL string `json:"URL"`
}

+k8s:openapi-gen=true

func (*CatalogSpecStorage) DeepCopy added in v3.24.0

func (in *CatalogSpecStorage) DeepCopy() *CatalogSpecStorage

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CatalogSpecStorage.

func (*CatalogSpecStorage) DeepCopyInto added in v3.24.0

func (in *CatalogSpecStorage) DeepCopyInto(out *CatalogSpecStorage)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type Chart

type Chart struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata"`
	Spec              ChartSpec `json:"spec"`
	// +kubebuilder:validation:Optional
	Status ChartStatus `json:"status"`
}

+kubebuilder:printcolumn:name="Version",type=string,JSONPath=`.spec.version`,description="Version of the app" +kubebuilder:printcolumn:name="Last Deployed",type=date,JSONPath=`.status.release.lastDeployed`,description="Time since last deployment" +kubebuilder:printcolumn:name="Status",type=string,JSONPath=`.status.release.status`,description="Deployment status of the app" +genclient +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +kubebuilder:storageversion +kubebuilder:subresource:status +kubebuilder:resource:categories=common;giantswarm +k8s:openapi-gen=true Chart represents a Helm chart to be deployed as a Helm release. It is reconciled by chart-operator.

func NewChartCR

func NewChartCR() *Chart

NewChartCR returns an Chart Custom Resource.

func (*Chart) DeepCopy

func (in *Chart) DeepCopy() *Chart

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Chart.

func (*Chart) DeepCopyInto

func (in *Chart) DeepCopyInto(out *Chart)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*Chart) DeepCopyObject

func (in *Chart) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type ChartList

type ChartList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata"`
	Items           []Chart `json:"items"`
}

func (*ChartList) DeepCopy

func (in *ChartList) DeepCopy() *ChartList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartList.

func (*ChartList) DeepCopyInto

func (in *ChartList) DeepCopyInto(out *ChartList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ChartList) DeepCopyObject

func (in *ChartList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type ChartSpec

type ChartSpec struct {
	// +kubebuilder:validation:Optional
	// +nullable
	// Config is the config to be applied when the chart is deployed.
	Config ChartSpecConfig `json:"config,omitempty"`
	// +kubebuilder:validation:Optional
	// +nullable
	// Install is the config used to deploy the app and is passed to Helm.
	Install ChartSpecInstall `json:"install,omitempty"`
	// Name is the name of the Helm chart to be deployed.
	// e.g. kubernetes-prometheus
	Name string `json:"name"`
	// Namespace is the namespace where the chart should be deployed.
	// e.g. monitoring
	Namespace string `json:"namespace"`
	// +kubebuilder:validation:Optional
	// +nullable
	// NamespaceConfig is the namespace config to be applied to the target namespace when the chart is deployed.
	NamespaceConfig ChartSpecNamespaceConfig `json:"namespaceConfig,omitempty"`
	// TarballURL is the URL for the Helm chart tarball to be deployed.
	// e.g. https://example.com/path/to/prom-1-0-0.tgz
	TarballURL string `json:"tarballURL"`
	// Version is the version of the chart that should be deployed.
	// e.g. 1.0.0
	Version string `json:"version"`
}

+k8s:openapi-gen=true

func (*ChartSpec) DeepCopy

func (in *ChartSpec) DeepCopy() *ChartSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartSpec.

func (*ChartSpec) DeepCopyInto

func (in *ChartSpec) DeepCopyInto(out *ChartSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ChartSpecConfig

type ChartSpecConfig struct {
	// +kubebuilder:validation:Optional
	// +nullable
	// ConfigMap references a config map containing values that should be
	// applied to the chart.
	ConfigMap ChartSpecConfigConfigMap `json:"configMap,omitempty"`
	// +kubebuilder:validation:Optional
	// +nullable
	// Secret references a secret containing secret values that should be
	// applied to the chart.
	Secret ChartSpecConfigSecret `json:"secret,omitempty"`
}

+k8s:openapi-gen=true

func (*ChartSpecConfig) DeepCopy

func (in *ChartSpecConfig) DeepCopy() *ChartSpecConfig

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartSpecConfig.

func (*ChartSpecConfig) DeepCopyInto

func (in *ChartSpecConfig) DeepCopyInto(out *ChartSpecConfig)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ChartSpecConfigConfigMap

type ChartSpecConfigConfigMap struct {
	// Name is the name of the config map containing chart values to apply,
	// e.g. prometheus-chart-values.
	Name string `json:"name"`
	// Namespace is the namespace of the values config map,
	// e.g. monitoring.
	Namespace string `json:"namespace"`
	// ResourceVersion is the Kubernetes resource version of the configmap.
	// Used to detect if the configmap has changed, e.g. 12345.
	ResourceVersion string `json:"resourceVersion"`
}

+k8s:openapi-gen=true

func (*ChartSpecConfigConfigMap) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartSpecConfigConfigMap.

func (*ChartSpecConfigConfigMap) DeepCopyInto

func (in *ChartSpecConfigConfigMap) DeepCopyInto(out *ChartSpecConfigConfigMap)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ChartSpecConfigSecret

type ChartSpecConfigSecret struct {
	// Name is the name of the secret containing chart values to apply,
	// e.g. prometheus-chart-secret.
	Name string `json:"name"`
	// Namespace is the namespace of the secret,
	// e.g. kube-system.
	Namespace string `json:"namespace"`
	// ResourceVersion is the Kubernetes resource version of the secret.
	// Used to detect if the secret has changed, e.g. 12345.
	ResourceVersion string `json:"resourceVersion"`
}

+k8s:openapi-gen=true

func (*ChartSpecConfigSecret) DeepCopy

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartSpecConfigSecret.

func (*ChartSpecConfigSecret) DeepCopyInto

func (in *ChartSpecConfigSecret) DeepCopyInto(out *ChartSpecConfigSecret)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ChartSpecInstall added in v3.15.0

type ChartSpecInstall struct {
	// +kubebuilder:validation:Optional
	// +nullable
	// SkipCRDs when true decides that CRDs which are supplied with the chart are not installed. Default: false.
	SkipCRDs bool `json:"skipCRDs,omitempty"`
}

+k8s:openapi-gen=true

func (*ChartSpecInstall) DeepCopy added in v3.15.0

func (in *ChartSpecInstall) DeepCopy() *ChartSpecInstall

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartSpecInstall.

func (*ChartSpecInstall) DeepCopyInto added in v3.15.0

func (in *ChartSpecInstall) DeepCopyInto(out *ChartSpecInstall)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ChartSpecNamespaceConfig added in v3.22.0

type ChartSpecNamespaceConfig struct {
	// +kubebuilder:validation:Optional
	// +nullable
	// Annotations is a string map of annotations to apply to the target namespace.
	Annotations map[string]string `json:"annotations,omitempty"`
	// +kubebuilder:validation:Optional
	// +nullable
	// Labels is a string map of labels to apply to the target namespace.
	Labels map[string]string `json:"labels,omitempty"`
}

+k8s:openapi-gen=true

func (*ChartSpecNamespaceConfig) DeepCopy added in v3.22.0

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartSpecNamespaceConfig.

func (*ChartSpecNamespaceConfig) DeepCopyInto added in v3.22.0

func (in *ChartSpecNamespaceConfig) DeepCopyInto(out *ChartSpecNamespaceConfig)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ChartStatus

type ChartStatus struct {
	// AppVersion is the value of the AppVersion field in the Chart.yaml of the
	// deployed chart. This is an optional field with the version of the
	// component being deployed.
	// e.g. 0.21.0.
	// https://helm.sh/docs/topics/charts/#the-chartyaml-file
	AppVersion string `json:"appVersion"`
	// Reason is the description of the last status of helm release when the chart is
	// not installed successfully, e.g. deploy resource already exists.
	Reason string `json:"reason,omitempty"`
	// Release is the status of the Helm release for the deployed chart.
	Release ChartStatusRelease `json:"release"`
	// Version is the value of the Version field in the Chart.yaml of the
	// deployed chart.
	// e.g. 1.0.0.
	Version string `json:"version"`
}

+k8s:openapi-gen=true

func (*ChartStatus) DeepCopy

func (in *ChartStatus) DeepCopy() *ChartStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartStatus.

func (*ChartStatus) DeepCopyInto

func (in *ChartStatus) DeepCopyInto(out *ChartStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ChartStatusRelease

type ChartStatusRelease struct {
	// +kubebuilder:validation:Optional
	// +nullable
	// LastDeployed is the time when the deployed chart was last deployed.
	LastDeployed *metav1.Time `json:"lastDeployed,omitempty"`
	// +kubebuilder:validation:Optional
	// +nullable
	// Revision is the revision number for this deployed chart.
	Revision *int `json:"revision,omitempty"`
	// Status is the status of the deployed chart,
	// e.g. DEPLOYED.
	Status string `json:"status"`
}

+k8s:openapi-gen=true

func (*ChartStatusRelease) DeepCopy

func (in *ChartStatusRelease) DeepCopy() *ChartStatusRelease

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartStatusRelease.

func (*ChartStatusRelease) DeepCopyInto

func (in *ChartStatusRelease) DeepCopyInto(out *ChartStatusRelease)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type Provider added in v3.16.0

type Provider string

+kubebuilder:validation:Enum=aws;azure;kvm

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL