v1alpha1

package
v4.2.712+incompatible Latest Latest
Warning

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

Go to latest
Published: Feb 21, 2020 License: Apache-2.0 Imports: 8 Imported by: 0

Documentation

Overview

Package v1alpha1 contains API Schema definitions for the federatorai v1alpha1 API group +k8s:deepcopy-gen=package,register +groupName=federatorai.containers.ai

Package v1alpha1 contains API Schema definitions for the federatorai v1alpha1 API group +k8s:deepcopy-gen=package,register +groupName=federatorai.containers.ai

Index

Constants

View Source
const (
	Empty     Usage = ""
	Log       Usage = "log"
	Data      Usage = "data"
	PVC       Type  = "pvc"
	Ephemeral Type  = "ephemeral"
)

Variables

View Source
var (
	// SchemeGroupVersion is group version used to register these objects
	SchemeGroupVersion = schema.GroupVersion{Group: "federatorai.containers.ai", Version: "v1alpha1"}

	// SchemeBuilder is used to add go types to the GroupVersionKind scheme
	SchemeBuilder = &scheme.Builder{GroupVersion: SchemeGroupVersion}
)
View Source
var (
	PvcUsage = []Usage{Data, Log}
)

Functions

func RegisterDefaults

func RegisterDefaults(scheme *runtime.Scheme) error

RegisterDefaults adds defaulters functions to the given scheme. Public to allow building arbitrary schemes. All generated defaulters are covering - they call all nested defaulters.

Types

type AlamedaComponentSpec added in v0.2.0

type AlamedaComponentSpec struct {
	Image              string            `json:"image"`
	Version            string            `json:"version"`
	ImagePullPolicy    corev1.PullPolicy `json:"imagepullpolicy"`
	Storages           []StorageSpec     `json:"storages"`
	BootStrapContainer Imagestruct       `json:"bootstrap"`
	EnvVars            []corev1.EnvVar   `json:"env"`
}

func (*AlamedaComponentSpec) DeepCopy added in v0.3.57

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

func (*AlamedaComponentSpec) DeepCopyInto added in v0.3.57

func (in *AlamedaComponentSpec) DeepCopyInto(out *AlamedaComponentSpec)

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

type AlamedaService

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

	Spec   AlamedaServiceSpec   `json:"spec,omitempty"`
	Status AlamedaServiceStatus `json:"status,omitempty"`
}

AlamedaService is the Schema for the alamedaservices API +k8s:openapi-gen=true

func (*AlamedaService) DeepCopy

func (in *AlamedaService) DeepCopy() *AlamedaService

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

func (*AlamedaService) DeepCopyInto

func (in *AlamedaService) DeepCopyInto(out *AlamedaService)

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

func (*AlamedaService) DeepCopyObject

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

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

func (AlamedaService) GetSpecAnnotationWithoutKeycode added in v0.9.1

func (as AlamedaService) GetSpecAnnotationWithoutKeycode() (string, error)

GetSpecAnnotationWithoutKeycode sets keycode summary into AlamedaService's status

func (*AlamedaService) IsCodeNumberEmpty added in v0.9.1

func (as *AlamedaService) IsCodeNumberEmpty() bool

IsCodeNumberEmpty returns true if keycode is empty

func (*AlamedaService) IsCodeNumberUpdated added in v0.9.1

func (as *AlamedaService) IsCodeNumberUpdated() bool

IsCodeNumberUpdated returns true if current keycode is not equal to previous keycode

func (*AlamedaService) SetCRDVersion added in v0.9.1

func (as *AlamedaService) SetCRDVersion(crdVer AlamedaServiceStatusCRDVersion)

SetCRDVersion sets crdVersion into AlamedaService's status

func (*AlamedaService) SetDefaultValue

func (as *AlamedaService) SetDefaultValue()

SetDefaultValue sets default value into AlamedaServie

func (*AlamedaService) SetStatusCodeNumber added in v0.9.1

func (as *AlamedaService) SetStatusCodeNumber(codeNumber string)

SetStatusCodeNumber sets codeNumber into AlamedaService's status

func (*AlamedaService) SetStatusKeycode added in v0.9.1

func (as *AlamedaService) SetStatusKeycode(status KeycodeStatus)

