volumegroups

package
v0.20231120.1140121 Latest Latest
Warning

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

Go to latest
Published: Nov 20, 2023 License: MPL-2.0 Imports: 11 Imported by: 0

README

github.com/hashicorp/go-azure-sdk/resource-manager/netapp/2022-09-01/volumegroups Documentation

The volumegroups SDK allows for interaction with the Azure Resource Manager Service netapp (API Version 2022-09-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/netapp/2022-09-01/volumegroups"

Client Initialization

client := volumegroups.NewVolumeGroupsClientWithBaseURI("https://management.azure.com")
client.Client.Authorizer = authorizer

Example Usage: VolumeGroupsClient.Create

ctx := context.TODO()
id := volumegroups.NewVolumeGroupID("12345678-1234-9876-4563-123456789012", "example-resource-group", "netAppAccountValue", "volumeGroupValue")

payload := volumegroups.VolumeGroupDetails{
	// ...
}


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

Example Usage: VolumeGroupsClient.Delete

ctx := context.TODO()
id := volumegroups.NewVolumeGroupID("12345678-1234-9876-4563-123456789012", "example-resource-group", "netAppAccountValue", "volumeGroupValue")

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

Example Usage: VolumeGroupsClient.Get

ctx := context.TODO()
id := volumegroups.NewVolumeGroupID("12345678-1234-9876-4563-123456789012", "example-resource-group", "netAppAccountValue", "volumeGroupValue")

read, err := client.Get(ctx, id)
if err != nil {
	// handle the error
}
if model := read.Model; model != nil {
	// do something with the model/response object
}

Example Usage: VolumeGroupsClient.ListByNetAppAccount

ctx := context.TODO()
id := volumegroups.NewNetAppAccountID("12345678-1234-9876-4563-123456789012", "example-resource-group", "netAppAccountValue")

read, err := client.ListByNetAppAccount(ctx, id)
if err != nil {
	// handle the error
}
if model := read.Model; model != nil {
	// do something with the model/response object
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func PossibleValuesForApplicationType

func PossibleValuesForApplicationType() []string

func PossibleValuesForAvsDataStore

func PossibleValuesForAvsDataStore() []string

func PossibleValuesForChownMode

func PossibleValuesForChownMode() []string

func PossibleValuesForEnableSubvolumes

func PossibleValuesForEnableSubvolumes() []string

func PossibleValuesForEncryptionKeySource

func PossibleValuesForEncryptionKeySource() []string

func PossibleValuesForEndpointType

func PossibleValuesForEndpointType() []string

func PossibleValuesForFileAccessLogs

func PossibleValuesForFileAccessLogs() []string

func PossibleValuesForNetworkFeatures

func PossibleValuesForNetworkFeatures() []string

func PossibleValuesForReplicationSchedule

func PossibleValuesForReplicationSchedule() []string

func PossibleValuesForSecurityStyle

func PossibleValuesForSecurityStyle() []string

func PossibleValuesForServiceLevel

func PossibleValuesForServiceLevel() []string

func PossibleValuesForSmbAccessBasedEnumeration

func PossibleValuesForSmbAccessBasedEnumeration() []string

func PossibleValuesForSmbNonBrowsable

func PossibleValuesForSmbNonBrowsable() []string

func PossibleValuesForVolumeStorageToNetworkProximity

func PossibleValuesForVolumeStorageToNetworkProximity() []string

func ValidateNetAppAccountID

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

ValidateNetAppAccountID checks that 'input' can be parsed as a Net App Account ID

func ValidateVolumeGroupID

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

ValidateVolumeGroupID checks that 'input' can be parsed as a Volume Group ID

Types

type ApplicationType

type ApplicationType string
const (
	ApplicationTypeSAPNegativeHANA ApplicationType = "SAP-HANA"
)

func (*ApplicationType) UnmarshalJSON added in v0.20230712.1163130

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

type AvsDataStore

type AvsDataStore string
const (
	AvsDataStoreDisabled AvsDataStore = "Disabled"
	AvsDataStoreEnabled  AvsDataStore = "Enabled"
)

func (*AvsDataStore) UnmarshalJSON added in v0.20230712.1163130

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

type ChownMode

type ChownMode string
const (
	ChownModeRestricted   ChownMode = "Restricted"
	ChownModeUnrestricted ChownMode = "Unrestricted"
)

func (*ChownMode) UnmarshalJSON added in v0.20230712.1163130

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

type CreateOperationResponse added in v0.20230906.1160501

type CreateOperationResponse struct {
	Poller       pollers.Poller
	HttpResponse *http.Response
	OData        *odata.OData
}

type DeleteOperationResponse added in v0.20230906.1160501

type DeleteOperationResponse struct {
	Poller       pollers.Poller
	HttpResponse *http.Response
	OData        *odata.OData
}

type EnableSubvolumes

type EnableSubvolumes string
const (
	EnableSubvolumesDisabled EnableSubvolumes = "Disabled"
	EnableSubvolumesEnabled  EnableSubvolumes = "Enabled"
)

func (*EnableSubvolumes) UnmarshalJSON added in v0.20230712.1163130

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

type EncryptionKeySource

type EncryptionKeySource string
const (
	EncryptionKeySourceMicrosoftPointKeyVault EncryptionKeySource = "Microsoft.KeyVault"
	EncryptionKeySourceMicrosoftPointNetApp   EncryptionKeySource = "Microsoft.NetApp"
)

func (*EncryptionKeySource) UnmarshalJSON added in v0.20230712.1163130

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

type EndpointType

type EndpointType string
const (
	EndpointTypeDst EndpointType = "dst"
	EndpointTypeSrc EndpointType = "src"
)

func (*EndpointType) UnmarshalJSON added in v0.20230712.1163130

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

type ExportPolicyRule

type ExportPolicyRule struct {
	AllowedClients      *string    `json:"allowedClients,omitempty"`
	ChownMode           *ChownMode `json:"chownMode,omitempty"`
	Cifs                *bool      `json:"cifs,omitempty"`
	HasRootAccess       *bool      `json:"hasRootAccess,omitempty"`
	Kerberos5ReadOnly   *bool      `json:"kerberos5ReadOnly,omitempty"`
	Kerberos5ReadWrite  *bool      `json:"kerberos5ReadWrite,omitempty"`
	Kerberos5iReadOnly  *bool      `json:"kerberos5iReadOnly,omitempty"`
	Kerberos5iReadWrite *bool      `json:"kerberos5iReadWrite,omitempty"`
	Kerberos5pReadOnly  *bool      `json:"kerberos5pReadOnly,omitempty"`
	Kerberos5pReadWrite *bool      `json:"kerberos5pReadWrite,omitempty"`
	Nfsv3               *bool      `json:"nfsv3,omitempty"`
	Nfsv41              *bool      `json:"nfsv41,omitempty"`
	RuleIndex           *int64     `json:"ruleIndex,omitempty"`
	UnixReadOnly        *bool      `json:"unixReadOnly,omitempty"`
	UnixReadWrite       *bool      `json:"unixReadWrite,omitempty"`
}

type FileAccessLogs

type FileAccessLogs string
const (
	FileAccessLogsDisabled FileAccessLogs = "Disabled"
	FileAccessLogsEnabled  FileAccessLogs = "Enabled"
)

func (*FileAccessLogs) UnmarshalJSON added in v0.20230712.1163130

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

type GetOperationResponse added in v0.20230906.1160501

type GetOperationResponse struct {
	HttpResponse *http.Response
	OData        *odata.OData
	Model        *VolumeGroupDetails
}

type ListByNetAppAccountOperationResponse added in v0.20230906.1160501

type ListByNetAppAccountOperationResponse struct {
	HttpResponse *http.Response
	OData        *odata.OData
	Model        *VolumeGroupList
}

type MountTargetProperties

type MountTargetProperties struct {
	FileSystemId  string  `json:"fileSystemId"`
	IPAddress     *string `json:"ipAddress,omitempty"`
	MountTargetId *string `json:"mountTargetId,omitempty"`
	SmbServerFqdn *string `json:"smbServerFqdn,omitempty"`
}

type NetAppAccountId

type NetAppAccountId struct {
	SubscriptionId    string
	ResourceGroupName string
	NetAppAccountName string
}

NetAppAccountId is a struct representing the Resource ID for a Net App Account

func NewNetAppAccountID

func NewNetAppAccountID(subscriptionId string, resourceGroupName string, netAppAccountName string) NetAppAccountId

NewNetAppAccountID returns a new NetAppAccountId struct

func ParseNetAppAccountID

func ParseNetAppAccountID(input string) (*NetAppAccountId, error)

ParseNetAppAccountID parses 'input' into a NetAppAccountId

func ParseNetAppAccountIDInsensitively

func ParseNetAppAccountIDInsensitively(input string) (*NetAppAccountId, error)

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

func (NetAppAccountId) ID

func (id NetAppAccountId) ID() string

ID returns the formatted Net App Account ID

func (NetAppAccountId) Segments

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

Segments returns a slice of Resource ID Segments which comprise this Net App Account ID

func (NetAppAccountId) String

func (id NetAppAccountId) String() string

String returns a human-readable description of this Net App Account ID

type NetworkFeatures

type NetworkFeatures string
const (
	NetworkFeaturesBasic    NetworkFeatures = "Basic"
	NetworkFeaturesStandard NetworkFeatures = "Standard"
)

func (*NetworkFeatures) UnmarshalJSON added in v0.20230712.1163130

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

type PlacementKeyValuePairs

type PlacementKeyValuePairs struct {
	Key   string `json:"key"`
	Value string `json:"value"`
}

type ReplicationObject

type ReplicationObject struct {
	EndpointType           *EndpointType        `json:"endpointType,omitempty"`
	RemoteVolumeRegion     *string              `json:"remoteVolumeRegion,omitempty"`
	RemoteVolumeResourceId string               `json:"remoteVolumeResourceId"`
	ReplicationId          *string              `json:"replicationId,omitempty"`
	ReplicationSchedule    *ReplicationSchedule `json:"replicationSchedule,omitempty"`
}

type ReplicationSchedule

type ReplicationSchedule string
const (
	ReplicationScheduleDaily           ReplicationSchedule = "daily"
	ReplicationScheduleHourly          ReplicationSchedule = "hourly"
	ReplicationScheduleOneZerominutely ReplicationSchedule = "_10minutely"
)

func (*ReplicationSchedule) UnmarshalJSON added in v0.20230712.1163130

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

type SecurityStyle

type SecurityStyle string
const (
	SecurityStyleNtfs SecurityStyle = "ntfs"
	SecurityStyleUnix SecurityStyle = "unix"
)

func (*SecurityStyle) UnmarshalJSON added in v0.20230712.1163130

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

type ServiceLevel

type ServiceLevel string
const (
	ServiceLevelPremium     ServiceLevel = "Premium"
	ServiceLevelStandard    ServiceLevel = "Standard"
	ServiceLevelStandardZRS ServiceLevel = "StandardZRS"
	ServiceLevelUltra       ServiceLevel = "Ultra"
)

func (*ServiceLevel) UnmarshalJSON added in v0.20230712.1163130

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

type SmbAccessBasedEnumeration

type SmbAccessBasedEnumeration string
const (
	SmbAccessBasedEnumerationDisabled SmbAccessBasedEnumeration = "Disabled"
	SmbAccessBasedEnumerationEnabled  SmbAccessBasedEnumeration = "Enabled"
)

func (*SmbAccessBasedEnumeration) UnmarshalJSON added in v0.20230712.1163130

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

type SmbNonBrowsable

type SmbNonBrowsable string
const (
	SmbNonBrowsableDisabled SmbNonBrowsable = "Disabled"
	SmbNonBrowsableEnabled  SmbNonBrowsable = "Enabled"
)

func (*SmbNonBrowsable) UnmarshalJSON added in v0.20230712.1163130

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

type VolumeBackupProperties

type VolumeBackupProperties struct {
	BackupEnabled  *bool   `json:"backupEnabled,omitempty"`
	BackupPolicyId *string `json:"backupPolicyId,omitempty"`
	PolicyEnforced *bool   `json:"policyEnforced,omitempty"`
}

type VolumeGroup

type VolumeGroup struct {
	Id         *string                    `json:"id,omitempty"`
	Location   *string                    `json:"location,omitempty"`
	Name       *string                    `json:"name,omitempty"`
	Properties *VolumeGroupListProperties `json:"properties,omitempty"`
	Type       *string                    `json:"type,omitempty"`
}

type VolumeGroupDetails

type VolumeGroupDetails struct {
	Id         *string                `json:"id,omitempty"`
	Location   *string                `json:"location,omitempty"`
	Name       *string                `json:"name,omitempty"`
	Properties *VolumeGroupProperties `json:"properties,omitempty"`
	Type       *string                `json:"type,omitempty"`
}

type VolumeGroupId

type VolumeGroupId struct {
	SubscriptionId    string
	ResourceGroupName string
	NetAppAccountName string
	VolumeGroupName   string
}

VolumeGroupId is a struct representing the Resource ID for a Volume Group

func NewVolumeGroupID

func NewVolumeGroupID(subscriptionId string, resourceGroupName string, netAppAccountName string, volumeGroupName string) VolumeGroupId

NewVolumeGroupID returns a new VolumeGroupId struct

func ParseVolumeGroupID

func ParseVolumeGroupID(input string) (*VolumeGroupId, error)

ParseVolumeGroupID parses 'input' into a VolumeGroupId

func ParseVolumeGroupIDInsensitively

func ParseVolumeGroupIDInsensitively(input string) (*VolumeGroupId, error)

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

func (VolumeGroupId) ID

func (id VolumeGroupId) ID() string

ID returns the formatted Volume Group ID

func (VolumeGroupId) Segments

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

Segments returns a slice of Resource ID Segments which comprise this Volume Group ID

func (VolumeGroupId) String

func (id VolumeGroupId) String() string

String returns a human-readable description of this Volume Group ID

type VolumeGroupList

type VolumeGroupList struct {
	Value *[]VolumeGroup `json:"value,omitempty"`
}

type VolumeGroupListProperties

type VolumeGroupListProperties struct {
	GroupMetaData     *VolumeGroupMetaData `json:"groupMetaData,omitempty"`
	ProvisioningState *string              `json:"provisioningState,omitempty"`
}

type VolumeGroupMetaData

type VolumeGroupMetaData struct {
	ApplicationIdentifier *string                   `json:"applicationIdentifier,omitempty"`
	ApplicationType       *ApplicationType          `json:"applicationType,omitempty"`
	DeploymentSpecId      *string                   `json:"deploymentSpecId,omitempty"`
	GlobalPlacementRules  *[]PlacementKeyValuePairs `json:"globalPlacementRules,omitempty"`
	GroupDescription      *string                   `json:"groupDescription,omitempty"`
	VolumesCount          *int64                    `json:"volumesCount,omitempty"`
}

type VolumeGroupProperties

type VolumeGroupProperties struct {
	GroupMetaData     *VolumeGroupMetaData           `json:"groupMetaData,omitempty"`
	ProvisioningState *string                        `json:"provisioningState,omitempty"`
	Volumes           *[]VolumeGroupVolumeProperties `json:"volumes,omitempty"`
}

type VolumeGroupVolumeProperties

type VolumeGroupVolumeProperties struct {
	Id         *string            `json:"id,omitempty"`
	Name       *string            `json:"name,omitempty"`
	Properties VolumeProperties   `json:"properties"`
	Tags       *map[string]string `json:"tags,omitempty"`
	Type       *string            `json:"type,omitempty"`
}

type VolumeGroupsClient

type VolumeGroupsClient struct {
	Client *resourcemanager.Client
}

func NewVolumeGroupsClientWithBaseURI

func NewVolumeGroupsClientWithBaseURI(sdkApi sdkEnv.Api) (*VolumeGroupsClient, error)

func (VolumeGroupsClient) Create added in v0.20230906.1160501

Create ...

func (VolumeGroupsClient) CreateThenPoll added in v0.20230906.1160501

func (c VolumeGroupsClient) CreateThenPoll(ctx context.Context, id VolumeGroupId, input VolumeGroupDetails) error

CreateThenPoll performs Create then polls until it's completed

func (VolumeGroupsClient) Delete added in v0.20230906.1160501

Delete ...

func (VolumeGroupsClient) DeleteThenPoll added in v0.20230906.1160501

func (c VolumeGroupsClient) DeleteThenPoll(ctx context.Context, id VolumeGroupId) error

DeleteThenPoll performs Delete then polls until it's completed

func (VolumeGroupsClient) Get added in v0.20230906.1160501

Get ...

func (VolumeGroupsClient) ListByNetAppAccount added in v0.20230906.1160501

func (c VolumeGroupsClient) ListByNetAppAccount(ctx context.Context, id NetAppAccountId) (result ListByNetAppAccountOperationResponse, err error)

ListByNetAppAccount ...

type VolumeProperties

type VolumeProperties struct {
	AvsDataStore                      *AvsDataStore                    `json:"avsDataStore,omitempty"`
	BackupId                          *string                          `json:"backupId,omitempty"`
	BaremetalTenantId                 *string                          `json:"baremetalTenantId,omitempty"`
	CapacityPoolResourceId            *string                          `json:"capacityPoolResourceId,omitempty"`
	CloneProgress                     *int64                           `json:"cloneProgress,omitempty"`
	CoolAccess                        *bool                            `json:"coolAccess,omitempty"`
	CoolnessPeriod                    *int64                           `json:"coolnessPeriod,omitempty"`
	CreationToken                     string                           `json:"creationToken"`
	DataProtection                    *VolumePropertiesDataProtection  `json:"dataProtection,omitempty"`
	DataStoreResourceId               *[]string                        `json:"dataStoreResourceId,omitempty"`
	DefaultGroupQuotaInKiBs           *int64                           `json:"defaultGroupQuotaInKiBs,omitempty"`
	DefaultUserQuotaInKiBs            *int64                           `json:"defaultUserQuotaInKiBs,omitempty"`
	DeleteBaseSnapshot                *bool                            `json:"deleteBaseSnapshot,omitempty"`
	EnableSubvolumes                  *EnableSubvolumes                `json:"enableSubvolumes,omitempty"`
	Encrypted                         *bool                            `json:"encrypted,omitempty"`
	EncryptionKeySource               *EncryptionKeySource             `json:"encryptionKeySource,omitempty"`
	ExportPolicy                      *VolumePropertiesExportPolicy    `json:"exportPolicy,omitempty"`
	FileAccessLogs                    *FileAccessLogs                  `json:"fileAccessLogs,omitempty"`
	FileSystemId                      *string                          `json:"fileSystemId,omitempty"`
	IsDefaultQuotaEnabled             *bool                            `json:"isDefaultQuotaEnabled,omitempty"`
	IsLargeVolume                     *bool                            `json:"isLargeVolume,omitempty"`
	IsRestoring                       *bool                            `json:"isRestoring,omitempty"`
	KerberosEnabled                   *bool                            `json:"kerberosEnabled,omitempty"`
	KeyVaultPrivateEndpointResourceId *string                          `json:"keyVaultPrivateEndpointResourceId,omitempty"`
	LdapEnabled                       *bool                            `json:"ldapEnabled,omitempty"`
	MaximumNumberOfFiles              *int64                           `json:"maximumNumberOfFiles,omitempty"`
	MountTargets                      *[]MountTargetProperties         `json:"mountTargets,omitempty"`
	NetworkFeatures                   *NetworkFeatures                 `json:"networkFeatures,omitempty"`
	NetworkSiblingSetId               *string                          `json:"networkSiblingSetId,omitempty"`
	PlacementRules                    *[]PlacementKeyValuePairs        `json:"placementRules,omitempty"`
	ProtocolTypes                     *[]string                        `json:"protocolTypes,omitempty"`
	ProvisionedAvailabilityZone       *string                          `json:"provisionedAvailabilityZone,omitempty"`
	ProvisioningState                 *string                          `json:"provisioningState,omitempty"`
	ProximityPlacementGroup           *string                          `json:"proximityPlacementGroup,omitempty"`
	SecurityStyle                     *SecurityStyle                   `json:"securityStyle,omitempty"`
	ServiceLevel                      *ServiceLevel                    `json:"serviceLevel,omitempty"`
	SmbAccessBasedEnumeration         *SmbAccessBasedEnumeration       `json:"smbAccessBasedEnumeration,omitempty"`
	SmbContinuouslyAvailable          *bool                            `json:"smbContinuouslyAvailable,omitempty"`
	SmbEncryption                     *bool                            `json:"smbEncryption,omitempty"`
	SmbNonBrowsable                   *SmbNonBrowsable                 `json:"smbNonBrowsable,omitempty"`
	SnapshotDirectoryVisible          *bool                            `json:"snapshotDirectoryVisible,omitempty"`
	SnapshotId                        *string                          `json:"snapshotId,omitempty"`
	StorageToNetworkProximity         *VolumeStorageToNetworkProximity `json:"storageToNetworkProximity,omitempty"`
	SubnetId                          string                           `json:"subnetId"`
	T2Network                         *string                          `json:"t2Network,omitempty"`
	ThroughputMibps                   *float64                         `json:"throughputMibps,omitempty"`
	UnixPermissions                   *string                          `json:"unixPermissions,omitempty"`
	UsageThreshold                    int64                            `json:"usageThreshold"`
	VolumeGroupName                   *string                          `json:"volumeGroupName,omitempty"`
	VolumeSpecName                    *string                          `json:"volumeSpecName,omitempty"`
	VolumeType                        *string                          `json:"volumeType,omitempty"`
}

type VolumePropertiesDataProtection

type VolumePropertiesDataProtection struct {
	Backup           *VolumeBackupProperties     `json:"backup,omitempty"`
	Replication      *ReplicationObject          `json:"replication,omitempty"`
	Snapshot         *VolumeSnapshotProperties   `json:"snapshot,omitempty"`
	VolumeRelocation *VolumeRelocationProperties `json:"volumeRelocation,omitempty"`
}

type VolumePropertiesExportPolicy

type VolumePropertiesExportPolicy struct {
	Rules *[]ExportPolicyRule `json:"rules,omitempty"`
}

type VolumeRelocationProperties

type VolumeRelocationProperties struct {
	ReadyToBeFinalized  *bool `json:"readyToBeFinalized,omitempty"`
	RelocationRequested *bool `json:"relocationRequested,omitempty"`
}

type VolumeSnapshotProperties

type VolumeSnapshotProperties struct {
	SnapshotPolicyId *string `json:"snapshotPolicyId,omitempty"`
}

type VolumeStorageToNetworkProximity

type VolumeStorageToNetworkProximity string
const (
	VolumeStorageToNetworkProximityDefault VolumeStorageToNetworkProximity = "Default"
	VolumeStorageToNetworkProximityTOne    VolumeStorageToNetworkProximity = "T1"
	VolumeStorageToNetworkProximityTTwo    VolumeStorageToNetworkProximity = "T2"
)

func (*VolumeStorageToNetworkProximity) UnmarshalJSON added in v0.20230712.1163130

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

Jump to

Keyboard shortcuts

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