diff --git a/charts/ace-installer/crds/charts.x-helm.dev_clusterchartpresets.yaml b/charts/ace-installer/crds/charts.x-helm.dev_clusterchartpresets.yaml index 4e7a35892..f4d682e74 100644 --- a/charts/ace-installer/crds/charts.x-helm.dev_clusterchartpresets.yaml +++ b/charts/ace-installer/crds/charts.x-helm.dev_clusterchartpresets.yaml @@ -1,7 +1,6 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: - creationTimestamp: null name: clusterchartpresets.charts.x-helm.dev spec: group: charts.x-helm.dev diff --git a/charts/ace-installer/crds/helm.toolkit.fluxcd.io_helmreleases.yaml b/charts/ace-installer/crds/helm.toolkit.fluxcd.io_helmreleases.yaml index 9207b54bc..a33bd70e1 100644 --- a/charts/ace-installer/crds/helm.toolkit.fluxcd.io_helmreleases.yaml +++ b/charts/ace-installer/crds/helm.toolkit.fluxcd.io_helmreleases.yaml @@ -3,7 +3,6 @@ kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null name: helmreleases.helm.toolkit.fluxcd.io spec: group: helm.toolkit.fluxcd.io diff --git a/charts/ace-installer/crds/source.toolkit.fluxcd.io_helmrepositories.yaml b/charts/ace-installer/crds/source.toolkit.fluxcd.io_helmrepositories.yaml index 8a9144edd..2b2974390 100644 --- a/charts/ace-installer/crds/source.toolkit.fluxcd.io_helmrepositories.yaml +++ b/charts/ace-installer/crds/source.toolkit.fluxcd.io_helmrepositories.yaml @@ -3,7 +3,6 @@ kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.8.0 - creationTimestamp: null name: helmrepositories.source.toolkit.fluxcd.io spec: group: source.toolkit.fluxcd.io diff --git a/charts/ace-ocm-addons/crds/cluster.open-cluster-management.io_managedclusters.yaml b/charts/ace-ocm-addons/crds/cluster.open-cluster-management.io_managedclusters.yaml new file mode 100644 index 000000000..35211ef82 --- /dev/null +++ b/charts/ace-ocm-addons/crds/cluster.open-cluster-management.io_managedclusters.yaml @@ -0,0 +1,278 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: managedclusters.cluster.open-cluster-management.io +spec: + group: cluster.open-cluster-management.io + names: + kind: ManagedCluster + listKind: ManagedClusterList + plural: managedclusters + shortNames: + - mcl + - mcls + singular: managedcluster + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .spec.hubAcceptsClient + name: Hub Accepted + type: boolean + - jsonPath: .spec.managedClusterClientConfigs[*].url + name: Managed Cluster URLs + type: string + - jsonPath: .status.conditions[?(@.type=="ManagedClusterJoined")].status + name: Joined + type: string + - jsonPath: .status.conditions[?(@.type=="ManagedClusterConditionAvailable")].status + name: Available + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1 + schema: + openAPIV3Schema: + description: "ManagedCluster represents the desired state and current status + of managed cluster. ManagedCluster is a cluster scoped resource. The name + is the cluster UID. \n The cluster join process follows a double opt-in + process: \n 1. Agent on managed cluster creates CSR on hub with cluster + UID and agent name. 2. Agent on managed cluster creates ManagedCluster on + hub. 3. Cluster admin on hub approves the CSR for UID and agent name of + the ManagedCluster. 4. Cluster admin sets spec.acceptClient of ManagedCluster + to true. 5. Cluster admin on managed cluster creates credential of kubeconfig + to hub. \n Once the hub creates the cluster namespace, the Klusterlet agent + on the ManagedCluster pushes the credential to the hub to use against the + kube-apiserver of the ManagedCluster." + 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 represents a desired configuration for the agent on + the managed cluster. + properties: + hubAcceptsClient: + description: hubAcceptsClient represents that hub accepts the joining + of Klusterlet agent on the managed cluster with the hub. The default + value is false, and can only be set true when the user on hub has + an RBAC rule to UPDATE on the virtual subresource of managedclusters/accept. + When the value is set true, a namespace whose name is the same as + the name of ManagedCluster is created on the hub. This namespace + represents the managed cluster, also role/rolebinding is created + on the namespace to grant the permision of access from the agent + on the managed cluster. When the value is set to false, the namespace + representing the managed cluster is deleted. + type: boolean + leaseDurationSeconds: + default: 60 + description: LeaseDurationSeconds is used to coordinate the lease + update time of Klusterlet agents on the managed cluster. If its + value is zero, the Klusterlet agent will update its lease every + 60 seconds by default + format: int32 + type: integer + managedClusterClientConfigs: + description: ManagedClusterClientConfigs represents a list of the + apiserver address of the managed cluster. If it is empty, the managed + cluster has no accessible address for the hub to connect with it. + items: + description: ClientConfig represents the apiserver address of the + managed cluster. TODO include credential to connect to managed + cluster kube-apiserver + properties: + caBundle: + description: CABundle is the ca bundle to connect to apiserver + of the managed cluster. System certs are used if it is not + set. + format: byte + type: string + url: + description: URL is the URL of apiserver endpoint of the managed + cluster. + type: string + type: object + type: array + taints: + description: Taints is a property of managed cluster that allow the + cluster to be repelled when scheduling. Taints, including 'ManagedClusterUnavailable' + and 'ManagedClusterUnreachable', can not be added/removed by agent + running on the managed cluster; while it's fine to add/remove other + taints from either hub cluser or managed cluster. + items: + description: The managed cluster this Taint is attached to has the + "effect" on any placement that does not tolerate the Taint. + properties: + effect: + description: Effect indicates the effect of the taint on placements + that do not tolerate the taint. Valid effects are NoSelect, + PreferNoSelect and NoSelectIfNew. + enum: + - NoSelect + - PreferNoSelect + - NoSelectIfNew + type: string + key: + description: Key is the taint key applied to a cluster. e.g. + bar or foo.example.com/bar. 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 + timeAdded: + description: TimeAdded represents the time at which the taint + was added. + format: date-time + nullable: true + type: string + value: + description: Value is the taint value corresponding to the taint + key. + maxLength: 1024 + type: string + required: + - effect + - key + type: object + type: array + type: object + status: + description: Status represents the current status of joined managed cluster + properties: + allocatable: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Allocatable represents the total allocatable resources + on the managed cluster. + type: object + capacity: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Capacity represents the total resource capacity from + all nodeStatuses on the managed cluster. + type: object + clusterClaims: + description: ClusterClaims represents cluster information that a managed + cluster claims, for example a unique cluster identifier (id.k8s.io) + and kubernetes version (kubeversion.open-cluster-management.io). + They are written from the managed cluster. The set of claims is + not uniform across a fleet, some claims can be vendor or version + specific and may not be included from all managed clusters. + items: + description: ManagedClusterClaim represents a ClusterClaim collected + from a managed cluster. + properties: + name: + description: Name is the name of a ClusterClaim resource on + managed cluster. It's a well known or customized name to identify + the claim. + maxLength: 253 + minLength: 1 + type: string + value: + description: Value is a claim-dependent string + maxLength: 1024 + minLength: 1 + type: string + type: object + type: array + conditions: + description: Conditions contains the different condition statuses + for this 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, + \n 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 + version: + description: Version represents the kubernetes version of the managed + cluster. + properties: + kubernetes: + description: Kubernetes is the kubernetes version of managed cluster. + type: string + type: object + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/charts/ace-ocm-addons/crds/cluster.open-cluster-management.io_placements.yaml b/charts/ace-ocm-addons/crds/cluster.open-cluster-management.io_placements.yaml new file mode 100644 index 000000000..d2e9a3324 --- /dev/null +++ b/charts/ace-ocm-addons/crds/cluster.open-cluster-management.io_placements.yaml @@ -0,0 +1,666 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: placements.cluster.open-cluster-management.io +spec: + group: cluster.open-cluster-management.io + names: + kind: Placement + listKind: PlacementList + plural: placements + singular: placement + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=="PlacementSatisfied")].status + name: Succeeded + type: string + - jsonPath: .status.conditions[?(@.type=="PlacementSatisfied")].reason + name: Reason + type: string + - jsonPath: .status.numberOfSelectedClusters + name: SelectedClusters + type: integer + name: v1beta1 + schema: + openAPIV3Schema: + description: "Placement defines a rule to select a set of ManagedClusters + from the ManagedClusterSets bound to the placement namespace. \n Here is + how the placement policy combines with other selection methods to determine + a matching list of ManagedClusters: 1. Kubernetes clusters are registered + with hub as cluster-scoped ManagedClusters; 2. ManagedClusters are organized + into cluster-scoped ManagedClusterSets; 3. ManagedClusterSets are bound + to workload namespaces; 4. Namespace-scoped Placements specify a slice of + ManagedClusterSets which select a working set of potential ManagedClusters; + 5. Then Placements subselect from that working set using label/claim selection. + \n No ManagedCluster will be selected if no ManagedClusterSet is bound to + the placement namespace. User is able to bind a ManagedClusterSet to a namespace + by creating a ManagedClusterSetBinding in that namespace if they have a + RBAC rule to CREATE on the virtual subresource of `managedclustersets/bind`. + \n A slice of PlacementDecisions with label cluster.open-cluster-management.io/placement={placement + name} will be created to represent the ManagedClusters selected by this + placement. \n If a ManagedCluster is selected and added into the PlacementDecisions, + other components may apply workload on it; once it is removed from the PlacementDecisions, + the workload applied on this ManagedCluster should be evicted accordingly." + 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 attributes of Placement. + properties: + clusterSets: + description: ClusterSets represent the ManagedClusterSets from which + the ManagedClusters are selected. If the slice is empty, ManagedClusters + will be selected from the ManagedClusterSets bound to the placement + namespace, otherwise ManagedClusters will be selected from the intersection + of this slice and the ManagedClusterSets bound to the placement + namespace. + items: + type: string + type: array + decisionStrategy: + description: DecisionStrategy divide the created placement decision + to groups and define number of clusters per decision group. + properties: + groupStrategy: + description: GroupStrategy define strategies to divide selected + clusters to decision groups. + properties: + clustersPerDecisionGroup: + anyOf: + - type: integer + - type: string + default: 100% + description: "ClustersPerDecisionGroup is a specific number + or percentage of the total selected clusters. The specific + number will divide the placementDecisions to decisionGroups + each group has max number of clusters equal to that specific + number. The percentage will divide the placementDecisions + to decisionGroups each group has max number of clusters + based on the total num of selected clusters and percentage. + ex; for a total 100 clusters selected, ClustersPerDecisionGroup + equal to 20% will divide the placement decision to 5 groups + each group should have 20 clusters. Default is having all + clusters in a single group. \n The predefined decisionGroups + is expected to be a subset of the selected clusters and + the number of items in each group SHOULD be less than ClustersPerDecisionGroup. + Once the number of items exceeds the ClustersPerDecisionGroup, + the decisionGroups will also be be divided into multiple + decisionGroups with same GroupName but different GroupIndex." + pattern: ^((100|[1-9][0-9]{0,1})%|[1-9][0-9]*)$ + x-kubernetes-int-or-string: true + decisionGroups: + description: DecisionGroups represents a list of predefined + groups to put decision results. Decision groups will be + constructed based on the DecisionGroups field at first. + The clusters not included in the DecisionGroups will be + divided to other decision groups afterwards. Each decision + group should not have the number of clusters larger than + the ClustersPerDecisionGroup. + items: + description: DecisionGroup define a subset of clusters that + will be added to placementDecisions with groupName label. + properties: + groupClusterSelector: + description: LabelSelector to select clusters subset + by label. + properties: + claimSelector: + description: ClaimSelector represents a selector + of ManagedClusters by clusterClaims in status + properties: + matchExpressions: + description: matchExpressions is a list of cluster + claim selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + labelSelector: + description: LabelSelector represents a selector + of ManagedClusters by label + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + type: object + groupName: + description: Group name to be added as label value to + the created placement Decisions labels with label + key cluster.open-cluster-management.io/decision-group-name + pattern: ^[a-zA-Z0-9][-A-Za-z0-9_.]{0,61}[a-zA-Z0-9]$ + type: string + required: + - groupClusterSelector + - groupName + type: object + type: array + type: object + type: object + numberOfClusters: + description: NumberOfClusters represents the desired number of ManagedClusters + to be selected which meet the placement requirements. 1) If not + specified, all ManagedClusters which meet the placement requirements + (including ClusterSets, and Predicates) will be selected; 2) Otherwise + if the nubmer of ManagedClusters meet the placement requirements + is larger than NumberOfClusters, a random subset with desired number + of ManagedClusters will be selected; 3) If the nubmer of ManagedClusters + meet the placement requirements is equal to NumberOfClusters, all + of them will be selected; 4) If the nubmer of ManagedClusters meet + the placement requirements is less than NumberOfClusters, all of + them will be selected, and the status of condition `PlacementConditionSatisfied` + will be set to false; + format: int32 + type: integer + predicates: + description: Predicates represent a slice of predicates to select + ManagedClusters. The predicates are ORed. + items: + description: ClusterPredicate represents a predicate to select ManagedClusters. + properties: + requiredClusterSelector: + description: RequiredClusterSelector represents a selector of + ManagedClusters by label and claim. If specified, 1) Any ManagedCluster, + which does not match the selector, should not be selected + by this ClusterPredicate; 2) If a selected ManagedCluster + (of this ClusterPredicate) ceases to match the selector (e.g. + due to an update) of any ClusterPredicate, it will be eventually + removed from the placement decisions; 3) If a ManagedCluster + (not selected previously) starts to match the selector, it + will either be selected or at least has a chance to be selected + (when NumberOfClusters is specified); + properties: + claimSelector: + description: ClaimSelector represents a selector of ManagedClusters + by clusterClaims in status + properties: + matchExpressions: + description: matchExpressions is a list of cluster claim + selector requirements. The requirements are ANDed. + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that + relates the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, + NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. + If the operator is In or NotIn, the values array + must be non-empty. If the operator is Exists + or DoesNotExist, the values array must be empty. + This array is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + labelSelector: + description: LabelSelector represents a selector of ManagedClusters + by label + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that + relates the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, + NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. + If the operator is In or NotIn, the values array + must be non-empty. If the operator is Exists + or DoesNotExist, the values array must be empty. + This array is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} pairs. + A single {key,value} in the matchLabels map is equivalent + to an element of matchExpressions, whose key field + is "key", the operator is "In", and the values array + contains only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + type: object + type: object + type: array + prioritizerPolicy: + description: PrioritizerPolicy defines the policy of the prioritizers. + If this field is unset, then default prioritizer mode and configurations + are used. Referring to PrioritizerPolicy to see more description + about Mode and Configurations. + properties: + configurations: + items: + description: PrioritizerConfig represents the configuration + of prioritizer + properties: + scoreCoordinate: + description: ScoreCoordinate represents the configuration + of the prioritizer and score source. + properties: + addOn: + description: When type is "AddOn", AddOn defines the + resource name and score name. + properties: + resourceName: + description: ResourceName defines the resource name + of the AddOnPlacementScore. The placement prioritizer + selects AddOnPlacementScore CR by this name. + type: string + scoreName: + description: ScoreName defines the score name inside + AddOnPlacementScore. AddOnPlacementScore contains + a list of score name and score value, ScoreName + specify the score to be used by the prioritizer. + type: string + required: + - resourceName + - scoreName + type: object + builtIn: + description: 'BuiltIn defines the name of a BuiltIn + prioritizer. Below are the valid BuiltIn prioritizer + names. 1) Balance: balance the decisions among the + clusters. 2) Steady: ensure the existing decision + is stabilized. 3) ResourceAllocatableCPU & ResourceAllocatableMemory: + sort clusters based on the allocatable. 4) Spread: + spread the workload evenly to topologies.' + type: string + type: + default: BuiltIn + description: Type defines the type of the prioritizer + score. Type is either "BuiltIn", "AddOn" or "", where + "" is "BuiltIn" by default. When the type is "BuiltIn", + need to specify a BuiltIn prioritizer name in BuiltIn. + When the type is "AddOn", need to configure the score + source in AddOn. + enum: + - BuiltIn + - AddOn + type: string + required: + - type + type: object + weight: + default: 1 + description: Weight defines the weight of the prioritizer + score. The value must be ranged in [-10,10]. Each prioritizer + will calculate an integer score of a cluster in the range + of [-100, 100]. The final score of a cluster will be sum(weight + * prioritizer_score). A higher weight indicates that the + prioritizer weights more in the cluster selection, while + 0 weight indicates that the prioritizer is disabled. A + negative weight indicates wants to select the last ones. + format: int32 + maximum: 10 + minimum: -10 + type: integer + required: + - scoreCoordinate + type: object + type: array + mode: + default: Additive + description: Mode is either Exact, Additive, "" where "" is Additive + by default. In Additive mode, any prioritizer not explicitly + enumerated is enabled in its default Configurations, in which + Steady and Balance prioritizers have the weight of 1 while other + prioritizers have the weight of 0. Additive doesn't require + configuring all prioritizers. The default Configurations may + change in the future, and additional prioritization will happen. + In Exact mode, any prioritizer not explicitly enumerated is + weighted as zero. Exact requires knowing the full set of prioritizers + you want, but avoids behavior changes between releases. + type: string + type: object + spreadPolicy: + description: SpreadPolicy defines how placement decisions should be + distributed among a set of ManagedClusters. + properties: + spreadConstraints: + description: SpreadConstraints defines how the placement decision + should be distributed among a set of ManagedClusters. The importance + of the SpreadConstraintsTerms follows the natural order of their + index in the slice. The scheduler first consider SpreadConstraintsTerms + with smaller index then those with larger index to distribute + the placement decision. + items: + description: SpreadConstraintsTerm defines a terminology to + spread placement decisions. + properties: + maxSkew: + default: 1 + description: MaxSkew represents the degree to which the + workload may be unevenly distributed. Skew is the maximum + difference between the number of selected ManagedClusters + in a topology and the global minimum. The global minimum + is the minimum number of selected ManagedClusters for + the topologies within the same TopologyKey. The minimum + possible value of MaxSkew is 1, and the default value + is 1. + format: int32 + minimum: 1 + type: integer + topologyKey: + description: TopologyKey is either a label key or a cluster + claim name of ManagedClusters. + 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 + topologyKeyType: + description: TopologyKeyType indicates the type of TopologyKey. + It could be Label or Claim. + enum: + - Label + - Claim + type: string + whenUnsatisfiable: + default: ScheduleAnyway + description: WhenUnsatisfiable represents the action of + the scheduler when MaxSkew cannot be satisfied. It could + be DoNotSchedule or ScheduleAnyway. The default value + is ScheduleAnyway. DoNotSchedule instructs the scheduler + not to schedule more ManagedClusters when MaxSkew is not + satisfied. ScheduleAnyway instructs the scheduler to keep + scheduling even if MaxSkew is not satisfied. + enum: + - DoNotSchedule + - ScheduleAnyway + type: string + required: + - topologyKey + - topologyKeyType + type: object + maxItems: 8 + type: array + type: object + tolerations: + description: Tolerations are applied to placements, and allow (but + do not require) the managed clusters with certain taints to be selected + by placements with matching tolerations. + items: + description: Toleration represents the toleration object that can + be attached to a placement. The placement this Toleration is attached + to tolerates any taint that matches the triple + using the matching operator . + properties: + effect: + description: Effect indicates the taint effect to match. Empty + means match all taint effects. When specified, allowed values + are NoSelect, PreferNoSelect and NoSelectIfNew. + enum: + - NoSelect + - PreferNoSelect + - NoSelectIfNew + type: string + key: + description: Key is the taint key that the toleration applies + to. Empty means match all taint keys. If the key is empty, + operator must be Exists; this combination means to match all + values and all keys. + 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 + operator: + default: Equal + description: Operator represents a key's relationship to the + value. Valid operators are Exists and Equal. Defaults to Equal. + Exists is equivalent to wildcard for value, so that a placement + can tolerate all taints of a particular category. + type: string + tolerationSeconds: + description: TolerationSeconds represents the period of time + the toleration (which must be of effect NoSelect/PreferNoSelect, + otherwise this field is ignored) tolerates the taint. The + default value is nil, which indicates it tolerates the taint + forever. The start time of counting the TolerationSeconds + should be the TimeAdded in Taint, not the cluster scheduled + time or TolerationSeconds added time. + format: int64 + type: integer + value: + description: Value is the taint value the toleration matches + to. If the operator is Exists, the value should be empty, + otherwise just a regular string. + maxLength: 1024 + type: string + type: object + type: array + type: object + status: + description: Status represents the current status of the Placement + properties: + conditions: + description: Conditions contains the different condition status for + this Placement. + 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, + \n 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 + decisionGroups: + description: List of decision groups determined by the placement and + DecisionStrategy. + items: + description: Present decision groups status based on the DecisionStrategy + definition. + properties: + clusterCount: + default: 0 + description: Total number of clusters in the decision group. + Clusters count is equal or less than the clusterPerDecisionGroups + defined in the decision strategy. + format: int32 + type: integer + decisionGroupIndex: + description: Present the decision group index. If there is no + decision strategy defined all placement decisions will be + in group index 0 + format: int32 + type: integer + decisionGroupName: + description: Decision group name that is defined in the DecisionStrategy's + DecisionGroup. + type: string + decisions: + description: List of placement decisions names associated with + the decision group + items: + type: string + type: array + type: object + type: array + numberOfSelectedClusters: + description: NumberOfSelectedClusters represents the number of selected + ManagedClusters + format: int32 + type: integer + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/charts/ace-ocm-addons/crds/work.open-cluster-management.io_manifestworkreplicasets.yaml b/charts/ace-ocm-addons/crds/work.open-cluster-management.io_manifestworkreplicasets.yaml new file mode 100644 index 000000000..4282980e7 --- /dev/null +++ b/charts/ace-ocm-addons/crds/work.open-cluster-management.io_manifestworkreplicasets.yaml @@ -0,0 +1,613 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: manifestworkreplicasets.work.open-cluster-management.io +spec: + group: work.open-cluster-management.io + names: + kind: ManifestWorkReplicaSet + listKind: ManifestWorkReplicaSetList + plural: manifestworkreplicasets + shortNames: + - mwrs + singular: manifestworkreplicaset + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Reason + jsonPath: .status.conditions[?(@.type=="PlacementVerified")].reason + name: Placement + type: string + - description: Configured + jsonPath: .status.conditions[?(@.type=="PlacementVerified")].status + name: Found + type: string + - description: Reason + jsonPath: .status.conditions[?(@.type=="ManifestworkApplied")].reason + name: ManifestWorks + type: string + - description: Applied + jsonPath: .status.conditions[?(@.type=="ManifestworkApplied")].status + name: Applied + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: ManifestWorkReplicaSet is the Schema for the ManifestWorkReplicaSet + API. This custom resource is able to apply ManifestWork using Placement + for 0..n ManagedCluster(in their namespaces). It will also remove the ManifestWork + custom resources when deleted. Lastly the specific ManifestWork custom resources + created per ManagedCluster namespace will be adjusted based on PlacementDecision + changes. + 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 reperesents the desired ManifestWork payload and Placement + reference to be reconciled + properties: + manifestWorkTemplate: + description: ManifestWorkTemplate is the ManifestWorkSpec that will + be used to generate a per-cluster ManifestWork + properties: + deleteOption: + description: DeleteOption represents deletion strategy when the + manifestwork is deleted. Foreground deletion strategy is applied + to all the resource in this manifestwork if it is not set. + properties: + propagationPolicy: + default: Foreground + description: propagationPolicy can be Foreground, Orphan or + SelectivelyOrphan SelectivelyOrphan should be rarely used. It + is provided for cases where particular resources is transfering + ownership from one ManifestWork to another or another management + unit. Setting this value will allow a flow like 1. create + manifestwork/2 to manage foo 2. update manifestwork/1 to + selectively orphan foo 3. remove foo from manifestwork/1 + without impacting continuity because manifestwork/2 adopts + it. + enum: + - Foreground + - Orphan + - SelectivelyOrphan + type: string + selectivelyOrphans: + description: selectivelyOrphan represents a list of resources + following orphan deletion stratecy + properties: + orphaningRules: + description: orphaningRules defines a slice of orphaningrule. + Each orphaningrule identifies a single resource included + in this manifestwork + items: + description: OrphaningRule identifies a single resource + included in this manifestwork to be orphaned + properties: + group: + description: Group is the API Group of the Kubernetes + resource, empty string indicates it is in core + group. + type: string + name: + description: Name is the name of the Kubernetes + resource. + type: string + namespace: + description: Name is the namespace of the Kubernetes + resource, empty string indicates it is a cluster + scoped resource. + type: string + resource: + description: Resource is the resource name of the + Kubernetes resource. + type: string + required: + - name + - resource + type: object + type: array + type: object + type: object + executor: + description: Executor is the configuration that makes the work + agent to perform some pre-request processing/checking. e.g. + the executor identity tells the work agent to check the executor + has sufficient permission to write the workloads to the local + managed cluster. Note that nil executor is still supported for + backward-compatibility which indicates that the work agent will + not perform any additional actions before applying resources. + properties: + subject: + description: Subject is the subject identity which the work + agent uses to talk to the local cluster when applying the + resources. + properties: + serviceAccount: + description: ServiceAccount is for identifying which service + account to use by the work agent. Only required if the + type is "ServiceAccount". + properties: + name: + description: Name is the name of the service account. + maxLength: 253 + minLength: 1 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*)$ + type: string + namespace: + description: Namespace is the namespace of the service + account. + maxLength: 253 + minLength: 1 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*)$ + type: string + required: + - name + - namespace + type: object + type: + description: 'Type is the type of the subject identity. + Supported types are: "ServiceAccount".' + enum: + - ServiceAccount + type: string + required: + - type + type: object + type: object + manifestConfigs: + description: ManifestConfigs represents the configurations of + manifests defined in workload field. + items: + description: ManifestConfigOption represents the configurations + of a manifest defined in workload field. + properties: + feedbackRules: + description: FeedbackRules defines what resource status + field should be returned. If it is not set or empty, no + feedback rules will be honored. + items: + properties: + jsonPaths: + description: JsonPaths defines the json path under + status field to be synced. + items: + properties: + name: + description: Name represents the alias name + for this field + type: string + path: + description: Path represents the json path of + the field under status. The path must point + to a field with single value in the type of + integer, bool or string. If the path points + to a non-existing field, no value will be + returned. If the path points to a structure, + map or slice, no value will be returned and + the status conddition of StatusFeedBackSynced + will be set as false. Ref to https://kubernetes.io/docs/reference/kubectl/jsonpath/ + on how to write a jsonPath. + type: string + version: + description: Version is the version of the Kubernetes + resource. If it is not specified, the resource + with the semantically latest version is used + to resolve the path. + type: string + required: + - name + - path + type: object + type: array + type: + description: Type defines the option of how status + can be returned. It can be jsonPaths or wellKnownStatus. + If the type is JSONPaths, user should specify the + jsonPaths field If the type is WellKnownStatus, + certain common fields of status defined by a rule + only for types in in k8s.io/api and open-cluster-management/api + will be reported, If these status fields do not + exist, no values will be reported. + enum: + - WellKnownStatus + - JSONPaths + type: string + required: + - type + type: object + type: array + resourceIdentifier: + description: ResourceIdentifier represents the group, resource, + name and namespace of a resoure. iff this refers to a + resource not created by this manifest work, the related + rules will not be executed. + properties: + group: + description: Group is the API Group of the Kubernetes + resource, empty string indicates it is in core group. + type: string + name: + description: Name is the name of the Kubernetes resource. + type: string + namespace: + description: Name is the namespace of the Kubernetes + resource, empty string indicates it is a cluster scoped + resource. + type: string + resource: + description: Resource is the resource name of the Kubernetes + resource. + type: string + required: + - name + - resource + type: object + updateStrategy: + description: UpdateStrategy defines the strategy to update + this manifest. UpdateStrategy is Update if it is not set. + properties: + serverSideApply: + description: serverSideApply defines the configuration + for server side apply. It is honored only when type + of updateStrategy is ServerSideApply + properties: + fieldManager: + default: work-agent + description: FieldManager is the manager to apply + the resource. It is work-agent by default, but + can be other name with work-agent as the prefix. + pattern: ^work-agent + type: string + force: + description: Force represents to force apply the + manifest. + type: boolean + type: object + type: + default: Update + description: type defines the strategy to update this + manifest, default value is Update. Update type means + to update resource by an update call. CreateOnly type + means do not update resource based on current manifest. + ServerSideApply type means to update resource using + server side apply with work-controller as the field + manager. If there is conflict, the related Applied + condition of manifest will be in the status of False + with the reason of ApplyConflict. + enum: + - Update + - CreateOnly + - ServerSideApply + type: string + required: + - type + type: object + required: + - resourceIdentifier + type: object + type: array + workload: + description: Workload represents the manifest workload to be deployed + on a managed cluster. + properties: + manifests: + description: Manifests represents a list of kuberenetes resources + to be deployed on a managed cluster. + items: + description: Manifest represents a resource to be deployed + on managed cluster. + type: object + x-kubernetes-embedded-resource: true + x-kubernetes-preserve-unknown-fields: true + type: array + type: object + type: object + placementRefs: + description: PacementRefs is a list of the names of the Placement + resource, from which a PlacementDecision will be found and used + to distribute the ManifestWork. + items: + description: localPlacementReference is the name of a Placement + resource in current namespace + properties: + name: + description: Name of the Placement resource in the current namespace + minLength: 1 + type: string + rolloutStrategy: + default: + all: + timeout: None + type: All + description: Rollout strategy to apply workload to the selected + clusters by Placement and DecisionStrategy. + properties: + all: + description: All define required fields for RolloutStrategy + type All + properties: + timeout: + default: None + description: Timeout define how long workload applier + controller will wait till workload reach successful + state in the cluster. Timeout default value is None + meaning the workload applier will not proceed apply + workload to other clusters if did not reach the successful + state. Timeout must be defined in [0-9h]|[0-9m]|[0-9s] + format examples; 2h , 90m , 360s + pattern: ^(([0-9])+[h|m|s])|None$ + type: string + type: object + progressive: + description: Progressive define required fields for RolloutStrategy + type Progressive + properties: + mandatoryDecisionGroups: + description: List of the decision groups names or indexes + to apply the workload first and fail if workload did + not reach successful state. GroupName or GroupIndex + must match with the decisionGroups defined in the + placement's decisionStrategy + items: + description: MandatoryDecisionGroup set the decision + group name or group index. GroupName is considered + first to select the decisionGroups then GroupIndex. + properties: + groupIndex: + description: GroupIndex of the decision group + should match the placementDecisions label value + with label key cluster.open-cluster-management.io/decision-group-index + format: int32 + type: integer + groupName: + description: GroupName of the decision group should + match the placementDecisions label value with + label key cluster.open-cluster-management.io/decision-group-name + type: string + type: object + type: array + maxConcurrency: + anyOf: + - type: integer + - type: string + description: MaxConcurrency is the max number of clusters + to deploy workload concurrently. The default value + for MaxConcurrency is determined from the clustersPerDecisionGroup + defined in the placement->DecisionStrategy. + pattern: ^((100|[0-9]{1,2})%|[0-9]+)$ + x-kubernetes-int-or-string: true + timeout: + default: None + description: Timeout define how long workload applier + controller will wait till workload reach successful + state in the cluster. Timeout default value is None + meaning the workload applier will not proceed apply + workload to other clusters if did not reach the successful + state. Timeout must be defined in [0-9h]|[0-9m]|[0-9s] + format examples; 2h , 90m , 360s + pattern: ^(([0-9])+[h|m|s])|None$ + type: string + type: object + progressivePerGroup: + description: ProgressivePerGroup define required fields + for RolloutStrategy type ProgressivePerGroup + properties: + mandatoryDecisionGroups: + description: List of the decision groups names or indexes + to apply the workload first and fail if workload did + not reach successful state. GroupName or GroupIndex + must match with the decisionGroups defined in the + placement's decisionStrategy + items: + description: MandatoryDecisionGroup set the decision + group name or group index. GroupName is considered + first to select the decisionGroups then GroupIndex. + properties: + groupIndex: + description: GroupIndex of the decision group + should match the placementDecisions label value + with label key cluster.open-cluster-management.io/decision-group-index + format: int32 + type: integer + groupName: + description: GroupName of the decision group should + match the placementDecisions label value with + label key cluster.open-cluster-management.io/decision-group-name + type: string + type: object + type: array + timeout: + default: None + description: Timeout define how long workload applier + controller will wait till workload reach successful + state in the cluster. Timeout default value is None + meaning the workload applier will not proceed apply + workload to other clusters if did not reach the successful + state. Timeout must be defined in [0-9h]|[0-9m]|[0-9s] + format examples; 2h , 90m , 360s + pattern: ^(([0-9])+[h|m|s])|None$ + type: string + type: object + type: + default: All + description: Rollout strategy Types are All, Progressive + and ProgressivePerGroup 1) All means apply the workload + to all clusters in the decision groups at once. 2) Progressive + means apply the workload to the selected clusters progressively + per cluster. The workload will not be applied to the next + cluster unless one of the current applied clusters reach + the successful state or timeout. 3) ProgressivePerGroup + means apply the workload to decisionGroup clusters progressively + per group. The workload will not be applied to the next + decisionGroup unless all clusters in the current group + reach the successful state or timeout. + enum: + - All + - Progressive + - ProgressivePerGroup + type: string + type: object + required: + - name + type: object + minItems: 1 + type: array + required: + - placementRefs + type: object + status: + description: Status represent the current status of Placing ManifestWork + resources + properties: + conditions: + description: 'Conditions contains the different condition statuses + for distrbution of ManifestWork resources Valid condition types + are: 1. AppliedManifestWorks represents ManifestWorks have been + distributed as per placement All, Partial, None, Problem 2. PlacementRefValid' + 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, + \n 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 + placementSummary: + description: PlacementRef Summary + items: + description: PlacementSummary provides info regards number of clusters + and clusterGroups selected by the placement refs. + properties: + availableDecisionGroups: + description: availableDecisionGroups shows number of decisionGroups + that have all clusters manifestWorks in available state regards + total number of decisionGroups. ex; 2/4 (2 out of 4) + type: string + name: + description: PlacementRef Name + type: string + summary: + description: Summary totals of resulting ManifestWorks for the + placement + properties: + Applied: + description: 'Applied is the number of ManifestWorks with + condition Applied: true' + type: integer + available: + description: 'Available is the number of ManifestWorks with + condition Available: true' + type: integer + degraded: + description: 'TODO: Degraded is the number of ManifestWorks + with condition Degraded: true' + type: integer + progressing: + description: 'TODO: Progressing is the number of ManifestWorks + with condition Progressing: true' + type: integer + total: + description: Total number of ManifestWorks managed by the + ManifestWorkReplicaSet + type: integer + type: object + type: object + type: array + summary: + description: Summary totals of resulting ManifestWorks for all placements + properties: + Applied: + description: 'Applied is the number of ManifestWorks with condition + Applied: true' + type: integer + available: + description: 'Available is the number of ManifestWorks with condition + Available: true' + type: integer + degraded: + description: 'TODO: Degraded is the number of ManifestWorks with + condition Degraded: true' + type: integer + progressing: + description: 'TODO: Progressing is the number of ManifestWorks + with condition Progressing: true' + type: integer + total: + description: Total number of ManifestWorks managed by the ManifestWorkReplicaSet + type: integer + type: object + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/charts/ace/crds/cloud.bytebuilders.dev_credentials.yaml b/charts/ace/crds/cloud.bytebuilders.dev_credentials.yaml index ae8e82993..481d3cec2 100644 --- a/charts/ace/crds/cloud.bytebuilders.dev_credentials.yaml +++ b/charts/ace/crds/cloud.bytebuilders.dev_credentials.yaml @@ -1,7 +1,6 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: - creationTimestamp: null labels: app.kubernetes.io/name: bytebuilders name: credentials.cloud.bytebuilders.dev diff --git a/charts/ace/crds/cluster.bytebuilders.dev_clusterauthinfotemplates.yaml b/charts/ace/crds/cluster.bytebuilders.dev_clusterauthinfotemplates.yaml index 271ecba73..167d556b4 100644 --- a/charts/ace/crds/cluster.bytebuilders.dev_clusterauthinfotemplates.yaml +++ b/charts/ace/crds/cluster.bytebuilders.dev_clusterauthinfotemplates.yaml @@ -1,7 +1,6 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: - creationTimestamp: null labels: app.kubernetes.io/name: bytebuilders name: clusterauthinfotemplates.cluster.bytebuilders.dev diff --git a/charts/ace/crds/cluster.bytebuilders.dev_clusterinfos.yaml b/charts/ace/crds/cluster.bytebuilders.dev_clusterinfos.yaml index bbc35ab66..170f105a8 100644 --- a/charts/ace/crds/cluster.bytebuilders.dev_clusterinfos.yaml +++ b/charts/ace/crds/cluster.bytebuilders.dev_clusterinfos.yaml @@ -1,7 +1,6 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: - creationTimestamp: null labels: app.kubernetes.io/name: bytebuilders name: clusterinfos.cluster.bytebuilders.dev diff --git a/charts/ace/crds/cluster.bytebuilders.dev_clusteruserauths.yaml b/charts/ace/crds/cluster.bytebuilders.dev_clusteruserauths.yaml index d9bb24ebe..c041a4998 100644 --- a/charts/ace/crds/cluster.bytebuilders.dev_clusteruserauths.yaml +++ b/charts/ace/crds/cluster.bytebuilders.dev_clusteruserauths.yaml @@ -1,7 +1,6 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: - creationTimestamp: null labels: app.kubernetes.io/name: bytebuilders name: clusteruserauths.cluster.bytebuilders.dev diff --git a/charts/ace/crds/external-dns.appscode.com_externaldns.yaml b/charts/ace/crds/external-dns.appscode.com_externaldns.yaml index b4fe71e91..89e4a7b31 100644 --- a/charts/ace/crds/external-dns.appscode.com_externaldns.yaml +++ b/charts/ace/crds/external-dns.appscode.com_externaldns.yaml @@ -1,7 +1,6 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: - creationTimestamp: null name: externaldns.external-dns.appscode.com spec: group: external-dns.appscode.com diff --git a/charts/ace/crds/products.x-helm.dev_plans.yaml b/charts/ace/crds/products.x-helm.dev_plans.yaml index 7feba646d..3ce094bfa 100644 --- a/charts/ace/crds/products.x-helm.dev_plans.yaml +++ b/charts/ace/crds/products.x-helm.dev_plans.yaml @@ -1,7 +1,6 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: - creationTimestamp: null name: plans.products.x-helm.dev spec: group: products.x-helm.dev diff --git a/charts/ace/crds/products.x-helm.dev_products.yaml b/charts/ace/crds/products.x-helm.dev_products.yaml index 5720c8904..4fbbbc0c5 100644 --- a/charts/ace/crds/products.x-helm.dev_products.yaml +++ b/charts/ace/crds/products.x-helm.dev_products.yaml @@ -1,7 +1,6 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: - creationTimestamp: null name: products.products.x-helm.dev spec: group: products.x-helm.dev diff --git a/charts/ace/crds/trickstercache.org_trickstercaches.yaml b/charts/ace/crds/trickstercache.org_trickstercaches.yaml index 243df3927..18cc93651 100644 --- a/charts/ace/crds/trickstercache.org_trickstercaches.yaml +++ b/charts/ace/crds/trickstercache.org_trickstercaches.yaml @@ -3,7 +3,6 @@ kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null name: trickstercaches.trickstercache.org spec: group: trickstercache.org diff --git a/charts/ace/crds/trickstercache.org_tricksters.yaml b/charts/ace/crds/trickstercache.org_tricksters.yaml index f03d88dda..7a3fda74f 100644 --- a/charts/ace/crds/trickstercache.org_tricksters.yaml +++ b/charts/ace/crds/trickstercache.org_tricksters.yaml @@ -3,7 +3,6 @@ kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null name: tricksters.trickstercache.org spec: group: trickstercache.org diff --git a/charts/capi-cluster-presets/crds/charts.x-helm.dev_clusterchartpresets.yaml b/charts/capi-cluster-presets/crds/charts.x-helm.dev_clusterchartpresets.yaml index 4e7a35892..f4d682e74 100644 --- a/charts/capi-cluster-presets/crds/charts.x-helm.dev_clusterchartpresets.yaml +++ b/charts/capi-cluster-presets/crds/charts.x-helm.dev_clusterchartpresets.yaml @@ -1,7 +1,6 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: - creationTimestamp: null name: clusterchartpresets.charts.x-helm.dev spec: group: charts.x-helm.dev diff --git a/charts/license-proxyserver/crds/monitoring.coreos.com_servicemonitors.yaml b/charts/license-proxyserver/crds/monitoring.coreos.com_servicemonitors.yaml index 8e34655d3..d199e3594 100644 --- a/charts/license-proxyserver/crds/monitoring.coreos.com_servicemonitors.yaml +++ b/charts/license-proxyserver/crds/monitoring.coreos.com_servicemonitors.yaml @@ -3,7 +3,6 @@ kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.9.2 - creationTimestamp: null name: servicemonitors.monitoring.coreos.com spec: group: monitoring.coreos.com diff --git a/charts/opscenter-features/crds/source.toolkit.fluxcd.io_helmrepositories.yaml b/charts/opscenter-features/crds/source.toolkit.fluxcd.io_helmrepositories.yaml index 8a9144edd..2b2974390 100644 --- a/charts/opscenter-features/crds/source.toolkit.fluxcd.io_helmrepositories.yaml +++ b/charts/opscenter-features/crds/source.toolkit.fluxcd.io_helmrepositories.yaml @@ -3,7 +3,6 @@ kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.8.0 - creationTimestamp: null name: helmrepositories.source.toolkit.fluxcd.io spec: group: source.toolkit.fluxcd.io diff --git a/charts/opscenter-features/crds/ui.k8s.appscode.com_features.yaml b/charts/opscenter-features/crds/ui.k8s.appscode.com_features.yaml index 32387a60d..cb786db92 100644 --- a/charts/opscenter-features/crds/ui.k8s.appscode.com_features.yaml +++ b/charts/opscenter-features/crds/ui.k8s.appscode.com_features.yaml @@ -1,7 +1,6 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: - creationTimestamp: null name: features.ui.k8s.appscode.com spec: group: ui.k8s.appscode.com diff --git a/charts/opscenter-features/crds/ui.k8s.appscode.com_featuresets.yaml b/charts/opscenter-features/crds/ui.k8s.appscode.com_featuresets.yaml index c7fde6bb7..bc865ccc8 100644 --- a/charts/opscenter-features/crds/ui.k8s.appscode.com_featuresets.yaml +++ b/charts/opscenter-features/crds/ui.k8s.appscode.com_featuresets.yaml @@ -1,7 +1,6 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: - creationTimestamp: null name: featuresets.ui.k8s.appscode.com spec: group: ui.k8s.appscode.com diff --git a/hack/scripts/import-crds.sh b/hack/scripts/import-crds.sh index b45f06687..b2d7c1456 100755 --- a/hack/scripts/import-crds.sh +++ b/hack/scripts/import-crds.sh @@ -20,6 +20,7 @@ FLUXCD_SOURCE_CONTROLLER=${FLUXCD_SOURCE_CONTROLLER:-v0.30.1} HELM_X_APIMACHINERY_TAG=${HELM_X_APIMACHINERY_TAG:-master} KMODULES_RESOURCE_METADATA_TAG=${KMODULES_RESOURCE_METADATA_TAG:-v0.12.1} KUBEOPS_EXTERNAL_DNS_OPERATOR=${KUBEOPS_EXTERNAL_DNS_OPERATOR:-v0.0.6} +OPEN_CLUSTER_MANAGEMENT_IO_API_TAG=${OPEN_CLUSTER_MANAGEMENT_IO_API_TAG:-v0.12.0} PROMETHEUS_OPERATOR_PROMETHEUS_OPERATOR=${PROMETHEUS_OPERATOR_PROMETHEUS_OPERATOR:-v0.59.1} crd-importer \ @@ -46,6 +47,12 @@ crd-importer \ --input=https://github.com/open-viz/trickster-config/raw/master/config/crd/bases/trickstercache.org_tricksters.yaml \ --out=./charts/ace/crds +crd-importer \ + --input=https://github.com/open-cluster-management-io/api/raw/${OPEN_CLUSTER_MANAGEMENT_IO_API_TAG}/cluster/v1/0000_00_clusters.open-cluster-management.io_managedclusters.crd.yaml \ + --input=https://github.com/open-cluster-management-io/api/raw/${OPEN_CLUSTER_MANAGEMENT_IO_API_TAG}/cluster/v1beta1/0000_02_clusters.open-cluster-management.io_placements.crd.yaml \ + --input=https://github.com/open-cluster-management-io/api/raw/${OPEN_CLUSTER_MANAGEMENT_IO_API_TAG}/work/v1alpha1/0000_00_work.open-cluster-management.io_manifestworkreplicasets.crd.yaml \ + --out=./charts/ace-ocm-addons/crds + crd-importer \ --input=https://github.com/x-helm/apimachinery/raw/${HELM_X_APIMACHINERY_TAG}/crds/charts.x-helm.dev_clusterchartpresets.yaml \ --out=./charts/capi-cluster-presets/crds