SetStatusKeycode sets keycode status into AlamedaService's status

func (*AlamedaService) SetStatusKeycodeLastErrorMessage added in v0.9.1

func (as *AlamedaService) SetStatusKeycodeLastErrorMessage(msg string)

SetStatusKeycodeLastErrorMessage sets last error message into AlamedaService's keycode status

func (*AlamedaService) SetStatusKeycodeState added in v0.9.1

func (as *AlamedaService) SetStatusKeycodeState(state KeycodeState)

SetStatusKeycodeState sets registration data into AlamedaService's status

func (*AlamedaService) SetStatusKeycodeSummary added in v0.9.1

func (as *AlamedaService) SetStatusKeycodeSummary(summary string)

SetStatusKeycodeSummary sets keycode summary into AlamedaService's status

func (*AlamedaService) SetStatusRegistrationData added in v0.9.1

func (as *AlamedaService) SetStatusRegistrationData(registrationData string)

SetStatusRegistrationData sets registration data into AlamedaService's status

type AlamedaServiceList

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

AlamedaServiceList contains a list of AlamedaService

func (*AlamedaServiceList) DeepCopy

func (in *AlamedaServiceList) DeepCopy() *AlamedaServiceList

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

func (*AlamedaServiceList) DeepCopyInto

func (in *AlamedaServiceList) DeepCopyInto(out *AlamedaServiceList)

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

func (*AlamedaServiceList) DeepCopyObject

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

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

type AlamedaServiceSpec

type AlamedaServiceSpec struct {
	// INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
	// Important: Run "operator-sdk generate k8s" to regenerate code after modifying this file
	// Add custom validation using kubebuilder tags: https://book.kubebuilder.io/beyond_basics/generating_crd.html
	// +kubebuilder:validation:Enum=openshift3.9
	Platform                 Platform              `json:"platform,omitempty"`
	EnableExecution          bool                  `json:"enableExecution"`
	EnableGUI                bool                  `json:"enableGui"`
	EnableDispatcher         *bool                 `json:"enableDispatcher"`
	EnablePreloader          bool                  `json:"enablePreloader"`
	SelfDriving              bool                  `json:"selfDriving"`
	AutoPatchPrometheusRules bool                  `json:"autoPatchPrometheusRules"`
	Version                  string                `json:"version"`
	ImageLocation            string                `json:"imageLocation"`
	PrometheusService        string                `json:"prometheusService"`
	Storages                 []StorageSpec         `json:"storages"`
	ServiceExposures         []ServiceExposureSpec `json:"serviceExposures"`
	EnableWeavescope         bool                  `json:"enableWeavescope"`
	Keycode                  KeycodeSpec           `json:"keycode"`
	Kafka                    KafkaSpec             `json:"kafka"`

	//Component Section Schema
	InfluxdbSectionSet                  AlamedaComponentSpec    `json:"alamedaInfluxdb"`
	GrafanaSectionSet                   AlamedaComponentSpec    `json:"alamedaGrafana"`
	AlamedaAISectionSet                 AlamedaComponentSpec    `json:"alamedaAi"`
	AlamedaOperatorSectionSet           AlamedaComponentSpec    `json:"alamedaOperator"`
	AlamedaDatahubSectionSet            AlamedaComponentSpec    `json:"alamedaDatahub"`
	AlamedaEvictionerSectionSet         AlamedaComponentSpec    `json:"alamedaEvictioner"`
	AdmissionControllerSectionSet       AlamedaComponentSpec    `json:"alamedaAdmissionController"`
	AlamedaRecommenderSectionSet        AlamedaComponentSpec    `json:"alamedaRecommender"`
	AlamedaExecutorSectionSet           AlamedaComponentSpec    `json:"alamedaExecutor"`
	AlamedaFedemeterSectionSet          AlamedaComponentSpec    `json:"fedemeter"`
	AlamedaFedemeterInfluxDBSectionSet  AlamedaComponentSpec    `json:"fedemeterInfluxdb"`
	AlamedaWeavescopeSectionSet         AlamedaComponentSpec    `json:"alameda-weavescope"`
	AlamedaDispatcherSectionSet         AlamedaComponentSpec    `json:"alameda-dispatcher"`
	AlamedaRabbitMQSectionSet           AlamedaComponentSpec    `json:"alamedaRabbitMQ"`
	AlamedaAnalyzerSectionSet           AlamedaComponentSpec    `json:"alameda-analyzer"`
	AlamedaNotifierSectionSet           AlamedaComponentSpec    `json:"alamedaNotifier"`
	FederatoraiAgentSectionSet          AlamedaComponentSpec    `json:"federatoraiAgent"`
	FederatoraiAgentGPUSectionSet       FederatoraiAgentGPUSpec `json:"federatoraiAgentGPU"`
	FederatoraiRestSectionSet           AlamedaComponentSpec    `json:"federatoraiRest"`
	FederatoraiAgentPreloaderSectionSet AlamedaComponentSpec    `json:"federatoraiAgentPreloader"`
	FederatoraiFrontendSectionSet       AlamedaComponentSpec    `json:"federatoraiFrontend"`
	FederatoraiBackendSectionSet        AlamedaComponentSpec    `json:"federatoraiBackend"`
	FederatoraiAgentAppSectionSet       AlamedaComponentSpec    `json:"federatoraiAgentApp"`
}

