From 33f5fa1eb402f00c4b09349c7f70d8d6b8a1e5a2 Mon Sep 17 00:00:00 2001 From: doodgeMatvey Date: Thu, 7 Dec 2023 17:34:09 +0200 Subject: [PATCH] operator helm for v0.1.3 release version was implemented --- charts/operator/Chart.yaml | 4 +- ...ces.instaclustr.com_awsencryptionkeys.yaml | 2 + ...ustr.com_awsendpointserviceprincipals.yaml | 3 + ...resources.instaclustr.com_nodereloads.yaml | 27 ++++ ...instaclustr.com_opensearchegressrules.yaml | 60 +++++++ .../clusters.instaclustr.com_cadences.yaml | 67 +++++++- .../clusters.instaclustr.com_cassandras.yaml | 107 +++++++++++-- ...lusters.instaclustr.com_kafkaconnects.yaml | 58 ++++++- .../crds/clusters.instaclustr.com_kafkas.yaml | 80 +++++++++- ...clusters.instaclustr.com_opensearches.yaml | 151 ++++++++++++++---- .../clusters.instaclustr.com_postgresqls.yaml | 99 ++++++++++-- .../crds/clusters.instaclustr.com_redis.yaml | 112 +++++++++++-- .../clusters.instaclustr.com_zookeepers.yaml | 58 ++++++- ...management.instaclustr.com_kafkausers.yaml | 18 +-- .../operator-webhook-with-certmanager.yaml | 80 ++++++++++ charts/operator/values.yaml | 28 +++- docs/operator-0.1.7.tgz | Bin 0 -> 18720 bytes index.yaml | 12 +- 18 files changed, 858 insertions(+), 108 deletions(-) create mode 100644 charts/operator/crds/clusterresources.instaclustr.com_opensearchegressrules.yaml create mode 100644 docs/operator-0.1.7.tgz diff --git a/charts/operator/Chart.yaml b/charts/operator/Chart.yaml index 13cd131..cf9dfad 100644 --- a/charts/operator/Chart.yaml +++ b/charts/operator/Chart.yaml @@ -15,10 +15,10 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.6 +version: 0.1.7 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "0.1.2" +appVersion: "0.1.3" diff --git a/charts/operator/crds/clusterresources.instaclustr.com_awsencryptionkeys.yaml b/charts/operator/crds/clusterresources.instaclustr.com_awsencryptionkeys.yaml index 7814990..5a578a2 100644 --- a/charts/operator/crds/clusterresources.instaclustr.com_awsencryptionkeys.yaml +++ b/charts/operator/crds/clusterresources.instaclustr.com_awsencryptionkeys.yaml @@ -52,6 +52,8 @@ spec: type: string inUse: type: boolean + state: + type: string type: object type: object served: true diff --git a/charts/operator/crds/clusterresources.instaclustr.com_awsendpointserviceprincipals.yaml b/charts/operator/crds/clusterresources.instaclustr.com_awsendpointserviceprincipals.yaml index dc93be7..7c7ea28 100644 --- a/charts/operator/crds/clusterresources.instaclustr.com_awsendpointserviceprincipals.yaml +++ b/charts/operator/crds/clusterresources.instaclustr.com_awsendpointserviceprincipals.yaml @@ -60,6 +60,9 @@ spec: id: description: The Instaclustr ID of the IAM Principal ARN type: string + state: + description: State describe current state of the resource + type: string type: object type: object served: true diff --git a/charts/operator/crds/clusterresources.instaclustr.com_nodereloads.yaml b/charts/operator/crds/clusterresources.instaclustr.com_nodereloads.yaml index 49e44db..141679c 100644 --- a/charts/operator/crds/clusterresources.instaclustr.com_nodereloads.yaml +++ b/charts/operator/crds/clusterresources.instaclustr.com_nodereloads.yaml @@ -50,6 +50,15 @@ spec: status: description: NodeReloadStatus defines the observed state of NodeReload properties: + completedNodes: + items: + properties: + nodeID: + type: string + required: + - nodeID + type: object + type: array currentOperationStatus: properties: message: @@ -68,6 +77,15 @@ spec: - timeCreated - timeModified type: object + failedNodes: + items: + properties: + nodeID: + type: string + required: + - nodeID + type: object + type: array nodeInProgress: properties: nodeID: @@ -75,6 +93,15 @@ spec: required: - nodeID type: object + pendingNodes: + items: + properties: + nodeID: + type: string + required: + - nodeID + type: object + type: array type: object type: object served: true diff --git a/charts/operator/crds/clusterresources.instaclustr.com_opensearchegressrules.yaml b/charts/operator/crds/clusterresources.instaclustr.com_opensearchegressrules.yaml new file mode 100644 index 0000000..323c220 --- /dev/null +++ b/charts/operator/crds/clusterresources.instaclustr.com_opensearchegressrules.yaml @@ -0,0 +1,60 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.9.2 + creationTimestamp: null + name: opensearchegressrules.clusterresources.instaclustr.com +spec: + group: clusterresources.instaclustr.com + names: + kind: OpenSearchEgressRules + listKind: OpenSearchEgressRulesList + plural: opensearchegressrules + singular: opensearchegressrules + scope: Namespaced + versions: + - name: v1beta1 + schema: + openAPIV3Schema: + description: OpenSearchEgressRules is the Schema for the opensearchegressrules + 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: + properties: + clusterId: + type: string + openSearchBindingId: + type: string + source: + type: string + type: + type: string + required: + - clusterId + - openSearchBindingId + - source + type: object + status: + properties: + id: + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/charts/operator/crds/clusters.instaclustr.com_cadences.yaml b/charts/operator/crds/clusters.instaclustr.com_cadences.yaml index 12bfbb5..1fd0ba4 100644 --- a/charts/operator/crds/clusters.instaclustr.com_cadences.yaml +++ b/charts/operator/crds/clusters.instaclustr.com_cadences.yaml @@ -197,6 +197,15 @@ spec: type: boolean privateNetworkCluster: type: boolean + resizeSettings: + items: + properties: + concurrency: + type: integer + notifySupportContacts: + type: boolean + type: object + type: array sharedProvisioning: items: properties: @@ -340,6 +349,60 @@ spec: - advertisedHostname type: object type: array + resizeOperations: + items: + properties: + completed: + description: Timestamp of the completion of the operation + type: string + concurrentResizes: + description: Number of nodes that can be concurrently + resized at a given time + type: integer + created: + description: Timestamp of the creation of the operation + type: string + id: + description: ID of the operation + type: string + instaclustrSupportAlerted: + description: Timestamp of when Instaclustr Support has + been alerted to the resize operation. + type: string + newNodeSize: + description: New size of the node + type: string + nodePurpose: + description: Purpose of the node + type: string + replaceOperations: + description: Replace operations + items: + properties: + created: + description: Timestamp of the creation of the node + replacement operation + type: string + id: + description: ID of the node replacement operation + type: string + newNodeId: + description: ID of the new node in the replacement + operation + type: string + nodeId: + description: ID of the node being replaced + type: string + status: + description: Status of the node replacement operation + type: string + type: object + type: array + status: + description: Status of the operation + type: string + type: object + type: array status: type: string type: object @@ -430,10 +493,6 @@ spec: - isFinalized type: object type: array - required: - - inProgress - - past - - upcoming type: object type: array options: diff --git a/charts/operator/crds/clusters.instaclustr.com_cassandras.yaml b/charts/operator/crds/clusters.instaclustr.com_cassandras.yaml index 577e547..b92d77a 100644 --- a/charts/operator/crds/clusters.instaclustr.com_cassandras.yaml +++ b/charts/operator/crds/clusters.instaclustr.com_cassandras.yaml @@ -119,30 +119,46 @@ spec: type: boolean privateNetworkCluster: type: boolean + resizeSettings: + items: + properties: + concurrency: + type: integer + notifySupportContacts: + type: boolean + type: object + type: array restoreFrom: properties: - cdcInfos: + cdcConfigs: description: An optional list of cluster data centres for which custom VPC settings will be used. items: properties: cdcId: type: string - customVpcId: - type: string - customVpcNetwork: + customVpcSettings: + properties: + network: + type: string + vpcId: + type: string + required: + - network + - vpcId + type: object + restoreMode: type: string - restoreToSameVpc: - type: boolean + required: + - cdcId + - customVpcSettings + - restoreMode type: object type: array clusterID: description: Original cluster ID. Backup from that cluster will be used for restore type: string - clusterNameOverride: - description: The display name of the restored cluster. - type: string clusterNetwork: description: The cluster network for this cluster to be restored to. @@ -156,6 +172,9 @@ spec: up data will be restored for this point in time. format: int64 type: integer + restoredClusterName: + description: The display name of the restored cluster. + type: string required: - clusterID type: object @@ -205,6 +224,18 @@ spec: status: description: CassandraStatus defines the observed state of Cassandra properties: + availableUsers: + items: + properties: + name: + type: string + namespace: + type: string + required: + - name + - namespace + type: object + type: array cdcid: type: string currentClusterOperationStatus: @@ -252,6 +283,60 @@ spec: - advertisedHostname type: object type: array + resizeOperations: + items: + properties: + completed: + description: Timestamp of the completion of the operation + type: string + concurrentResizes: + description: Number of nodes that can be concurrently + resized at a given time + type: integer + created: + description: Timestamp of the creation of the operation + type: string + id: + description: ID of the operation + type: string + instaclustrSupportAlerted: + description: Timestamp of when Instaclustr Support has + been alerted to the resize operation. + type: string + newNodeSize: + description: New size of the node + type: string + nodePurpose: + description: Purpose of the node + type: string + replaceOperations: + description: Replace operations + items: + properties: + created: + description: Timestamp of the creation of the node + replacement operation + type: string + id: + description: ID of the node replacement operation + type: string + newNodeId: + description: ID of the new node in the replacement + operation + type: string + nodeId: + description: ID of the node being replaced + type: string + status: + description: Status of the node replacement operation + type: string + type: object + type: array + status: + description: Status of the operation + type: string + type: object + type: array status: type: string type: object @@ -342,10 +427,6 @@ spec: - isFinalized type: object type: array - required: - - inProgress - - past - - upcoming type: object type: array options: diff --git a/charts/operator/crds/clusters.instaclustr.com_kafkaconnects.yaml b/charts/operator/crds/clusters.instaclustr.com_kafkaconnects.yaml index a1cf9fb..87209b6 100644 --- a/charts/operator/crds/clusters.instaclustr.com_kafkaconnects.yaml +++ b/charts/operator/crds/clusters.instaclustr.com_kafkaconnects.yaml @@ -307,6 +307,60 @@ spec: - advertisedHostname type: object type: array + resizeOperations: + items: + properties: + completed: + description: Timestamp of the completion of the operation + type: string + concurrentResizes: + description: Number of nodes that can be concurrently + resized at a given time + type: integer + created: + description: Timestamp of the creation of the operation + type: string + id: + description: ID of the operation + type: string + instaclustrSupportAlerted: + description: Timestamp of when Instaclustr Support has + been alerted to the resize operation. + type: string + newNodeSize: + description: New size of the node + type: string + nodePurpose: + description: Purpose of the node + type: string + replaceOperations: + description: Replace operations + items: + properties: + created: + description: Timestamp of the creation of the node + replacement operation + type: string + id: + description: ID of the node replacement operation + type: string + newNodeId: + description: ID of the new node in the replacement + operation + type: string + nodeId: + description: ID of the node being replaced + type: string + status: + description: Status of the node replacement operation + type: string + type: object + type: array + status: + description: Status of the operation + type: string + type: object + type: array status: type: string type: object @@ -397,10 +451,6 @@ spec: - isFinalized type: object type: array - required: - - inProgress - - past - - upcoming type: object type: array options: diff --git a/charts/operator/crds/clusters.instaclustr.com_kafkas.yaml b/charts/operator/crds/clusters.instaclustr.com_kafkas.yaml index 9f42838..5fbded2 100644 --- a/charts/operator/crds/clusters.instaclustr.com_kafkas.yaml +++ b/charts/operator/crds/clusters.instaclustr.com_kafkas.yaml @@ -181,6 +181,16 @@ spec: description: ReplicationFactor to use for new topic. Also represents the number of racks to use when allocating nodes. type: integer + resizeSettings: + items: + properties: + concurrency: + type: integer + notifySupportContacts: + type: boolean + type: object + maxItems: 1 + type: array restProxy: items: properties: @@ -254,6 +264,18 @@ spec: status: description: KafkaStatus defines the observed state of Kafka properties: + availableUsers: + items: + properties: + name: + type: string + namespace: + type: string + required: + - name + - namespace + type: object + type: array cdcid: type: string currentClusterOperationStatus: @@ -301,6 +323,60 @@ spec: - advertisedHostname type: object type: array + resizeOperations: + items: + properties: + completed: + description: Timestamp of the completion of the operation + type: string + concurrentResizes: + description: Number of nodes that can be concurrently + resized at a given time + type: integer + created: + description: Timestamp of the creation of the operation + type: string + id: + description: ID of the operation + type: string + instaclustrSupportAlerted: + description: Timestamp of when Instaclustr Support has + been alerted to the resize operation. + type: string + newNodeSize: + description: New size of the node + type: string + nodePurpose: + description: Purpose of the node + type: string + replaceOperations: + description: Replace operations + items: + properties: + created: + description: Timestamp of the creation of the node + replacement operation + type: string + id: + description: ID of the node replacement operation + type: string + newNodeId: + description: ID of the new node in the replacement + operation + type: string + nodeId: + description: ID of the node being replaced + type: string + status: + description: Status of the node replacement operation + type: string + type: object + type: array + status: + description: Status of the operation + type: string + type: object + type: array status: type: string type: object @@ -391,10 +467,6 @@ spec: - isFinalized type: object type: array - required: - - inProgress - - past - - upcoming type: object type: array options: diff --git a/charts/operator/crds/clusters.instaclustr.com_opensearches.yaml b/charts/operator/crds/clusters.instaclustr.com_opensearches.yaml index f3c5049..9852b8b 100644 --- a/charts/operator/crds/clusters.instaclustr.com_opensearches.yaml +++ b/charts/operator/crds/clusters.instaclustr.com_opensearches.yaml @@ -68,20 +68,6 @@ spec: - nodeSize type: object type: array - dashboards: - items: - properties: - nodeSize: - type: string - oidcProvider: - type: string - version: - type: string - required: - - nodeSize - - version - type: object - type: array dataCentres: items: properties: @@ -141,6 +127,18 @@ spec: type: boolean indexManagementPlugin: type: boolean + ingestNodes: + items: + properties: + nodeCount: + type: integer + nodeSize: + type: string + required: + - nodeCount + - nodeSize + type: object + type: array knnPlugin: type: boolean loadBalancer: @@ -150,6 +148,20 @@ spec: type: string notificationsPlugin: type: boolean + opensearchDashboards: + items: + properties: + nodeSize: + type: string + oidcProvider: + type: string + version: + type: string + required: + - nodeSize + - version + type: object + type: array pciCompliance: description: The PCI compliance standards relate to the security of user data and transactional information. Can only be applied clusters @@ -160,34 +172,46 @@ spec: type: boolean reportingPlugin: type: boolean + resizeSettings: + items: + properties: + concurrency: + type: integer + notifySupportContacts: + type: boolean + type: object + type: array restoreFrom: properties: - cdcInfos: + cdcConfigs: description: An optional list of cluster data centres for which custom VPC settings will be used. items: properties: cdcId: type: string - customVpcId: - type: string - customVpcNetwork: + customVpcSettings: + properties: + network: + type: string + vpcId: + type: string + required: + - network + - vpcId + type: object + restoreMode: type: string - restoreToSameVpc: - type: boolean + required: + - cdcId + - customVpcSettings + - restoreMode type: object type: array clusterId: description: Original cluster ID. Backup from that cluster will be used for restore type: string - clusterNameOverride: - description: The display name of the restored cluster. - type: string - clusterNetwork: - description: The cluster network for this cluster to be restored - to. - type: string indexNames: description: Only data for the specified indices will be restored, for the point in time. @@ -197,6 +221,9 @@ spec: up data will be restored for this point in time. format: int64 type: integer + restoredClusterName: + description: The display name of the restored cluster. + type: string required: - clusterId type: object @@ -239,6 +266,18 @@ spec: status: description: OpenSearchStatus defines the observed state of OpenSearch properties: + availableUsers: + items: + properties: + name: + type: string + namespace: + type: string + required: + - name + - namespace + type: object + type: array cdcid: type: string currentClusterOperationStatus: @@ -286,6 +325,60 @@ spec: - advertisedHostname type: object type: array + resizeOperations: + items: + properties: + completed: + description: Timestamp of the completion of the operation + type: string + concurrentResizes: + description: Number of nodes that can be concurrently + resized at a given time + type: integer + created: + description: Timestamp of the creation of the operation + type: string + id: + description: ID of the operation + type: string + instaclustrSupportAlerted: + description: Timestamp of when Instaclustr Support has + been alerted to the resize operation. + type: string + newNodeSize: + description: New size of the node + type: string + nodePurpose: + description: Purpose of the node + type: string + replaceOperations: + description: Replace operations + items: + properties: + created: + description: Timestamp of the creation of the node + replacement operation + type: string + id: + description: ID of the node replacement operation + type: string + newNodeId: + description: ID of the new node in the replacement + operation + type: string + nodeId: + description: ID of the node being replaced + type: string + status: + description: Status of the node replacement operation + type: string + type: object + type: array + status: + description: Status of the operation + type: string + type: object + type: array status: type: string type: object @@ -376,10 +469,6 @@ spec: - isFinalized type: object type: array - required: - - inProgress - - past - - upcoming type: object type: array options: diff --git a/charts/operator/crds/clusters.instaclustr.com_postgresqls.yaml b/charts/operator/crds/clusters.instaclustr.com_postgresqls.yaml index 9f2d07a..5ec93a1 100644 --- a/charts/operator/crds/clusters.instaclustr.com_postgresqls.yaml +++ b/charts/operator/crds/clusters.instaclustr.com_postgresqls.yaml @@ -140,42 +140,57 @@ spec: type: boolean pgRestoreFrom: properties: - cdcInfos: + cdsConfigs: description: An optional list of cluster data centres for which custom VPC settings will be used. items: properties: cdcId: type: string - customVpcId: - type: string - customVpcNetwork: + customVpcSettings: + properties: + network: + type: string + vpcId: + type: string + required: + - network + - vpcId + type: object + restoreMode: type: string - restoreToSameVpc: - type: boolean + required: + - cdcId + - customVpcSettings + - restoreMode type: object type: array clusterId: description: Original cluster ID. Backup from that cluster will be used for restore type: string - clusterNameOverride: - description: The display name of the restored cluster. - type: string - clusterNetwork: - description: The cluster network for this cluster to be restored - to. - type: string pointInTime: description: Timestamp in milliseconds since epoch. All backed up data will be restored for this point in time. format: int64 type: integer + restoredClusterName: + description: The display name of the restored cluster. + type: string required: - clusterId type: object privateNetworkCluster: type: boolean + resizeSettings: + items: + properties: + concurrency: + type: integer + notifySupportContacts: + type: boolean + type: object + type: array slaTier: description: 'Non-production clusters may receive lower priority support and reduced SLAs. Production tier is not available when using Developer @@ -262,6 +277,60 @@ spec: - advertisedHostname type: object type: array + resizeOperations: + items: + properties: + completed: + description: Timestamp of the completion of the operation + type: string + concurrentResizes: + description: Number of nodes that can be concurrently + resized at a given time + type: integer + created: + description: Timestamp of the creation of the operation + type: string + id: + description: ID of the operation + type: string + instaclustrSupportAlerted: + description: Timestamp of when Instaclustr Support has + been alerted to the resize operation. + type: string + newNodeSize: + description: New size of the node + type: string + nodePurpose: + description: Purpose of the node + type: string + replaceOperations: + description: Replace operations + items: + properties: + created: + description: Timestamp of the creation of the node + replacement operation + type: string + id: + description: ID of the node replacement operation + type: string + newNodeId: + description: ID of the new node in the replacement + operation + type: string + nodeId: + description: ID of the node being replaced + type: string + status: + description: Status of the node replacement operation + type: string + type: object + type: array + status: + description: Status of the operation + type: string + type: object + type: array status: type: string type: object @@ -352,10 +421,6 @@ spec: - isFinalized type: object type: array - required: - - inProgress - - past - - upcoming type: object type: array options: diff --git a/charts/operator/crds/clusters.instaclustr.com_redis.yaml b/charts/operator/crds/clusters.instaclustr.com_redis.yaml index c261a7c..df41043 100644 --- a/charts/operator/crds/clusters.instaclustr.com_redis.yaml +++ b/charts/operator/crds/clusters.instaclustr.com_redis.yaml @@ -125,34 +125,47 @@ spec: type: boolean privateNetworkCluster: type: boolean + resizeSettings: + items: + properties: + concurrency: + type: integer + notifySupportContacts: + type: boolean + type: object + maxItems: 1 + type: array restoreFrom: properties: - cdcInfos: + cdcConfigs: description: An optional list of cluster data centres for which custom VPC settings will be used. items: properties: cdcId: type: string - customVpcId: - type: string - customVpcNetwork: + customVpcSettings: + properties: + network: + type: string + vpcId: + type: string + required: + - network + - vpcId + type: object + restoreMode: type: string - restoreToSameVpc: - type: boolean + required: + - cdcId + - customVpcSettings + - restoreMode type: object type: array clusterId: description: Original cluster ID. Backup from that cluster will be used for restore type: string - clusterNameOverride: - description: The display name of the restored cluster. - type: string - clusterNetwork: - description: The cluster network for this cluster to be restored - to. - type: string indexNames: description: Only data for the specified indices will be restored, for the point in time. @@ -162,6 +175,9 @@ spec: up data will be restored for this point in time. format: int64 type: integer + restoredClusterName: + description: The display name of the restored cluster. + type: string required: - clusterId type: object @@ -202,6 +218,18 @@ spec: status: description: RedisStatus defines the observed state of Redis properties: + availableUsers: + items: + properties: + name: + type: string + namespace: + type: string + required: + - name + - namespace + type: object + type: array cdcid: type: string currentClusterOperationStatus: @@ -249,6 +277,60 @@ spec: - advertisedHostname type: object type: array + resizeOperations: + items: + properties: + completed: + description: Timestamp of the completion of the operation + type: string + concurrentResizes: + description: Number of nodes that can be concurrently + resized at a given time + type: integer + created: + description: Timestamp of the creation of the operation + type: string + id: + description: ID of the operation + type: string + instaclustrSupportAlerted: + description: Timestamp of when Instaclustr Support has + been alerted to the resize operation. + type: string + newNodeSize: + description: New size of the node + type: string + nodePurpose: + description: Purpose of the node + type: string + replaceOperations: + description: Replace operations + items: + properties: + created: + description: Timestamp of the creation of the node + replacement operation + type: string + id: + description: ID of the node replacement operation + type: string + newNodeId: + description: ID of the new node in the replacement + operation + type: string + nodeId: + description: ID of the node being replaced + type: string + status: + description: Status of the node replacement operation + type: string + type: object + type: array + status: + description: Status of the operation + type: string + type: object + type: array status: type: string type: object @@ -339,10 +421,6 @@ spec: - isFinalized type: object type: array - required: - - inProgress - - past - - upcoming type: object type: array options: diff --git a/charts/operator/crds/clusters.instaclustr.com_zookeepers.yaml b/charts/operator/crds/clusters.instaclustr.com_zookeepers.yaml index a1db3c5..412c538 100644 --- a/charts/operator/crds/clusters.instaclustr.com_zookeepers.yaml +++ b/charts/operator/crds/clusters.instaclustr.com_zookeepers.yaml @@ -184,6 +184,60 @@ spec: - advertisedHostname type: object type: array + resizeOperations: + items: + properties: + completed: + description: Timestamp of the completion of the operation + type: string + concurrentResizes: + description: Number of nodes that can be concurrently + resized at a given time + type: integer + created: + description: Timestamp of the creation of the operation + type: string + id: + description: ID of the operation + type: string + instaclustrSupportAlerted: + description: Timestamp of when Instaclustr Support has + been alerted to the resize operation. + type: string + newNodeSize: + description: New size of the node + type: string + nodePurpose: + description: Purpose of the node + type: string + replaceOperations: + description: Replace operations + items: + properties: + created: + description: Timestamp of the creation of the node + replacement operation + type: string + id: + description: ID of the node replacement operation + type: string + newNodeId: + description: ID of the new node in the replacement + operation + type: string + nodeId: + description: ID of the node being replaced + type: string + status: + description: Status of the node replacement operation + type: string + type: object + type: array + status: + description: Status of the operation + type: string + type: object + type: array status: type: string type: object @@ -274,10 +328,6 @@ spec: - isFinalized type: object type: array - required: - - inProgress - - past - - upcoming type: object type: array options: diff --git a/charts/operator/crds/kafkamanagement.instaclustr.com_kafkausers.yaml b/charts/operator/crds/kafkamanagement.instaclustr.com_kafkausers.yaml index fac3c07..7cb6d46 100644 --- a/charts/operator/crds/kafkamanagement.instaclustr.com_kafkausers.yaml +++ b/charts/operator/crds/kafkamanagement.instaclustr.com_kafkausers.yaml @@ -35,6 +35,8 @@ spec: spec: description: KafkaUserSpec defines the desired state of KafkaUser properties: + authMechanism: + type: string certificateRequests: items: properties: @@ -68,15 +70,10 @@ spec: type: array initialPermissions: type: string - options: - properties: - overrideExistingUser: - type: boolean - saslScramMechanism: - type: string - required: - - saslScramMechanism - type: object + overrideExistingUser: + type: boolean + saslScramMechanism: + type: string secretRef: properties: name: @@ -88,8 +85,9 @@ spec: - namespace type: object required: + - authMechanism - initialPermissions - - options + - saslScramMechanism - secretRef type: object status: diff --git a/charts/operator/templates/admission-webhooks/operator-webhook-with-certmanager.yaml b/charts/operator/templates/admission-webhooks/operator-webhook-with-certmanager.yaml index 2816521..eee1018 100644 --- a/charts/operator/templates/admission-webhooks/operator-webhook-with-certmanager.yaml +++ b/charts/operator/templates/admission-webhooks/operator-webhook-with-certmanager.yaml @@ -90,6 +90,26 @@ webhooks: resources: - azurevnetpeerings sideEffects: None + - admissionReviewVersions: + - v1 + clientConfig: + service: + name: {{ template "operator.fullname" . }}-webhook + namespace: {{ .Release.Namespace }} + path: /mutate-clusterresources-instaclustr-com-v1beta1-clusterbackup + failurePolicy: Fail + name: mclusterbackup.kb.io + rules: + - apiGroups: + - clusterresources.instaclustr.com + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - clusterbackups + sideEffects: None - admissionReviewVersions: - v1 clientConfig: @@ -110,6 +130,26 @@ webhooks: resources: - clusternetworkfirewallrules sideEffects: None + - admissionReviewVersions: + - v1 + clientConfig: + service: + name: {{ template "operator.fullname" . }}-webhook + namespace: {{ .Release.Namespace }} + path: /validate-clusterresources-instaclustr-com-v1beta1-clusterbackup + failurePolicy: Fail + name: vclusterbackup.kb.io + rules: + - apiGroups: + - clusterresources.instaclustr.com + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - clusterbackups + sideEffects: None - admissionReviewVersions: - v1 clientConfig: @@ -621,6 +661,26 @@ webhooks: resources: - nodereloads sideEffects: None + - admissionReviewVersions: + - v1 + clientConfig: + service: + name: {{ template "operator.fullname" . }}-webhook + namespace: {{ .Release.Namespace }} + path: /validate-clusterresources-instaclustr-com-v1beta1-opensearchegressrules + failurePolicy: Fail + name: vopensearchegressrules.kb.io + rules: + - apiGroups: + - clusterresources.instaclustr.com + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - opensearchegressrules + sideEffects: None - admissionReviewVersions: - v1 clientConfig: @@ -641,6 +701,26 @@ webhooks: resources: - opensearchusers sideEffects: None + - admissionReviewVersions: + - v1 + clientConfig: + service: + name: {{ template "operator.fullname" . }}-webhook + namespace: {{ .Release.Namespace }} + path: /validate-clusterresources-instaclustr-com-v1beta1-postgresqluser + failurePolicy: Fail + name: vpostgresqluser.kb.io + rules: + - apiGroups: + - clusterresources.instaclustr.com + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - postgresqlusers + sideEffects: None - admissionReviewVersions: - v1 clientConfig: diff --git a/charts/operator/values.yaml b/charts/operator/values.yaml index 5dd43b9..8c589e0 100644 --- a/charts/operator/values.yaml +++ b/charts/operator/values.yaml @@ -4,7 +4,7 @@ replicaCount: 1 image: repository: icoperator/instaclustr-operator pullPolicy: IfNotPresent - tag: v0.1.2 + tag: v0.1.3 port: 8080 @@ -407,6 +407,32 @@ rbac: - get - patch - update + - apiGroups: + - clusterresources.instaclustr.com + resources: + - opensearchegressrules + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - clusterresources.instaclustr.com + resources: + - opensearchegressrules/finalizers + verbs: + - update + - apiGroups: + - clusterresources.instaclustr.com + resources: + - opensearchegressrules/status + verbs: + - get + - patch + - update - apiGroups: - clusterresources.instaclustr.com resources: diff --git a/docs/operator-0.1.7.tgz b/docs/operator-0.1.7.tgz new file mode 100644 index 0000000000000000000000000000000000000000..c4e82c4b72e17288558751525bedc966c3d23bf4 GIT binary patch literal 18720 zcmY(qb980T^935)wr$(ClZkEHw(W_HiEZ1?#P-D2effNU>#g;%0w>NM=nMD>IRw}&VvTh?cz`v>2e9gfgAg(F zu%!A1*muxrM}O9cyj zM`Deo>IRQEA-?3A^+r4K?8lxKS(SO%|4K~=XMtlL=wkK&4UsJF3Hv_ZIqv?V(11tMC>9IS4k9} zZj(k71{wq#`2Tx45UIm|Z&19{UZ5^8bAJ`VzgbJtf&K zo^ufcxx+`qf}4NT`h*WO#7jAc+zkU(NdU?mQhXu)O)}the*_u?8_Cc0oO~(+y<--0 z_QYijdo|v;{9&^|6S*Dl-81GGd)?dDNx=LrjS?71HP-_M46BS7Sd#Ss&+oPlv?O}> z#x-H#&d*QN$#!xK%`?A8|%iP=YWA}Ht=^%`L5XEvh?z1EIX?z4WP40e z84>+kST%_^azRg0tH=!P`Dh!o&XqA>B;_jm-Y-rt$)8z7^e{EV_puZa#5(nfpw3v1 zn3oJUwa_PI7y0t5I!*}_o3`3E0{!oiHC5ldLUj1!b@ELGa~hK1c*S9m=&Abj0A+mS zP+sZ3m&iN==!^(dxq=9Q(Db-t_+XsUFep|ie1wI#O>NAo)IwFm9;+PQm8e6)$VmUK zy;OWudoBh^d`{y2o)-;Fo?&=i!KpN=p+V{R^c_Q_GPoNry(H}J9kOwz+>3@I3*B{a ziRr{&qlH&eQ%hl``rSq4Bj*ngl_E;H>I_V! z-q6D)UKWS*LhJmX#>f6{Wx&+ZcK=0EkpLx`$j!=T7WweiqS2CLuP5`U)&u7CcUL_H zB!QQVw5!+tK$QTB`FnfQ;GF8V-R+!ev8iiuATj3c8%APsXVr{EbW&ot@R+7PW*nAF ztO-q3&;838?8-Poa_akI^_W>l=jt&ubo=sIlFKU;fgFsxs}HMz&qC+&lMkJD1K_iM zr*nO$cXbhq*=2yAXJ%`&okwc?!XxM=^jv+z>T6eX*~E6GKPSs+QunUw+}yIG(Q>0N z2oOFe75RpB+{!SuvEk1nHtN}CkcUKH;glq^v~v@(h-mS_oOUAt$wg}146fh2^vHE= zLoKS0TIoW!%rO}~^M?@`-e@f)qA;-#FQ7<$0Dtln^1He!rK6o~rJqDb$Ctj}4U8y= z(IgZvulkS+OT?9~L%49G%Gx`}%SQC(gp1^el&u_!={7r>Fx6I>)RiOao!qT{%Y z;GDKC38%{WLe=jgHbnFi%gf3pnX#9Th*+$jKzwG*e~v5=8t;6!@<0JCNP`?7#Wzx9 zXFC>>)0c84tO7zr%$7(}^9~z`Egwksem_<^h<8z}=y>g8xu*>2t$Yew_FzL^g`P}F zGZiwN-Hx6Q+d_WX^^z1qxsFWdh5Sc~CPu~G5KHM=2r;EHJ&T*d0|tlOI)eK%)r$#F z#t@Z5eBkM9C<4gm6;bO6idiy|S-j}Qn_ooFl@T4=tm-7tJ91=(geoK@>a4`#&0GC5 z1FW1}$YnPK_#onDM{sKkF<4QU6NR(x7m;C^?Eu7gsi-KyuW`sS4E@6@OoJ{m#=PQ z1y5sB_gX%dR57I71P%##QxPMP3JwW9q0IJ03zLm z#v`S?9rlHJ_X9bN{FoOOLUN8c!sGMI;QP8{oG;%q$UzZ4@_@{T+>)FX5_$M!`E(N^ zA^GN!Qj!pp&g9ZRD?%%^LL%kD4+Q?1MICJOc05d~bV)|(*${BH>|*LRM_?`OJII8^ zLP8$`8SrfE|UAQ5rB;7y?EeO9PFQV=A$ z`IPxVqd=}qB?@sK9kO=(puk{e5NO>cB38~oKq0XskupZYr}iE685u8HukH4X?|$I7 zYRc>f%fIfA-(3l9YuVo^rR#fzO8lrnQug44xN$rI9eWO!cpNKd#TKijhXP^ASE+)5&H0>lQ5jY z@~p-iQDf>Kj3;rG=_<|?seFQ`XA&7N+CNElskBCV|5-haki~tyY{Gd782ci_f`9y>oajmy5D1ipH^%UR z=!=*iLXFieG$h*(*_o3{qkn)bf*1gUG&vF~OyJ5Ty)`MSMDIe4<;wsaPZZ%5t5q@> zfOENBdDY?=`R(ySQpW@oTJ`BY-<1nghL%o4mep)pU1`Auq`3YNI)m&iOo{0(bLNHI za*{58dfx8Fdg6}U#A?rW_(1{BaI$lD!$@|QvCDq5kUCm|twuajsko5kv!2YAZ-gS( zKhXE^-S-e8qE)qca$gEyrF6@>Ml&G;Va3p+?qW+uOq&WZIZ}74o=$(ZO3JWht?nab zGQXuX9DfZ~;T^+bY*j$BV!F3r zJ*ucY5E9!grmIh0v2>vKH&X_wBrHqm{YdfFM+#JJuTwW#yW0KZ@N_Dt$El7^#;$rq zmig(QhG|n>sc?|lT4qZ2jj_vpqbW7|xP3K%{Xx+6G&3gspJ3r#?4qQ9rVxmv;=3YO z<`e#KFcelh3TLPHx1gW^cHZ$R;P4^k(1jP^K=SnQrH=tBaPAvkrb$9lt^*elQ@le; zaZT=t3>H`rd>RVbfuPQZ?PP9@Rnj=Um1@XIw6pq6X~4U>y1#;YtxJSN2Y! zq4)7+Tn%P3Xjb~QYH{jI`z_M?l?J8cn%eJ>{Nh|uDD*=X#1V&)D;2Ut^i+U65-fuV z2bI5ogOrIJ(KFr?==7VMsPOa&NNUvY!U5O!{+mw?elnlRr6Eh<-d$QCFjuh5uh@E44kdPhwlT+ zSP;);Mv#KZ`y&2WEY?rR$d$o9V>A6v^INWX&Jh-=#c+D6dA@F$aS#R$|1IF;&!a5s z1?S$&uHV%Wzqg7Ji#h*FX8SQ2f*l>Ni*u$xJA?Q`?sDj}%s;B_9*^*I(IXtUqG#gge>FXB7!nD;#{W%g?mlU30wk##1 zCC4ck#2_ht^G-M(gR1ZF7;FwCa9^u(#n3pv3d(6#=K&v{qR1}0oe+?T#_)SunUX;O zYKkiPF9P>MVEuJRs@gOsjC)y9O;IBQEpitXG&fc8FFH_U7RcR3t<>qbkHKH`SUYi%fqMjtgnZ2D(^<^ZuQXCzXT#WryL)n1ecq*dwmr{-F#yd zv1Zt(JwrkcCrAwR{F@rA^S>=9EAo;3gW*u?#cs5a&~&zm{gb1;1t~a zi;k5xNgsxU;^bomX(XmLsc^(EdeyP_dn0G#;cN z=a*f(eaC!ZU|ky8%u#Zpr+s36P|Y_=|1mN_6jn}8WoV@wW`XLKm>>df`9xTtLpFH3avu6pGL9|i>Z!=IZB z?oZbVH=L3Bm)@Cz4?r^+H**|?wXnDs@5y7&IKg_D9P3YRQQ}MNBWrlqo&RLj^c@$s z085YB`J_x`%b%uL$yJ=iK`?+y<9N;Xf>KPj6ygQjYzhb?ks6Spv{C{&LpD z2F{}lV1EaknR+_uE(0VjM5_UuNzPJ0y>qJYuN253IUr;wxNr}mj_PJw?T>7vY1o0l zX)U2#L~3APgj_Ed0sz!h+Bkca*cB@=$Ub< zZV)m42v!6s9krDQd^rR(U>}0t>7na7HT>$M-h~xN;^B^iH+4*E8QpofUwD@5P z#9(qmCbq-YnlIu}otRHGSW&A##;p>>LU<4J!r7P`SNT6)|HFx4xP2u+FO+Uj_;eH4 z47awM?)&%UOj_UYhp*z4R&~A?Hn?kC3gizlQsUubc zY&rkjF9E-!F;PuYx0tNh8rBwy*qLY-P2>!uM13L z9k5<>bOa?ac4oGWSI^r5goGO&Rt6h8H1B#fQ!gH2v?t}sQ9R709>d>w(~4h9Gq0E* zcZd)Lc1a^pGJY-BOz2&>4>P%4#!Md5VhoCo3FmO0XB)2?D+A||;y^rs9kaG#N`x20 z*px8mmxpm-z!*pq%#3iPjvf3;1F`zH=MJJnYfKiyz}C_xi^-v9ObJWYz?{@DSC({7 zl7hVmb9vNwWi7?FWyp(PuGL|BK_u)u{`&NF&(t$G247HlP-wo-mM^;7LA`lH0izSs zB4k@4OW4QS_6u<1H-21dvd?^$eGc_py^$RzUw&aiL^>B;`{AlL;h=8@t4LF8M5nhw zjNb%S646xLk6!&qIRTWT|9-&x!d)2M)7kyze%sKHihqIv=p-m6^Rr(364%f{mrkFs*}+9Dswr3c z@mGFv?ApdYXIi8;9Gfv0_kq&w#1$S^ZWSoE1;6H!Wb-KjJuBoAHNqUZQ13Y|^1GC@ z3*~I-!$fqpXqK^u#{D8_xSlTNkf7MbLWeEI)N$aCrG7 zuEGc1j5Y^%eg0Xw@r#klGtf3$i*LcsE6B8qyXhbJ#-G|ppiC3z@=c&g4r>a1*%Ne??UcthM@XvRWGVAD@jvmM9XllC=*?O!LOes^b0E%wwib=7u3CoDU*) zBz)wnze2Upz`PRceMpLaYCl_f^zz8A=fG1|^wefOSF{Y5u_6&&#YgkZ!@%BG{i~|U z7i_pd6NJ$^mS}Tt1QaB!+xR(8S)UIK*^hkp2y^`iVJm;{B@v>+8J^@)B_?5US6h|r zh18{UXIeC#Yb2~n`cs`knPHy%=$$Dui-X{}>mXjM6R1wddQK+66L5R=OL_{EewbX| zX@DBLF`I(c9VoW&A@bg*7ke%@ZH2VOTyIY#HZ^TpmK&xn%o_nRAi&gmoQJO=<0Y5Cgsqq1mKw z2jELYT2VB<*|T+7sM=rmTFamNsx8&!t2&M4wXWqg2YzB5s@0pLfB2}@*K+>RAg|pv zXU6mJQ)Z(Vz7M_s)u7E=nb9crsS_+K6MQv5X8$X|rzj(h3}4_3WJ_}|D4uPF`dF8A zz(!T9095oE$FSkL`959dKEVeNJ*IFogjoIy7$g4x7;`nB_HiUvEgM`>ISjz9yEk=b zmtX^c4}#v?2!$VwWi*sQTfPBaMqdC=PhWT2F#tuf`)5K$HTENdU<>LXJ;J4Bx^b))~A4IW~DnJ%Ag z|C`xgtHco|GBCPGlj7Y%aAV$*o#Z<~q<_)np^dZqkJe*=2`!^~Z<=H|fyL~42Xo&x;%fo`H+;HZ)eV3Gq9ux^=zLw5FN zz8qeF%_?3v9pz75WctT0efEq;eL|=a5RUtzKX(j2A$d~)qlo4|WpBmL6vlBQ?RhMo zghE7$bL?TFU9IiSi_&O_*X>&gK*>C;WLn?DUqki z0|jh9ZSf9j1^or7GkfQkr*pm!TwqN5P<@>-R&+Dyv@nyXkRKRD>O?*{!jD?P(Up2i zim~TA?;+6&6BM8I-iJmeQU0h)tR}TWco)4DNh?H2gv5#@Dj1gv%q zKqz61$;_;_JnIm_z>EYBB#uyk{wAf?nGGmXIR`^0?PEqpMS1KO(e!j?0d;wW!$N5Z zOf;R;p&~`m#=!i5zA39moP=i^*i^1D*3eL=w862=8v*0%e2Z-}g5_PZ7Pu?IInmUw&P zC>xoJk?qBBPct-%r}1#azXW&72Q|C3YJth4;=30+G|Wh9cY@WB4Yqr9wtp|WiW5tw zk6!1{g;1@&>0Bm`ZX-kH%C6U6poJHPUq9zedQCLBFYzxv`zFfRb=Q2XI{{U4Da z*!xeSVgq_-g^iGw(^W3OGdXE~LMA&iJV6rQ)B1++88lj)^PNGf@LTb?mUv6DuR$wS zEDA001+z!BEWessT0b>~$w2v|A|k*pOLkd?JV#FRmsr z?0b;QY;q;}a4s`^tz9+@1k%()-`Lhf5E|KV?S;k{+cGLE2DUmRG^} zTFI)(#<2X}rL0G6<0%f`cjqPvADPC#GIL1waZWa|IwrodqnffhE_KxA~UsjM-jm*A7&)nsB3JcnbnkHx)0GbWy~pbWs&}j;-AZUyc zI`30{-FHTHJ#u7ol--inlys_c8khQdHp)&N?MZrL%1zyd0JE+RIa1bAmj0a&${jIm z#&i_v)&g)*z6U7G(SNU*FUmdwU_{!XPj7f???Dq3lFIW8uJtDVO`+=CzBw~;p4}cx zad`T84c1g!=<#1(*bS{r#jSV?*8QnGFy#n9H}!EAwr@%ZT*#@h%)E+#*=YS*^In4_ zb94wFYvc)m*SkP%3Q22Lr&Lhrb@}bdHTCGgc6f(Nyp$auT1#8*bQVX`)zzqT?|Wvjp2@QTsDhU!l0&LLc z@G1l`AQg+lv*5%cYKZWq=5b6iYQKBy(7y!dBgJ1fsCir2Jx#Xwmd)~DCY}nx%62-g zLnL6y;Dh_PyRiYF2?>_FoctCPU^ocK&C}ETtovC5R)EtmN7CoM_Y)s2vxV=uUfN9n zw{gsK!1FQ1KLFhX#fP9|dkdiE%i$lOW*zXiVWa<>(W;8e4c`#i@5w}Zi>A*8mo}-g z6gP%85g4iu9N`@ZqK6&JSiGG>NtLq5z;Zt5>! zA@?h;s1J8IfG`*Bu1`Vn-`jsPvIW?LIfl#%HSg;of7s1hI-|Pso%=z^&(827;mlU` zK$8a0Xi*OFV6RTB=cN>4&)FUJ*rb}|bh=BBj5NwB?;uNumFJ3k{BqU$Sies5nUQes zlN&27{YnssBFs#tl+%4*wuLNM{T8I&0l2yIHNONnkoAat^pS=BW_ouxkO@dn!=U>b z+)VZ|AnPz(!qj(|Ph>>0uiuF|(h=RpxmZ=&4KLKks(bnX=IKE%uZ?rW6zI$Uj8)=g z-GX14e4&4%gwGmn{H??h5u}?Yz|GK;JEZ7IFv~b_UcVCEr3-|~&Y-t{C;f&`aiNE+ zy}^Sa&5D_SiraY0vEPPzQ%n^h&!LizI-+qMR7vd=GE@BP9HqG#P#(X_|E&rQczS)j z8r%VNB|W120|X=4555D&p2i~qsXo6NKOcrMuD-XX;I+TFli@i6@*HjMbYgb3KR4@N zT})bbb{K8``|FPQRn`a@?~coqb2w0qbDJYh^vKgy*OHdJqO6Rw7)jYU%yF)QWak&Z z^F^8YQKaxnK=3;I19-T5ez1LhzSc(o>N)uaz>Ih+6!w;*MqQj8eJgPBBbipIsA~`Y zY{y}eluFs*7Dk3md#s-aVwHJ4+(Zed@o6?lKVqcv@?W4=Ln|-YXcn$F&d{{w`!7kN z44VaHE!ip=X18lUAT6S@eDWBU2rAe(y)w<;HF9wa%!|W`!7yVL|H4JZCEX9|Q^`A` zmKvLxs%6hr2z1}PI_j#(>ngWaB4t#wba=>mgPPfsTUL|q!`)l;*BDCEzX=N&jK_=T z?KQab42GP2wvp*{;)C%Um)njitbQs+HGpKH!XSDIi)E_&0@c$C! zzA|R{+Z?nvU-LxF`XPdk`@Lv?Fx_qJtc^^paoI(>>~ql_R+1CHPkDPoMC1D6>~VKu zXe9Nv;Q9g5J3WIlXbKj4)aa`osLA`XF|qC8989!-^A=hQ-m51dX%S#!4-i=we9~a) z5yUIb8H0xiBvaYcwc>L25G^hOFn1s%2g5~FCan_*)v9;_+;|vw`Ev=gbl;m2|E0hu zk@l#xz!w3Mm&OxZtp~kegG2@x%ZJoe$Ywq?4H!8ujuy*;#3B%Rm3*KUKiA{Tj_JA>bv$@S;!5enIj?n>TiuaMWvCI}EMDGfC!l7gX7Nk9;d~#>IY|E_f3x=I`}os+MMe-((22=%+^=?+3t_ zi|#-$A71hQ-me)D^ONE~0!l8r0XO+<&jH_N6W@&UI`x1D2Tn`CX(h)x;OB8a`7GdP zpB?(1OIY>(Fet7+F#QMEZUVq=Zw`MOR7IG405sr|OKSj~ha3#q{qwNbW~im8SpelWJA)x1dibYwaafs>1zrAwRm7^t6g07e5)wB4iDFQQy0ms`w2yzc6UwhOBVd z)p;!#dKF4PGkl1coG?=e&oeekN^7;b<8%;{g0qLe#_nw;werqeC51DPmN#ZaraT$? zVB(&poVY6rr*a9{;_R}xb96=^%ZgE#7i@)m9ec|o0Na__VgG$ftqtJet+55*?ci#; z3&53TTmZ~L?NjIic$ITUFBS7L@V-;~gX{9U*9(5I8|{uQn0Z-N<_{upH`~a_Y>FCg4Ae$P0IJIl82~SX8*xxPQ%q}mJ{FH^c%^@ zYJToJ+4*%wanJV0QiyqmmQ**vWHg;pE$d=)Y0|ppNh+m zZFERgVBC9C&{Q0bE!c~jW$P+2XAfI1Ljs&+B$zVwf`zvxLsVeJt7KZ{)KTKA)e3M8 z-ZE(ADqDn|S;OBsqD<+ijkm}CZi216ykt?bi@%Ozi^(U^9++HfRVKzW)T{HGcGhrQ zXj~#|C5(HE>2xG&#PxdzP*v9*nzmZ+qxPZbG8U{ExpK!wcMEoiE+tb`*m3F!6JqK2 zrc(MJb45N7F1U0?Ejc-*=~&X*38L#XQ7l1*KXEskwvAhFlz$QSFN0A zWdVwBw)r2RiK#VVIvnRP6(z@f7;Cl)5Sz}0o!Ex* z9XhU-xqVCv+fD)kJ~S+U1NPS8+!? zWcZZ@2WaDEnho<83tL3Ked%yW@jb6x>oUL6Q ztAnjwnJr5ag0A3Z^Qm0wB0qvi-O(YM-bJcy@e*m?Hy2)FMb?7&UV|DrGkINuG>_qS z|M-UcBJwW20DyUb^*Zoz@HALy5R}UKgh0WI?k#zSa@rc>;_}n7?Ya4L;F<{cj}{Ob zvWZ7QxTW1S4!$P?dP_MdMy&qq?L^(nrl!qyavq&c>IoeXy^x-G#`5D~o#uCTly5vQ zXW?(eYG-%qNZ#T5%AfW|h{LmEY!AT&Ej-nL%%>3o5eOZKoZO$mId#*_CZV$6@qzLz z%;Pu@7d=c2g9C?zib}qLI|HZBm|0A+>j?c+EJmS(c3+sBQ~pu*)RfDK9f8R7ugtyl z`QhmWfNDyGu0SQPenX5$o#8qj3KJMg8nIZ)pgm6XdzyB?KLv{WU+gXS=WYrwBap#Pr zPqeo{IUMS!T8Ytq;Xf2Hc5Qc!6FXD=u$7p_^ZcPc!n)i>> zOC1)1_S*4Gr_bMB&!S05{}4Vj*T3+V2n{D#kuuyNcM?Zn^KRG&cziSUtf2pOU9cWg zMF4e7R>7K^i)Rg|Qb78tL0w`2|6(~!=dZJUP>T!}EH>reX4I+dx`yM9hFG4n{9_PT zch7{;+2o$am#uJVF>8XhlPYz^zSs5K?(bVvIbrnW9+8c=W(7{0qg#ghcG2Q-p_ba5 zr%F%dV`vNxUTKpao)1%Jv+@8GPTNMZ(dlS74QFokr-itfJcqV)ualYu&u9I-Q4At? z((LpET)A!*yW%`YV`W7rljbga<#rTZLyv8xssbVQRF5BJsh%3yNfIq(kDvkET}jen z5T;ZEf5%4onjvornI%__(MDhh(;)fRcIw+#5SKrR1Y8u%KJ8=gdnBF0m6A25-{~+##shE{?m3NCu}Hv5>V!8T)NfK= z9A0EKnG|Q|dLdssMZ?9E1(8`~9%vpS@NNrKrUJ)y6;Zus*;qd*g9kpfB)o+8$!p2^WtlF!*9d~06xT0R0k1I?RI2;)z~dfV+%r_AW~IO$D2 zc=qcvwvomI<%=->71+X?`Hp9{Oc@PM&21&siWPXDO5F6v$O;Ed z#A*$61~|hfV-xwy8Dc~voyy2Z|9#HHxluHhj5;MlanMOp&>B8Tx7Kq4?$q{Y*QNMe z`%dK~Y`fWEOIim0=Jg1Ua}|@%v9s7?7N|t_*96IOiy@Hj!@Grs9)K6=x!Hjr#b7%D z*!Y##0Ud5@HYhPkpBXOV%3r;yUfd=6o!puk4^@x{iw$ zy2yM?o=CbTsaB)UK8QpY^=9ozTv(?RyS_DGr=i4d$Y)52Q@a;mytR%p(_r}}1^Z#$ zBug7;Z)Z12PxuC3sW*>QX~thbrhn=R@l(y91>$Rg6W-aQU=TW}Gusv`?2H$Aa)ltp z%o}c&vG?UCKxX>)aZsri2OR>37S{jNN={USxT|`Rski(yhzTPu{i1hUL)_R?6Jbv! z8^~l8eQ+Mt%q>TT7v0`ADd39TW#t<&h8r_^d7c5Hs;1Sq37QaJbk@bOjF+g!yGD*c zFTw31sXEtNL86-3V)jZ}7mtb0q+~?n5fV$ULEB$C7cgG2ldY%U;Jv$xIXGPWW?5#=>gLFUD9(hHei zyg5PXbd_ODlH5!FUVH&DYU+v`3-SdF8FSWZF2-qu;9;47gUn-14cv0=?VnPi`v*M3 z>uHbW3PHZpwN68)UiVU5I{fyliq|f~{_k@;Z&_}hcTSFHT{*UjLf5}MF_VD3NGA9=h#61(qp#VbRE_zp#;8e0 zQjM!Yw|o)avkWimE%p-#&`A3e)W7L?83}NVtUypG3N5TKj{{N$0XV+;JSvF63iR>SL_|1CxR-)T+bZJ4J(}_^E>gPbily%LId`_*v{5x?>h->S3b2fk*5)qNBgiJ+hY2Ox|N4LKxV-Hb$Rqu6JL}iM*)xLanguG zC%~?7P89x8`ls~i@&h#q%uk{yn^#8yPdug$G}i)0OVF_oq79BfZ1v#-_rAemMNg5z z%R=zC@y1fvR*RaBOhN;CA%8`;5iYRy+j|dF8^2|R)4>N+(_xpyPF`meK^<_Ht-I&q zIqy^MPQ70wJREm%6sm@Y*~PB&UKG-5G}$U&6zKf2EZXC~u53%}uiU6GUlwhgvgUz! zV0%_|`=fOK*1PhgFW+!!$8f}i)|_$b^Ol=xG0yE)k5};1t|tv&iqjC@AQ3{mYv@K^ ztJ9lJ$8Q!PYt|~IwASGc4}iknXf&sYjyAOI>Wmbi#xr8Z)#`RjDuzOv!TSN7kR3RYiym<{>ZkTuhR~Xda2c> zn{`d)p~Gf&4$pTudiwp6eHDqHy0tf%LHe4qp(NVBMRXb?ZC#5;Wnu^XGz>Ri)#|n; z;2h+j4PEpC<}bMqj!89DjpgPin4+NVrW*b>J&9i}N)=&`)&)xRftBDmdN7vF2t2NK z6$Om22QDdGxftdyH-;Say35)7Maxe{qrF-L=7%X8dTi-`RBCZ|3xJFjJL8j@sCuM` zyg6~hcrsvz%x$>Bd8cg4-(=KjC(`L+dV}B2R?CiSm&$Neac%>J1viYYMt=uyeFP94 z!Kk$~k?fLKKtP}1_^z4B#6Dg{E(G#4<6`ExF!F?9U~VeMIM>A~qBx1Q_N*@vySt;fF=dBc;$_qW8lSRgq1N~GjB-J#`1Gf7+ge6Ef_ z!+f|r*wKg(ZY$*8Qp(y~Z8iGNk!_bgXpzmpr?Z7?_TC%4i`nZ*@|wZ+8`D=fc51+lmjDSYrUKQIE!VyQ@&26akn>yN^l^+OeFl*R7j- z_UaY(7_&2j9a>y%{{}kPhn=Rn{%rT4KNgj)c~fiFttPw+?I)glsxvx#M;gB*%D_+ zUsnZ0EJ}ucZp_~+<3;43Pc^5W-B#Ul*ZQ7KBS}rJ+{pmLLKm1On#agU6<547bES(p z$MWSw&BlYn+^T41I+2-pJb2~GOy~Pkzk-aj!fUJuSk2(u+Y`+_&y1M45L>ky#sYD@at~+yQ3rjzf%rhnWah2? zVzVXaR@3TAS<{5wVm{}SWbI7cTzJFo4JsFW|%9k2>HI2+@w?<=hk!q5z!c43Vz6ajk zgbNy^YmFg5fbnX zyxCAGEk}!qN?rpNVkIvNhbCQjxWQ0qba|_~u^)jxvZ)^-Jej^e1U!U=tQu2;{{KKI z2HfODI67=grxByuP%=Rhc*tbmPbB=(@K?nm)RhI_WdiUj1i<;hXGtKy)z{m}^e+E@ zTcoN2)>;tAlYp|;y%7v}S})bUuvwG}D35TMjDePAMQ&KQOxJ24V%k5$7!)(*B08C6 z4yB?+BW*-!Fx6aC)nhXek<)n}{}8buBbjuX5J6OnQK~}XU!jbu zlh*yJ&gs6iH>2t90U5ukp^Zh<{GV!7(m4A_fE1s+j!CjM5G?yNYm$!AIA!EyyQ^Wjiq_a=hd>WiH@>@;eno8Lk_(V< z93}ml;jTOm4`4fc1IN&MR0b1Oqk|&FNxV!_6uMu-Xm^JAjSVOS)7f^^D!`;o2&5ND zbY@;YXq~&Fh$!Xs!($M_c4W2UC2g-Px@EFh=PI8J=hV@97G|t2xsJeT-nA}tz%fwG z8IeM+=j;%$T`7K6!K;OEU;Ss@|MV*ldDc?p>L+++;oE3Y>?TAM?Gd431TYx5J@Jmm zr&dg$k&G-MkBfp6if#If{pAbDMC?TZD<0#2zmCRVs__oSZB32$J?HW`^ipdT>{!@} z7f8YOg|A?gt`L$|Jj*QdC0A`c*KsEkNPp;DXyheX_Uq!C_>nW8w24bIolMVn=geug znf`!T)%??6DcE_&%;AR(J|E^ly%9gB?l92*JCtNhGCDk>071c3H1Rbm6rdZt5#LXPpi<{!t(i!^h4RpWFZzf| zVHnSk=O@FMCa{lm|kIp;1ym8E1$O?bqd?BTRi4bL*PE)lUaHce_1ia-y&?E0+9! z2aT;%zhDk_fWTTJMp*3B)_|qVTC08+NVV+Nv?{5*VPeQkib!iwRko6AQ&pbaLH*B8 z`)QwSR8ql^sUo)ee;p=G3rpniew=Evnv_(wlQ%7Q5!gKR=~C5F-e=f#sHjb>uhq3Q zBQb`xG@(Q%Ffay1q_LA%V5>2#p9b?Tz+uVF+=imVw72UsI*p_g#zmx$4SMaVDt{K4 zz;TeHUck%7kl@O`AU?i9&W{kFz@R|)y+pAnI~*_xbI7xoFH!aR0r-{{klW8+#3X+$ zhm*I4qc~GM$Bp@JZaP!6n!}mTXZf-j$ftWv0T0-KcwMs8MtoOO+HqpRZCjWwFb0Sm z+B>OQ#+uR3>PY~Q8?%D9GhtY$m&f-j{`5|6x1NcXK3dO59Kk(OVB=t`RZO;qTp0aT>2WB`OA%e;oyjzCMvP5bwZP#iB&HsTIA_09r`ruputE*jz zB`0e)L$u{xysJK^dgG=}kszvTkxs5schQ2B^^gTNbeoxst3`;IuNH1xsTY{h0$HgO z<iOtpuAIaTl1R3sQ1d~h0m0`jT6iH(QkBHRM!44ST$v)%sm7qd# z#tcHxxCMeoX>m%)c`F9aAG`n$#h*M{s=sLWXHqORg2yiOSTzPWb21VA293p*#|0i~ z-ra8$qQDq0iI#vhO=cVi$+EQ#nFGmM&ae)Wqf3TZ<^=e}Dy? zrQyF}!ys8~KY+!I>c``HfQ2aKb7~FV)Obmy zlK2}oMHs9m$v~}YC;&Sz5B=64K0X{117P+e*d6py8R~J<2JMZx;*Gg7PST@moZ?8-JDUFk=^_2(l2hfVcVQ@dZ?RCCJ5@Y4 zyqCmlH;#v=du(vSk{u(iN?r0Rq%7IHmi>1|T0}a1<47%mcCN`iDv7F*b*`lc zV+Xlpl}XCRcM5D12f3QvDQ0&HOil~s9_J#S?03fYX_FNCoW}yrw_?*xneFSs-C#!d zaY5f`T3s0HCE?((e;d~l=`rL@XDmrDU`i%p%?gEF9kS^MBTgK0*GCyhfJA?0nM`U7yZfisk)i{8& zv#+qNuz~3_D|6YZUNx2q648~r+8Q}%w(G_4 zK5S&T&lR-)PXH$f*!ReWJ=(BG8}?|!9&Om84SO__X2TwB*rN@5tV}lS(Zrz*d+eGy z8}`^Oxi;+4hCSM_M^myP467DuLm2ilgu#YATD`DRp;j;Ksa~*Qk5)IVSg6$vd#M|2 z*rN@5v|*3>l#l;=gp)@&hXhXL+D|DAP`-zb*DeaMI{t5Xc6xkVi2pk|IzPAZf15}z zG5#-=!WwxkMgi7k*8~H~^PN}MKgmaFEMWY&6bhKorW8yP2^c?b6bRT&U|US1A+9Z< z)P}X$ur?dkwvDj1c!btRwdK@MoGLE*aJ()Tm*B%djN1p1Z|O1+ zn`18Y&}zjnOdRY(&}QfOdY$O^nvpNtkgu6U9L7xY=;7S_Ja zwq9ihL-|X(f)yA1RWx(R5&Q2DF-=Ti>l5LLNs&I%U#8Yit8JvA>W+>lI;zRZ@s?_; z)t;mE`qq(_@c)E-wQ>M!{J-;y(~F}2cX~Xu{@*6ji}nAM6mG}?{J=|SFv)Yh3n-#S|e^ga;0yra*N!_aDwH)#>8TnGw;zQgVaF-&Wuqv~GmD*rf;O=&bkiGm0lp zW)ns#wrffVa$-mwomXrKOq5@X@g+Ww&7n4S_Z)tDfc#No73EonpYS}K1Crnf1mY{H zo21bOA{NAe4uu@t%b~BawZ;fcW$3SvNJzl2ltNxv(hJu-(g+^b4Kz;_G?A>PoS*&`I`wbXB1D~M@{$z;Xn<1cvY1Eek=;2h&$)fch zLZxq&EwP55Hz zaevl~nQZFpaJ{)vj30FnhZ9Ld7XqvivP4LYEYu1wAj^%5^~oASZz8r27I zHNZf_h>(z@k;2fr_1g@lcv7TH!gc1mHd56QrC-+J#6%!o;C2)PRaS^FXdIfC@RlrlxF!vDW$__jl4u^9tiQwUMDnUp!B}WUK zDWM#k4ArN?mWbq3_{j>uG=iBatDNPnOl4u*p()ZtgcUG$rs$I#GsqL8Cu%=si3BuV zV9-_G;((dfi74cWE&ak{osm>r5zd;Qg?BmmD!xnGsgt$j$p31xkle}zOJqjB{Z#-= z7B*(&eMMs+`FP7%zMiyQ&VxhA1RH~YbM#%ytRc%mKBYadtm$3_`dG$X zFI5Y!_@D0Hy7$otQyu;+A3y{EDQ2oX1^_9aDhCvv>C6FQc+caiBc1$R#hoF_?4n zKmP20{a;^w^~I{q{wCe#Kw^`3ni> zkLuT-U;Tn^er;ID*I)nF7Y2ep^&i7AVgv<<_c00jltoHEvuRjNQAgitLwchu+w5hA z9Lik4#0*{N*=!FQd%3D-zX3Q9mf$eDe}N&nY)5EPOO5b&!nwo*j8X7}kP)|XKO|+T zxo)1*P-~eZ@~WyT%UyaqVg9{gE?IKIFwLbUuZaq>JTLknvHeVTQdNNcuK8=7`Au6t zEwO*8-T9Ab5^Q+|a9#ZW@MKs#|8aJDY|npeBE7`(ACVNU|M-VA#O3ew^oM*_I{Xo& ziyrCOk0APdQ%64}X@-*@(SngZ_+bxz6kFdO{Mf+34>>mL&wZpCCr-5|S6c=pt5uYZ zA9NLt4-2pXQEQds8oq}esZ|uJRF{QIrP)F7wkc9OZIaT8dVwq5vUn#8;z}-?tcSM} z&20%;?fTr8w{Ma;QSJ9DXS8D3-EfgbX4yUJ-#&JK{p}ZNXY^&MZPwRKvQyZ_wJwlN YHrZs8O