From 628c1edc58840e5920472ff5ab15fcf97a41fe96 Mon Sep 17 00:00:00 2001 From: Jakub Hadvig Date: Tue, 22 Sep 2020 18:51:13 +0200 Subject: [PATCH] Add Console QuickStart CRD --- console/v1/0000_10_consolequickstart.crd.yaml | 200 ++++++++++++++++++ console/v1/register.go | 2 + console/v1/types_console_quick_start.go | 132 ++++++++++++ console/v1/zz_generated.deepcopy.go | 162 ++++++++++++++ .../v1/zz_generated.swagger_doc_generated.go | 59 ++++++ 5 files changed, 555 insertions(+) create mode 100644 console/v1/0000_10_consolequickstart.crd.yaml create mode 100644 console/v1/types_console_quick_start.go diff --git a/console/v1/0000_10_consolequickstart.crd.yaml b/console/v1/0000_10_consolequickstart.crd.yaml new file mode 100644 index 00000000000..27ee86ab814 --- /dev/null +++ b/console/v1/0000_10_consolequickstart.crd.yaml @@ -0,0 +1,200 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: consolequickstarts.console.openshift.io + annotations: + include.release.openshift.io/self-managed-high-availability: "true" + displayName: ConsoleQuickStart + description: Extension for guiding user through various workflows in the OpenShift + web console. +spec: + scope: Cluster + group: console.openshift.io + preserveUnknownFields: false + versions: + - name: v1 + served: true + storage: true + names: + plural: consolequickstarts + singular: consolequickstart + kind: ConsoleQuickStart + listKind: ConsoleQuickStartList + "validation": + "openAPIV3Schema": + description: ConsoleQuickStart is an extension for guiding user through various + workflows in the OpenShift web console. + type: object + required: + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: ConsoleQuickStartSpec is the desired quick start configuration. + type: object + required: + - description + - displayName + - durationMinutes + - introduction + - tasks + properties: + accessReviewResources: + description: accessReviewResources contains a list of resources that + the user's access will be reviewed against in order for the user to + complete the Quick Start. The Quick Start will be hidden if any of + the access reviews fail. + type: array + items: + description: ResourceAttributes includes the authorization attributes + available for resource requests to the Authorizer interface + type: object + properties: + group: + description: Group is the API Group of the Resource. "*" means + all. + type: string + name: + description: Name is the name of the resource being requested + for a "get" or deleted for a "delete". "" (empty) means all. + type: string + namespace: + description: Namespace is the namespace of the action being requested. Currently, + there is no distinction between no namespace and all namespaces + "" (empty) is defaulted for LocalSubjectAccessReviews "" (empty) + is empty for cluster-scoped resources "" (empty) means "all" + for namespace scoped resources from a SubjectAccessReview or + SelfSubjectAccessReview + type: string + resource: + description: Resource is one of the existing resource types. "*" + means all. + type: string + subresource: + description: Subresource is one of the existing resource types. "" + means none. + type: string + verb: + description: 'Verb is a kubernetes resource API verb, like: get, + list, watch, create, update, delete, proxy. "*" means all.' + type: string + version: + description: Version is the API Version of the Resource. "*" + means all. + type: string + conclusion: + description: conclusion sums up the Quick Start and suggests the possible + next steps. (includes markdown) + type: string + description: + description: description is the description of the Quick Start. (includes + markdown) + type: string + maxLength: 256 + minLength: 1 + displayName: + description: displayName is the display name of the Quick Start. + type: string + minLength: 1 + durationMinutes: + description: durationMinutes describes approximately how many minutes + it will take to complete the Quick Start. + type: integer + minimum: 1 + icon: + description: icon is a base64 encoded image that will be displayed beside + the Quick Start display name. The icon should be an vector image for + easy scaling. The size of the icon should be 40x40. + type: string + introduction: + description: introduction describes the purpose of the Quick Start. + (includes markdown) + type: string + minLength: 1 + nextQuickStart: + description: nextQuickStart is a list of the following Quick Starts, + suggested for the user to try. + type: array + items: + type: string + prerequisites: + description: prerequisites contains all prerequisites that need to be + met before taking a Quick Start. (includes markdown) + type: array + items: + type: string + tags: + description: tags is a list of strings that describe the Quick Start. + type: array + items: + type: string + tasks: + description: tasks is the list of steps the user has to perform to complete + the Quick Start. + type: array + minItems: 1 + items: + description: ConsoleQuickStartTask is a single step in a Quick Start. + type: object + required: + - description + - title + properties: + description: + description: description describes the steps needed to complete + the task. (includes markdown) + type: string + minLength: 1 + review: + description: review contains instructions to validate the task + is complete. The user will select 'Yes' or 'No'. using a radio + button, which indicates whether the step was completed successfully. + type: object + required: + - failedTaskHelp + - instructions + properties: + failedTaskHelp: + description: failedTaskHelp contains suggestions for a failed + task review and is shown at the end of task. (includes markdown) + type: string + minLength: 1 + instructions: + description: instructions contains steps that user needs to + take in order to validate his work after going through a + task. (includes markdown) + type: string + minLength: 1 + summary: + description: summary contains information about the passed step. + type: object + required: + - failed + - success + properties: + failed: + description: failed briefly describes the unsuccessfully passed + task. (includes markdown) + type: string + maxLength: 128 + minLength: 1 + success: + description: success describes the succesfully passed task. + type: string + minLength: 1 + title: + description: title describes the task and is displayed as a step + heading. + type: string + minLength: 1 diff --git a/console/v1/register.go b/console/v1/register.go index 87e0c8ed761..2b13fe7ecc7 100644 --- a/console/v1/register.go +++ b/console/v1/register.go @@ -41,6 +41,8 @@ func addKnownTypes(scheme *runtime.Scheme) error { &ConsoleExternalLogLinkList{}, &ConsoleYAMLSample{}, &ConsoleYAMLSampleList{}, + &ConsoleQuickStart{}, + &ConsoleQuickStartList{}, ) metav1.AddToGroupVersion(scheme, GroupVersion) return nil diff --git a/console/v1/types_console_quick_start.go b/console/v1/types_console_quick_start.go new file mode 100644 index 00000000000..5e24d790eb9 --- /dev/null +++ b/console/v1/types_console_quick_start.go @@ -0,0 +1,132 @@ +package v1 + +import ( + authorizationv1 "k8s.io/api/authorization/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ConsoleQuickStart is an extension for guiding user through various +// workflows in the OpenShift web console. +type ConsoleQuickStart struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // +kubebuilder:validation:Required + // +required + Spec ConsoleQuickStartSpec `json:"spec"` +} + +// ConsoleQuickStartSpec is the desired quick start configuration. +type ConsoleQuickStartSpec struct { + // displayName is the display name of the Quick Start. + // +kubebuilder:validation:Required + // +kubebuilder:validation:MinLength=1 + // +required + DisplayName string `json:"displayName"` + // icon is a base64 encoded image that will be displayed beside the Quick Start display name. + // The icon should be an vector image for easy scaling. The size of the icon should be 40x40. + // +optional + Icon string `json:"icon,omitempty"` + // tags is a list of strings that describe the Quick Start. + // +optional + Tags []string `json:"tags,omitempty"` + // durationMinutes describes approximately how many minutes it will take to complete the Quick Start. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Minimum=1 + // +required + DurationMinutes int `json:"durationMinutes"` + // description is the description of the Quick Start. (includes markdown) + // +kubebuilder:validation:Required + // +kubebuilder:validation:MinLength=1 + // +kubebuilder:validation:MaxLength=256 + // +required + Description string `json:"description"` + // prerequisites contains all prerequisites that need to be met before taking a Quick Start. (includes markdown) + // +optional + Prerequisites []string `json:"prerequisites,omitempty"` + // introduction describes the purpose of the Quick Start. (includes markdown) + // +kubebuilder:validation:Required + // +kubebuilder:validation:MinLength=1 + // +required + Introduction string `json:"introduction"` + // tasks is the list of steps the user has to perform to complete the Quick Start. + // +kubebuilder:validation:Required + // +kubebuilder:validation:MinItems=1 + // +required + Tasks []ConsoleQuickStartTask `json:"tasks"` + // conclusion sums up the Quick Start and suggests the possible next steps. (includes markdown) + // +optional + Conclusion string `json:"conclusion,omitempty"` + // nextQuickStart is a list of the following Quick Starts, suggested for the user to try. + // +optional + NextQuickStart []string `json:"nextQuickStart,omitempty"` + // accessReviewResources contains a list of resources that the user's access + // will be reviewed against in order for the user to complete the Quick Start. + // The Quick Start will be hidden if any of the access reviews fail. + // +optional + AccessReviewResources []authorizationv1.ResourceAttributes `json:"accessReviewResources,omitempty"` +} + +// ConsoleQuickStartTask is a single step in a Quick Start. +type ConsoleQuickStartTask struct { + // title describes the task and is displayed as a step heading. + // +kubebuilder:validation:Required + // +kubebuilder:validation:MinLength=1 + // +required + Title string `json:"title"` + // description describes the steps needed to complete the task. (includes markdown) + // +kubebuilder:validation:Required + // +kubebuilder:validation:MinLength=1 + // +required + Description string `json:"description"` + // review contains instructions to validate the task is complete. The user will select 'Yes' or 'No'. + // using a radio button, which indicates whether the step was completed successfully. + // +optional + Review *ConsoleQuickStartTaskReview `json:"review,omitempty"` + // summary contains information about the passed step. + // +optional + Summary *ConsoleQuickStartTaskSummary `json:"summary,omitempty"` +} + +// ConsoleQuickStartTaskReview contains instructions that validate a task was completed successfully. +type ConsoleQuickStartTaskReview struct { + // instructions contains steps that user needs to take in order + // to validate his work after going through a task. (includes markdown) + // +kubebuilder:validation:Required + // +kubebuilder:validation:MinLength=1 + // +required + Instructions string `json:"instructions"` + // failedTaskHelp contains suggestions for a failed task review and is shown at the end of task. (includes markdown) + // +kubebuilder:validation:Required + // +kubebuilder:validation:MinLength=1 + // +required + FailedTaskHelp string `json:"failedTaskHelp"` +} + +// ConsoleQuickStartTaskSummary contains information about a passed step. +type ConsoleQuickStartTaskSummary struct { + // success describes the succesfully passed task. + // +kubebuilder:validation:Required + // +kubebuilder:validation:MinLength=1 + // +required + Success string `json:"success"` + // failed briefly describes the unsuccessfully passed task. (includes markdown) + // +kubebuilder:validation:Required + // +kubebuilder:validation:MinLength=1 + // +kubebuilder:validation:MaxLength=128 + // +required + Failed string `json:"failed"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +type ConsoleQuickStartList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + + Items []ConsoleQuickStart `json:"items"` +} diff --git a/console/v1/zz_generated.deepcopy.go b/console/v1/zz_generated.deepcopy.go index 4e8d568ccfa..4308fad0752 100644 --- a/console/v1/zz_generated.deepcopy.go +++ b/console/v1/zz_generated.deepcopy.go @@ -5,6 +5,7 @@ package v1 import ( + authorizationv1 "k8s.io/api/authorization/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" ) @@ -366,6 +367,167 @@ func (in *ConsoleNotificationSpec) DeepCopy() *ConsoleNotificationSpec { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConsoleQuickStart) DeepCopyInto(out *ConsoleQuickStart) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConsoleQuickStart. +func (in *ConsoleQuickStart) DeepCopy() *ConsoleQuickStart { + if in == nil { + return nil + } + out := new(ConsoleQuickStart) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ConsoleQuickStart) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConsoleQuickStartList) DeepCopyInto(out *ConsoleQuickStartList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ConsoleQuickStart, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConsoleQuickStartList. +func (in *ConsoleQuickStartList) DeepCopy() *ConsoleQuickStartList { + if in == nil { + return nil + } + out := new(ConsoleQuickStartList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ConsoleQuickStartList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConsoleQuickStartSpec) DeepCopyInto(out *ConsoleQuickStartSpec) { + *out = *in + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Prerequisites != nil { + in, out := &in.Prerequisites, &out.Prerequisites + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Tasks != nil { + in, out := &in.Tasks, &out.Tasks + *out = make([]ConsoleQuickStartTask, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.NextQuickStart != nil { + in, out := &in.NextQuickStart, &out.NextQuickStart + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.AccessReviewResources != nil { + in, out := &in.AccessReviewResources, &out.AccessReviewResources + *out = make([]authorizationv1.ResourceAttributes, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConsoleQuickStartSpec. +func (in *ConsoleQuickStartSpec) DeepCopy() *ConsoleQuickStartSpec { + if in == nil { + return nil + } + out := new(ConsoleQuickStartSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConsoleQuickStartTask) DeepCopyInto(out *ConsoleQuickStartTask) { + *out = *in + if in.Review != nil { + in, out := &in.Review, &out.Review + *out = new(ConsoleQuickStartTaskReview) + **out = **in + } + if in.Summary != nil { + in, out := &in.Summary, &out.Summary + *out = new(ConsoleQuickStartTaskSummary) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConsoleQuickStartTask. +func (in *ConsoleQuickStartTask) DeepCopy() *ConsoleQuickStartTask { + if in == nil { + return nil + } + out := new(ConsoleQuickStartTask) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConsoleQuickStartTaskReview) DeepCopyInto(out *ConsoleQuickStartTaskReview) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConsoleQuickStartTaskReview. +func (in *ConsoleQuickStartTaskReview) DeepCopy() *ConsoleQuickStartTaskReview { + if in == nil { + return nil + } + out := new(ConsoleQuickStartTaskReview) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConsoleQuickStartTaskSummary) DeepCopyInto(out *ConsoleQuickStartTaskSummary) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConsoleQuickStartTaskSummary. +func (in *ConsoleQuickStartTaskSummary) DeepCopy() *ConsoleQuickStartTaskSummary { + if in == nil { + return nil + } + out := new(ConsoleQuickStartTaskSummary) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ConsoleYAMLSample) DeepCopyInto(out *ConsoleYAMLSample) { *out = *in diff --git a/console/v1/zz_generated.swagger_doc_generated.go b/console/v1/zz_generated.swagger_doc_generated.go index 1012e915f34..ec3e2478cf1 100644 --- a/console/v1/zz_generated.swagger_doc_generated.go +++ b/console/v1/zz_generated.swagger_doc_generated.go @@ -128,6 +128,65 @@ func (ConsoleNotificationSpec) SwaggerDoc() map[string]string { return map_ConsoleNotificationSpec } +var map_ConsoleQuickStart = map[string]string{ + "": "ConsoleQuickStart is an extension for guiding user through various workflows in the OpenShift web console.", +} + +func (ConsoleQuickStart) SwaggerDoc() map[string]string { + return map_ConsoleQuickStart +} + +var map_ConsoleQuickStartSpec = map[string]string{ + "": "ConsoleQuickStartSpec is the desired quick start configuration.", + "displayName": "displayName is the display name of the Quick Start.", + "icon": "icon is a base64 encoded image that will be displayed beside the Quick Start display name. The icon should be an vector image for easy scaling. The size of the icon should be 40x40.", + "tags": "tags is a list of strings that describe the Quick Start.", + "durationMinutes": "durationMinutes describes approximately how many minutes it will take to complete the Quick Start.", + "description": "description is the description of the Quick Start. (includes markdown)", + "prerequisites": "prerequisites contains all prerequisites that need to be met before taking a Quick Start. (includes markdown)", + "introduction": "introduction describes the purpose of the Quick Start. (includes markdown)", + "tasks": "tasks is the list of steps the user has to perform to complete the Quick Start.", + "conclusion": "conclusion sums up the Quick Start and suggests the possible next steps. (includes markdown)", + "nextQuickStart": "nextQuickStart is a list of the following Quick Starts, suggested for the user to try.", + "accessReviewResources": "accessReviewResources contains a list of resources that the user's access will be reviewed against in order for the user to complete the Quick Start. The Quick Start will be hidden if any of the access reviews fail.", +} + +func (ConsoleQuickStartSpec) SwaggerDoc() map[string]string { + return map_ConsoleQuickStartSpec +} + +var map_ConsoleQuickStartTask = map[string]string{ + "": "ConsoleQuickStartTask is a single step in a Quick Start.", + "title": "title describes the task and is displayed as a step heading.", + "description": "description describes the steps needed to complete the task. (includes markdown)", + "review": "review contains instructions to validate the task is complete. The user will select 'Yes' or 'No'. using a radio button, which indicates whether the step was completed successfully.", + "summary": "summary contains information about the passed step.", +} + +func (ConsoleQuickStartTask) SwaggerDoc() map[string]string { + return map_ConsoleQuickStartTask +} + +var map_ConsoleQuickStartTaskReview = map[string]string{ + "": "ConsoleQuickStartTaskReview contains instructions that validate a task was completed successfully.", + "instructions": "instructions contains steps that user needs to take in order to validate his work after going through a task. (includes markdown)", + "failedTaskHelp": "failedTaskHelp contains suggestions for a failed task review and is shown at the end of task. (includes markdown)", +} + +func (ConsoleQuickStartTaskReview) SwaggerDoc() map[string]string { + return map_ConsoleQuickStartTaskReview +} + +var map_ConsoleQuickStartTaskSummary = map[string]string{ + "": "ConsoleQuickStartTaskSummary contains information about a passed step.", + "success": "success describes the succesfully passed task.", + "failed": "failed briefly describes the unsuccessfully passed task. (includes markdown)", +} + +func (ConsoleQuickStartTaskSummary) SwaggerDoc() map[string]string { + return map_ConsoleQuickStartTaskSummary +} + var map_ConsoleYAMLSample = map[string]string{ "": "ConsoleYAMLSample is an extension for customizing OpenShift web console YAML samples.", }