AlamedaServiceSpec defines the desired state of AlamedaService +k8s:openapi-gen=true

func (*AlamedaServiceSpec) DeepCopy

func (in *AlamedaServiceSpec) DeepCopy() *AlamedaServiceSpec

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

func (*AlamedaServiceSpec) DeepCopyInto

func (in *AlamedaServiceSpec) DeepCopyInto(out *AlamedaServiceSpec)

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

type AlamedaServiceStatus

type AlamedaServiceStatus struct {
	// INSERT ADDITIONAL STATUS FIELD - define observed state of cluster
	// Important: Run "operator-sdk generate k8s" to regenerate code after modifying this file
	// Add custom validation using kubebuilder tags: https://book.kubebuilder.io/beyond_basics/generating_crd.html
	CRDVersion    AlamedaServiceStatusCRDVersion  `json:"crdversion"`
	Conditions    []AlamedaServiceStatusCondition `json:"conditions"`
	KeycodeStatus KeycodeStatus                   `json:"keycodeStatus"`
}

AlamedaServiceStatus defines the observed state of AlamedaService +k8s:openapi-gen=true

func (*AlamedaServiceStatus) DeepCopy

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

func (*AlamedaServiceStatus) DeepCopyInto

func (in *AlamedaServiceStatus) DeepCopyInto(out *AlamedaServiceStatus)

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

type AlamedaServiceStatusCRDVersion added in v0.2.5

type AlamedaServiceStatusCRDVersion struct {

	// Represents whether any actions on the underlaying managed objects are
	// being performed. Only delete actions will be performed.
	ChangeVersion bool   `json:"-"`
	ScalerVersion string `json:"scalerversion"`
	CRDName       string `json:"crdname"`
}

func (*AlamedaServiceStatusCRDVersion) DeepCopy added in v0.3.57

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

func (*AlamedaServiceStatusCRDVersion) DeepCopyInto added in v0.3.57

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

type AlamedaServiceStatusCondition

type AlamedaServiceStatusCondition struct {

	// Represents whether any actions on the underlaying managed objects are
	// being performed. Only delete actions will be performed.
	Paused  bool   `json:"paused"`
	Message string `json:"message"`
}

func (*AlamedaServiceStatusCondition) DeepCopy

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

func (*AlamedaServiceStatusCondition) DeepCopyInto

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

type FederatoraiAgentGPUSpec added in v0.9.13

type FederatoraiAgentGPUSpec struct {
	AlamedaComponentSpec
	Prometheus *PrometheusConfig `json:"prometheus"`
	InfluxDB   *InfluxDBConfig   `json:"influxDB"`
}

func (*FederatoraiAgentGPUSpec) DeepCopy

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

func (*FederatoraiAgentGPUSpec) DeepCopyInto

func (in *FederatoraiAgentGPUSpec) DeepCopyInto(out *FederatoraiAgentGPUSpec)

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

type Imagestruct added in v0.2.0

