v1alpha1

package
v0.7.0-rc.2 Latest Latest
Warning

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

Go to latest
Published: Aug 30, 2021 License: Apache-2.0 Imports: 11 Imported by: 2

Documentation

Overview

Package v1alpha1 contains API Schema definitions for the datadoghq v1alpha1 API group +kubebuilder:object:generate=true +groupName=datadoghq.com

Index

Constants

View Source
const (
	// ExtendedDaemonSetNameLabelKey label key use to link a ExtendedDaemonSetReplicaSet to a ExtendedDaemonSet.
	ExtendedDaemonSetNameLabelKey = "extendeddaemonset.datadoghq.com/name"
	// ExtendedDaemonSetReplicaSetNameLabelKey label key use to link a Pod to a ExtendedDaemonSetReplicaSet.
	ExtendedDaemonSetReplicaSetNameLabelKey = "extendeddaemonsetreplicaset.datadoghq.com/name"
	// ExtendedDaemonSetReplicaSetCanaryLabelKey label key used to identify canary Pods.
	ExtendedDaemonSetReplicaSetCanaryLabelKey = "extendeddaemonsetreplicaset.datadoghq.com/canary"
	// ExtendedDaemonSetReplicaSetCanaryLabelValue label value used to identify canary Pods.
	ExtendedDaemonSetReplicaSetCanaryLabelValue = "true"
	// MD5ExtendedDaemonSetAnnotationKey annotation key use on Pods in order to identify which PodTemplateSpec have been used to generate it.
	MD5ExtendedDaemonSetAnnotationKey = "extendeddaemonset.datadoghq.com/templatehash"
	// ExtendedDaemonSetCanaryValidAnnotationKey annotation key used on Pods in order to detect if a canary deployment is considered valid.
	ExtendedDaemonSetCanaryValidAnnotationKey = "extendeddaemonset.datadoghq.com/canary-valid"
	// ExtendedDaemonSetCanaryPausedAnnotationKey annotation key used on ExtendedDaemonset in order to detect if a canary deployment is paused.
	ExtendedDaemonSetCanaryPausedAnnotationKey = "extendeddaemonset.datadoghq.com/canary-paused"
	// ExtendedDaemonSetCanaryPausedReasonAnnotationKey annotation key used on ExtendedDaemonset to provide a reason that the a canary deployment is paused.
	ExtendedDaemonSetCanaryPausedReasonAnnotationKey = "extendeddaemonset.datadoghq.com/canary-paused-reason"
	// ExtendedDaemonSetCanaryUnpausedAnnotationKey annotation key used on ExtendedDaemonset in order to detect if a canary deployment is manually unpaused.
	ExtendedDaemonSetCanaryUnpausedAnnotationKey = "extendeddaemonset.datadoghq.com/canary-unpaused"
	// ExtendedDaemonSetCanaryFailedAnnotationKey annotation key used on ExtendedDaemonset in order to detect if a canary deployment has failed.
	ExtendedDaemonSetCanaryFailedAnnotationKey = "extendeddaemonset.datadoghq.com/canary-failed"
	// ExtendedDaemonSetCanaryFailedReasonAnnotationKey annotation key used on ExtendedDaemonset in order to provide a reason that the a canary deployment is failed.
	ExtendedDaemonSetCanaryFailedReasonAnnotationKey = "extendeddaemonset.datadoghq.com/canary-failed-reason"
	// ExtendedDaemonSetOldDaemonsetAnnotationKey annotation key used on ExtendedDaemonset in order to inform the controller that old Daemonset's pod.
	// should be taken into consideration during the initial rolling-update.
	ExtendedDaemonSetOldDaemonsetAnnotationKey = "extendeddaemonset.datadoghq.com/old-daemonset"
	// ExtendedDaemonSetRessourceNodeAnnotationKey annotation key used on Node to overwrite the resource allocated to a specific container linked to an ExtendedDaemonset
	// The value format is: <eds-namespace>.<eds-name>.<container-name> .
	ExtendedDaemonSetRessourceNodeAnnotationKey = "resources.extendeddaemonset.datadoghq.com/%s.%s.%s"
	// MD5NodeExtendedDaemonSetAnnotationKey annotation key use on Pods in order to identify which Node Resources Overwride have been used to generate it.
	MD5NodeExtendedDaemonSetAnnotationKey = "extendeddaemonset.datadoghq.com/nodehash"
	// ExtendedDaemonSetRollingUpdatePausedAnnotationKey annotation key used on ExtendedDaemonset in order to detect if a rolling update is paused.
	ExtendedDaemonSetRollingUpdatePausedAnnotationKey = "extendeddaemonset.datadoghq.com/rolling-update-paused"
	// ExtendedDaemonSetRolloutFrozenAnnotationKey annotation key used on ExtendedDaemonset in order to detect if a rollout is frozen.
	ExtendedDaemonSetRolloutFrozenAnnotationKey = "extendeddaemonset.datadoghq.com/rollout-frozen"

	// ValueStringTrue is the string value of bool `true`.
	ValueStringTrue = "true"
	// ValueStringFalse is the string value of bool `false`.
	ValueStringFalse = "false"
)

Variables

