registry

package
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: Mar 15, 2022 License: Apache-2.0 Imports: 35 Imported by: 0

Documentation

Index

Constants

View Source
const (
	OrganizationScope string = "organization"
	PersonalScope     string = "personal"
	PrettyNameLabel   string = "workspaces.kcp.dev/pretty-name"
	InternalNameLabel string = "workspaces.kcp.dev/internal-name"
	PrettyNameIndex   string = "workspace-pretty-name"
	InternalNameIndex string = "workspace-internal-name"
)

Variables

View Source
var Strategy = workspaceStrategy{typerSchema, names.SimpleNameGenerator}

Strategy is the default logic that applies when creating and updating Project objects via the REST API.

Functions

func AddNameIndexers

func AddNameIndexers(crbInformer rbacinformers.ClusterRoleBindingInformer) error

func InternalListOptionsToSelectors

func InternalListOptionsToSelectors(options *metainternal.ListOptions) (labels.Selector, fields.Selector)

func NewREST

func NewREST(tenancyClient tenancyclient.TenancyV1alpha1Interface, kubeClient kubernetes.Interface, crbInformer rbacinformers.ClusterRoleBindingInformer, workspaceReviewerProvider workspaceauth.ReviewerProvider, workspaceLister workspaceauth.Lister) (*REST, *KubeconfigSubresourceREST)

NewREST returns a RESTStorage object that will work against Workspace resources

Types

type KubeConfig

type KubeConfig string

func (KubeConfig) DeepCopyObject

func (obj KubeConfig) DeepCopyObject() runtime.Object

func (KubeConfig) GetObjectKind

func (obj KubeConfig) GetObjectKind() schema.ObjectKind

func (KubeConfig) InputStream

func (s KubeConfig) InputStream(ctx context.Context, apiVersion, acceptHeader string) (stream io.ReadCloser, flush bool, contentType string, err error)

InputStream returns a stream with the contents of the URL location. If no location is provided, a null stream is returned.

type KubeconfigSubresourceREST

type KubeconfigSubresourceREST struct {
	// contains filtered or unexported fields
}

func (*KubeconfigSubresourceREST) Get

Get retrieves a Workspace KubeConfig by workspace name

func (*KubeconfigSubresourceREST) NamespaceScoped

func (s *KubeconfigSubresourceREST) NamespaceScoped() bool

func (*KubeconfigSubresourceREST) New

New creates a new Workspace log options object

func (*KubeconfigSubresourceREST) ProducesMIMETypes

func (r *KubeconfigSubresourceREST) ProducesMIMETypes(verb string) []string

ProducesMIMETypes returns a list of the MIME types the specified HTTP verb (GET, POST, DELETE, PATCH) can respond with.

func (*KubeconfigSubresourceREST) ProducesObject

func (r *KubeconfigSubresourceREST) ProducesObject(verb string) interface{}

ProducesObject returns an object the specified HTTP verb respond with. It will overwrite storage object if it is not nil. Only the type of the return object matters, the value will be ignored.

type REST

type REST struct {
	rest.TableConvertor
	// contains filtered or unexported fields
}

func (*REST) Create

func (s *REST) Create(ctx context.Context, obj runtime.Object, createValidation rest.ValidateObjectFunc, options *metav1.CreateOptions) (runtime.Object, error)

Create creates a new workspace The workspace is created in the underlying KCP server, with an internal name since the name ( == pretty name ) requested by the user might already exist at the organization level. Internal names would be <pretty name>--<suffix>.

However when the user manages his workspaces through the personal scope, the pretty names will always be used.

Personal pretty names and the related internal names are stored on the ClusterRoleBinding that links the Workspace-related ClusterRole with the user Subject.

Typical actions done against the underlying KCP instance when

kubectl create workspace my-app

is issued by User-A against the virtual workspace at the personal scope:

  1. create ClusterRoleBinding owner-workspace-my-app-user-A

If this fails, then my-app already exists for the user A => conflict error.

  1. create ClusterRoleBinding owner-workspace-my-app-user-A create ClusterRole owner-workspace-my-app-user-A create ClusterRole lister-workspace-my-app-user-A (in order to later allow sharing)

  2. create Workspace my-app

If this conflicts, create my-app--1, then my-app--2, …

  1. update RoleBinding user-A-my-app to point to my-app-2 instead of my-app.

  2. update ClusterRole owner-workspace-my-app-user-A to point to the internal workspace name update the internalName and pretty annotation on cluster roles and cluster role bindings.

func (*REST) Delete

func (s *REST) Delete(ctx context.Context, name string, deleteValidation rest.ValidateObjectFunc, options *metav1.DeleteOptions) (runtime.Object, bool, error)

func (*REST) Get

func (s *REST) Get(ctx context.Context, name string, options *metav1.GetOptions) (runtime.Object, error)

Get retrieves a Workspace by name

func (*REST) List

func (s *REST) List(ctx context.Context, options *metainternal.ListOptions) (runtime.Object, error)

List retrieves a list of Workspaces that match label.

func (*REST) NamespaceScoped

func (s *REST) NamespaceScoped() bool

func (*REST) New

func (s *REST) New() runtime.Object

New returns a new Workspace

func (*REST) NewList

func (*REST) NewList() runtime.Object

NewList returns a new WorkspaceList

type RoleType

type RoleType string
const (
	ListerRoleType RoleType = "lister"
	OwnerRoleType  RoleType = "owner"
)

type WorkspacesScopeKeyType

type WorkspacesScopeKeyType string
const WorkspacesScopeKey WorkspacesScopeKeyType = "VirtualWorkspaceWorkspacesScope"

Jump to

Keyboard shortcuts

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