type Imagestruct struct {
	Image           string            `json:"image"`
	Version         string            `json:"version"`
	ImagePullPolicy corev1.PullPolicy `json:"imagepullpolicy"`
}

func (*Imagestruct) DeepCopy added in v0.3.57

func (in *Imagestruct) DeepCopy() *Imagestruct

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

func (*Imagestruct) DeepCopyInto added in v0.3.57

func (in *Imagestruct) DeepCopyInto(out *Imagestruct)

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

type InfluxDBConfig added in v0.9.13

type InfluxDBConfig struct {
	Address  string `json:"address"`
	Username string `json:"username"`
	Password string `json:"password"`
}

func (*InfluxDBConfig) DeepCopy

func (in *InfluxDBConfig) DeepCopy() *InfluxDBConfig

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

func (*InfluxDBConfig) DeepCopyInto

func (in *InfluxDBConfig) DeepCopyInto(out *InfluxDBConfig)

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

type KafkaSpec

type KafkaSpec struct {
	BrokerAddresses []string `json:"brokerAddresses,omitempty"`
	// Version         string   `json:"version,omitempty"`
	TLS  TLSSpec  `json:"tls,omitempty"`
	SASL SASLSpec `json:"sasl,omitempty"`
}

func (*KafkaSpec) DeepCopy

func (in *KafkaSpec) DeepCopy() *KafkaSpec

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

func (*KafkaSpec) DeepCopyInto

func (in *KafkaSpec) DeepCopyInto(out *KafkaSpec)

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

type KeycodeSpec added in v0.9.1

type KeycodeSpec struct {
	// CodeNumber provides user to apply keycode to Federator.ai
	CodeNumber string `json:"codeNumber"`
	// SignatureData provides user to apply signature data which is download from ProphetStor to Federator.ai
	SignatureData string `json:"signatureData"`
}

KeycodeSpec contains data for keycode check

func (*KeycodeSpec) DeepCopy added in v0.9.1

func (in *KeycodeSpec) DeepCopy() *KeycodeSpec

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

func (*KeycodeSpec) DeepCopyInto added in v0.9.1

func (in *KeycodeSpec) DeepCopyInto(out *KeycodeSpec)

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

type KeycodeState added in v0.9.1

type KeycodeState string

KeycodeState defines type of keycode processing state

var (
	// KeycodeStateDefault represents default state
	KeycodeStateDefault KeycodeState
	// KeycodeStateWaitingKeycode represents state in waiting keycode to be filled in
	KeycodeStateWaitingKeycode KeycodeState = "WaitingKeycode"
	// KeycodeStatePollingRegistrationData represents in poll registration data state
	KeycodeStatePollingRegistrationData KeycodeState = "PollingRegistrationData"
	// KeycodeStateWaitingSignatureData represents state waiting user fill in signature data
	KeycodeStateWaitingSignatureData KeycodeState = "WaitingSignatureData"
	// KeycodeStateDone represents state waiting user fill in signature data
	KeycodeStateDone KeycodeState = "Done"
)

type KeycodeStatus added in v0.9.1

type KeycodeStatus struct {
	// CodeNumber represents the last keycode user successfully applied
	CodeNumber string `json:"codeNumber"`
	// RegistrationData contains data that user need to send to ProphetStor to activate keycode
	RegistrationData string `json:"registrationData"`
	// State represents the state of keycode processing
	State KeycodeState `json:"state"`
	// LastErrorMessage stores the error message that happend when Federatorai-Operator handled keycode
	LastErrorMessage string `json:"lastErrorMessage"`
	// Summary stores the summary of the keycode
	Summary string `json:"summary"`
}

KeycodeStatus contains current keycode information

func (*KeycodeStatus) DeepCopy added in v0.9.1

func (in *KeycodeStatus) DeepCopy() *KeycodeStatus

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

func (*KeycodeStatus) DeepCopyInto added in v0.9.1

func (in *KeycodeStatus) DeepCopyInto(out *KeycodeStatus)

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

type NodePortSpec added in v0.3.57

type NodePortSpec struct {
	Ports []PortSpec `json:"ports"`
}

NodePortSpec defines the ports to be proxied from node to service

func (*NodePortSpec) DeepCopy added in v0.3.57