View Source
var (
	// ErrInvalidAutoFailRestarts is returned in case of a validation failure for maxRestarts in autoFail.
	ErrInvalidAutoFailRestarts = errors.New("canary autoFail.maxRestarts must be higher than autoPause.maxRestarts")
	// ErrDurationWithManualValidationMode is returned when validationMode=manual and duration is specified.
	ErrDurationWithManualValidationMode = errors.New("canary duration does not have effect with validationMode=manual")
	// ErrNoRestartsDurationWithManualValidationMode is returned when validationMode=manual and noRestartsDuration is specified.
	ErrNoRestartsDurationWithManualValidationMode = errors.New("canary noRestartsDuration does not have effect with validationMode=manual")
)
View Source
var (
	// GroupVersion is group version used to register these objects.
	GroupVersion = schema.GroupVersion{Group: "datadoghq.com", Version: "v1alpha1"}

	// 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
)

Functions

func IsDefaultedExtendedDaemonSet

func IsDefaultedExtendedDaemonSet(dd *ExtendedDaemonSet) bool

IsDefaultedExtendedDaemonSet used to know if a ExtendedDaemonSet is already defaulted returns true if yes, else no.

func IsDefaultedExtendedDaemonSetSpecStrategyCanary

func IsDefaultedExtendedDaemonSetSpecStrategyCanary(canary *ExtendedDaemonSetSpecStrategyCanary) bool

IsDefaultedExtendedDaemonSetSpecStrategyCanary used to know if a ExtendedDaemonSetSpecStrategyCanary is already defaulted returns true if yes, else no.

func IsDefaultedExtendedDaemonSetSpecStrategyRollingUpdate

func IsDefaultedExtendedDaemonSetSpecStrategyRollingUpdate(rollingupdate *ExtendedDaemonSetSpecStrategyRollingUpdate) bool

IsDefaultedExtendedDaemonSetSpecStrategyRollingUpdate used to know if a ExtendedDaemonSetSpecStrategyRollingUpdate is already defaulted returns true if yes, else no.

func NewBool added in v0.5.0

func NewBool(b bool) *bool

NewBool returns pointer to a new bool value instance.

func NewInt32

func NewInt32(i int32) *int32

NewInt32 returns pointer on a new int32 value instance.

func ValidateExtendedDaemonSetSpec added in v0.5.0

func ValidateExtendedDaemonSetSpec(spec *ExtendedDaemonSetSpec) error

ValidateExtendedDaemonSetSpec validates an ExtendedDaemonSet spec returns true if yes, else no.

Types

type ExtendedDaemonSet

type ExtendedDaemonSet struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`

	Spec   ExtendedDaemonSetSpec   `json:"spec,omitempty"`
	Status ExtendedDaemonSetStatus `json:"status,omitempty"`
}

ExtendedDaemonSet is the Schema for the extendeddaemonsets API. +kubebuilder:object:root=true +kubebuilder:subresource:status +kubebuilder:printcolumn:name="desired",type="integer",JSONPath=".status.desired" +kubebuilder:printcolumn:name="current",type="integer",JSONPath=".status.current" +kubebuilder:printcolumn:name="ready",type="integer",JSONPath=".status.ready" +kubebuilder:printcolumn:name="up-to-date",type="integer",JSONPath=".status.upToDate" +kubebuilder:printcolumn:name="available",type="integer",JSONPath=".status.available" +kubebuilder:printcolumn:name="ignored unresponsive nodes",type="integer",JSONPath=".status.ignoredunresponsivenodes" +kubebuilder:printcolumn:name="status",type="string",JSONPath=".status.state" +kubebuilder:printcolumn:name="reason",type="string",JSONPath=".status.reason" +kubebuilder:printcolumn:name="active rs",type="string",JSONPath=".status.activeReplicaSet" +kubebuilder:printcolumn:name="canary rs",type="string",JSONPath=".status.canary.replicaSet" +kubebuilder:printcolumn:name="age",type="date",JSONPath=".metadata.creationTimestamp" +kubebuilder:resource:path=extendeddaemonsets,shortName=eds +k8s:openapi-gen=true +genclient

func DefaultExtendedDaemonSet

func DefaultExtendedDaemonSet(dd *ExtendedDaemonSet, defaultValidationMode ExtendedDaemonSetSpecStrategyCanaryValidationMode) *ExtendedDaemonSet

DefaultExtendedDaemonSet used to default an ExtendedDaemonSet return a list of errors in case of invalid fields.

func (*ExtendedDaemonSet) DeepCopy

func (in *ExtendedDaemonSet) DeepCopy() *ExtendedDaemonSet

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

func (*ExtendedDaemonSet) DeepCopyInto

func (in *ExtendedDaemonSet) DeepCopyInto(out *ExtendedDaemonSet)

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

func (*ExtendedDaemonSet) DeepCopyObject

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

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

type ExtendedDaemonSetCondition added in v0.5.0

type ExtendedDaemonSetCondition struct {
	// Type of ExtendedDaemonSetReplicaSet condition.
	Type ExtendedDaemonSetConditionType `json:"type"`
	// Status of the condition, one of True, False, Unknown.
	Status corev1.ConditionStatus `json:"status"`
	// Last time the condition transitioned from one status to another.
	// +optional
	LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"`
	// Last time the condition was updated.
	// +optional
	LastUpdateTime metav1.Time `json:"lastUpdateTime,omitempty"`
	// The reason for the condition's last transition.
	// +optional
	Reason string `json:"reason,omitempty"`
	// A human readable message indicating details about the transition.
	// +optional
	Message string `json:"message,omitempty"`
}

ExtendedDaemonSetCondition describes the state of a ExtendedDaemonSet at a certain point.

func (*ExtendedDaemonSetCondition) DeepCopy added in v0.5.0

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

