-
Notifications
You must be signed in to change notification settings - Fork 39
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Create one ManagedClusterView per app on the first failing cluster (#121
) * Create one ManagedClusterView per app on the first failing cluster Signed-off-by: Xiangjing Li <xiangli@redhat.com>
- Loading branch information
1 parent
a3be3da
commit 2877d2e
Showing
9 changed files
with
848 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
126 changes: 126 additions & 0 deletions
126
hack/test/view.open-cluster-management.io_managedclusterviews.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,126 @@ | ||
|
||
--- | ||
apiVersion: apiextensions.k8s.io/v1 | ||
kind: CustomResourceDefinition | ||
metadata: | ||
annotations: | ||
controller-gen.kubebuilder.io/version: v0.5.0 | ||
creationTimestamp: null | ||
name: managedclusterviews.view.open-cluster-management.io | ||
spec: | ||
group: view.open-cluster-management.io | ||
names: | ||
kind: ManagedClusterView | ||
listKind: ManagedClusterViewList | ||
plural: managedclusterviews | ||
singular: managedclusterview | ||
scope: Namespaced | ||
versions: | ||
- name: v1beta1 | ||
schema: | ||
openAPIV3Schema: | ||
description: ManagedClusterView is the view of resources on a managed cluster | ||
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: Spec defines the desired configuration of a view | ||
properties: | ||
scope: | ||
description: Scope is the scope of the view on a cluster | ||
properties: | ||
apiGroup: | ||
description: Group is the api group of the resources | ||
type: string | ||
kind: | ||
description: Kind is the kind of the subject | ||
type: string | ||
name: | ||
description: Name is the name of the subject | ||
type: string | ||
namespace: | ||
description: Name is the name of the subject | ||
type: string | ||
resource: | ||
description: Resource is the resource type of the subject | ||
type: string | ||
updateIntervalSeconds: | ||
description: UpdateIntervalSeconds is the interval to update view | ||
format: int32 | ||
type: integer | ||
version: | ||
description: Version is the version of the subject | ||
type: string | ||
type: object | ||
type: object | ||
status: | ||
description: Status describes current status of a view | ||
properties: | ||
conditions: | ||
description: Conditions represents the conditions of this resource on managed cluster | ||
items: | ||
description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, type FooStatus struct{ // Represents the observations of a foo's current state. // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge // +listType=map // +listMapKey=type Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" | ||
properties: | ||
lastTransitionTime: | ||
description: lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. | ||
format: date-time | ||
type: string | ||
message: | ||
description: message is a human readable message indicating details about the transition. This may be an empty string. | ||
maxLength: 32768 | ||
type: string | ||
observedGeneration: | ||
description: observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. | ||
format: int64 | ||
minimum: 0 | ||
type: integer | ||
reason: | ||
description: reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. | ||
maxLength: 1024 | ||
minLength: 1 | ||
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ | ||
type: string | ||
status: | ||
description: status of the condition, one of True, False, Unknown. | ||
enum: | ||
- "True" | ||
- "False" | ||
- Unknown | ||
type: string | ||
type: | ||
description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) | ||
maxLength: 316 | ||
pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ | ||
type: string | ||
required: | ||
- lastTransitionTime | ||
- message | ||
- reason | ||
- status | ||
- type | ||
type: object | ||
type: array | ||
result: | ||
description: Result references the related result of the view | ||
nullable: true | ||
type: object | ||
x-kubernetes-embedded-resource: true | ||
x-kubernetes-preserve-unknown-fields: true | ||
type: object | ||
type: object | ||
served: true | ||
storage: true | ||
subresources: | ||
status: {} | ||
status: | ||
acceptedNames: | ||
kind: "" | ||
plural: "" | ||
conditions: [] | ||
storedVersions: [] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
/* | ||
Licensed under the Apache License, Version 2.0 (the "License"); | ||
you may not use this file except in compliance with the License. | ||
You may obtain a copy of the License at | ||
http://www.apache.org/licenses/LICENSE-2.0 | ||
Unless required by applicable law or agreed to in writing, software | ||
distributed under the License is distributed on an "AS IS" BASIS, | ||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
See the License for the specific language governing permissions and | ||
limitations under the License. | ||
*/ | ||
|
||
// Package v1beta1 contains API Schema definitions for the view v1beta1 API group | ||
// +kubebuilder:object:generate=true | ||
// +groupName=view.open-cluster-management.io | ||
package v1beta1 | ||
|
||
import ( | ||
"k8s.io/apimachinery/pkg/runtime/schema" | ||
"sigs.k8s.io/controller-runtime/pkg/scheme" | ||
) | ||
|
||
var ( | ||
GroupName = "view.open-cluster-management.io" | ||
|
||
// GroupVersion is group version used to register these objects | ||
GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1beta1"} | ||
|
||
// SchemeBuilder is used to add go types to the GroupVersionKind scheme | ||
SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion} | ||
|
||
// AddToScheme adds the types in this group-version to the given scheme. | ||
AddToScheme = SchemeBuilder.AddToScheme | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
package v1beta1 | ||
|
||
import ( | ||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||
"k8s.io/apimachinery/pkg/runtime" | ||
) | ||
|
||
// +kubebuilder:object:root=true | ||
// +kubebuilder:subresource:status | ||
|
||
// ManagedClusterView is the view of resources on a managed cluster | ||
type ManagedClusterView struct { | ||
metav1.TypeMeta `json:",inline"` | ||
// Standard object's metadata. | ||
// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata | ||
// +optional | ||
metav1.ObjectMeta `json:"metadata,omitempty"` | ||
|
||
// Spec defines the desired configuration of a view | ||
// +optional | ||
Spec ViewSpec `json:"spec,omitempty"` | ||
|
||
// Status describes current status of a view | ||
// +optional | ||
Status ViewStatus `json:"status,omitempty"` | ||
} | ||
|
||
// +kubebuilder:object:root=true | ||
|
||
// ManagedClusterViewList is a list of all the ManagedClusterView | ||
type ManagedClusterViewList struct { | ||
metav1.TypeMeta `json:",inline"` | ||
// Standard list metadata. | ||
// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds | ||
// +optional | ||
metav1.ListMeta `json:"metadata,omitempty"` | ||
|
||
// List of ManagedClusterView objects. | ||
Items []ManagedClusterView `json:"items"` | ||
} | ||
|
||
// ViewSpec defines the desired configuration of a view | ||
type ViewSpec struct { | ||
// Scope is the scope of the view on a cluster | ||
Scope ViewScope `json:"scope,omitempty"` | ||
} | ||
|
||
// ViewStatus returns the status of the view | ||
type ViewStatus struct { | ||
// Conditions represents the conditions of this resource on managed cluster | ||
// +optional | ||
Conditions []metav1.Condition `json:"conditions,omitempty"` | ||
|
||
// Result references the related result of the view | ||
// +nullable | ||
// +optional | ||
// +kubebuilder:validation:EmbeddedResource | ||
// +kubebuilder:pruning:PreserveUnknownFields | ||
Result runtime.RawExtension `json:"result,omitempty"` | ||
} | ||
|
||
// ViewScope represents the scope of resources to be viewed | ||
type ViewScope struct { | ||
// Group is the api group of the resources | ||
Group string `json:"apiGroup,omitempty"` | ||
|
||
// Version is the version of the subject | ||
// +optional | ||
Version string `json:"version,omitempty"` | ||
|
||
// Kind is the kind of the subject | ||
// +optional | ||
Kind string `json:"kind,omitempty"` | ||
|
||
// Resource is the resource type of the subject | ||
// +optional | ||
Resource string `json:"resource,omitempty"` | ||
|
||
// Name is the name of the subject | ||
// +optional | ||
Name string `json:"name,omitempty"` | ||
|
||
// Name is the name of the subject | ||
// +optional | ||
Namespace string `json:"namespace,omitempty"` | ||
|
||
// UpdateIntervalSeconds is the interval to update view | ||
// +optional | ||
UpdateIntervalSeconds int32 `json:"updateIntervalSeconds,omitempty"` | ||
} | ||
|
||
// These are valid conditions of a cluster. | ||
const ( | ||
// ConditionViewProcessing means the view is processing. | ||
ConditionViewProcessing string = "Processing" | ||
) | ||
|
||
const ( | ||
ReasonResourceNameInvalid string = "ResourceNameInvalid" | ||
ReasonResourceTypeInvalid string = "ResourceTypeInvalid" | ||
ReasonResourceGVKInvalid string = "ResourceGVKInvalid" | ||
ReasonGetResourceFailed string = "GetResourceFailed" | ||
ReasonGetResource string = "GetResourceProcessing" | ||
) | ||
|
||
func init() { | ||
SchemeBuilder.Register(&ManagedClusterView{}, &ManagedClusterViewList{}) | ||
} |
Oops, something went wrong.