func (in *NodePortSpec) DeepCopy() *NodePortSpec

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

func (*NodePortSpec) DeepCopyInto added in v0.3.57

func (in *NodePortSpec) DeepCopyInto(out *NodePortSpec)

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

type Platform added in v0.2.19

type Platform = string
const (
	PlatformOpenshift3_9 Platform = "openshift3.9"
)

type PortSpec added in v0.3.57

type PortSpec struct {
	// +kubebuilder:validation:Minimum=0
	// +kubebuilder:validation:Maximum=65535
	Port int32 `json:"port"`
	// +kubebuilder:validation:Minimum=0
	// +kubebuilder:validation:Maximum=65535
	NodePort int32 `json:"nodePort"`
}

PortSpec defines the service port

func (*PortSpec) DeepCopy added in v0.3.57

func (in *PortSpec) DeepCopy() *PortSpec

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

func (*PortSpec) DeepCopyInto added in v0.3.57

func (in *PortSpec) DeepCopyInto(out *PortSpec)

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

type PrometheusConfig added in v0.9.13

type PrometheusConfig struct {
	Address  string `json:"address"`
	Username string `json:"username"`
	Password string `json:"password"`
}

func (*PrometheusConfig) DeepCopy

func (in *PrometheusConfig) DeepCopy() *PrometheusConfig

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

func (*PrometheusConfig) DeepCopyInto

func (in *PrometheusConfig) DeepCopyInto(out *PrometheusConfig)

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

type SASLSpec

type SASLSpec struct {
	Enabled  bool   `json:"enabled,omitempty"`
	Username string `json:"username,omitempty"`
	Password string `json:"password,omitempty"`
}

func (*SASLSpec) DeepCopy

func (in *SASLSpec) DeepCopy() *SASLSpec

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

func (*SASLSpec) DeepCopyInto

func (in *SASLSpec) DeepCopyInto(out *SASLSpec)

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

type ServiceExposureSpec added in v0.3.57

type ServiceExposureSpec struct {
	Name string `json:"name"`
	// +kubebuilder:validation:Enum=NodePort
	Type     ServiceExposureType `json:"type"`
	NodePort *NodePortSpec       `json:"nodePort,omitempty"`
}

ServiceExposureSpec defines the service to be exposed

func (*ServiceExposureSpec) DeepCopy added in v0.3.57

func (in *ServiceExposureSpec) DeepCopy() *ServiceExposureSpec

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

func (*ServiceExposureSpec) DeepCopyInto added in v0.3.57

func (in *ServiceExposureSpec) DeepCopyInto(out *ServiceExposureSpec)

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

type ServiceExposureType added in v0.3.57

type ServiceExposureType = string

ServiceExposureType defines the type of the service to be exposed

var (
	// ServiceExposureTypeNodePort represents NodePort type
	ServiceExposureTypeNodePort ServiceExposureType = "NodePort"
)

type StorageSpec added in v0.2.0

type StorageSpec struct {
	Type        Type                              `json:"type"`
	Usage       Usage                             `json:"usage"`
	Size        string                            `json:"size"`
	Class       *string                           `json:"class"`
	AccessModes corev1.PersistentVolumeAccessMode `json:"accessMode"`
}

func (*StorageSpec) DeepCopy added in v0.3.57

func (in *StorageSpec) DeepCopy() *StorageSpec

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

func (*StorageSpec) DeepCopyInto added in v0.3.57

func (in *StorageSpec) DeepCopyInto(out *StorageSpec)

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

func (StorageSpec) StorageIsEmpty added in v0.2.0

func (storageStruct StorageSpec) StorageIsEmpty() bool

check StorageStruct

type TLSSpec

type TLSSpec struct {
	Enabled            bool `json:"enabled,omitempty"`
	InsecureSkipVerify bool `json:"insecureSkipVerify,omitempty"`
}

func (*TLSSpec) DeepCopy

func (in *TLSSpec) DeepCopy() *TLSSpec

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

func (*TLSSpec) DeepCopyInto

func (in *TLSSpec) DeepCopyInto(out *TLSSpec)

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

type Type added in v0.2.0

type Type string

type Usage added in v0.2.0

type Usage string

Jump to

Keyboard shortcuts

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