func (*ExtendedDaemonSetCondition) DeepCopyInto added in v0.5.0

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

type ExtendedDaemonSetConditionType added in v0.5.0

type ExtendedDaemonSetConditionType string

ExtendedDaemonSetConditionType type use to represent a ExtendedDaemonSetR condition.

const (
	// ConditionTypeEDSReconcileError the controller wasn't able to run properly the reconcile loop with this ExtendedDaemonSet.
	ConditionTypeEDSReconcileError ExtendedDaemonSetConditionType = "ReconcileError"
	// ConditionTypeEDSCanaryPaused ExtendedDaemonSet is in canary mode.
	ConditionTypeEDSCanaryPaused ExtendedDaemonSetConditionType = "Canary-Paused"
	// ConditionTypeEDSCanaryFailed ExtendedDaemonSetis in canary mode.
	ConditionTypeEDSCanaryFailed ExtendedDaemonSetConditionType = "Canary-Failed"
)

type ExtendedDaemonSetList

type ExtendedDaemonSetList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []ExtendedDaemonSet `json:"items"`
}

ExtendedDaemonSetList contains a list of ExtendedDaemonSet +kubebuilder:object:root=true

func (*ExtendedDaemonSetList) DeepCopy

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

func (*ExtendedDaemonSetList) DeepCopyInto

func (in *ExtendedDaemonSetList) DeepCopyInto(out *ExtendedDaemonSetList)

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

func (*ExtendedDaemonSetList) DeepCopyObject

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

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

type ExtendedDaemonSetReplicaSet

type ExtendedDaemonSetReplicaSet struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`

	Spec   ExtendedDaemonSetReplicaSetSpec   `json:"spec,omitempty"`
	Status ExtendedDaemonSetReplicaSetStatus `json:"status,omitempty"`
}

ExtendedDaemonSetReplicaSet is the Schema for the extendeddaemonsetreplicasets API. +kubebuilder:object:root=true +kubebuilder:subresource:status +kubebuilder:printcolumn:name="status",type="string",JSONPath=".status.status" +kubebuilder:printcolumn:name="desired",type="integer",JSONPath=".status.desired" +kubebuilder:printcolumn:name="current",type="integer",JSONPath=".status.current" +kubebuilder:printcolumn:name="ready",type="integer",JSONPath=".status.ready" +kubebuilder:printcolumn:name="available",type="integer",JSONPath=".status.available" +kubebuilder:printcolumn:name="ignored unresponsive nodes",type="integer",JSONPath=".status.ignoredUnresponsiveNodes" +kubebuilder:printcolumn:name="node selector",type="string",JSONPath=".spec.selector" +kubebuilder:printcolumn:name="age",type="date",JSONPath=".metadata.creationTimestamp" +kubebuilder:resource:path=extendeddaemonsetreplicasets,shortName=ers +k8s:openapi-gen=true +genclient

func (*ExtendedDaemonSetReplicaSet) DeepCopy

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

func (*ExtendedDaemonSetReplicaSet) DeepCopyInto

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

func (*ExtendedDaemonSetReplicaSet) DeepCopyObject

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

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

type ExtendedDaemonSetReplicaSetCondition

type ExtendedDaemonSetReplicaSetCondition struct {
	// Type of ExtendedDaemonSetReplicaSet condition.
	Type ExtendedDaemonSetReplicaSetConditionType `json:"type"`
	// Status of the condition, one of True, False, Unknown.
	Status corev1.ConditionStatus `json:"status"`
	// Last time the condition transitioned from one status to another.
	// +optional
	LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"`
	// Last time the condition was updated.
	// +optional
	LastUpdateTime metav1.Time `json:"lastUpdateTime,omitempty"`
	// The reason for the condition's last transition.
	// +optional
	Reason string `json:"reason,omitempty"`
	// A human readable message indicating details about the transition.
	// +optional
	Message string `json:"message,omitempty"`
}

ExtendedDaemonSetReplicaSetCondition describes the state of a ExtendedDaemonSetReplicaSet at a certain point.

func (*ExtendedDaemonSetReplicaSetCondition) DeepCopy

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

func (*ExtendedDaemonSetReplicaSetCondition) DeepCopyInto

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

type ExtendedDaemonSetReplicaSetConditionType

type ExtendedDaemonSetReplicaSetConditionType string

ExtendedDaemonSetReplicaSetConditionType type use to represent a ExtendedDaemonSetReplicaSet condition.

