v1

package
v0.25.5-rc.0 Latest Latest
Warning

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

Go to latest
Published: Nov 10, 2022 License: Apache-2.0 Imports: 7 Imported by: 531

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// TODO: move SchemeBuilder with zz_generated.deepcopy.go to k8s.io/api.
	// localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes.
	SchemeBuilder runtime.SchemeBuilder

	AddToScheme = localSchemeBuilder.AddToScheme
)
View Source
var SchemeGroupVersion = schema.GroupVersion{Group: "", Version: "v1"}

SchemeGroupVersion is group version used to register these objects TODO this should be in the "kubeconfig" group

Functions

func Convert_Map_string_To_Pointer_api_AuthInfo_To_Slice_v1_NamedAuthInfo added in v0.17.0

func Convert_Map_string_To_Pointer_api_AuthInfo_To_Slice_v1_NamedAuthInfo(in *map[string]*api.AuthInfo, out *[]NamedAuthInfo, s conversion.Scope) error

func Convert_Map_string_To_Pointer_api_Cluster_To_Slice_v1_NamedCluster added in v0.17.0

func Convert_Map_string_To_Pointer_api_Cluster_To_Slice_v1_NamedCluster(in *map[string]*api.Cluster, out *[]NamedCluster, s conversion.Scope) error

func Convert_Map_string_To_Pointer_api_Context_To_Slice_v1_NamedContext added in v0.17.0

func Convert_Map_string_To_Pointer_api_Context_To_Slice_v1_NamedContext(in *map[string]*api.Context, out *[]NamedContext, s conversion.Scope) error

func Convert_Map_string_To_runtime_Object_To_Slice_v1_NamedExtension added in v0.17.0

func Convert_Map_string_To_runtime_Object_To_Slice_v1_NamedExtension(in *map[string]runtime.Object, out *[]NamedExtension, s conversion.Scope) error

func Convert_Slice_v1_NamedAuthInfo_To_Map_string_To_Pointer_api_AuthInfo added in v0.17.0

func Convert_Slice_v1_NamedAuthInfo_To_Map_string_To_Pointer_api_AuthInfo(in *[]NamedAuthInfo, out *map[string]*api.AuthInfo, s conversion.Scope) error

func Convert_Slice_v1_NamedCluster_To_Map_string_To_Pointer_api_Cluster added in v0.17.0

func Convert_Slice_v1_NamedCluster_To_Map_string_To_Pointer_api_Cluster(in *[]NamedCluster, out *map[string]*api.Cluster, s conversion.Scope) error

func Convert_Slice_v1_NamedContext_To_Map_string_To_Pointer_api_Context added in v0.17.0

func Convert_Slice_v1_NamedContext_To_Map_string_To_Pointer_api_Context(in *[]NamedContext, out *map[string]*api.Context, s conversion.Scope) error

func Convert_Slice_v1_NamedExtension_To_Map_string_To_runtime_Object added in v0.17.0

func Convert_Slice_v1_NamedExtension_To_Map_string_To_runtime_Object(in *[]NamedExtension, out *map[string]runtime.Object, s conversion.Scope) error

func Convert_api_AuthInfo_To_v1_AuthInfo added in v0.17.0

func Convert_api_AuthInfo_To_v1_AuthInfo(in *api.AuthInfo, out *AuthInfo, s conversion.Scope) error

Convert_api_AuthInfo_To_v1_AuthInfo is an autogenerated conversion function.

func Convert_api_AuthProviderConfig_To_v1_AuthProviderConfig added in v0.17.0

func Convert_api_AuthProviderConfig_To_v1_AuthProviderConfig(in *api.AuthProviderConfig, out *AuthProviderConfig, s conversion.Scope) error

Convert_api_AuthProviderConfig_To_v1_AuthProviderConfig is an autogenerated conversion function.

func Convert_api_Cluster_To_v1_Cluster added in v0.17.0

func Convert_api_Cluster_To_v1_Cluster(in *api.Cluster, out *Cluster, s conversion.Scope) error

Convert_api_Cluster_To_v1_Cluster is an autogenerated conversion function.

func Convert_api_Config_To_v1_Config added in v0.17.0

func Convert_api_Config_To_v1_Config(in *api.Config, out *Config, s conversion.Scope) error

Convert_api_Config_To_v1_Config is an autogenerated conversion function.

func Convert_api_Context_To_v1_Context added in v0.17.0

func Convert_api_Context_To_v1_Context(in *api.Context, out *Context, s conversion.Scope) error

Convert_api_Context_To_v1_Context is an autogenerated conversion function.

