restores

package
v0.20230504.1103506 Latest Latest
Warning

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

Go to latest
Published: May 4, 2023 License: MPL-2.0 Imports: 10 Imported by: 0

README

github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2022-03-01/restores Documentation

The restores SDK allows for interaction with the Azure Resource Manager Service recoveryservicesbackup (API Version 2022-03-01).

This readme covers example usages, but further information on using this SDK can be found in the project root.

Import Path

import "github.com/hashicorp/go-azure-sdk/resource-manager/recoveryservicesbackup/2022-03-01/restores"

Client Initialization

client := restores.NewRestoresClientWithBaseURI("https://management.azure.com")
client.Client.Authorizer = authorizer

Example Usage: RestoresClient.Trigger

ctx := context.TODO()
id := restores.NewRecoveryPointID("12345678-1234-9876-4563-123456789012", "example-resource-group", "vaultValue", "backupFabricValue", "protectionContainerValue", "protectedItemValue", "recoveryPointIdValue")

payload := restores.RestoreRequestResource{
	// ...
}


if err := client.TriggerThenPoll(ctx, id, payload); err != nil {
	// handle the error
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func PossibleValuesForCopyOptions

func PossibleValuesForCopyOptions() []string

func PossibleValuesForOverwriteOptions

func PossibleValuesForOverwriteOptions() []string

func PossibleValuesForRecoveryMode

func PossibleValuesForRecoveryMode() []string

func PossibleValuesForRecoveryType

func PossibleValuesForRecoveryType() []string

func PossibleValuesForRehydrationPriority

func PossibleValuesForRehydrationPriority() []string

func PossibleValuesForRestoreRequestType

func PossibleValuesForRestoreRequestType() []string

func PossibleValuesForSQLDataDirectoryType

func PossibleValuesForSQLDataDirectoryType() []string

func ValidateRecoveryPointID

func ValidateRecoveryPointID(input interface{}, key string) (warnings []string, errors []error)

ValidateRecoveryPointID checks that 'input' can be parsed as a Recovery Point ID

Types

type AzureFileShareRestoreRequest

type AzureFileShareRestoreRequest struct {
	CopyOptions        *CopyOptions          `json:"copyOptions,omitempty"`
	RecoveryType       *RecoveryType         `json:"recoveryType,omitempty"`
	RestoreFileSpecs   *[]RestoreFileSpecs   `json:"restoreFileSpecs,omitempty"`
	RestoreRequestType *RestoreRequestType   `json:"restoreRequestType,omitempty"`
	SourceResourceId   *string               `json:"sourceResourceId,omitempty"`
	TargetDetails      *TargetAFSRestoreInfo `json:"targetDetails,omitempty"`
}

func (AzureFileShareRestoreRequest) MarshalJSON

func (s AzureFileShareRestoreRequest) MarshalJSON() ([]byte, error)

type AzureWorkloadPointInTimeRestoreRequest

type AzureWorkloadPointInTimeRestoreRequest struct {
	PointInTime            *string            `json:"pointInTime,omitempty"`
	PropertyBag            *map[string]string `json:"propertyBag,omitempty"`
	RecoveryMode           *RecoveryMode      `json:"recoveryMode,omitempty"`
	RecoveryType           *RecoveryType      `json:"recoveryType,omitempty"`
	SourceResourceId       *string            `json:"sourceResourceId,omitempty"`
	TargetInfo             *TargetRestoreInfo `json:"targetInfo,omitempty"`
	TargetVirtualMachineId *string            `json:"targetVirtualMachineId,omitempty"`
}

func (AzureWorkloadPointInTimeRestoreRequest) MarshalJSON

func (s AzureWorkloadPointInTimeRestoreRequest) MarshalJSON() ([]byte, error)

type AzureWorkloadRestoreRequest

type AzureWorkloadRestoreRequest struct {
	PropertyBag            *map[string]string `json:"propertyBag,omitempty"`
	RecoveryMode           *RecoveryMode      `json:"recoveryMode,omitempty"`
	RecoveryType           *RecoveryType      `json:"recoveryType,omitempty"`
	SourceResourceId       *string            `json:"sourceResourceId,omitempty"`
	TargetInfo             *TargetRestoreInfo `json:"targetInfo,omitempty"`
	TargetVirtualMachineId *string            `json:"targetVirtualMachineId,omitempty"`
}

func (AzureWorkloadRestoreRequest) MarshalJSON

func (s AzureWorkloadRestoreRequest) MarshalJSON() ([]byte, error)

type AzureWorkloadSAPHanaPointInTimeRestoreRequest added in v0.20230504.1091605

type AzureWorkloadSAPHanaPointInTimeRestoreRequest struct {
	PointInTime            *string            `json:"pointInTime,omitempty"`
	PropertyBag            *map[string]string `json:"propertyBag,omitempty"`
	RecoveryMode           *RecoveryMode      `json:"recoveryMode,omitempty"`
	RecoveryType           *RecoveryType      `json:"recoveryType,omitempty"`
	SourceResourceId       *string            `json:"sourceResourceId,omitempty"`
	TargetInfo             *TargetRestoreInfo `json:"targetInfo,omitempty"`
	TargetVirtualMachineId *string            `json:"targetVirtualMachineId,omitempty"`
}

func (AzureWorkloadSAPHanaPointInTimeRestoreRequest) MarshalJSON added in v0.20230504.1091605

type AzureWorkloadSAPHanaPointInTimeRestoreWithRehydrateRequest added in v0.20230504.1091605

type AzureWorkloadSAPHanaPointInTimeRestoreWithRehydrateRequest struct {
	PointInTime                  *string                       `json:"pointInTime,omitempty"`
	PropertyBag                  *map[string]string            `json:"propertyBag,omitempty"`
	RecoveryMode                 *RecoveryMode                 `json:"recoveryMode,omitempty"`
	RecoveryPointRehydrationInfo *RecoveryPointRehydrationInfo `json:"recoveryPointRehydrationInfo,omitempty"`
	RecoveryType                 *RecoveryType                 `json:"recoveryType,omitempty"`
	SourceResourceId             *string                       `json:"sourceResourceId,omitempty"`
	TargetInfo                   *TargetRestoreInfo            `json:"targetInfo,omitempty"`
	TargetVirtualMachineId       *string                       `json:"targetVirtualMachineId,omitempty"`
}

func (AzureWorkloadSAPHanaPointInTimeRestoreWithRehydrateRequest) MarshalJSON added in v0.20230504.1091605

type AzureWorkloadSAPHanaRestoreRequest

type AzureWorkloadSAPHanaRestoreRequest struct {
	PropertyBag            *map[string]string `json:"propertyBag,omitempty"`
	RecoveryMode           *RecoveryMode      `json:"recoveryMode,omitempty"`
	RecoveryType           *RecoveryType      `json:"recoveryType,omitempty"`
	SourceResourceId       *string            `json:"sourceResourceId,omitempty"`
	TargetInfo             *TargetRestoreInfo `json:"targetInfo,omitempty"`
	TargetVirtualMachineId *string            `json:"targetVirtualMachineId,omitempty"`
}

func (AzureWorkloadSAPHanaRestoreRequest) MarshalJSON

func (s AzureWorkloadSAPHanaRestoreRequest) MarshalJSON() ([]byte, error)

type AzureWorkloadSAPHanaRestoreWithRehydrateRequest added in v0.20230504.1091605

type AzureWorkloadSAPHanaRestoreWithRehydrateRequest struct {
	PropertyBag                  *map[string]string            `json:"propertyBag,omitempty"`
	RecoveryMode                 *RecoveryMode                 `json:"recoveryMode,omitempty"`
	RecoveryPointRehydrationInfo *RecoveryPointRehydrationInfo `json:"recoveryPointRehydrationInfo,omitempty"`
	RecoveryType                 *RecoveryType                 `json:"recoveryType,omitempty"`
	SourceResourceId             *string                       `json:"sourceResourceId,omitempty"`
	TargetInfo                   *TargetRestoreInfo            `json:"targetInfo,omitempty"`
	TargetVirtualMachineId       *string                       `json:"targetVirtualMachineId,omitempty"`
}

func (AzureWorkloadSAPHanaRestoreWithRehydrateRequest) MarshalJSON added in v0.20230504.1091605

type AzureWorkloadSQLPointInTimeRestoreRequest added in v0.20230504.1091605

type AzureWorkloadSQLPointInTimeRestoreRequest struct {
	AlternateDirectoryPaths          *[]SQLDataDirectoryMapping `json:"alternateDirectoryPaths,omitempty"`
	IsNonRecoverable                 *bool                      `json:"isNonRecoverable,omitempty"`
	PointInTime                      *string                    `json:"pointInTime,omitempty"`
	PropertyBag                      *map[string]string         `json:"propertyBag,omitempty"`
	RecoveryMode                     *RecoveryMode              `json:"recoveryMode,omitempty"`
	RecoveryType                     *RecoveryType              `json:"recoveryType,omitempty"`
	ShouldUseAlternateTargetLocation *bool                      `json:"shouldUseAlternateTargetLocation,omitempty"`
	SourceResourceId                 *string                    `json:"sourceResourceId,omitempty"`
	TargetInfo                       *TargetRestoreInfo         `json:"targetInfo,omitempty"`
	TargetVirtualMachineId           *string                    `json:"targetVirtualMachineId,omitempty"`
}

func (AzureWorkloadSQLPointInTimeRestoreRequest) MarshalJSON added in v0.20230504.1091605

type AzureWorkloadSQLPointInTimeRestoreWithRehydrateRequest added in v0.20230504.1091605

type AzureWorkloadSQLPointInTimeRestoreWithRehydrateRequest struct {
	AlternateDirectoryPaths          *[]SQLDataDirectoryMapping    `json:"alternateDirectoryPaths,omitempty"`
	IsNonRecoverable                 *bool                         `json:"isNonRecoverable,omitempty"`
	PointInTime                      *string                       `json:"pointInTime,omitempty"`
	PropertyBag                      *map[string]string            `json:"propertyBag,omitempty"`
	RecoveryMode                     *RecoveryMode                 `json:"recoveryMode,omitempty"`
	RecoveryPointRehydrationInfo     *RecoveryPointRehydrationInfo `json:"recoveryPointRehydrationInfo,omitempty"`
	RecoveryType                     *RecoveryType                 `json:"recoveryType,omitempty"`
	ShouldUseAlternateTargetLocation *bool                         `json:"shouldUseAlternateTargetLocation,omitempty"`
	SourceResourceId                 *string                       `json:"sourceResourceId,omitempty"`
	TargetInfo                       *TargetRestoreInfo            `json:"targetInfo,omitempty"`
	TargetVirtualMachineId           *string                       `json:"targetVirtualMachineId,omitempty"`
}

func (AzureWorkloadSQLPointInTimeRestoreWithRehydrateRequest) MarshalJSON added in v0.20230504.1091605

type AzureWorkloadSQLRestoreRequest

type AzureWorkloadSQLRestoreRequest struct {
	AlternateDirectoryPaths          *[]SQLDataDirectoryMapping `json:"alternateDirectoryPaths,omitempty"`
	IsNonRecoverable                 *bool                      `json:"isNonRecoverable,omitempty"`
	PropertyBag                      *map[string]string         `json:"propertyBag,omitempty"`
	RecoveryMode                     *RecoveryMode              `json:"recoveryMode,omitempty"`
	RecoveryType                     *RecoveryType              `json:"recoveryType,omitempty"`
	ShouldUseAlternateTargetLocation *bool                      `json:"shouldUseAlternateTargetLocation,omitempty"`
	SourceResourceId                 *string                    `json:"sourceResourceId,omitempty"`
	TargetInfo                       *TargetRestoreInfo         `json:"targetInfo,omitempty"`
	TargetVirtualMachineId           *string                    `json:"targetVirtualMachineId,omitempty"`
}

func (AzureWorkloadSQLRestoreRequest) MarshalJSON

func (s AzureWorkloadSQLRestoreRequest) MarshalJSON() ([]byte, error)

type AzureWorkloadSQLRestoreWithRehydrateRequest added in v0.20230504.1091605

type AzureWorkloadSQLRestoreWithRehydrateRequest struct {
	AlternateDirectoryPaths          *[]SQLDataDirectoryMapping    `json:"alternateDirectoryPaths,omitempty"`
	IsNonRecoverable                 *bool                         `json:"isNonRecoverable,omitempty"`
	PropertyBag                      *map[string]string            `json:"propertyBag,omitempty"`
	RecoveryMode                     *RecoveryMode                 `json:"recoveryMode,omitempty"`
	RecoveryPointRehydrationInfo     *RecoveryPointRehydrationInfo `json:"recoveryPointRehydrationInfo,omitempty"`
	RecoveryType                     *RecoveryType                 `json:"recoveryType,omitempty"`
	ShouldUseAlternateTargetLocation *bool                         `json:"shouldUseAlternateTargetLocation,omitempty"`
	SourceResourceId                 *string                       `json:"sourceResourceId,omitempty"`
	TargetInfo                       *TargetRestoreInfo            `json:"targetInfo,omitempty"`
	TargetVirtualMachineId           *string                       `json:"targetVirtualMachineId,omitempty"`
}

func (AzureWorkloadSQLRestoreWithRehydrateRequest) MarshalJSON added in v0.20230504.1091605

type CopyOptions

type CopyOptions string
const (
	CopyOptionsCreateCopy     CopyOptions = "CreateCopy"
	CopyOptionsFailOnConflict CopyOptions = "FailOnConflict"
	CopyOptionsInvalid        CopyOptions = "Invalid"
	CopyOptionsOverwrite      CopyOptions = "Overwrite"
	CopyOptionsSkip           CopyOptions = "Skip"
)

type EncryptionDetails

type EncryptionDetails struct {
	EncryptionEnabled *bool   `json:"encryptionEnabled,omitempty"`
	KekUrl            *string `json:"kekUrl,omitempty"`
	KekVaultId        *string `json:"kekVaultId,omitempty"`
	SecretKeyUrl      *string `json:"secretKeyUrl,omitempty"`
	SecretKeyVaultId  *string `json:"secretKeyVaultId,omitempty"`
}

type IaasVMRestoreRequest

type IaasVMRestoreRequest struct {
	AffinityGroup                *string                      `json:"affinityGroup,omitempty"`
	CreateNewCloudService        *bool                        `json:"createNewCloudService,omitempty"`
	DiskEncryptionSetId          *string                      `json:"diskEncryptionSetId,omitempty"`
	EncryptionDetails            *EncryptionDetails           `json:"encryptionDetails,omitempty"`
	IdentityBasedRestoreDetails  *IdentityBasedRestoreDetails `json:"identityBasedRestoreDetails,omitempty"`
	IdentityInfo                 *IdentityInfo                `json:"identityInfo,omitempty"`
	OriginalStorageAccountOption *bool                        `json:"originalStorageAccountOption,omitempty"`
	RecoveryPointId              *string                      `json:"recoveryPointId,omitempty"`
	RecoveryType                 *RecoveryType                `json:"recoveryType,omitempty"`
	Region                       *string                      `json:"region,omitempty"`
	RestoreDiskLunList           *[]int64                     `json:"restoreDiskLunList,omitempty"`
	RestoreWithManagedDisks      *bool                        `json:"restoreWithManagedDisks,omitempty"`
	SourceResourceId             *string                      `json:"sourceResourceId,omitempty"`
	StorageAccountId             *string                      `json:"storageAccountId,omitempty"`
	SubnetId                     *string                      `json:"subnetId,omitempty"`
	TargetDomainNameId           *string                      `json:"targetDomainNameId,omitempty"`
	TargetResourceGroupId        *string                      `json:"targetResourceGroupId,omitempty"`
	TargetVirtualMachineId       *string                      `json:"targetVirtualMachineId,omitempty"`
	VirtualNetworkId             *string                      `json:"virtualNetworkId,omitempty"`
	Zones                        *zones.Schema                `json:"zones,omitempty"`
}

func (IaasVMRestoreRequest) MarshalJSON

func (s IaasVMRestoreRequest) MarshalJSON() ([]byte, error)

type IaasVMRestoreWithRehydrationRequest

type IaasVMRestoreWithRehydrationRequest struct {
	AffinityGroup                *string                       `json:"affinityGroup,omitempty"`
	CreateNewCloudService        *bool                         `json:"createNewCloudService,omitempty"`
	DiskEncryptionSetId          *string                       `json:"diskEncryptionSetId,omitempty"`
	EncryptionDetails            *EncryptionDetails            `json:"encryptionDetails,omitempty"`
	IdentityBasedRestoreDetails  *IdentityBasedRestoreDetails  `json:"identityBasedRestoreDetails,omitempty"`
	IdentityInfo                 *IdentityInfo                 `json:"identityInfo,omitempty"`
	OriginalStorageAccountOption *bool                         `json:"originalStorageAccountOption,omitempty"`
	RecoveryPointId              *string                       `json:"recoveryPointId,omitempty"`
	RecoveryPointRehydrationInfo *RecoveryPointRehydrationInfo `json:"recoveryPointRehydrationInfo,omitempty"`
	RecoveryType                 *RecoveryType                 `json:"recoveryType,omitempty"`
	Region                       *string                       `json:"region,omitempty"`
	RestoreDiskLunList           *[]int64                      `json:"restoreDiskLunList,omitempty"`
	RestoreWithManagedDisks      *bool                         `json:"restoreWithManagedDisks,omitempty"`
	SourceResourceId             *string                       `json:"sourceResourceId,omitempty"`
	StorageAccountId             *string                       `json:"storageAccountId,omitempty"`
	SubnetId                     *string                       `json:"subnetId,omitempty"`
	TargetDomainNameId           *string                       `json:"targetDomainNameId,omitempty"`
	TargetResourceGroupId        *string                       `json:"targetResourceGroupId,omitempty"`
	TargetVirtualMachineId       *string                       `json:"targetVirtualMachineId,omitempty"`
	VirtualNetworkId             *string                       `json:"virtualNetworkId,omitempty"`
	Zones                        *zones.Schema                 `json:"zones,omitempty"`
}

func (IaasVMRestoreWithRehydrationRequest) MarshalJSON

func (s IaasVMRestoreWithRehydrationRequest) MarshalJSON() ([]byte, error)

type IdentityBasedRestoreDetails

type IdentityBasedRestoreDetails struct {
	ObjectType             *string `json:"objectType,omitempty"`
	TargetStorageAccountId *string `json:"targetStorageAccountId,omitempty"`
}

type IdentityInfo

type IdentityInfo struct {
	IsSystemAssignedIdentity  *bool   `json:"isSystemAssignedIdentity,omitempty"`
	ManagedIdentityResourceId *string `json:"managedIdentityResourceId,omitempty"`
}

type OverwriteOptions

type OverwriteOptions string
const (
	OverwriteOptionsFailOnConflict OverwriteOptions = "FailOnConflict"
	OverwriteOptionsInvalid        OverwriteOptions = "Invalid"
	OverwriteOptionsOverwrite      OverwriteOptions = "Overwrite"
)

type RecoveryMode

type RecoveryMode string
const (
	RecoveryModeFileRecovery     RecoveryMode = "FileRecovery"
	RecoveryModeInvalid          RecoveryMode = "Invalid"
	RecoveryModeWorkloadRecovery RecoveryMode = "WorkloadRecovery"
)

type RecoveryPointId

type RecoveryPointId struct {
	SubscriptionId          string
	ResourceGroupName       string
	VaultName               string
	BackupFabricName        string
	ProtectionContainerName string
	ProtectedItemName       string
	RecoveryPointId         string
}

RecoveryPointId is a struct representing the Resource ID for a Recovery Point

func NewRecoveryPointID

func NewRecoveryPointID(subscriptionId string, resourceGroupName string, vaultName string, backupFabricName string, protectionContainerName string, protectedItemName string, recoveryPointId string) RecoveryPointId

NewRecoveryPointID returns a new RecoveryPointId struct

func ParseRecoveryPointID

func ParseRecoveryPointID(input string) (*RecoveryPointId, error)

ParseRecoveryPointID parses 'input' into a RecoveryPointId

func ParseRecoveryPointIDInsensitively

func ParseRecoveryPointIDInsensitively(input string) (*RecoveryPointId, error)

ParseRecoveryPointIDInsensitively parses 'input' case-insensitively into a RecoveryPointId note: this method should only be used for API response data and not user input

func (RecoveryPointId) ID

func (id RecoveryPointId) ID() string

ID returns the formatted Recovery Point ID

func (RecoveryPointId) Segments

func (id RecoveryPointId) Segments() []resourceids.Segment

Segments returns a slice of Resource ID Segments which comprise this Recovery Point ID

func (RecoveryPointId) String

func (id RecoveryPointId) String() string

String returns a human-readable description of this Recovery Point ID

type RecoveryPointRehydrationInfo

type RecoveryPointRehydrationInfo struct {
	RehydrationPriority          *RehydrationPriority `json:"rehydrationPriority,omitempty"`
	RehydrationRetentionDuration *string              `json:"rehydrationRetentionDuration,omitempty"`
}

type RecoveryType

type RecoveryType string
const (
	RecoveryTypeAlternateLocation RecoveryType = "AlternateLocation"
	RecoveryTypeInvalid           RecoveryType = "Invalid"
	RecoveryTypeOffline           RecoveryType = "Offline"
	RecoveryTypeOriginalLocation  RecoveryType = "OriginalLocation"
	RecoveryTypeRestoreDisks      RecoveryType = "RestoreDisks"
)

type RehydrationPriority

type RehydrationPriority string
const (
	RehydrationPriorityHigh     RehydrationPriority = "High"
	RehydrationPriorityStandard RehydrationPriority = "Standard"
)

type RestoreFileSpecs

type RestoreFileSpecs struct {
	FileSpecType     *string `json:"fileSpecType,omitempty"`
	Path             *string `json:"path,omitempty"`
	TargetFolderPath *string `json:"targetFolderPath,omitempty"`
}

type RestoreRequest

type RestoreRequest interface {
}

type RestoreRequestResource

type RestoreRequestResource struct {
	ETag       *string            `json:"eTag,omitempty"`
	Id         *string            `json:"id,omitempty"`
	Location   *string            `json:"location,omitempty"`
	Name       *string            `json:"name,omitempty"`
	Properties RestoreRequest     `json:"properties"`
	Tags       *map[string]string `json:"tags,omitempty"`
	Type       *string            `json:"type,omitempty"`
}

func (*RestoreRequestResource) UnmarshalJSON

func (s *RestoreRequestResource) UnmarshalJSON(bytes []byte) error

type RestoreRequestType

type RestoreRequestType string
const (
	RestoreRequestTypeFullShareRestore RestoreRequestType = "FullShareRestore"
	RestoreRequestTypeInvalid          RestoreRequestType = "Invalid"
	RestoreRequestTypeItemLevelRestore RestoreRequestType = "ItemLevelRestore"
)

type RestoresClient

type RestoresClient struct {
	Client autorest.Client
	// contains filtered or unexported fields
}

func NewRestoresClientWithBaseURI

func NewRestoresClientWithBaseURI(endpoint string) RestoresClient

func (RestoresClient) Trigger

Trigger ...

func (RestoresClient) TriggerThenPoll

func (c RestoresClient) TriggerThenPoll(ctx context.Context, id RecoveryPointId, input RestoreRequestResource) error

TriggerThenPoll performs Trigger then polls until it's completed

type SQLDataDirectoryMapping

type SQLDataDirectoryMapping struct {
	MappingType       *SQLDataDirectoryType `json:"mappingType,omitempty"`
	SourceLogicalName *string               `json:"sourceLogicalName,omitempty"`
	SourcePath        *string               `json:"sourcePath,omitempty"`
	TargetPath        *string               `json:"targetPath,omitempty"`
}

type SQLDataDirectoryType

type SQLDataDirectoryType string
const (
	SQLDataDirectoryTypeData    SQLDataDirectoryType = "Data"
	SQLDataDirectoryTypeInvalid SQLDataDirectoryType = "Invalid"
	SQLDataDirectoryTypeLog     SQLDataDirectoryType = "Log"
)

type TargetAFSRestoreInfo

type TargetAFSRestoreInfo struct {
	Name             *string `json:"name,omitempty"`
	TargetResourceId *string `json:"targetResourceId,omitempty"`
}

type TargetRestoreInfo

type TargetRestoreInfo struct {
	ContainerId                   *string           `json:"containerId,omitempty"`
	DatabaseName                  *string           `json:"databaseName,omitempty"`
	OverwriteOption               *OverwriteOptions `json:"overwriteOption,omitempty"`
	TargetDirectoryForFileRestore *string           `json:"targetDirectoryForFileRestore,omitempty"`
}

type TriggerOperationResponse

type TriggerOperationResponse struct {
	Poller       polling.LongRunningPoller
	HttpResponse *http.Response
}

Jump to

Keyboard shortcuts

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