const (
	// ConditionTypeActive ExtendedDaemonSetReplicaSet is active.
	ConditionTypeActive ExtendedDaemonSetReplicaSetConditionType = "Active"
	// ConditionTypeRollingUpdatePaused ExtendedDaemonSetReplicaSet is active but the rolling update is paused.
	ConditionTypeRollingUpdatePaused ExtendedDaemonSetReplicaSetConditionType = "RollingUpdatePaused"
	// ConditionTypeRolloutFrozen ExtendedDaemonSetReplicaSet is active but the rollout is frozen.
	ConditionTypeRolloutFrozen ExtendedDaemonSetReplicaSetConditionType = "RolloutFrozen"
	// ConditionTypeCanary ExtendedDaemonSetReplicaSet is in canary mode.
	ConditionTypeCanary ExtendedDaemonSetReplicaSetConditionType = "Canary"
	// ConditionTypeReconcileError the controller wasn't able to run properly the reconcile loop with this ExtendedDaemonSetReplicaSet.
	ConditionTypeReconcileError ExtendedDaemonSetReplicaSetConditionType = "ReconcileError"
	// ConditionTypeUnschedule some pods was not scheduled properly for this ExtendedDaemonSetReplicaSet.
	ConditionTypeUnschedule ExtendedDaemonSetReplicaSetConditionType = "Unschedule"
	// ConditionTypePodsCleanupDone Pod(s) cleanup condition.
	ConditionTypePodsCleanupDone ExtendedDaemonSetReplicaSetConditionType = "PodsCleanupDone"
	// ConditionTypePodCreation Pod(s) creation condition.
	ConditionTypePodCreation ExtendedDaemonSetReplicaSetConditionType = "PodCreation"
	// ConditionTypePodDeletion Pod(s) deletion condition.
	ConditionTypePodDeletion ExtendedDaemonSetReplicaSetConditionType = "PodDeletion"
	// ConditionTypePodRestarting Pod(s) restarting condition.
	ConditionTypePodRestarting ExtendedDaemonSetReplicaSetConditionType = "PodRestarting"
	// ConditionTypePodCannotStart Pod(s) cannot start condition.
	ConditionTypePodCannotStart ExtendedDaemonSetReplicaSetConditionType = "PodCannotStart"
	// ConditionTypeLastFullSync last time the ExtendedDaemonSetReplicaSet sync when to the end of the reconcile function.
	ConditionTypeLastFullSync ExtendedDaemonSetReplicaSetConditionType = "LastFullSync"
	// ConditionTypeCanaryPaused ExtendedDaemonSetReplicaSet is in canary mode.
	ConditionTypeCanaryPaused ExtendedDaemonSetReplicaSetConditionType = "Canary-Paused"
	// ConditionTypeCanaryFailed ExtendedDaemonSetReplicaSet is in canary mode.
	ConditionTypeCanaryFailed ExtendedDaemonSetReplicaSetConditionType = "Canary-Failed"
)

type ExtendedDaemonSetReplicaSetList

type ExtendedDaemonSetReplicaSetList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []ExtendedDaemonSetReplicaSet `json:"items"`
}

ExtendedDaemonSetReplicaSetList contains a list of ExtendedDaemonSetReplicaSet +kubebuilder:object:root=true

func (*ExtendedDaemonSetReplicaSetList) DeepCopy

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

func (*ExtendedDaemonSetReplicaSetList) DeepCopyInto

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

func (*ExtendedDaemonSetReplicaSetList) DeepCopyObject

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

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

type ExtendedDaemonSetReplicaSetSpec

type ExtendedDaemonSetReplicaSetSpec struct {
	// A label query over pods that are managed by the daemon set.
	// Must match in order to be controlled.
	// If empty, defaulted to labels on Pod template.
	// +optional
	Selector *metav1.LabelSelector `json:"selector,omitempty"`

	// An object that describes the pod that will be created.
	// The ExtendedDaemonSetReplicaSet will create exactly one copy of this pod on every node
	// that matches the template's node selector (or on every node if no node
	// selector is specified).
	Template corev1.PodTemplateSpec `json:"template"`
	// A sequence hash representing a specific generation of the template.
	// Populated by the system. It can be set only during the creation.
	// +optional
	TemplateGeneration string `json:"templateGeneration,omitempty"`
}

ExtendedDaemonSetReplicaSetSpec defines the desired state of ExtendedDaemonSetReplicaSet +k8s:openapi-gen=true

func (*ExtendedDaemonSetReplicaSetSpec) DeepCopy

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

func (*ExtendedDaemonSetReplicaSetSpec) DeepCopyInto

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

type ExtendedDaemonSetReplicaSetSpecStrategy

type ExtendedDaemonSetReplicaSetSpecStrategy struct {
	RollingUpdate      ExtendedDaemonSetSpecStrategyRollingUpdate `json:"rollingUpdate,omitempty"`
	ReconcileFrequency metav1.Duration                            `json:"reconcileFrequency,omitempty"`
}

ExtendedDaemonSetReplicaSetSpecStrategy defines the desired state of ExtendedDaemonSet +k8s:openapi-gen=true

func (*ExtendedDaemonSetReplicaSetSpecStrategy) DeepCopy

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

func (*ExtendedDaemonSetReplicaSetSpecStrategy) DeepCopyInto

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

type ExtendedDaemonSetReplicaSetStatus

type ExtendedDaemonSetReplicaSetStatus struct {
	Status                   string `json:"status"`
	Desired                  int32  `json:"desired"`
	Current                  int32  `json:"current"`
	Ready                    int32  `json:"ready"`
	Available                int32  `json:"available"`
	IgnoredUnresponsiveNodes int32  `json:"ignoredUnresponsiveNodes"`
	// Conditions Represents the latest available observations of a DaemonSet's current state.
	// +listType=map
	// +listMapKey=type
	Conditions []ExtendedDaemonSetReplicaSetCondition `json:"conditions,omitempty"`
}

ExtendedDaemonSetReplicaSetStatus defines the observed state of ExtendedDaemonSetReplicaSet +k8s:openapi-gen=true

func (*ExtendedDaemonSetReplicaSetStatus) DeepCopy

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

func (*ExtendedDaemonSetReplicaSetStatus) DeepCopyInto

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

type ExtendedDaemonSetSpec

