cmd

package
v1.0.20 Latest Latest
Warning

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

Go to latest
Published: Jan 27, 2018 License: Apache-2.0 Imports: 49 Imported by: 0

Documentation

Index

Constants

View Source
const (
	GKE      string = "gke"
	EKS      string = "eks"
	AKS      string = "aks"
	MINIKUBE string = "minikube"
)
View Source
const (
	JX_GIT_TOKEN                   = "JX_GIT_TOKEN"
	JX_GIT_USER                    = "JX_GIT_USER"
	DEFAULT_CLOUD_ENVIRONMENTS_URL = "https://github.com/jenkins-x/cloud-environments"

	GitSecretsFile = "gitSecrets.yaml"
)
View Source
const (
	DefaultShell = "/bin/sh"
)
View Source
const (
	DefaultWritePermissions = 0760
)
View Source
const (
	VERSION = "version"
)

Variables

View Source
var (
	MetricsLong = templates.LongDesc(`
		Gets the metrics of the newest pod for a Deployment.

`)

	MetricsExample = templates.Examples(`
		# displays metrics of the latest pod in deployment myapp
		jx metrics myapp

		# Tails the metrics of the container foo in the latest pod in deployment myapp
		jx metrics myapp -c foo
`)
)
View Source
var KUBERNETES_PROVIDERS = map[string]bool{
	GKE:      true,
	EKS:      true,
	AKS:      true,
	MINIKUBE: true,
}

Functions

func GetNamespaceNames

func GetNamespaceNames(client *kubernetes.Clientset) ([]string, error)

GetNamespaceNames returns the sorted list of environment names

func IsPipeline

func IsPipeline(j *gojenkins.Job) bool

func NewCmdCompletion

func NewCmdCompletion(f cmdutil.Factory, out io.Writer) *cobra.Command

func NewCmdConsole