func Convert_api_ExecConfig_To_v1_ExecConfig added in v0.17.0

func Convert_api_ExecConfig_To_v1_ExecConfig(in *api.ExecConfig, out *ExecConfig, s conversion.Scope) error

Convert_api_ExecConfig_To_v1_ExecConfig is an autogenerated conversion function.

func Convert_api_ExecEnvVar_To_v1_ExecEnvVar added in v0.17.0

func Convert_api_ExecEnvVar_To_v1_ExecEnvVar(in *api.ExecEnvVar, out *ExecEnvVar, s conversion.Scope) error

Convert_api_ExecEnvVar_To_v1_ExecEnvVar is an autogenerated conversion function.

func Convert_api_Preferences_To_v1_Preferences added in v0.17.0

func Convert_api_Preferences_To_v1_Preferences(in *api.Preferences, out *Preferences, s conversion.Scope) error

Convert_api_Preferences_To_v1_Preferences is an autogenerated conversion function.

func Convert_v1_AuthInfo_To_api_AuthInfo added in v0.17.0

func Convert_v1_AuthInfo_To_api_AuthInfo(in *AuthInfo, out *api.AuthInfo, s conversion.Scope) error

Convert_v1_AuthInfo_To_api_AuthInfo is an autogenerated conversion function.

func Convert_v1_AuthProviderConfig_To_api_AuthProviderConfig added in v0.17.0

func Convert_v1_AuthProviderConfig_To_api_AuthProviderConfig(in *AuthProviderConfig, out *api.AuthProviderConfig, s conversion.Scope) error

Convert_v1_AuthProviderConfig_To_api_AuthProviderConfig is an autogenerated conversion function.

func Convert_v1_Cluster_To_api_Cluster added in v0.17.0

func Convert_v1_Cluster_To_api_Cluster(in *Cluster, out *api.Cluster, s conversion.Scope) error

Convert_v1_Cluster_To_api_Cluster is an autogenerated conversion function.

func Convert_v1_Config_To_api_Config added in v0.17.0

func Convert_v1_Config_To_api_Config(in *Config, out *api.Config, s conversion.Scope) error

Convert_v1_Config_To_api_Config is an autogenerated conversion function.

func Convert_v1_Context_To_api_Context added in v0.17.0

func Convert_v1_Context_To_api_Context(in *Context, out *api.Context, s conversion.Scope) error

Convert_v1_Context_To_api_Context is an autogenerated conversion function.

func Convert_v1_ExecConfig_To_api_ExecConfig added in v0.17.0

func Convert_v1_ExecConfig_To_api_ExecConfig(in *ExecConfig, out *api.ExecConfig, s conversion.Scope) error

Convert_v1_ExecConfig_To_api_ExecConfig is an autogenerated conversion function.

func Convert_v1_ExecEnvVar_To_api_ExecEnvVar added in v0.17.0

func Convert_v1_ExecEnvVar_To_api_ExecEnvVar(in *ExecEnvVar, out *api.ExecEnvVar, s conversion.Scope) error

Convert_v1_ExecEnvVar_To_api_ExecEnvVar is an autogenerated conversion function.

func Convert_v1_Preferences_To_api_Preferences added in v0.17.0

func Convert_v1_Preferences_To_api_Preferences(in *Preferences, out *api.Preferences, s conversion.Scope) error

Convert_v1_Preferences_To_api_Preferences is an autogenerated conversion function.

func RegisterConversions added in v0.17.0

func RegisterConversions(s *runtime.Scheme) error

RegisterConversions adds conversion functions to the given scheme. Public to allow building arbitrary schemes.

func RegisterDefaults added in v0.22.0

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.

func SetDefaults_ExecConfig added in v0.22.0

func SetDefaults_ExecConfig(exec *ExecConfig)

func SetObjectDefaults_Config added in v0.22.0

func SetObjectDefaults_Config(in *Config)

Types

type AuthInfo