type ExtendedDaemonSetSpec struct {
	// A label query over pods that are managed by the daemon set.
	// Must match in order to be controlled.
	// If empty, defaulted to labels on Pod template.
	// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
	// +optional
	Selector *metav1.LabelSelector `json:"selector,omitempty"`

	// An object that describes the pod that will be created.
	// The ExtendedDaemonSet will create exactly one copy of this pod on every node
	// that matches the template's node selector (or on every node if no node
	// selector is specified).
	// More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template
	Template corev1.PodTemplateSpec `json:"template"`

	// Daemonset deployment strategy.
	Strategy ExtendedDaemonSetSpecStrategy `json:"strategy"`
}

ExtendedDaemonSetSpec defines the desired state of ExtendedDaemonSet +k8s:openapi-gen=true

func DefaultExtendedDaemonSetSpec

func DefaultExtendedDaemonSetSpec(spec *ExtendedDaemonSetSpec, defaultValidationMode ExtendedDaemonSetSpecStrategyCanaryValidationMode) *ExtendedDaemonSetSpec

DefaultExtendedDaemonSetSpec used to default an ExtendedDaemonSetSpec.

func (*ExtendedDaemonSetSpec) DeepCopy

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

func (*ExtendedDaemonSetSpec) DeepCopyInto

func (in *ExtendedDaemonSetSpec) DeepCopyInto(out *ExtendedDaemonSetSpec)

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

type ExtendedDaemonSetSpecStrategy

type ExtendedDaemonSetSpecStrategy struct {
	RollingUpdate ExtendedDaemonSetSpecStrategyRollingUpdate `json:"rollingUpdate,omitempty"`
	// Canary deployment configuration
	Canary *ExtendedDaemonSetSpecStrategyCanary `json:"canary,omitempty"`
	// ReconcileFrequency use to configure how often the ExtendedDeamonset will be fully reconcile, default is 10sec.
	ReconcileFrequency *metav1.Duration `json:"reconcileFrequency,omitempty"`
}

ExtendedDaemonSetSpecStrategy defines the deployment strategy of ExtendedDaemonSet. +k8s:openapi-gen=true

func (*ExtendedDaemonSetSpecStrategy) DeepCopy

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

func (*ExtendedDaemonSetSpecStrategy) DeepCopyInto

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

type ExtendedDaemonSetSpecStrategyCanary

type ExtendedDaemonSetSpecStrategyCanary struct {
	Replicas     *intstr.IntOrString   `json:"replicas,omitempty"`
	Duration     *metav1.Duration      `json:"duration,omitempty"`
	NodeSelector *metav1.LabelSelector `json:"nodeSelector,omitempty"`
	// +listType=set
	NodeAntiAffinityKeys []string                                      `json:"nodeAntiAffinityKeys,omitempty"`
	AutoPause            *ExtendedDaemonSetSpecStrategyCanaryAutoPause `json:"autoPause,omitempty"`
	AutoFail             *ExtendedDaemonSetSpecStrategyCanaryAutoFail  `json:"autoFail,omitempty"`
	// NoRestartsDuration defines min duration since last restart to end the canary phase.
	NoRestartsDuration *metav1.Duration `json:"noRestartsDuration,omitempty"`
	// ValidationMode used to configure how a canary deployment is validated. Possible values are 'auto' (default) and 'manual'
	ValidationMode ExtendedDaemonSetSpecStrategyCanaryValidationMode `json:"validationMode,omitempty"`
}

ExtendedDaemonSetSpecStrategyCanary defines the canary deployment strategy of ExtendedDaemonSet. +k8s:openapi-gen=true

func DefaultExtendedDaemonSetSpecStrategyCanary

func DefaultExtendedDaemonSetSpecStrategyCanary(c *ExtendedDaemonSetSpecStrategyCanary, defaultValidationMode ExtendedDaemonSetSpecStrategyCanaryValidationMode) *ExtendedDaemonSetSpecStrategyCanary

DefaultExtendedDaemonSetSpecStrategyCanary used to default an ExtendedDaemonSetSpecStrategyCanary.

func (*ExtendedDaemonSetSpecStrategyCanary) DeepCopy

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

func (*ExtendedDaemonSetSpecStrategyCanary) DeepCopyInto

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

type ExtendedDaemonSetSpecStrategyCanaryAutoFail added in v0.5.0

type ExtendedDaemonSetSpecStrategyCanaryAutoFail struct {
	Enabled *bool `json:"enabled,omitempty"`
	// MaxRestarts defines the number of tolerable (per pod) Canary pod restarts after which the Canary deployment is autofailed.
	MaxRestarts *int32 `json:"maxRestarts,omitempty"`
	// MaxRestartsDuration defines the maximum duration of tolerable Canary pod restarts after which the Canary deployment is autofailed.
	MaxRestartsDuration *metav1.Duration `json:"maxRestartsDuration,omitempty"`
}

ExtendedDaemonSetSpecStrategyCanaryAutoFail defines the canary deployment AutoFail parameters of the ExtendedDaemonSet. +k8s:openapi-gen=true

func DefaultExtendedDaemonSetSpecStrategyCanaryAutoFail added in v0.5.0

func DefaultExtendedDaemonSetSpecStrategyCanaryAutoFail(a *ExtendedDaemonSetSpecStrategyCanaryAutoFail) *ExtendedDaemonSetSpecStrategyCanaryAutoFail

DefaultExtendedDaemonSetSpecStrategyCanaryAutoFail used to default an ExtendedDaemonSetSpecStrategyCanaryAutoFail.

func (*ExtendedDaemonSetSpecStrategyCanaryAutoFail) DeepCopy added in v0.5.0

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

func (*ExtendedDaemonSetSpecStrategyCanaryAutoFail) DeepCopyInto added in v0.5.0

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