func NewCmdConsole(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

func NewCmdContext

func NewCmdContext(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

func NewCmdCreate

func NewCmdCreate(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdCreate creates a command object for the "create" command

func NewCmdCreateArchetype

func NewCmdCreateArchetype(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdCreateArchetype creates a command object for the "create" command

func NewCmdCreateCluster

func NewCmdCreateCluster(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdGet creates a command object for the generic "init" action, which installs the dependencies required to run the jenkins-x platform on a kubernetes cluster.

func NewCmdCreateClusterAKS

func NewCmdCreateClusterAKS(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdGet creates a command object for the generic "init" action, which installs the dependencies required to run the jenkins-x platform on a kubernetes cluster.

func NewCmdCreateClusterGKE

func NewCmdCreateClusterGKE(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdGet creates a command object for the generic "init" action, which installs the dependencies required to run the jenkins-x platform on a kubernetes cluster.

func NewCmdCreateClusterMinikube

func NewCmdCreateClusterMinikube(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdGet creates a command object for the generic "init" action, which installs the dependencies required to run the jenkins-x platform on a kubernetes cluster.

func NewCmdCreateEnv

func NewCmdCreateEnv(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdCreateEnv creates a command object for the "create" command

func NewCmdCreateGit

func NewCmdCreateGit(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdCreateGit creates a command object for the "create" command

func NewCmdCreateSpring

func NewCmdCreateSpring(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdCreateSpring creates a command object for the "create" command

func NewCmdDelete

func NewCmdDelete(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdDelete creates a command object for the generic "get" action, which retrieves one or more resources from a server.

func NewCmdDeleteEnv

func NewCmdDeleteEnv(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdDeleteEnv creates a command object for the "delete repo" command

func NewCmdDeleteRepo

func NewCmdDeleteRepo(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdDeleteRepo creates a command object for the "delete repo" command

func NewCmdEdit

func NewCmdEdit(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdEdit creates the edit command

func NewCmdEditEnv

func NewCmdEditEnv(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdEditEnv creates a command object for the "create" command

func NewCmdEnvironment

func NewCmdEnvironment(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

func NewCmdGet

func NewCmdGet(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdGet creates a command object for the generic "get" action, which retrieves one or more resources from a server.

func NewCmdGetEnv

func NewCmdGetEnv(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdGetEnv creates the new command for: jx get env

func NewCmdGetGit

func NewCmdGetGit(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdGetGit creates the command

func NewCmdGetPipeline

func NewCmdGetPipeline(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdGetPipeline creates the command

func NewCmdGetURL

func NewCmdGetURL(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdGetURL creates the command

func NewCmdGetVersion

func NewCmdGetVersion(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdGetVersion creates the new command for: jx get version

func NewCmdImport

func NewCmdImport(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

func NewCmdInit

func NewCmdInit(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdInit creates a command object for the generic "init" action, which primes a kubernetes cluster so it's ready for jenkins x to be installed

func NewCmdInstall

func NewCmdInstall(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdGet creates a command object for the generic "install" action, which installs the jenkins-x platform on a kubernetes cluster.

func NewCmdLogs

func NewCmdLogs(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

func NewCmdMetrics

func NewCmdMetrics(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

func NewCmdNamespace

func NewCmdNamespace(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

func NewCmdOpen

func NewCmdOpen(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

func NewCmdPromote

func NewCmdPromote(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdPromote creates the new command for: jx get prompt

func NewCmdPrompt

func NewCmdPrompt(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdPrompt creates the new command for: jx get prompt

func NewCmdRsh

func NewCmdRsh(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

func NewCmdShell

func NewCmdShell(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

func NewCmdStart

func NewCmdStart(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdStart creates a command object for the generic "get" action, which retrieves one or more resources from a server.

func NewCmdStartPipeline

func NewCmdStartPipeline(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdStartPipeline creates the command

func NewCmdStep

func NewCmdStep(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

NewCmdStep Steps a command object for the "step" command

func NewCmdStepTag

func NewCmdStepTag(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

func NewCmdUninstall

func NewCmdUninstall(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

func NewCmdVersion

func NewCmdVersion(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Command

func NewJXCommand

func NewJXCommand(f cmdutil.Factory, in io.Reader, out, err io.Writer) *cobra.Command

NewJXCommand creates the `jx` command and its nested children.

Types

type CommonOptions

type CommonOptions struct {
	Factory   cmdutil.Factory
	Out       io.Writer
	Err       io.Writer
	Cmd       *cobra.Command
	Args      []string
	BatchMode bool
	// contains filtered or unexported fields
}

CommonOptions contains common options and helper methods

func (*CommonOptions) CreateTable

func (c *CommonOptions) CreateTable() table.Table

func (*CommonOptions) JXClient

func (o *CommonOptions) JXClient() (*versioned.Clientset, string, error)

func (*CommonOptions) JenkinsClient

func (o *CommonOptions) JenkinsClient() (*gojenkins.Jenkins, error)

func (*CommonOptions) KubeClient

func (o *CommonOptions) KubeClient() (*kubernetes.Clientset, string, error)

func (*CommonOptions) Printf

func (c *CommonOptions) Printf(format string, a ...interface{}) (n int, err error)

func (*CommonOptions) Run

func (o *CommonOptions) Run() error

func (*CommonOptions) TeamAndEnvironmentNames

func (o *CommonOptions) TeamAndEnvironmentNames() (string, string, error)

type ConsoleOptions

type ConsoleOptions struct {
	CommonOptions

	OnlyViewURL bool
}

func (*ConsoleOptions) Open

func (o *ConsoleOptions) Open(name string, label string) error

func (*ConsoleOptions) Run

func (o *ConsoleOptions) Run() error

type ContextOptions

type ContextOptions struct {
	CommonOptions
}

func (*ContextOptions) PickContext

func (o *ContextOptions) PickContext(names []string, defaultValue string) (string, error)

func (*ContextOptions) Run

func (o *ContextOptions) Run() error

type CreateArchetypeOptions

type CreateArchetypeOptions struct {
	CreateOptions

	ArchetypeCatalogURL string

	Filter      maven.ArchetypeFilter
	PickVersion bool
	Interactive bool

	Form maven.ArchetypeForm
}

CreateArchetypeOptions the options for the create spring command

func (*CreateArchetypeOptions) Run

func (o *CreateArchetypeOptions) Run() error

Run implements the generic Create command

type CreateClusterAKSFlags

type CreateClusterAKSFlags struct {
	Name            string
	ResourceGroup   string
	Location        string
	NodeCount       string
	KubeVersion     string
	PathToPublicKey string
}

type CreateClusterAKSOptions

type CreateClusterAKSOptions struct {
	CreateClusterOptions

	Flags CreateClusterAKSFlags
}

CreateClusterOptions the flags for running crest cluster

func (*CreateClusterAKSOptions) Run

func (o *CreateClusterAKSOptions) Run() error

type CreateClusterFlags

type CreateClusterFlags struct {
}

type CreateClusterGKEFlags

type CreateClusterGKEFlags struct {
}

type CreateClusterGKEOptions

type CreateClusterGKEOptions struct {
	CreateClusterOptions

	Flags CreateClusterGKEFlags
}

CreateClusterOptions the flags for running crest cluster

func (*CreateClusterGKEOptions) Run

func (o *CreateClusterGKEOptions) Run() error

type CreateClusterMinikubeFlags

type CreateClusterMinikubeFlags struct {
	Memory              string
	CPU                 string
	Driver              string
	HyperVVirtualSwitch string
}

type CreateClusterMinikubeOptions

type CreateClusterMinikubeOptions struct {
	CreateClusterOptions

	Flags    CreateClusterMinikubeFlags
	Provider KubernetesProvider
}

CreateClusterOptions the flags for running crest cluster

func (*CreateClusterMinikubeOptions) Run

type CreateClusterOptions

type CreateClusterOptions struct {
	CreateOptions
	Flags    InitFlags
	Provider string
	NoBrew   bool
}

CreateClusterOptions the flags for running crest cluster

func (*CreateClusterOptions) Run

func (o *CreateClusterOptions) Run() error

type CreateEnvOptions

type CreateEnvOptions struct {
	CreateOptions

	Options                v1.Environment
	PromotionStrategy      string
	NoGitOps               bool
	ForkEnvironmentGitRepo string
	EnvJobCredentials      string
}

CreateEnvOptions the options for the create spring command

func (*CreateEnvOptions) Run

func (o *CreateEnvOptions) Run() error

Run implements the command

type CreateGitOptions

type CreateGitOptions struct {
	CreateOptions
}

CreateGitOptions the options for the create spring command

func (*CreateGitOptions) Run

func (o *CreateGitOptions) Run() error

Run implements the command

type CreateOptions

type CreateOptions struct {
	CommonOptions

	DisableImport bool
	OutDir        string
}

GetOptions is the start of the data required to perform the operation. As new fields are added, add them here instead of referencing the cmd.Flags()

func (*CreateOptions) DoImport

func (o *CreateOptions) DoImport(outDir string) error

DoImport imports the project created at the given directory

func (*CreateOptions) Run

func (o *CreateOptions) Run() error

Run implements this command

type CreateSpringOptions

type CreateSpringOptions struct {
	CreateOptions

	Advanced   bool
	SpringForm spring.SpringBootForm
}

CreateSpringOptions the options for the create spring command

func (*CreateSpringOptions) Run

func (o *CreateSpringOptions) Run() error

Run implements the command

type DeleteEnvOptions

type DeleteEnvOptions struct {
	CreateOptions

	DeleteNamespace bool
}

DeleteEnvOptions the options for the create spring command

func (*DeleteEnvOptions) Run

func (o *DeleteEnvOptions) Run() error

Run implements the command

type DeleteOptions

type DeleteOptions struct {
	CommonOptions
}

DeleteOptions are the flags for delete commands

func (*DeleteOptions) Run

func (o *DeleteOptions) Run() error

Run implements this command

type DeleteRepoOptions

type DeleteRepoOptions struct {
	CreateOptions

	Organisation string
	Repository   string
	GitHost      string
	GitHub       bool
	SelectAll    bool
	SelectFilter string
}

DeleteRepoOptions the options for the create spring command

func (*DeleteRepoOptions) Run

func (o *DeleteRepoOptions) Run() error

Run implements the command

type EditEnvOptions

type EditEnvOptions struct {
	CreateOptions

	Options                v1.Environment
	PromotionStrategy      string
	NoGitOps               bool
	ForkEnvironmentGitRepo string
	EnvJobCredentials      string
}

EditEnvOptions the options for the create spring command

func (*EditEnvOptions) Run

func (o *EditEnvOptions) Run() error

Run implements the command

type EditOptions

type EditOptions struct {
	CommonOptions
}

EditOptions contains the CLI options

func (*EditOptions) Run

func (o *EditOptions) Run() error

Run implements this command

type EnvApps

type EnvApps struct {
	Environment v1.Environment
	Apps        map[string]v1beta2.Deployment
}

type EnvironmentOptions

type EnvironmentOptions struct {
	CommonOptions
}

func (*EnvironmentOptions) PickNamespace

func (o *EnvironmentOptions) PickNamespace(client *kubernetes.Clientset, defaultNamespace string) (string, error)

func (*EnvironmentOptions) Run

func (o *EnvironmentOptions) Run() error

type GetEnvOptions

type GetEnvOptions struct {
	GetOptions

	PromotionStrategy string
}

GetEnvOptions containers the CLI options

func (*GetEnvOptions) Run

func (o *GetEnvOptions) Run() error

Run implements this command

type GetGitOptions

type GetGitOptions struct {
	GetOptions
}

GetGitOptions the command line options

func (*GetGitOptions) Run

func (o *GetGitOptions) Run() error

Run implements this command

type GetOptions

type GetOptions struct {
	CommonOptions

	Output string
}

GetOptions is the start of the data required to perform the operation. As new fields are added, add them here instead of referencing the cmd.Flags()

func (*GetOptions) Run

func (o *GetOptions) Run() error

Run implements this command

type GetPipelineOptions

type GetPipelineOptions struct {
	GetOptions
}

GetPipelineOptions is the start of the data required to perform the operation. As new fields are added, add them here instead of referencing the cmd.Flags()

func (*GetPipelineOptions) Run

func (o *GetPipelineOptions) Run() error

Run implements this command

type GetURLOptions

type GetURLOptions struct {
	GetOptions
}

GetURLOptions the command line options

func (*GetURLOptions) Run

func (o *GetURLOptions) Run() error

Run implements this command

type GetVersionOptions

type GetVersionOptions struct {
	CommonOptions
}

GetVersionOptions containers the CLI options

func (*GetVersionOptions) Run

func (o *GetVersionOptions) Run() error

Run implements this command

type ImportOptions

type ImportOptions struct {
	CommonOptions

	RepoURL string

	Dir                     string
	Organisation            string
	Repository              string
	Credentials             string
	AppName                 string
	GitHub                  bool
	DryRun                  bool
	SelectAll               bool
	DisableDraft            bool
	DisableJenkinsfileCheck bool
	SelectFilter            string
	Jenkinsfile             string

	DisableDotGitSearch bool
	Jenkins             *gojenkins.Jenkins
	GitConfDir          string
	GitProvider         gits.GitProvider
}

func (*ImportOptions) CloneRepository

func (o *ImportOptions) CloneRepository() error

func (*ImportOptions) CreateNewRemoteRepository

func (o *ImportOptions) CreateNewRemoteRepository() error

func (*ImportOptions) DefaultDockerfile

func (o *ImportOptions) DefaultDockerfile() error

func (*ImportOptions) DefaultGitIgnore

func (o *ImportOptions) DefaultGitIgnore() error

DiscoverGit checks if there is a git clone or prompts the user to import it

func (*ImportOptions) DefaultJenkinsfile

func (o *ImportOptions) DefaultJenkinsfile() error

func (*ImportOptions) DiscoverGit

func (o *ImportOptions) DiscoverGit() error

DiscoverGit checks if there is a git clone or prompts the user to import it

func (*ImportOptions) DiscoverRemoteGitURL

func (o *ImportOptions) DiscoverRemoteGitURL() error

DiscoverRemoteGitURL finds the git url by looking in the directory and looking for a .git/config file

func (*ImportOptions) DoImport

func (o *ImportOptions) DoImport() error

func (*ImportOptions) DraftCreate

func (o *ImportOptions) DraftCreate() error

func (*ImportOptions) ImportProjectsFromGitHub

func (o *ImportOptions) ImportProjectsFromGitHub() error

func (*ImportOptions) Run

func (o *ImportOptions) Run() error

type InitFlags

type InitFlags struct {
}

type InitOptions

type InitOptions struct {
	CommonOptions
	Client   clientset.Clientset
	Flags    InitFlags
	Provider KubernetesProvider
}

InitOptions the flags for running init

func (*InitOptions) Run

func (o *InitOptions) Run() error

type InstallOptions

type InstallOptions struct {
	CommonOptions

	Domain             string
	GitProvider        string
	GitToken           string
	GitUser            string
	GitPass            string
	KubernetesProvider string
	CloudEnvRepository string
	LocalHelmRepoName  string
}

GetOptions is the start of the data required to perform the operation. As new fields are added, add them here instead of referencing the cmd.Flags()

func (*InstallOptions) Run

func (options *InstallOptions) Run() error

Run implements this command

type KubernetesProvider

type KubernetesProvider string

type LogsOptions

type LogsOptions struct {
	CommonOptions

	Container string
	Namespace string
	Filter    string
}

func (*LogsOptions) Run

func (o *LogsOptions) Run() error

type MetricsOptions

type MetricsOptions struct {
	CommonOptions

	Namespace string
	Filter    string
}

func (*MetricsOptions) Run

func (o *MetricsOptions) Run() error

type NamespaceOptions

type NamespaceOptions struct {
	CommonOptions
}

func (*NamespaceOptions) PickNamespace

func (o *NamespaceOptions) PickNamespace(names []string, defaultNamespace string) (string, error)

func (*NamespaceOptions) Run

func (o *NamespaceOptions) Run() error

type OpenOptions

type OpenOptions struct {
	ConsoleOptions
}

func (*OpenOptions) Run

func (o *OpenOptions) Run() error

type PromoteOptions

type PromoteOptions struct {
	CommonOptions

	Namespace         string
	Environment       string
	Application       string
	Version           string
	LocalHelmRepoName string
	HelmRepositoryURL string
	Preview           bool
	NoHelmUpdate      bool
	AllAutomatic      bool
}

PromoteOptions containers the CLI options

func (*PromoteOptions) GetTargetNamespace

func (o *PromoteOptions) GetTargetNamespace(ns string, env string) (string, *v1.Environment, error)

func (*PromoteOptions) Promote

func (o *PromoteOptions) Promote(targetNS string, env *v1.Environment, warnIfAuto bool) error

func (*PromoteOptions) PromoteAllAutomatic

func (o *PromoteOptions) PromoteAllAutomatic() error

func (*PromoteOptions) PromoteViaPullRequest

func (o *PromoteOptions) PromoteViaPullRequest(env *v1.Environment) error

func (*PromoteOptions) Run

func (o *PromoteOptions) Run() error

Run implements this command

func (*PromoteOptions) WaitForPromotion

func (options *PromoteOptions) WaitForPromotion(ns string, env *v1.Environment) error

type PromptOptions

type PromptOptions struct {
	CommonOptions

	NoLabel  bool
	ShowIcon bool

	Prefix    string
	Label     string
	Separator string
	Divider   string
	Suffix    string

	LabelColor     []string
	NamespaceColor []string
	ContextColor   []string
}

PromptOptions containers the CLI options

func (*PromptOptions) Run

func (o *PromptOptions) Run() error

Run implements this command

type RshOptions

type RshOptions struct {
	CommonOptions

	Container  string
	Namespace  string
	Executable string
	// contains filtered or unexported fields
}

func (*RshOptions) Run

func (o *RshOptions) Run() error

type Secrets

type Secrets struct {
	Login string
	Token string
}

type ShellOptions

type ShellOptions struct {
	CommonOptions
}

func (*ShellOptions) PickContext

func (o *ShellOptions) PickContext(names []string, defaultValue string) (string, error)

func (*ShellOptions) Run

func (o *ShellOptions) Run() error

type Start

type Start struct {
	CommonOptions
}

Start contains the command line options

func (*Start) Run

func (o *Start) Run() error

Run implements this command

type StartPipelineOptions

type StartPipelineOptions struct {
	GetOptions

	Tail   bool
	Filter string

	Jobs map[string]*gojenkins.Job
}

StartPipelineOptions contains the command line options

func (*StartPipelineOptions) Run

func (o *StartPipelineOptions) Run() error

Run implements this command

type StepOptions

type StepOptions struct {
	CommonOptions

	DisableImport bool
	OutDir        string
}

GetOptions is the start of the data required to perform the operation. As new fields are added, add them here instead of referencing the cmd.Flags()

func (*StepOptions) DoImport

func (o *StepOptions) DoImport(outDir string) error

DoImport imports the project Stepd at the given directory

func (*StepOptions) Run

func (o *StepOptions) Run() error

Run implements this command

type StepTagFlags

type StepTagFlags struct {
	Version string
}

type StepTagOptions

type StepTagOptions struct {
	StepOptions

	Flags StepTagFlags
}

CreateClusterOptions the flags for running crest cluster

func (*StepTagOptions) Run

func (o *StepTagOptions) Run() error

type UninstallOptions

type UninstallOptions struct {
	CommonOptions
}

func (*UninstallOptions) Run

func (o *UninstallOptions) Run() error

type VersionOptions

type VersionOptions struct {
	CommonOptions

	Container string
	Namespace string
}

func (*VersionOptions) Run

func (o *VersionOptions) Run() error

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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