type AuthInfo struct {
	// ClientCertificate is the path to a client cert file for TLS.
	// +optional
	ClientCertificate string `json:"client-certificate,omitempty"`
	// ClientCertificateData contains PEM-encoded data from a client cert file for TLS. Overrides ClientCertificate
	// +optional
	ClientCertificateData []byte `json:"client-certificate-data,omitempty"`
	// ClientKey is the path to a client key file for TLS.
	// +optional
	ClientKey string `json:"client-key,omitempty"`
	// ClientKeyData contains PEM-encoded data from a client key file for TLS. Overrides ClientKey
	// +optional
	ClientKeyData []byte `json:"client-key-data,omitempty" datapolicy:"security-key"`
	// Token is the bearer token for authentication to the kubernetes cluster.
	// +optional
	Token string `json:"token,omitempty" datapolicy:"token"`
	// TokenFile is a pointer to a file that contains a bearer token (as described above).  If both Token and TokenFile are present, Token takes precedence.
	// +optional
	TokenFile string `json:"tokenFile,omitempty"`
	// Impersonate is the username to impersonate.  The name matches the flag.
	// +optional
	Impersonate string `json:"as,omitempty"`
	// ImpersonateUID is the uid to impersonate.
	// +optional
	ImpersonateUID string `json:"as-uid,omitempty"`
	// ImpersonateGroups is the groups to impersonate.
	// +optional
	ImpersonateGroups []string `json:"as-groups,omitempty"`
	// ImpersonateUserExtra contains additional information for impersonated user.
	// +optional
	ImpersonateUserExtra map[string][]string `json:"as-user-extra,omitempty"`
	// Username is the username for basic authentication to the kubernetes cluster.
	// +optional
	Username string `json:"username,omitempty"`
	// Password is the password for basic authentication to the kubernetes cluster.
	// +optional
	Password string `json:"password,omitempty" datapolicy:"password"`
	// AuthProvider specifies a custom authentication plugin for the kubernetes cluster.
	// +optional
	AuthProvider *AuthProviderConfig `json:"auth-provider,omitempty"`
	// Exec specifies a custom exec-based authentication plugin for the kubernetes cluster.
	// +optional
	Exec *ExecConfig `json:"exec,omitempty"`
	// Extensions holds additional information. This is useful for extenders so that reads and writes don't clobber unknown fields
	// +optional
	Extensions []NamedExtension `json:"extensions,omitempty"`
}

AuthInfo contains information that describes identity information. This is use to tell the kubernetes cluster who you are.

func (*AuthInfo) DeepCopy

func (in *AuthInfo) DeepCopy() *AuthInfo

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

func (*AuthInfo) DeepCopyInto

func (in *AuthInfo) DeepCopyInto(out *AuthInfo)

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

type AuthProviderConfig

type AuthProviderConfig struct {
	Name   string            `json:"name"`
	Config map[string]string `json:"config"`
}

AuthProviderConfig holds the configuration for a specified auth provider.

func (*AuthProviderConfig) DeepCopy

func (in *AuthProviderConfig) DeepCopy() *AuthProviderConfig

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

func (*AuthProviderConfig) DeepCopyInto

func (in *AuthProviderConfig) DeepCopyInto(out *AuthProviderConfig)

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

type Cluster

type Cluster struct {
	// Server is the address of the kubernetes cluster (https://hostname:port).
	Server string `json:"server"`
	// TLSServerName is used to check server certificate. If TLSServerName is empty, the hostname used to contact the server is used.
	// +optional
	TLSServerName string `json:"tls-server-name,omitempty"`
	// InsecureSkipTLSVerify skips the validity check for the server's certificate. This will make your HTTPS connections insecure.
	// +optional
	InsecureSkipTLSVerify bool `json:"insecure-skip-tls-verify,omitempty"`
	// CertificateAuthority is the path to a cert file for the certificate authority.
	// +optional
	CertificateAuthority string `json:"certificate-authority,omitempty"`
	// CertificateAuthorityData contains PEM-encoded certificate authority certificates. Overrides CertificateAuthority
	// +optional
	CertificateAuthorityData []byte `json:"certificate-authority-data,omitempty"`
	// ProxyURL is the URL to the proxy to be used for all requests made by this
	// client. URLs with "http", "https", and "socks5" schemes are supported.  If
	// this configuration is not provided or the empty string, the client
	// attempts to construct a proxy configuration from http_proxy and
	// https_proxy environment variables. If these environment variables are not
	// set, the client does not attempt to proxy requests.
	//
	// socks5 proxying does not currently support spdy streaming endpoints (exec,
	// attach, port forward).
	// +optional
	ProxyURL string `json:"proxy-url,omitempty"`
	// Extensions holds additional information. This is useful for extenders so that reads and writes don't clobber unknown fields
	// +optional
	Extensions []NamedExtension `json:"extensions,omitempty"`
}

Cluster contains information about how to communicate with a kubernetes cluster

func (*Cluster) DeepCopy

func (in *Cluster) DeepCopy() *Cluster

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

func (*Cluster) DeepCopyInto

func (in *Cluster) DeepCopyInto(out *Cluster)

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

type Config