type ExtendedDaemonSetSpecStrategyCanaryAutoPause added in v0.4.0

type ExtendedDaemonSetSpecStrategyCanaryAutoPause struct {
	Enabled *bool `json:"enabled,omitempty"`
	// MaxRestarts defines the number of tolerable (per pod) Canary pod restarts after which the Canary deployment is autopaused.
	MaxRestarts *int32 `json:"maxRestarts,omitempty"`
	// MaxSlowStartDuration defines the maximum slow start duration for a pod (stuck in Creating state) after which the.
	// Canary deployment is autopaused
	MaxSlowStartDuration *metav1.Duration `json:"maxSlowStartDuration,omitempty"`
}

ExtendedDaemonSetSpecStrategyCanaryAutoPause defines the canary deployment AutoPause parameters of the ExtendedDaemonSet. +k8s:openapi-gen=true

func DefaultExtendedDaemonSetSpecStrategyCanaryAutoPause added in v0.4.0

func DefaultExtendedDaemonSetSpecStrategyCanaryAutoPause(a *ExtendedDaemonSetSpecStrategyCanaryAutoPause) *ExtendedDaemonSetSpecStrategyCanaryAutoPause

DefaultExtendedDaemonSetSpecStrategyCanaryAutoPause used to default an ExtendedDaemonSetSpecStrategyCanaryAutoPause.

func (*ExtendedDaemonSetSpecStrategyCanaryAutoPause) DeepCopy added in v0.4.0

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

func (*ExtendedDaemonSetSpecStrategyCanaryAutoPause) DeepCopyInto added in v0.4.0

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

type ExtendedDaemonSetSpecStrategyCanaryValidationMode added in v0.7.0

type ExtendedDaemonSetSpecStrategyCanaryValidationMode string

ExtendedDaemonSetSpecStrategyCanaryValidationMode type representing the ExtendedDaemonSetSpecStrategyCanary validation mode. +kubebuilder:validation:Enum=auto;manual

const (
	// ExtendedDaemonSetSpecStrategyCanaryValidationModeAuto the ExtendedDaemonSetSpecStrategyCanary automatic validation mode.
	ExtendedDaemonSetSpecStrategyCanaryValidationModeAuto ExtendedDaemonSetSpecStrategyCanaryValidationMode = "auto"
	// ExtendedDaemonSetSpecStrategyCanaryValidationModeManual the ExtendedDaemonSetSpecStrategyCanary manual validation mode.
	ExtendedDaemonSetSpecStrategyCanaryValidationModeManual ExtendedDaemonSetSpecStrategyCanaryValidationMode = "manual"
)

type ExtendedDaemonSetSpecStrategyRollingUpdate

type ExtendedDaemonSetSpecStrategyRollingUpdate struct {
	// The maximum number of DaemonSet pods that can be unavailable during the
	// update. Value can be an absolute number (ex: 5) or a percentage of total
	// number of DaemonSet pods at the start of the update (ex: 10%). Absolute
	// number is calculated from percentage by rounding up.
	// This cannot be 0.
	// Default value is 1.
	MaxUnavailable *intstr.IntOrString `json:"maxUnavailable,omitempty"`
	// MaxPodSchedulerFailure the maxinum number of not scheduled on its Node due to a
	// scheduler failure: resource constraints. Value can be an absolute number (ex: 5) or a percentage of total
	// number of DaemonSet pods at the start of the update (ex: 10%). Absolute.
	MaxPodSchedulerFailure *intstr.IntOrString `json:"maxPodSchedulerFailure,omitempty"`
	// The maxium number of pods created in parallel.
	// Default value is 250.
	MaxParallelPodCreation *int32 `json:"maxParallelPodCreation,omitempty"`
	// SlowStartIntervalDuration the duration between to 2
	// Default value is 1min.
	SlowStartIntervalDuration *metav1.Duration `json:"slowStartIntervalDuration,omitempty"`
	// SlowStartAdditiveIncrease
	// Value can be an absolute number (ex: 5) or a percentage of total
	// number of DaemonSet pods at the start of the update (ex: 10%).
	// Default value is 5.
	SlowStartAdditiveIncrease *intstr.IntOrString `json:"slowStartAdditiveIncrease,omitempty"`
}

ExtendedDaemonSetSpecStrategyRollingUpdate defines the rolling update deployment strategy of ExtendedDaemonSet. +k8s:openapi-gen=true

func DefaultExtendedDaemonSetSpecStrategyRollingUpdate

func DefaultExtendedDaemonSetSpecStrategyRollingUpdate(rollingupdate *ExtendedDaemonSetSpecStrategyRollingUpdate) *ExtendedDaemonSetSpecStrategyRollingUpdate

DefaultExtendedDaemonSetSpecStrategyRollingUpdate used to default an ExtendedDaemonSetSpecStrategyRollingUpdate.

func (*ExtendedDaemonSetSpecStrategyRollingUpdate) DeepCopy

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

func (*ExtendedDaemonSetSpecStrategyRollingUpdate) DeepCopyInto

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

type ExtendedDaemonSetStatus

