flux

package
v0.20240209.1120443 Latest Latest
Warning

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

Go to latest
Published: Feb 9, 2024 License: MPL-2.0 Imports: 15 Imported by: 1

README

github.com/hashicorp/go-azure-sdk/resource-manager/kubernetesconfiguration/2023-05-01/flux Documentation

The flux SDK allows for interaction with the Azure Resource Manager Service kubernetesconfiguration (API Version 2023-05-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-helpers/resourcemanager/commonids"
import "github.com/hashicorp/go-azure-sdk/resource-manager/kubernetesconfiguration/2023-05-01/flux"

Client Initialization

client := flux.NewFluxClientWithBaseURI("https://management.azure.com")
client.Client.Authorizer = authorizer

Example Usage: FluxClient.ConfigurationsCreateOrUpdate

ctx := context.TODO()
id := flux.NewScopedFluxConfigurationID("/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/some-resource-group", "fluxConfigurationValue")

payload := flux.FluxConfiguration{
	// ...
}


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

Example Usage: FluxClient.ConfigurationsDelete

ctx := context.TODO()
id := flux.NewScopedFluxConfigurationID("/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/some-resource-group", "fluxConfigurationValue")

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

Example Usage: FluxClient.ConfigurationsGet

ctx := context.TODO()
id := flux.NewScopedFluxConfigurationID("/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/some-resource-group", "fluxConfigurationValue")

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

Example Usage: FluxClient.ConfigurationsList

ctx := context.TODO()
id := commonids.NewScopeID("/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/some-resource-group")

// alternatively `client.ConfigurationsList(ctx, id)` can be used to do batched pagination
items, err := client.ConfigurationsListComplete(ctx, id)
if err != nil {
	// handle the error
}
for _, item := range items {
	// do something
}

Example Usage: FluxClient.ConfigurationsUpdate

ctx := context.TODO()
id := flux.NewScopedFluxConfigurationID("/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/some-resource-group", "fluxConfigurationValue")

payload := flux.FluxConfigurationPatch{
	// ...
}


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

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func PossibleValuesForFluxComplianceState

func PossibleValuesForFluxComplianceState() []string

func PossibleValuesForProvisioningState

func PossibleValuesForProvisioningState() []string

func PossibleValuesForScopeType

func PossibleValuesForScopeType() []string

func PossibleValuesForSourceKindType

func PossibleValuesForSourceKindType() []string

func ValidateScopedFluxConfigurationID

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

ValidateScopedFluxConfigurationID checks that 'input' can be parsed as a Scoped Flux Configuration ID

Types

type AzureBlobDefinition

type AzureBlobDefinition struct {
	AccountKey            *string                     `json:"accountKey,omitempty"`
	ContainerName         *string                     `json:"containerName,omitempty"`
	LocalAuthRef          *string                     `json:"localAuthRef,omitempty"`
	ManagedIdentity       *ManagedIdentityDefinition  `json:"managedIdentity,omitempty"`
	SasToken              *string                     `json:"sasToken,omitempty"`
	ServicePrincipal      *ServicePrincipalDefinition `json:"servicePrincipal,omitempty"`
	SyncIntervalInSeconds *int64                      `json:"syncIntervalInSeconds,omitempty"`
	TimeoutInSeconds      *int64                      `json:"timeoutInSeconds,omitempty"`
	Url                   *string                     `json:"url,omitempty"`
}

type AzureBlobPatchDefinition

type AzureBlobPatchDefinition struct {
	AccountKey            *string                          `json:"accountKey,omitempty"`
	ContainerName         *string                          `json:"containerName,omitempty"`
	LocalAuthRef          *string                          `json:"localAuthRef,omitempty"`
	ManagedIdentity       *ManagedIdentityPatchDefinition  `json:"managedIdentity,omitempty"`
	SasToken              *string                          `json:"sasToken,omitempty"`
	ServicePrincipal      *ServicePrincipalPatchDefinition `json:"servicePrincipal,omitempty"`
	SyncIntervalInSeconds *int64                           `json:"syncIntervalInSeconds,omitempty"`
	TimeoutInSeconds      *int64                           `json:"timeoutInSeconds,omitempty"`
	Url                   *string                          `json:"url,omitempty"`
}

type BucketDefinition

type BucketDefinition struct {
	AccessKey             *string `json:"accessKey,omitempty"`
	BucketName            *string `json:"bucketName,omitempty"`
	Insecure              *bool   `json:"insecure,omitempty"`
	LocalAuthRef          *string `json:"localAuthRef,omitempty"`
	SyncIntervalInSeconds *int64  `json:"syncIntervalInSeconds,omitempty"`
	TimeoutInSeconds      *int64  `json:"timeoutInSeconds,omitempty"`
	Url                   *string `json:"url,omitempty"`
}

type BucketPatchDefinition

type BucketPatchDefinition struct {
	AccessKey             *string `json:"accessKey,omitempty"`
	BucketName            *string `json:"bucketName,omitempty"`
	Insecure              *bool   `json:"insecure,omitempty"`
	LocalAuthRef          *string `json:"localAuthRef,omitempty"`
	SyncIntervalInSeconds *int64  `json:"syncIntervalInSeconds,omitempty"`
	TimeoutInSeconds      *int64  `json:"timeoutInSeconds,omitempty"`
	Url                   *string `json:"url,omitempty"`
}

type ConfigurationsCreateOrUpdateOperationResponse

type ConfigurationsCreateOrUpdateOperationResponse struct {
	Poller       pollers.Poller
	HttpResponse *http.Response
	OData        *odata.OData
	Model        *FluxConfiguration
}

type ConfigurationsDeleteOperationOptions

type ConfigurationsDeleteOperationOptions struct {
	ForceDelete *bool
}

func DefaultConfigurationsDeleteOperationOptions

func DefaultConfigurationsDeleteOperationOptions() ConfigurationsDeleteOperationOptions

func (ConfigurationsDeleteOperationOptions) ToHeaders

func (ConfigurationsDeleteOperationOptions) ToOData

func (ConfigurationsDeleteOperationOptions) ToQuery

type ConfigurationsDeleteOperationResponse

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

type ConfigurationsGetOperationResponse

type ConfigurationsGetOperationResponse struct {
	HttpResponse *http.Response
	OData        *odata.OData
	Model        *FluxConfiguration
}

type ConfigurationsListCompleteResult

type ConfigurationsListCompleteResult struct {
	LatestHttpResponse *http.Response
	Items              []FluxConfiguration
}

type ConfigurationsListOperationResponse

type ConfigurationsListOperationResponse struct {
	HttpResponse *http.Response
	OData        *odata.OData
	Model        *[]FluxConfiguration
}

type ConfigurationsUpdateOperationResponse

type ConfigurationsUpdateOperationResponse struct {
	Poller       pollers.Poller
	HttpResponse *http.Response
	OData        *odata.OData
	Model        *FluxConfiguration
}

type FluxClient

type FluxClient struct {
	Client *resourcemanager.Client
}

func NewFluxClientWithBaseURI

func NewFluxClientWithBaseURI(sdkApi sdkEnv.Api) (*FluxClient, error)

func (FluxClient) ConfigurationsCreateOrUpdate

ConfigurationsCreateOrUpdate ...

func (FluxClient) ConfigurationsCreateOrUpdateThenPoll

func (c FluxClient) ConfigurationsCreateOrUpdateThenPoll(ctx context.Context, id ScopedFluxConfigurationId, input FluxConfiguration) error

ConfigurationsCreateOrUpdateThenPoll performs ConfigurationsCreateOrUpdate then polls until it's completed

func (FluxClient) ConfigurationsDelete

ConfigurationsDelete ...

func (FluxClient) ConfigurationsDeleteThenPoll

func (c FluxClient) ConfigurationsDeleteThenPoll(ctx context.Context, id ScopedFluxConfigurationId, options ConfigurationsDeleteOperationOptions) error

ConfigurationsDeleteThenPoll performs ConfigurationsDelete then polls until it's completed

func (FluxClient) ConfigurationsGet

ConfigurationsGet ...

func (FluxClient) ConfigurationsList

func (c FluxClient) ConfigurationsList(ctx context.Context, id commonids.ScopeId) (result ConfigurationsListOperationResponse, err error)

ConfigurationsList ...

func (FluxClient) ConfigurationsListComplete

func (c FluxClient) ConfigurationsListComplete(ctx context.Context, id commonids.ScopeId) (ConfigurationsListCompleteResult, error)

ConfigurationsListComplete retrieves all the results into a single object

func (FluxClient) ConfigurationsListCompleteMatchingPredicate

func (c FluxClient) ConfigurationsListCompleteMatchingPredicate(ctx context.Context, id commonids.ScopeId, predicate FluxConfigurationOperationPredicate) (result ConfigurationsListCompleteResult, err error)

ConfigurationsListCompleteMatchingPredicate retrieves all the results and then applies the predicate

func (FluxClient) ConfigurationsUpdate

ConfigurationsUpdate ...

func (FluxClient) ConfigurationsUpdateThenPoll

func (c FluxClient) ConfigurationsUpdateThenPoll(ctx context.Context, id ScopedFluxConfigurationId, input FluxConfigurationPatch) error

ConfigurationsUpdateThenPoll performs ConfigurationsUpdate then polls until it's completed

type FluxComplianceState

type FluxComplianceState string
const (
	FluxComplianceStateCompliant            FluxComplianceState = "Compliant"
	FluxComplianceStateNonNegativeCompliant FluxComplianceState = "Non-Compliant"
	FluxComplianceStatePending              FluxComplianceState = "Pending"
	FluxComplianceStateSuspended            FluxComplianceState = "Suspended"
	FluxComplianceStateUnknown              FluxComplianceState = "Unknown"
)

func (*FluxComplianceState) UnmarshalJSON

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

type FluxConfiguration

type FluxConfiguration struct {
	Id         *string                      `json:"id,omitempty"`
	Name       *string                      `json:"name,omitempty"`
	Properties *FluxConfigurationProperties `json:"properties,omitempty"`
	SystemData *systemdata.SystemData       `json:"systemData,omitempty"`
	Type       *string                      `json:"type,omitempty"`
}

type FluxConfigurationOperationPredicate

type FluxConfigurationOperationPredicate struct {
	Id   *string
	Name *string
	Type *string
}

func (FluxConfigurationOperationPredicate) Matches

type FluxConfigurationPatch

type FluxConfigurationPatch struct {
	Properties *FluxConfigurationPatchProperties `json:"properties,omitempty"`
}

type FluxConfigurationPatchProperties

type FluxConfigurationPatchProperties struct {
	AzureBlob                      *AzureBlobPatchDefinition                `json:"azureBlob,omitempty"`
	Bucket                         *BucketPatchDefinition                   `json:"bucket,omitempty"`
	ConfigurationProtectedSettings *map[string]string                       `json:"configurationProtectedSettings,omitempty"`
	GitRepository                  *GitRepositoryPatchDefinition            `json:"gitRepository,omitempty"`
	Kustomizations                 *map[string]KustomizationPatchDefinition `json:"kustomizations,omitempty"`
	SourceKind                     *SourceKindType                          `json:"sourceKind,omitempty"`
	Suspend                        *bool                                    `json:"suspend,omitempty"`
}

type FluxConfigurationProperties

type FluxConfigurationProperties struct {
	AzureBlob                      *AzureBlobDefinition                `json:"azureBlob,omitempty"`
	Bucket                         *BucketDefinition                   `json:"bucket,omitempty"`
	ComplianceState                *FluxComplianceState                `json:"complianceState,omitempty"`
	ConfigurationProtectedSettings *map[string]string                  `json:"configurationProtectedSettings,omitempty"`
	ErrorMessage                   *string                             `json:"errorMessage,omitempty"`
	GitRepository                  *GitRepositoryDefinition            `json:"gitRepository,omitempty"`
	Kustomizations                 *map[string]KustomizationDefinition `json:"kustomizations,omitempty"`
	Namespace                      *string                             `json:"namespace,omitempty"`
	ProvisioningState              *ProvisioningState                  `json:"provisioningState,omitempty"`
	ReconciliationWaitDuration     *string                             `json:"reconciliationWaitDuration,omitempty"`
	RepositoryPublicKey            *string                             `json:"repositoryPublicKey,omitempty"`
	Scope                          *ScopeType                          `json:"scope,omitempty"`
	SourceKind                     *SourceKindType                     `json:"sourceKind,omitempty"`
	SourceSyncedCommitId           *string                             `json:"sourceSyncedCommitId,omitempty"`
	SourceUpdatedAt                *string                             `json:"sourceUpdatedAt,omitempty"`
	StatusUpdatedAt                *string                             `json:"statusUpdatedAt,omitempty"`
	Statuses                       *[]ObjectStatusDefinition           `json:"statuses,omitempty"`
	Suspend                        *bool                               `json:"suspend,omitempty"`
	WaitForReconciliation          *bool                               `json:"waitForReconciliation,omitempty"`
}

func (*FluxConfigurationProperties) GetSourceUpdatedAtAsTime

func (o *FluxConfigurationProperties) GetSourceUpdatedAtAsTime() (*time.Time, error)

func (*FluxConfigurationProperties) GetStatusUpdatedAtAsTime

func (o *FluxConfigurationProperties) GetStatusUpdatedAtAsTime() (*time.Time, error)

func (*FluxConfigurationProperties) SetSourceUpdatedAtAsTime

func (o *FluxConfigurationProperties) SetSourceUpdatedAtAsTime(input time.Time)

func (*FluxConfigurationProperties) SetStatusUpdatedAtAsTime

func (o *FluxConfigurationProperties) SetStatusUpdatedAtAsTime(input time.Time)

type GitRepositoryDefinition

type GitRepositoryDefinition struct {
	HTTPSCACert           *string                  `json:"httpsCACert,omitempty"`
	HTTPSUser             *string                  `json:"httpsUser,omitempty"`
	LocalAuthRef          *string                  `json:"localAuthRef,omitempty"`
	RepositoryRef         *RepositoryRefDefinition `json:"repositoryRef,omitempty"`
	SshKnownHosts         *string                  `json:"sshKnownHosts,omitempty"`
	SyncIntervalInSeconds *int64                   `json:"syncIntervalInSeconds,omitempty"`
	TimeoutInSeconds      *int64                   `json:"timeoutInSeconds,omitempty"`
	Url                   *string                  `json:"url,omitempty"`
}

type GitRepositoryPatchDefinition

type GitRepositoryPatchDefinition struct {
	HTTPSCACert           *string                  `json:"httpsCACert,omitempty"`
	HTTPSUser             *string                  `json:"httpsUser,omitempty"`
	LocalAuthRef          *string                  `json:"localAuthRef,omitempty"`
	RepositoryRef         *RepositoryRefDefinition `json:"repositoryRef,omitempty"`
	SshKnownHosts         *string                  `json:"sshKnownHosts,omitempty"`
	SyncIntervalInSeconds *int64                   `json:"syncIntervalInSeconds,omitempty"`
	TimeoutInSeconds      *int64                   `json:"timeoutInSeconds,omitempty"`
	Url                   *string                  `json:"url,omitempty"`
}

type HelmReleasePropertiesDefinition

type HelmReleasePropertiesDefinition struct {
	FailureCount        *int64                     `json:"failureCount,omitempty"`
	HelmChartRef        *ObjectReferenceDefinition `json:"helmChartRef,omitempty"`
	InstallFailureCount *int64                     `json:"installFailureCount,omitempty"`
	LastRevisionApplied *int64                     `json:"lastRevisionApplied,omitempty"`
	UpgradeFailureCount *int64                     `json:"upgradeFailureCount,omitempty"`
}

type KustomizationDefinition

type KustomizationDefinition struct {
	DependsOn              *[]string            `json:"dependsOn,omitempty"`
	Force                  *bool                `json:"force,omitempty"`
	Name                   *string              `json:"name,omitempty"`
	Path                   *string              `json:"path,omitempty"`
	PostBuild              *PostBuildDefinition `json:"postBuild,omitempty"`
	Prune                  *bool                `json:"prune,omitempty"`
	RetryIntervalInSeconds *int64               `json:"retryIntervalInSeconds,omitempty"`
	SyncIntervalInSeconds  *int64               `json:"syncIntervalInSeconds,omitempty"`
	TimeoutInSeconds       *int64               `json:"timeoutInSeconds,omitempty"`
	Wait                   *bool                `json:"wait,omitempty"`
}

type KustomizationPatchDefinition

type KustomizationPatchDefinition struct {
	DependsOn              *[]string            `json:"dependsOn,omitempty"`
	Force                  *bool                `json:"force,omitempty"`
	Path                   *string              `json:"path,omitempty"`
	PostBuild              *PostBuildDefinition `json:"postBuild,omitempty"`
	Prune                  *bool                `json:"prune,omitempty"`
	RetryIntervalInSeconds *int64               `json:"retryIntervalInSeconds,omitempty"`
	SyncIntervalInSeconds  *int64               `json:"syncIntervalInSeconds,omitempty"`
	TimeoutInSeconds       *int64               `json:"timeoutInSeconds,omitempty"`
	Wait                   *bool                `json:"wait,omitempty"`
}

type ManagedIdentityDefinition

type ManagedIdentityDefinition struct {
	ClientId *string `json:"clientId,omitempty"`
}

type ManagedIdentityPatchDefinition

type ManagedIdentityPatchDefinition struct {
	ClientId *string `json:"clientId,omitempty"`
}

type ObjectReferenceDefinition

type ObjectReferenceDefinition struct {
	Name      *string `json:"name,omitempty"`
	Namespace *string `json:"namespace,omitempty"`
}

type ObjectStatusConditionDefinition

type ObjectStatusConditionDefinition struct {
	LastTransitionTime *string `json:"lastTransitionTime,omitempty"`
	Message            *string `json:"message,omitempty"`
	Reason             *string `json:"reason,omitempty"`
	Status             *string `json:"status,omitempty"`
	Type               *string `json:"type,omitempty"`
}

func (*ObjectStatusConditionDefinition) GetLastTransitionTimeAsTime

func (o *ObjectStatusConditionDefinition) GetLastTransitionTimeAsTime() (*time.Time, error)

func (*ObjectStatusConditionDefinition) SetLastTransitionTimeAsTime

func (o *ObjectStatusConditionDefinition) SetLastTransitionTimeAsTime(input time.Time)

type ObjectStatusDefinition

type ObjectStatusDefinition struct {
	AppliedBy             *ObjectReferenceDefinition         `json:"appliedBy,omitempty"`
	ComplianceState       *FluxComplianceState               `json:"complianceState,omitempty"`
	HelmReleaseProperties *HelmReleasePropertiesDefinition   `json:"helmReleaseProperties,omitempty"`
	Kind                  *string                            `json:"kind,omitempty"`
	Name                  *string                            `json:"name,omitempty"`
	Namespace             *string                            `json:"namespace,omitempty"`
	StatusConditions      *[]ObjectStatusConditionDefinition `json:"statusConditions,omitempty"`
}

type PostBuildDefinition

type PostBuildDefinition struct {
	Substitute     *map[string]string          `json:"substitute,omitempty"`
	SubstituteFrom *[]SubstituteFromDefinition `json:"substituteFrom,omitempty"`
}

type ProvisioningState

type ProvisioningState string
const (
	ProvisioningStateCanceled  ProvisioningState = "Canceled"
	ProvisioningStateCreating  ProvisioningState = "Creating"
	ProvisioningStateDeleting  ProvisioningState = "Deleting"
	ProvisioningStateFailed    ProvisioningState = "Failed"
	ProvisioningStateSucceeded ProvisioningState = "Succeeded"
	ProvisioningStateUpdating  ProvisioningState = "Updating"
)

func (*ProvisioningState) UnmarshalJSON

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

type RepositoryRefDefinition

type RepositoryRefDefinition struct {
	Branch *string `json:"branch,omitempty"`
	Commit *string `json:"commit,omitempty"`
	Semver *string `json:"semver,omitempty"`
	Tag    *string `json:"tag,omitempty"`
}

type ScopeType

type ScopeType string
const (
	ScopeTypeCluster   ScopeType = "cluster"
	ScopeTypeNamespace ScopeType = "namespace"
)

func (*ScopeType) UnmarshalJSON

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

type ScopedFluxConfigurationId

type ScopedFluxConfigurationId struct {
	Scope                 string
	FluxConfigurationName string
}

ScopedFluxConfigurationId is a struct representing the Resource ID for a Scoped Flux Configuration

func NewScopedFluxConfigurationID

func NewScopedFluxConfigurationID(scope string, fluxConfigurationName string) ScopedFluxConfigurationId

NewScopedFluxConfigurationID returns a new ScopedFluxConfigurationId struct

func ParseScopedFluxConfigurationID

func ParseScopedFluxConfigurationID(input string) (*ScopedFluxConfigurationId, error)

ParseScopedFluxConfigurationID parses 'input' into a ScopedFluxConfigurationId

func ParseScopedFluxConfigurationIDInsensitively

func ParseScopedFluxConfigurationIDInsensitively(input string) (*ScopedFluxConfigurationId, error)

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

func (*ScopedFluxConfigurationId) FromParseResult

func (id *ScopedFluxConfigurationId) FromParseResult(input resourceids.ParseResult) error

func (ScopedFluxConfigurationId) ID

ID returns the formatted Scoped Flux Configuration ID

func (ScopedFluxConfigurationId) Segments

Segments returns a slice of Resource ID Segments which comprise this Scoped Flux Configuration ID

func (ScopedFluxConfigurationId) String

func (id ScopedFluxConfigurationId) String() string

String returns a human-readable description of this Scoped Flux Configuration ID

type ServicePrincipalDefinition

type ServicePrincipalDefinition struct {
	ClientCertificate          *string `json:"clientCertificate,omitempty"`
	ClientCertificatePassword  *string `json:"clientCertificatePassword,omitempty"`
	ClientCertificateSendChain *bool   `json:"clientCertificateSendChain,omitempty"`
	ClientId                   *string `json:"clientId,omitempty"`
	ClientSecret               *string `json:"clientSecret,omitempty"`
	TenantId                   *string `json:"tenantId,omitempty"`
}

type ServicePrincipalPatchDefinition

type ServicePrincipalPatchDefinition struct {
	ClientCertificate          *string `json:"clientCertificate,omitempty"`
	ClientCertificatePassword  *string `json:"clientCertificatePassword,omitempty"`
	ClientCertificateSendChain *bool   `json:"clientCertificateSendChain,omitempty"`
	ClientId                   *string `json:"clientId,omitempty"`
	ClientSecret               *string `json:"clientSecret,omitempty"`
	TenantId                   *string `json:"tenantId,omitempty"`
}

type SourceKindType

type SourceKindType string
const (
	SourceKindTypeAzureBlob     SourceKindType = "AzureBlob"
	SourceKindTypeBucket        SourceKindType = "Bucket"
	SourceKindTypeGitRepository SourceKindType = "GitRepository"
)

func (*SourceKindType) UnmarshalJSON

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

type SubstituteFromDefinition

type SubstituteFromDefinition struct {
	Kind     *string `json:"kind,omitempty"`
	Name     *string `json:"name,omitempty"`
	Optional *bool   `json:"optional,omitempty"`
}

Jump to

Keyboard shortcuts

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