From 87330a7a985cc83e1dcce4bc638fb29fabe9c744 Mon Sep 17 00:00:00 2001 From: turbodeploy <109753337+turbodeploy@users.noreply.github.com> Date: Wed, 27 Nov 2024 17:27:55 -0500 Subject: [PATCH] kubeturbo-certified-8.14.3 bundle (#4827) Co-authored-by: turbodeploy --- ...turbo-certified.clusterserviceversion.yaml | 301 ++++++ .../kubeturbos.charts.helm.k8s.io.crd.yaml | 934 ++++++++++++++++++ .../8.14.30/metadata/annotations.yaml | 11 + 3 files changed, 1246 insertions(+) create mode 100644 operators/kubeturbo-certified/8.14.30/manifests/kubeturbo-certified.clusterserviceversion.yaml create mode 100644 operators/kubeturbo-certified/8.14.30/manifests/kubeturbos.charts.helm.k8s.io.crd.yaml create mode 100644 operators/kubeturbo-certified/8.14.30/metadata/annotations.yaml diff --git a/operators/kubeturbo-certified/8.14.30/manifests/kubeturbo-certified.clusterserviceversion.yaml b/operators/kubeturbo-certified/8.14.30/manifests/kubeturbo-certified.clusterserviceversion.yaml new file mode 100644 index 00000000000..4511816d2d7 --- /dev/null +++ b/operators/kubeturbo-certified/8.14.30/manifests/kubeturbo-certified.clusterserviceversion.yaml @@ -0,0 +1,301 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + annotations: + alm-examples: '[{"apiVersion":"charts.helm.k8s.io/v1","kind":"Kubeturbo","metadata":{"name":"kubeturbo-release"},"spec":{"serverMeta":{"turboServer":"https://Turbo_server_URL"},"targetConfig":{"targetName":"Cluster_Name"}}}]' + capabilities: Basic Install + categories: Monitoring + certified: 'false' + createdAt: '' + description: Turbonomic Workload Automation for Multicloud simultaneously optimizes + performance, compliance, and cost in real-time. Workloads are precisely resourced, + automatically, to perform while satisfying business constraints. + features.operators.openshift.io/cnf: 'false' + features.operators.openshift.io/cni: 'false' + features.operators.openshift.io/csi: 'false' + features.operators.openshift.io/disconnected: 'true' + features.operators.openshift.io/fips-compliant: 'false' + features.operators.openshift.io/proxy-aware: 'false' + features.operators.openshift.io/tls-profiles: 'false' + features.operators.openshift.io/token-auth-aws: 'false' + features.operators.openshift.io/token-auth-azure: 'false' + features.operators.openshift.io/token-auth-gcp: 'false' + operators.operatorframework.io/builder: operator-sdk-v1.34.1 + operators.operatorframework.io/project_layout: go.kubebuilder.io/v4 + repository: https://github.com/turbonomic/kubeturbo-deploy + support: Turbonomic, Inc. + olm.skipRange: '>=8.7.5 <8.14.30' + labels: + operatorframework.io/arch.amd64: supported + operatorframework.io/arch.arm64: supported + operatorframework.io/arch.ppc64le: supported + operatorframework.io/arch.s390x: supported + name: kubeturbo-operator.v8.14.30 + namespace: placeholder +spec: + apiservicedefinitions: {} + relatedImages: + - name: kubeturbo-operator + image: icr.io/cpopen/kubeturbo-operator@sha256:f97647f569cc40adf354ced89d907a5ec1950a7eb85f74c28984cf5479141172 + customresourcedefinitions: + owned: + - description: Turbonomic Workload Automation for Multicloud simultaneously optimizes + performance, compliance, and cost in real-time. Workloads are precisely resourced, + automatically, to perform while satisfying business constraints. + displayName: Kubeturbo Operator + kind: Kubeturbo + name: kubeturbos.charts.helm.k8s.io + version: v1 + - kind: Kubeturbo + name: kubeturbos.charts.helm.k8s.io + version: v1alpha1 + description: |- + ### Application Resource Optimization for Kubernetes + IBM Turbonomic AI-powered software that simultaneously optimizes performance, compliance, and cost in real time. + Turbonomic discovers and automates resource optimization for the complete application stack. Applications are continually resourced to perform while satisfying technical and business constraints. + + Turbonomic makes workloads smart — enabling them to self-manage and determines the specific actions that will drive continuous health: + + * Continuous placement for Pods (proactive rescheduling) + * Continuous scaling for applications and the underlying cluster. + + Turbonomic assures application performance by giving workloads the resources they need when they need them. + + ### How Does It Work? + Turbonomic uses a client agent called — KubeTurbo — that runs in your cluster to discover, monitor and optimize resource usage within your environment. + KubeTurbo runs together with the default Kubernetes scheduler and sends data back to the Turbonomic for analysis. + Turbonomic determines the right actions that drive continuous health for your workloads and your cluster. + + ### Get Started + Please follow the [Kubeturbo Documentation Page](https://www.ibm.com/docs/en/tarm/latest?topic=configuration-container-platform-targets) for all deployment options and an overview of typical use cases. + + ### Known Issues + In Kubeturbo Operator versions 8.9.5 and 8.9.6 we introduced changes to Cluster Role and Cluster Role Binding Resources that are created by the Operator. + Please refer to this [link](https://github.com/turbonomic/kubeturbo/wiki/Troubleshooting#changes-to-cluster-role-names-and-cluster-role-binding-names) if upgrading from an older version, and/or using Custom Roles. + displayName: Kubeturbo Operator + icon: + - base64data: iVBORw0KGgoAAAANSUhEUgAAAfQAAACzCAYAAAB//O7qAAAACXBIWXMAAC4jAAAuIwF4pT92AABD52lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzIgNzkuMTU5Mjg0LCAyMDE2LzA0LzE5LTEzOjEzOjQwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxMy0xMi0wNFQxNToxMTozNC0wNTowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDgtMTFUMTQ6MzI6NTUrMDM6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE2LTA4LTExVDE0OjMyOjU1KzAzOjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHBob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4KICAgICAgICAgICAgPHJkZjpCYWc+CiAgICAgICAgICAgICAgIDxyZGY6bGk+QTkxQjdEQ0MwNEMwQzdBOERGRDVDMTVGNDgwMzY3Njc8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaT51dWlkOjcxMzQxOTYxLTU5ODctZTE0Ny1iZjA3LTA2MmE5OTNiM2I3YTwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpPnhtcC5kaWQ6MDQ4MDExNzQwNzIwNjgxMTgwODM5RjI5RUMyOTAwODg8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QmFnPgogICAgICAgICA8L3Bob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDo1MzI1MGY1Ni05MzRhLTQ1N2MtYTEwMS0zZjY0MmNiZmQxOTY8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6MDQ4MDExNzQwNzIwNjgxMTgwODM5RjI5RUMyOTAwODg8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDowNDgwMTE3NDA3MjA2ODExODA4MzlGMjlFQzI5MDA4ODwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNyZWF0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDowNDgwMTE3NDA3MjA2ODExODA4MzlGMjlFQzI5MDA4ODwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxMy0xMi0wNFQxNToxMTozNC0wNTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6OTZDNDQxRTcwQjZDRTMxMTg3Q0ZCQjM3Mzg4MzY1MTA8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTMtMTItMjNUMTY6NTM6NTktMDU6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDpiYWFhNDExNC1jNjc5LTMzNDMtYjI5Ny1jZTc3Y2IwYTRlM2E8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDQtMDJUMTQ6Mjk6MzEtMDQ6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jb252ZXJ0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+ZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZzwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmRlcml2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+Y29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjM4ZjZlNDQ0LTFiZWMtYWQ0Zi1hZDUzLTQ3ODVjOTlhZjk4Mjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNC0wNC0wMlQxNDoyOTozMS0wNDowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NTMyNTBmNTYtOTM0YS00NTdjLWExMDEtM2Y2NDJjYmZkMTk2PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE2LTA4LTExVDE0OjMyOjU1KzAzOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChNYWNpbnRvc2gpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDx4bXBNTTpEZXJpdmVkRnJvbSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgIDxzdFJlZjppbnN0YW5jZUlEPnhtcC5paWQ6YmFhYTQxMTQtYzY3OS0zMzQzLWIyOTctY2U3N2NiMGE0ZTNhPC9zdFJlZjppbnN0YW5jZUlEPgogICAgICAgICAgICA8c3RSZWY6ZG9jdW1lbnRJRD54bXAuZGlkOjA0ODAxMTc0MDcyMDY4MTE4MDgzOUYyOUVDMjkwMDg4PC9zdFJlZjpkb2N1bWVudElEPgogICAgICAgICAgICA8c3RSZWY6b3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6MDQ4MDExNzQwNzIwNjgxMTgwODM5RjI5RUMyOTAwODg8L3N0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPC94bXBNTTpEZXJpdmVkRnJvbT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+MzAwMDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+MzAwMDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTAwPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjE3OTwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+aaFqSwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAkpElEQVR42uydd5hVxfnHP1vYBXZZehdQEK/CTQADKhhQAbFGsBFjosYWo97EHn9GY2JBE2ONN8YaW7CiiF1jwS4oinoELk16kc6ysOwuu78/ZjYusOXec87t38/z3Idl9572zsz5zjsz7zs5NTU1CCGEECK9yZUJhBBCCAm6EEIIISToQgghhJCgCyGEEEKCLoQQQkjQhRBCCCFBF0IIIYQEXQghhBASdCGEEEKCLoQQQggJuhBCCCEk6EIIIYSQoAshhBASdCGEEEJI0IUQQgghQRdCCCGEBF0IIYTIXPIBcnJyZAkhPBAMB/KBbkBXoAvQFmgDtAZygAKgGVBmDykDNtnPamAVsNwJRUplTSGSQ01NTVrff05NTY0EXYjohbsZMMB+fgT0A/YGegJ5PlxiLbAAmAt8bT9fOKHIWllfCAm6BF0I9wJeDPwUOBQ4BBgEFCbhVuYB04B3gXecUGSRSkcICboEXYjGRbwncAJwLDAcM1yeaswFXgZeBD50QpEdKjkhJOgSdCERDwc6A6cCPwcOTLPbXw08C0x0QpFPVZpCSNCFyDYRzwWOAM4HjsIuEk1zZgEPAY84och6lbIQEnQhMlnIi4GzgIuA3hn6mNuAx4C7nFBktkpdCAm6EJkk5G2Ai4HfAe2y5R0FTAZudEKRL1UL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 + mediatype: image/png + install: + spec: + permissions: + - rules: + - apiGroups: + - '' + - apps + - extensions + resources: + - nodes + - pods + - configmaps + - endpoints + - events + - deployments + - persistentvolumeclaims + - replicasets + - replicationcontrollers + - services + - secrets + - serviceaccounts + verbs: + - '*' + - apiGroups: + - '' + - apps + - extensions + - policy + resources: + - daemonsets + - endpoints + - limitranges + - namespaces + - persistentvolumes + - persistentvolumeclaims + - poddisruptionbudget + - resourcequotas + - services + - statefulsets + verbs: + - get + - list + - watch + - apiGroups: + - '' + resources: + - nodes/spec + - nodes/stats + verbs: + - get + - apiGroups: + - charts.helm.k8s.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create + - get + - list + - update + serviceAccountName: kubeturbo-operator + clusterPermissions: + - rules: + - verbs: + - '*' + apiGroups: + - '' + - apps + - extensions + resources: + - nodes + - pods + - configmaps + - endpoints + - events + - deployments + - persistentvolumeclaims + - replicasets + - replicationcontrollers + - services + - secrets + - serviceaccounts + - verbs: + - get + - list + - watch + apiGroups: + - '' + - apps + - extensions + - policy + resources: + - daemonsets + - endpoints + - limitranges + - namespaces + - persistentvolumes + - persistentvolumeclaims + - poddisruptionbudget + - resourcequotas + - services + - statefulsets + - verbs: + - get + apiGroups: + - '' + resources: + - nodes/spec + - nodes/stats + - verbs: + - '*' + apiGroups: + - charts.helm.k8s.io + resources: + - '*' + - verbs: + - '*' + apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterroles + - clusterrolebindings + - verbs: + - create + - get + - list + - update + apiGroups: + - coordination.k8s.io + resources: + - leases + serviceAccountName: kubeturbo-operator + deployments: + - labels: + app.kubernetes.io/component: manager + app.kubernetes.io/created-by: kubeturbo-deploy + app.kubernetes.io/instance: kubeturbo-operator + app.kubernetes.io/managed-by: kustomize + app.kubernetes.io/name: deployment + app.kubernetes.io/part-of: kubeturbo-deploy + name: kubeturbo-operator + name: kubeturbo-operator + spec: + replicas: 1 + selector: + matchLabels: + name: kubeturbo-operator + template: + metadata: + annotations: + kubectl.kubernetes.io/default-container: kubeturbo-operator + labels: + name: kubeturbo-operator + spec: + containers: + - args: + - --leader-elect + command: + - /manager + env: + - name: WATCH_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + image: icr.io/cpopen/kubeturbo-operator@sha256:f97647f569cc40adf354ced89d907a5ec1950a7eb85f74c28984cf5479141172 + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + name: kubeturbo-operator + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + limits: + cpu: 500m + memory: 128Mi + requests: + cpu: 10m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + securityContext: + runAsNonRoot: true + serviceAccountName: kubeturbo-operator + terminationGracePeriodSeconds: 10 + strategy: deployment + installModes: + - supported: true + type: OwnNamespace + - supported: true + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: false + type: AllNamespaces + links: + - name: Kubeturbo Documentation Page + url: https://www.ibm.com/docs/en/tarm/latest?topic=configuration-container-platform-targets + - name: Kubeturbo Operator + url: https://github.com/turbonomic/kubeturbo-deploy + - name: IBM Turbonomic Application Resource Management + url: https://www.ibm.com/products/turbonomic + maintainers: + - email: turbodeploy@turbonomic.com + name: turbodeploy + maturity: alpha + provider: + name: Turbonomic, Inc. + version: 8.14.30 diff --git a/operators/kubeturbo-certified/8.14.30/manifests/kubeturbos.charts.helm.k8s.io.crd.yaml b/operators/kubeturbo-certified/8.14.30/manifests/kubeturbos.charts.helm.k8s.io.crd.yaml new file mode 100644 index 00000000000..18ababd13b2 --- /dev/null +++ b/operators/kubeturbo-certified/8.14.30/manifests/kubeturbos.charts.helm.k8s.io.crd.yaml @@ -0,0 +1,934 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api-approved.kubernetes.io: https://github.com/operator-framework/operator-sdk/pull/2703 + controller-gen.kubebuilder.io/version: v0.15.0 + name: kubeturbos.charts.helm.k8s.io +spec: + group: charts.helm.k8s.io + names: + kind: Kubeturbo + listKind: KubeturboList + plural: kubeturbos + shortNames: + - kt + singular: kubeturbo + scope: Namespaced + versions: + - name: v1 + schema: + openAPIV3Schema: + description: Kubeturbo is the Schema for the kubeturbos API + 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: KubeturboSpec defines the desired state of Kubeturbo + properties: + HANodeConfig: + default: + nodeRoles: '"master"' + description: Create HA placement policy for Node to Hypervisor by + node role. Master is default + properties: + nodeRoles: + default: '"master"' + description: Node role names + type: string + type: object + annotationWhitelist: + default: + containerSpec: "" + namespace: "" + workloadController: "" + description: |- + The annotationWhitelist allows users to define regular expressions to allow kubeturbo to collect + matching annotations for the specified entity type. By default, no annotations are collected. + These regular expressions accept the RE2 syntax (except for \C) as defined here: https://github.com/google/re2/wiki/Syntax + properties: + containerSpec: + default: "" + type: string + namespace: + default: "" + type: string + workloadController: + default: "" + type: string + type: object + annotations: + additionalProperties: + type: string + default: + kubeturbo.io/controllable: "false" + type: object + args: + default: + logginglevel: 2 + description: Kubeturbo command line arguments + properties: + busyboxExcludeNodeLabels: + description: Do not run busybox on these nodes to discover the + cpu frequency with k8s 1.18 and later, default is either of + kubernetes.io/os=windows or beta.kubernetes.io/os=windows present + as node label + type: string + cleanupSccImpersonationResources: + default: true + description: Identify if cleanup the resources created for scc + impersonation, default is true + type: boolean + discoveryIntervalSec: + default: 600 + description: The discovery interval in seconds + type: integer + discoverySampleIntervalSec: + default: 60 + description: The discovery interval in seconds to collect additional + resource usage data samples from kubelet. This should be no + smaller than 10 seconds. + type: integer + discoverySamples: + default: 10 + description: The number of resource usage data samples to be collected + from kubelet in each full discovery cycle. This should be no + larger than 60. + type: integer + discoveryTimeoutSec: + default: 180 + description: The discovery timeout in seconds for each discovery + worker. Default value is 180 seconds + type: integer + discoveryWorkers: + default: 10 + description: The number of discovery workers. Default is 10 + type: integer + failVolumePodMoves: + description: Allow kubeturbo to reschedule pods with volumes attached + type: boolean + garbageCollectionIntervalMin: + default: 10 + description: The garbage collection interval in minutes for potentially + leaked pods due to failed actions and kubeturbo restarts. Default + value is 10 minutes + type: integer + gitCommitMode: + description: The commit mode that should be used for git action + executions with ArgoCD Integration. One of request or direct. + Defaults to direct. + type: string + gitEmail: + description: The email to be used to push changes to git with + ArgoCD integration + type: string + gitSecretName: + description: The name of the secret which holds the git credentials + to be used with ArgoCD integration + type: string + gitSecretNamespace: + description: The namespace of the secret which holds the git credentials + to be used with ArgoCD integration + type: string + gitUsername: + description: The username to be used to push changes to git with + ArgoCD integration + type: string + kubelethttps: + default: true + description: Identify if kubelet requires https + type: boolean + kubeletport: + default: 10250 + description: Identify kubelet port + type: integer + logginglevel: + default: 2 + description: Define logging level, default is info = 2 + type: integer + pre16k8sVersion: + default: false + type: boolean + readinessRetryThreshold: + format: int32 + type: integer + satelliteLocationProvider: + description: The IBM cloud satellite location provider, it only + support azure as of today + type: string + sccsupport: + description: Allow kubeturbo to execute actions in OCP + type: string + skipCreatingSccImpersonationResources: + default: false + description: Skip creating the resources for scc impersonation + type: boolean + stitchuuid: + default: true + description: Identify if using uuid or ip for stitching + type: boolean + type: object + daemonPodDetectors: + default: {} + description: |- + You can use this configuration to define how daemon pods are identified. + Note if you do not enable daemonPodDetectors, the default is to identify all pods running as kind = daemonSet + Any entry for daemonPodDetectors would overwrite default. Recommend you do not use this parameter. + properties: + namespacePatterns: + default: [] + items: + type: string + type: array + podNamePatterns: + default: [] + items: + type: string + type: array + type: object + discovery: + default: + chunkSendDelayMillis: 0 + numObjectsPerChunk: 5000 + description: Discovery-related configurations + properties: + chunkSendDelayMillis: + default: 0 + description: time delay (in milliseconds) between transmissions + of chunked discovery data + format: int32 + type: integer + numObjectsPerChunk: + default: 5000 + description: Desired size (in number of DTOs) of discovery data + chunks (default = 5,000) + format: int32 + type: integer + type: object + exclusionDetectors: + description: Identity operator-controlled workloads by name or namespace + using regular expressions + properties: + operatorControlledNamespacePatterns: + description: A list of regular expressions representing namespaces + containing operator-controlled Workload Controllers. Workload + Controllers deployed within the matching namespaces will not + have actions generated against them. + items: + type: string + type: array + operatorControlledWorkloadsPatterns: + description: A list of regular expressions representing operator-controlled + Workload Controllers. Workload Controllers that match the supplied + expression will not have actions generated against them. + items: + type: string + type: array + type: object + featureGates: + additionalProperties: + type: boolean + description: Enable or disable features + type: object + image: + default: + pullPolicy: IfNotPresent + repository: icr.io/cpopen/turbonomic/kubeturbo + description: Kubeturbo image details for deployments outside of RH + Operator Hub + properties: + busyboxRepository: + description: Busybox repository. default is busybox. This is overridden + by cpufreqgetterRepository + type: string + cpufreqgetterRepository: + description: Repository used to get node cpufrequency. + type: string + imagePullSecret: + description: Define the secret used to authenticate to the container + image registry + type: string + pullPolicy: + default: IfNotPresent + description: Define pull policy + type: string + repository: + default: icr.io/cpopen/turbonomic/kubeturbo + description: Container repository + type: string + tag: + description: Kubeturbo container image tag + type: string + type: object + logging: + default: + level: 2 + description: Optional logging level configuration. Changing this value + does not require restart of Kubeturbo but takes about 1 minute to + take effect + properties: + level: + default: 2 + description: Define logging level + type: integer + type: object + nodePoolSize: + default: + max: 1000 + min: 1 + description: Optional node pool configuration. Changing this value + does not require restart of Kubeturbo but takes about 1 minute to + take effect + properties: + max: + default: 1000 + description: maximum number of nodes allowed in the node pool + type: integer + min: + default: 1 + description: minimum number of nodes allowed in the node pool + type: integer + type: object + ormOwners: + description: Cluster Role rules for ORM owners. It's required when + using ORM with ClusterRole 'turbo-cluster-admin'. It's recommended + to use ORM with ClusterRole 'cluster-admin' + properties: + apiGroup: + description: API group for ORM owners + items: + type: string + type: array + resources: + description: resources for ORM owners + items: + type: string + type: array + type: object + replicaCount: + default: 1 + description: Kubeturbo replicaCount + format: int32 + type: integer + resources: + default: {} + description: Kubeturbo resource configuration + properties: + limits: + 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 + type: object + requests: + 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 + type: object + type: object + restAPIConfig: + default: + turbonomicCredentialsSecretName: turbonomic-credentials + description: Credentials to register probe with Turbo Server + properties: + opsManagerPassword: + description: Turbo admin user password + type: string + opsManagerUserName: + description: Turbo admin user id + type: string + turbonomicCredentialsSecretName: + default: turbonomic-credentials + description: Name of k8s secret that contains the turbo credentials + type: string + type: object + roleBinding: + default: turbo-all-binding + description: |- + The name of cluster role binding. Default is turbo-all-binding. If role binding is updated from an existing kubeturbo instance, + the operator will not delete the existing role binding in the clsuter. Therefore, the user may want to manually delete the old + clusterrolebinding from the cluster so that the service account is no longer tied to the previous role binding. + type: string + roleName: + default: cluster-admin + description: |- + Specify 'turbo-cluster-reader' or 'turbo-cluster-admin' as role name instead of the default using + the 'cluster-admin' role. A cluster role with this name will be created during deployment + If using a role name other than the pre-defined role names, cluster role will not be created. This role should be + existing in the cluster and should have the necessary permissions required for kubeturbo to work accurately. + pattern: ^[a-z0-9](?:[-a-z0-9]*[a-z0-9])?(?::[a-z0-9](?:[-a-z0-9]*[a-z0-9])?)*$ + type: string + sdkProtocolConfig: + default: + registrationTimeoutSec: 300 + restartOnRegistrationTimeout: true + description: Configurations to register probe with Turbo Server + properties: + registrationTimeoutSec: + default: 300 + description: Time in seconds to wait for registration response + from the Turbo Server + type: integer + restartOnRegistrationTimeout: + default: true + description: Restart probe container on registration timeout + type: boolean + type: object + serverMeta: + default: + turboServer: https://Turbo_server_URL + description: Configuration for Turbo Server + properties: + proxy: + description: Proxy server address + type: string + turboServer: + default: https://Turbo_server_URL + description: URL for Turbo Server endpoint + type: string + version: + description: Turbo Server major version + type: string + type: object + serviceAccountName: + default: turbo-user + description: The name of the service account name. Default is turbo-user + type: string + systemWorkloadDetectors: + default: + namespacePatterns: + - kube-.* + - openshift-.* + - cattle.* + description: Flag system workloads such as those defined in kube-system, + openshift-system, etc. Kubeturbo will not generate actions for workloads + that match the supplied patterns + properties: + namespacePatterns: + default: + - kube-.* + - openshift-.* + - cattle.* + description: A list of regular expressions that match the namespace + names for system workloads + items: + type: string + type: array + type: object + targetConfig: + description: Optional target configuration + properties: + targetName: + type: string + type: object + wiremock: + default: + enabled: false + url: wiremock:8080 + description: WireMock mode configuration + properties: + enabled: + default: false + description: Enable WireMock mode + type: boolean + url: + default: wiremock:8080 + description: WireMock service URL + type: string + type: object + type: object + status: + description: KubeturboStatus defines the observed state of Kubeturbo + properties: + configHash: + description: Hash of the constructed turbo.config file + type: string + lastUpdatedTimestamp: + description: Timestamp of the last sync up + type: string + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} + - name: v1alpha1 + schema: + openAPIV3Schema: + description: Kubeturbo is the Schema for the kubeturbos API + 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: KubeturboSpec defines the desired state of Kubeturbo + properties: + HANodeConfig: + default: + nodeRoles: '"master"' + description: Create HA placement policy for Node to Hypervisor by + node role. Master is default + properties: + nodeRoles: + default: '"master"' + description: Node role names + type: string + type: object + annotationWhitelist: + default: + containerSpec: "" + namespace: "" + workloadController: "" + description: |- + The annotationWhitelist allows users to define regular expressions to allow kubeturbo to collect + matching annotations for the specified entity type. By default, no annotations are collected. + These regular expressions accept the RE2 syntax (except for \C) as defined here: https://github.com/google/re2/wiki/Syntax + properties: + containerSpec: + default: "" + type: string + namespace: + default: "" + type: string + workloadController: + default: "" + type: string + type: object + annotations: + additionalProperties: + type: string + default: + kubeturbo.io/controllable: "false" + type: object + args: + default: + logginglevel: 2 + description: Kubeturbo command line arguments + properties: + busyboxExcludeNodeLabels: + description: Do not run busybox on these nodes to discover the + cpu frequency with k8s 1.18 and later, default is either of + kubernetes.io/os=windows or beta.kubernetes.io/os=windows present + as node label + type: string + cleanupSccImpersonationResources: + default: true + description: Identify if cleanup the resources created for scc + impersonation, default is true + type: boolean + discoveryIntervalSec: + default: 600 + description: The discovery interval in seconds + type: integer + discoverySampleIntervalSec: + default: 60 + description: The discovery interval in seconds to collect additional + resource usage data samples from kubelet. This should be no + smaller than 10 seconds. + type: integer + discoverySamples: + default: 10 + description: The number of resource usage data samples to be collected + from kubelet in each full discovery cycle. This should be no + larger than 60. + type: integer + discoveryTimeoutSec: + default: 180 + description: The discovery timeout in seconds for each discovery + worker. Default value is 180 seconds + type: integer + discoveryWorkers: + default: 10 + description: The number of discovery workers. Default is 10 + type: integer + failVolumePodMoves: + description: Allow kubeturbo to reschedule pods with volumes attached + type: boolean + garbageCollectionIntervalMin: + default: 10 + description: The garbage collection interval in minutes for potentially + leaked pods due to failed actions and kubeturbo restarts. Default + value is 10 minutes + type: integer + gitCommitMode: + description: The commit mode that should be used for git action + executions with ArgoCD Integration. One of request or direct. + Defaults to direct. + type: string + gitEmail: + description: The email to be used to push changes to git with + ArgoCD integration + type: string + gitSecretName: + description: The name of the secret which holds the git credentials + to be used with ArgoCD integration + type: string + gitSecretNamespace: + description: The namespace of the secret which holds the git credentials + to be used with ArgoCD integration + type: string + gitUsername: + description: The username to be used to push changes to git with + ArgoCD integration + type: string + kubelethttps: + default: true + description: Identify if kubelet requires https + type: boolean + kubeletport: + default: 10250 + description: Identify kubelet port + type: integer + logginglevel: + default: 2 + description: Define logging level, default is info = 2 + type: integer + pre16k8sVersion: + default: false + type: boolean + readinessRetryThreshold: + format: int32 + type: integer + satelliteLocationProvider: + description: The IBM cloud satellite location provider, it only + support azure as of today + type: string + sccsupport: + description: Allow kubeturbo to execute actions in OCP + type: string + skipCreatingSccImpersonationResources: + default: false + description: Skip creating the resources for scc impersonation + type: boolean + stitchuuid: + default: true + description: Identify if using uuid or ip for stitching + type: boolean + type: object + daemonPodDetectors: + default: {} + description: |- + You can use this configuration to define how daemon pods are identified. + Note if you do not enable daemonPodDetectors, the default is to identify all pods running as kind = daemonSet + Any entry for daemonPodDetectors would overwrite default. Recommend you do not use this parameter. + properties: + namespacePatterns: + default: [] + items: + type: string + type: array + podNamePatterns: + default: [] + items: + type: string + type: array + type: object + discovery: + default: + chunkSendDelayMillis: 0 + numObjectsPerChunk: 5000 + description: Discovery-related configurations + properties: + chunkSendDelayMillis: + default: 0 + description: time delay (in milliseconds) between transmissions + of chunked discovery data + format: int32 + type: integer + numObjectsPerChunk: + default: 5000 + description: Desired size (in number of DTOs) of discovery data + chunks (default = 5,000) + format: int32 + type: integer + type: object + exclusionDetectors: + description: Identity operator-controlled workloads by name or namespace + using regular expressions + properties: + operatorControlledNamespacePatterns: + description: A list of regular expressions representing namespaces + containing operator-controlled Workload Controllers. Workload + Controllers deployed within the matching namespaces will not + have actions generated against them. + items: + type: string + type: array + operatorControlledWorkloadsPatterns: + description: A list of regular expressions representing operator-controlled + Workload Controllers. Workload Controllers that match the supplied + expression will not have actions generated against them. + items: + type: string + type: array + type: object + featureGates: + additionalProperties: + type: boolean + description: Enable or disable features + type: object + image: + default: + pullPolicy: IfNotPresent + repository: icr.io/cpopen/turbonomic/kubeturbo + description: Kubeturbo image details for deployments outside of RH + Operator Hub + properties: + busyboxRepository: + description: Busybox repository. default is busybox. This is overridden + by cpufreqgetterRepository + type: string + cpufreqgetterRepository: + description: Repository used to get node cpufrequency. + type: string + imagePullSecret: + description: Define the secret used to authenticate to the container + image registry + type: string + pullPolicy: + default: IfNotPresent + description: Define pull policy + type: string + repository: + default: icr.io/cpopen/turbonomic/kubeturbo + description: Container repository + type: string + tag: + description: Kubeturbo container image tag + type: string + type: object + logging: + default: + level: 2 + description: Optional logging level configuration. Changing this value + does not require restart of Kubeturbo but takes about 1 minute to + take effect + properties: + level: + default: 2 + description: Define logging level + type: integer + type: object + nodePoolSize: + default: + max: 1000 + min: 1 + description: Optional node pool configuration. Changing this value + does not require restart of Kubeturbo but takes about 1 minute to + take effect + properties: + max: + default: 1000 + description: maximum number of nodes allowed in the node pool + type: integer + min: + default: 1 + description: minimum number of nodes allowed in the node pool + type: integer + type: object + ormOwners: + description: Cluster Role rules for ORM owners. It's required when + using ORM with ClusterRole 'turbo-cluster-admin'. It's recommended + to use ORM with ClusterRole 'cluster-admin' + properties: + apiGroup: + description: API group for ORM owners + items: + type: string + type: array + resources: + description: resources for ORM owners + items: + type: string + type: array + type: object + replicaCount: + default: 1 + description: Kubeturbo replicaCount + format: int32 + type: integer + resources: + default: {} + description: Kubeturbo resource configuration + properties: + limits: + 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 + type: object + requests: + 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 + type: object + type: object + restAPIConfig: + default: + turbonomicCredentialsSecretName: turbonomic-credentials + description: Credentials to register probe with Turbo Server + properties: + opsManagerPassword: + description: Turbo admin user password + type: string + opsManagerUserName: + description: Turbo admin user id + type: string + turbonomicCredentialsSecretName: + default: turbonomic-credentials + description: Name of k8s secret that contains the turbo credentials + type: string + type: object + roleBinding: + default: turbo-all-binding + description: |- + The name of cluster role binding. Default is turbo-all-binding. If role binding is updated from an existing kubeturbo instance, + the operator will not delete the existing role binding in the clsuter. Therefore, the user may want to manually delete the old + clusterrolebinding from the cluster so that the service account is no longer tied to the previous role binding. + type: string + roleName: + default: cluster-admin + description: |- + Specify 'turbo-cluster-reader' or 'turbo-cluster-admin' as role name instead of the default using + the 'cluster-admin' role. A cluster role with this name will be created during deployment + If using a role name other than the pre-defined role names, cluster role will not be created. This role should be + existing in the cluster and should have the necessary permissions required for kubeturbo to work accurately. + pattern: ^[a-z0-9](?:[-a-z0-9]*[a-z0-9])?(?::[a-z0-9](?:[-a-z0-9]*[a-z0-9])?)*$ + type: string + sdkProtocolConfig: + default: + registrationTimeoutSec: 300 + restartOnRegistrationTimeout: true + description: Configurations to register probe with Turbo Server + properties: + registrationTimeoutSec: + default: 300 + description: Time in seconds to wait for registration response + from the Turbo Server + type: integer + restartOnRegistrationTimeout: + default: true + description: Restart probe container on registration timeout + type: boolean + type: object + serverMeta: + default: + turboServer: https://Turbo_server_URL + description: Configuration for Turbo Server + properties: + proxy: + description: Proxy server address + type: string + turboServer: + default: https://Turbo_server_URL + description: URL for Turbo Server endpoint + type: string + version: + description: Turbo Server major version + type: string + type: object + serviceAccountName: + default: turbo-user + description: The name of the service account name. Default is turbo-user + type: string + systemWorkloadDetectors: + default: + namespacePatterns: + - kube-.* + - openshift-.* + - cattle.* + description: Flag system workloads such as those defined in kube-system, + openshift-system, etc. Kubeturbo will not generate actions for workloads + that match the supplied patterns + properties: + namespacePatterns: + default: + - kube-.* + - openshift-.* + - cattle.* + description: A list of regular expressions that match the namespace + names for system workloads + items: + type: string + type: array + type: object + targetConfig: + description: Optional target configuration + properties: + targetName: + type: string + type: object + wiremock: + default: + enabled: false + url: wiremock:8080 + description: WireMock mode configuration + properties: + enabled: + default: false + description: Enable WireMock mode + type: boolean + url: + default: wiremock:8080 + description: WireMock service URL + type: string + type: object + type: object + status: + description: KubeturboStatus defines the observed state of Kubeturbo + properties: + configHash: + description: Hash of the constructed turbo.config file + type: string + lastUpdatedTimestamp: + description: Timestamp of the last sync up + type: string + type: object + required: + - spec + type: object + served: true + storage: false + subresources: + status: {} diff --git a/operators/kubeturbo-certified/8.14.30/metadata/annotations.yaml b/operators/kubeturbo-certified/8.14.30/metadata/annotations.yaml new file mode 100644 index 00000000000..36d6279ec4d --- /dev/null +++ b/operators/kubeturbo-certified/8.14.30/metadata/annotations.yaml @@ -0,0 +1,11 @@ +annotations: + operators.operatorframework.io.bundle.mediatype.v1: registry+v1 + operators.operatorframework.io.bundle.manifests.v1: manifests/ + operators.operatorframework.io.bundle.metadata.v1: metadata/ + operators.operatorframework.io.bundle.package.v1: kubeturbo-certified + operators.operatorframework.io.bundle.channels.v1: stable + operators.operatorframework.io.bundle.channel.default.v1: stable + operators.operatorframework.io.metrics.builder: operator-sdk-v1.34.1 + operators.operatorframework.io.metrics.mediatype.v1: metrics+v1 + operators.operatorframework.io.metrics.project_layout: go.kubebuilder.io/v4 + com.redhat.openshift.versions: v4.9