type ExtendedDaemonSetStatus struct {
	Desired                  int32 `json:"desired"`
	Current                  int32 `json:"current"`
	Ready                    int32 `json:"ready"`
	Available                int32 `json:"available"`
	UpToDate                 int32 `json:"upToDate"`
	IgnoredUnresponsiveNodes int32 `json:"ignoredUnresponsiveNodes"`

	State            ExtendedDaemonSetStatusState   `json:"state,omitempty"`
	ActiveReplicaSet string                         `json:"activeReplicaSet"`
	Canary           *ExtendedDaemonSetStatusCanary `json:"canary,omitempty"`

	// Reason provides an explanation for canary deployment autopause
	// +optional
	Reason ExtendedDaemonSetStatusReason `json:"reason,omitempty"`

	// Conditions Represents the latest available observations of a DaemonSet's current state.
	// +listType=map
	// +listMapKey=type
	Conditions []ExtendedDaemonSetCondition `json:"conditions,omitempty"`
}

ExtendedDaemonSetStatus defines the observed state of ExtendedDaemonSet +k8s:openapi-gen=true

func (*ExtendedDaemonSetStatus) DeepCopy

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

func (*ExtendedDaemonSetStatus) DeepCopyInto

func (in *ExtendedDaemonSetStatus) DeepCopyInto(out *ExtendedDaemonSetStatus)

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

type ExtendedDaemonSetStatusCanary

type ExtendedDaemonSetStatusCanary struct {
	ReplicaSet string `json:"replicaSet"`
	// +listType=set
	Nodes []string `json:"nodes,omitempty"`
}

ExtendedDaemonSetStatusCanary defines the observed state of ExtendedDaemonSet canary deployment +k8s:openapi-gen=true

func (*ExtendedDaemonSetStatusCanary) DeepCopy

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

func (*ExtendedDaemonSetStatusCanary) DeepCopyInto

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

type ExtendedDaemonSetStatusReason

type ExtendedDaemonSetStatusReason string

ExtendedDaemonSetStatusReason type represents the reason for a ExtendedDaemonSet status state.

const (
	// ExtendedDaemonSetStatusReasonCLB represents CrashLoopBackOff as the reason for the ExtendedDaemonSet status state.
	ExtendedDaemonSetStatusReasonCLB ExtendedDaemonSetStatusReason = "CrashLoopBackOff"
	// ExtendedDaemonSetStatusReasonOOM represents OOMKilled as the reason for the ExtendedDaemonSet status state.
	ExtendedDaemonSetStatusReasonOOM ExtendedDaemonSetStatusReason = "OOMKilled"
	// ExtendedDaemonSetStatusRestartsTimeoutExceeded represents timeout on restarts as the reason for the ExtendedDaemonSet status.
	ExtendedDaemonSetStatusRestartsTimeoutExceeded ExtendedDaemonSetStatusReason = "RestartsTimeoutExceeded"
	// ExtendedDaemonSetStatusSlowStartTimeoutExceeded represents timeout on slow starts as the reason for the ExtendedDaemonSet status.
	ExtendedDaemonSetStatusSlowStartTimeoutExceeded ExtendedDaemonSetStatusReason = "SlowStartTimeoutExceeded"
	// ExtendedDaemonSetStatusReasonErrImagePull represent ErrImagePull as the reason for the ExtendedDaemonSet status state.
	ExtendedDaemonSetStatusReasonErrImagePull ExtendedDaemonSetStatusReason = "ErrImagePull"
	// ExtendedDaemonSetStatusReasonImagePullBackOff represent ImagePullBackOff as the reason for the ExtendedDaemonSet status state.
	ExtendedDaemonSetStatusReasonImagePullBackOff ExtendedDaemonSetStatusReason = "ImagePullBackOff"
	// ExtendedDaemonSetStatusReasonCreateContainerConfigError represent CreateContainerConfigError as the reason for the ExtendedDaemonSet status state.
	ExtendedDaemonSetStatusReasonCreateContainerConfigError ExtendedDaemonSetStatusReason = "CreateContainerConfigError"
	// ExtendedDaemonSetStatusReasonCreateContainerError represent CreateContainerError as the reason for the ExtendedDaemonSet status state.
	ExtendedDaemonSetStatusReasonCreateContainerError ExtendedDaemonSetStatusReason = "CreateContainerError"
	// ExtendedDaemonSetStatusReasonPreStartHookError represent PreStartHookError as the reason for the ExtendedDaemonSet status state.
	ExtendedDaemonSetStatusReasonPreStartHookError ExtendedDaemonSetStatusReason = "PreStartHookError"
	// ExtendedDaemonSetStatusReasonPostStartHookError represent PostStartHookError as the reason for the ExtendedDaemonSet status state.
	ExtendedDaemonSetStatusReasonPostStartHookError ExtendedDaemonSetStatusReason = "PostStartHookError"
	// ExtendedDaemonSetStatusReasonStartError represent StartError as the reason for the ExtendedDaemonSet status state.
	ExtendedDaemonSetStatusReasonStartError ExtendedDaemonSetStatusReason = "StartError"
	// ExtendedDaemonSetStatusReasonUnknown represents an Unknown reason for the status state.
	ExtendedDaemonSetStatusReasonUnknown ExtendedDaemonSetStatusReason = "Unknown"
)

type ExtendedDaemonSetStatusState

type ExtendedDaemonSetStatusState string

ExtendedDaemonSetStatusState type representing the ExtendedDaemonSet state.