type Config struct {
	// Legacy field from pkg/api/types.go TypeMeta.
	// TODO(jlowdermilk): remove this after eliminating downstream dependencies.
	// +k8s:conversion-gen=false
	// +optional
	Kind string `json:"kind,omitempty"`
	// Legacy field from pkg/api/types.go TypeMeta.
	// TODO(jlowdermilk): remove this after eliminating downstream dependencies.
	// +k8s:conversion-gen=false
	// +optional
	APIVersion string `json:"apiVersion,omitempty"`
	// Preferences holds general information to be use for cli interactions
	Preferences Preferences `json:"preferences"`
	// Clusters is a map of referencable names to cluster configs
	Clusters []NamedCluster `json:"clusters"`
	// AuthInfos is a map of referencable names to user configs
	AuthInfos []NamedAuthInfo `json:"users"`
	// Contexts is a map of referencable names to context configs
	Contexts []NamedContext `json:"contexts"`
	// CurrentContext is the name of the context that you would like to use by default
	CurrentContext string `json:"current-context"`
	// Extensions holds additional information. This is useful for extenders so that reads and writes don't clobber unknown fields
	// +optional
	Extensions []NamedExtension `json:"extensions,omitempty"`
}

Config holds the information needed to build connect to remote kubernetes clusters as a given user +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

func (*Config) DeepCopy

func (in *Config) DeepCopy() *Config

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

func (*Config) DeepCopyInto

func (in *Config) DeepCopyInto(out *Config)

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

func (*Config) DeepCopyObject

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

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

func (*Config) GetObjectKind

func (obj *Config) GetObjectKind() schema.ObjectKind

func (*Config) GroupVersionKind

func (obj *Config) GroupVersionKind() schema.GroupVersionKind

func (*Config) SetGroupVersionKind

func (obj *Config) SetGroupVersionKind(gvk schema.GroupVersionKind)

type Context

type Context struct {
	// Cluster is the name of the cluster for this context
	Cluster string `json:"cluster"`
	// AuthInfo is the name of the authInfo for this context
	AuthInfo string `json:"user"`
	// Namespace is the default namespace to use on unspecified requests
	// +optional
	Namespace string `json:"namespace,omitempty"`
	// Extensions holds additional information. This is useful for extenders so that reads and writes don't clobber unknown fields
	// +optional
	Extensions []NamedExtension `json:"extensions,omitempty"`
}

Context is a tuple of references to a cluster (how do I communicate with a kubernetes cluster), a user (how do I identify myself), and a namespace (what subset of resources do I want to work with)

func (*Context) DeepCopy

func (in *Context) DeepCopy() *Context

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

func (*Context) DeepCopyInto

func (in *Context) DeepCopyInto(out *Context)

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

type ExecConfig

type ExecConfig struct {
	// Command to execute.
	Command string `json:"command"`
	// Arguments to pass to the command when executing it.
	// +optional
	Args []string `json:"args"`
	// Env defines additional environment variables to expose to the process. These
	// are unioned with the host's environment, as well as variables client-go uses
	// to pass argument to the plugin.
	// +optional
	Env []ExecEnvVar `json:"env"`

	// Preferred input version of the ExecInfo. The returned ExecCredentials MUST use
	// the same encoding version as the input.
	APIVersion string `json:"apiVersion,omitempty"`

	// This text is shown to the user when the executable doesn't seem to be
	// present. For example, `brew install foo-cli` might be a good InstallHint for
	// foo-cli on Mac OS systems.
	InstallHint string `json:"installHint,omitempty"`

	// ProvideClusterInfo determines whether or not to provide cluster information,
	// which could potentially contain very large CA data, to this exec plugin as a
	// part of the KUBERNETES_EXEC_INFO environment variable. By default, it is set
	// to false. Package k8s.io/client-go/tools/auth/exec provides helper methods for
	// reading this environment variable.
	ProvideClusterInfo bool `json:"provideClusterInfo"`

	// InteractiveMode determines this plugin's relationship with standard input. Valid
	// values are "Never" (this exec plugin never uses standard input), "IfAvailable" (this
	// exec plugin wants to use standard input if it is available), or "Always" (this exec
	// plugin requires standard input to function). See ExecInteractiveMode values for more
	// details.
	//
	// If APIVersion is client.authentication.k8s.io/v1alpha1 or
	// client.authentication.k8s.io/v1beta1, then this field is optional and defaults
	// to "IfAvailable" when unset. Otherwise, this field is required.
	//+optional
	InteractiveMode ExecInteractiveMode `json:"interactiveMode,omitempty"`
}