const (
	// ExtendedDaemonSetStatusStateRunning the ExtendedDaemonSet is currently Running.
	ExtendedDaemonSetStatusStateRunning ExtendedDaemonSetStatusState = "Running"
	// ExtendedDaemonSetStatusStateRollingUpdatePaused the ExtendedDaemonSet rolling update is paused.
	ExtendedDaemonSetStatusStateRollingUpdatePaused ExtendedDaemonSetStatusState = "RollingUpdate Paused"
	// ExtendedDaemonSetStatusStateRolloutFrozen the ExtendedDaemonSet rollout is frozen.
	ExtendedDaemonSetStatusStateRolloutFrozen ExtendedDaemonSetStatusState = "Rollout frozen"
	// ExtendedDaemonSetStatusStateCanary the ExtendedDaemonSet currently run a new version with a Canary deployment.
	ExtendedDaemonSetStatusStateCanary ExtendedDaemonSetStatusState = "Canary"
	// ExtendedDaemonSetStatusStateCanaryPaused the Canary deployment of the ExtendedDaemonSet is paused.
	ExtendedDaemonSetStatusStateCanaryPaused ExtendedDaemonSetStatusState = "Canary Paused"
	// ExtendedDaemonSetStatusStateCanaryFailed the Canary deployment of the ExtendedDaemonSet is considered as Failing.
	ExtendedDaemonSetStatusStateCanaryFailed ExtendedDaemonSetStatusState = "Canary Failed"
)

type ExtendedDaemonsetSetting

type ExtendedDaemonsetSetting struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`

	Spec   ExtendedDaemonsetSettingSpec   `json:"spec,omitempty"`
	Status ExtendedDaemonsetSettingStatus `json:"status,omitempty"`
}

ExtendedDaemonsetSetting is the Schema for the extendeddaemonsetsettings API. +kubebuilder:object:root=true +kubebuilder:subresource:status +kubebuilder:resource:path=extendeddaemonsetsettings,scope=Namespaced +kubebuilder:printcolumn:name="status",type="string",JSONPath=".status.status" +kubebuilder:printcolumn:name="node selector",type="string",JSONPath=".spec.nodeSelector" +kubebuilder:printcolumn:name="error",type="string",JSONPath=".status.error" +kubebuilder:printcolumn:name="age",type="date",JSONPath=".metadata.creationTimestamp" +k8s:openapi-gen=true +genclient

func (*ExtendedDaemonsetSetting) DeepCopy

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

func (*ExtendedDaemonsetSetting) DeepCopyInto

func (in *ExtendedDaemonsetSetting) DeepCopyInto(out *ExtendedDaemonsetSetting)

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

func (*ExtendedDaemonsetSetting) DeepCopyObject

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

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

type ExtendedDaemonsetSettingContainerSpec

type ExtendedDaemonsetSettingContainerSpec struct {
	Name      string                      `json:"name"`
	Resources corev1.ResourceRequirements `json:"resources"`
}

ExtendedDaemonsetSettingContainerSpec defines the resources override for a container identified by its name +k8s:openapi-gen=true

func (*ExtendedDaemonsetSettingContainerSpec) DeepCopy

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

func (*ExtendedDaemonsetSettingContainerSpec) DeepCopyInto

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

type ExtendedDaemonsetSettingList

type ExtendedDaemonsetSettingList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []ExtendedDaemonsetSetting `json:"items"`
}

ExtendedDaemonsetSettingList contains a list of ExtendedDaemonsetSetting +kubebuilder:object:root=true

func (*ExtendedDaemonsetSettingList) DeepCopy

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

func (*ExtendedDaemonsetSettingList) DeepCopyInto

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

func (*ExtendedDaemonsetSettingList) DeepCopyObject

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

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

type ExtendedDaemonsetSettingSpec

type ExtendedDaemonsetSettingSpec struct {
	// Reference contains enough information to let you identify the referred resource.
	Reference *autoscalingv1.CrossVersionObjectReference `json:"reference"`
	// NodeSelector lists labels that must be present on nodes to trigger the usage of this resource.
	NodeSelector metav1.LabelSelector `json:"nodeSelector"`
	// Containers contains a list of container spec override.
	// +listType=map
	// +listMapKey=name
	Containers []ExtendedDaemonsetSettingContainerSpec `json:"containers,omitempty"`
}

ExtendedDaemonsetSettingSpec is the Schema for the extendeddaemonsetsetting API +k8s:openapi-gen=true

func (*ExtendedDaemonsetSettingSpec) DeepCopy

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

func (*ExtendedDaemonsetSettingSpec) DeepCopyInto

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

type ExtendedDaemonsetSettingStatus

type ExtendedDaemonsetSettingStatus struct {
	Status ExtendedDaemonsetSettingStatusStatus `json:"status"`
	Error  string                               `json:"error,omitempty"`
}

ExtendedDaemonsetSettingStatus defines the observed state of ExtendedDaemonsetSetting. +k8s:openapi-gen=true

func (*ExtendedDaemonsetSettingStatus) DeepCopy

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

func (*ExtendedDaemonsetSettingStatus) DeepCopyInto

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

type ExtendedDaemonsetSettingStatusStatus

type ExtendedDaemonsetSettingStatusStatus string

ExtendedDaemonsetSettingStatusStatus defines the readable status in ExtendedDaemonsetSettingStatus.

const (
	// ExtendedDaemonsetSettingStatusValid status when ExtendedDaemonsetSetting is valide.
	ExtendedDaemonsetSettingStatusValid ExtendedDaemonsetSettingStatusStatus = "valid"
	// ExtendedDaemonsetSettingStatusError status when ExtendedDaemonsetSetting is in error state.
	ExtendedDaemonsetSettingStatusError ExtendedDaemonsetSettingStatusStatus = "error"
)

Directories

Path Synopsis
Package test contains unit-test helper functions.
Package test contains unit-test helper functions.

Jump to

Keyboard shortcuts

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