ExecConfig specifies a command to provide client credentials. The command is exec'd and outputs structured stdout holding credentials.

See the client.authentication.k8s.io API group for specifications of the exact input and output format

func (*ExecConfig) DeepCopy

func (in *ExecConfig) DeepCopy() *ExecConfig

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

func (*ExecConfig) DeepCopyInto

func (in *ExecConfig) DeepCopyInto(out *ExecConfig)

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

type ExecEnvVar

type ExecEnvVar struct {
	Name  string `json:"name"`
	Value string `json:"value"`
}

ExecEnvVar is used for setting environment variables when executing an exec-based credential plugin.

func (*ExecEnvVar) DeepCopy

func (in *ExecEnvVar) DeepCopy() *ExecEnvVar

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

func (*ExecEnvVar) DeepCopyInto

func (in *ExecEnvVar) DeepCopyInto(out *ExecEnvVar)

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

type ExecInteractiveMode added in v0.22.0

type ExecInteractiveMode string

ExecInteractiveMode is a string that describes an exec plugin's relationship with standard input.

const (
	// NeverExecInteractiveMode declares that this exec plugin never needs to use standard
	// input, and therefore the exec plugin will be run regardless of whether standard input is
	// available for user input.
	NeverExecInteractiveMode ExecInteractiveMode = "Never"
	// IfAvailableExecInteractiveMode declares that this exec plugin would like to use standard input
	// if it is available, but can still operate if standard input is not available. Therefore, the
	// exec plugin will be run regardless of whether stdin is available for user input. If standard
	// input is available for user input, then it will be provided to this exec plugin.
	IfAvailableExecInteractiveMode ExecInteractiveMode = "IfAvailable"
	// AlwaysExecInteractiveMode declares that this exec plugin requires standard input in order to
	// run, and therefore the exec plugin will only be run if standard input is available for user
	// input. If standard input is not available for user input, then the exec plugin will not be run
	// and an error will be returned by the exec plugin runner.
	AlwaysExecInteractiveMode ExecInteractiveMode = "Always"
)

type NamedAuthInfo

type NamedAuthInfo struct {
	// Name is the nickname for this AuthInfo
	Name string `json:"name"`
	// AuthInfo holds the auth information
	AuthInfo AuthInfo `json:"user"`
}

NamedAuthInfo relates nicknames to auth information

func (*NamedAuthInfo) DeepCopy

func (in *NamedAuthInfo) DeepCopy() *NamedAuthInfo

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

func (*NamedAuthInfo) DeepCopyInto

func (in *NamedAuthInfo) DeepCopyInto(out *NamedAuthInfo)

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

type NamedCluster

type NamedCluster struct {
	// Name is the nickname for this Cluster
	Name string `json:"name"`
	// Cluster holds the cluster information
	Cluster Cluster `json:"cluster"`
}

NamedCluster relates nicknames to cluster information

func (*NamedCluster) DeepCopy

func (in *NamedCluster) DeepCopy() *NamedCluster

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

func (*NamedCluster) DeepCopyInto

func (in *NamedCluster) DeepCopyInto(out *NamedCluster)

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

type NamedContext

type NamedContext struct {
	// Name is the nickname for this Context
	Name string `json:"name"`
	// Context holds the context information
	Context Context `json:"context"`
}

NamedContext relates nicknames to context information

func (*NamedContext) DeepCopy

func (in *NamedContext) DeepCopy() *NamedContext

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

func (*NamedContext) DeepCopyInto

func (in *NamedContext) DeepCopyInto(out *NamedContext)

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

type NamedExtension

type NamedExtension struct {
	// Name is the nickname for this Extension
	Name string `json:"name"`
	// Extension holds the extension information
	Extension runtime.RawExtension `json:"extension"`
}

NamedExtension relates nicknames to extension information

func (*NamedExtension) DeepCopy

func (in *NamedExtension) DeepCopy() *NamedExtension

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

func (*NamedExtension) DeepCopyInto

func (in *NamedExtension) DeepCopyInto(out *NamedExtension)

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

type Preferences

type Preferences struct {
	// +optional
	Colors bool `json:"colors,omitempty"`
	// Extensions holds additional information. This is useful for extenders so that reads and writes don't clobber unknown fields
	// +optional
	Extensions []NamedExtension `json:"extensions,omitempty"`
}

func (*Preferences) DeepCopy

func (in *Preferences) DeepCopy() *Preferences

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

func (*Preferences) DeepCopyInto

func (in *Preferences) DeepCopyInto(out *Preferences)

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

Jump to

Keyboard shortcuts

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