From f703832c2034bbc7fdf2fea849f7ba33e5d92d96 Mon Sep 17 00:00:00 2001 From: Diana Birsan Date: Fri, 31 Jan 2025 11:16:13 +0200 Subject: [PATCH 1/3] RBAC fixes (#1030) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * rbac-fixes * [UI] EVEREST-1803 Monitoring unavailable in db details widget when specific rule is set #1018 Co-authored-by: Percona Platform Robot <61465387+percona-robot@users.noreply.github.com> * [UI] EVEREST-1781 Update message for empty state when user has no create permissions (#1035) * fix: update message for empty state when user has no create permissions * fix: add specific prop for create permission * [UI] EVEREST-1800 Fix display of Add DB button, redirect from /new if state if empty (#1036) * fix: show add button if user has permission for any db engine, redirect /new url if user if not being directed to it by a component * fix: change check for available engines * fix: missing namespaces polling (#1044) --------- Co-authored-by: Percona Platform Robot <61465387+percona-robot@users.noreply.github.com> Co-authored-by: Fábio Silva --- .../api/backup-storages/useBackupStorages.ts | 41 ++++++------------- .../monitoring/useMonitoringInstancesList.ts | 10 +++++ .../common/empty-state/databases/index.tsx | 23 ++++++++++- .../common/empty-state/databases/messages.ts | 1 + .../src/pages/database-form/database-form.tsx | 6 +++ .../src/pages/databases/DbClusterView.tsx | 17 ++++++-- .../cards/db-details/db-details.tsx | 22 ++++++++-- .../db-details/monitoring/monitoring.tsx | 5 +-- .../db-cluster-details/dbCluster.context.tsx | 6 --- .../dbCluster.context.types.ts | 2 - .../storage-locations/storage-locations.tsx | 10 +---- .../storage-locations.utils.ts | 16 ++++---- 12 files changed, 95 insertions(+), 64 deletions(-) diff --git a/ui/apps/everest/src/hooks/api/backup-storages/useBackupStorages.ts b/ui/apps/everest/src/hooks/api/backup-storages/useBackupStorages.ts index 955242449..f7270c5ad 100644 --- a/ui/apps/everest/src/hooks/api/backup-storages/useBackupStorages.ts +++ b/ui/apps/everest/src/hooks/api/backup-storages/useBackupStorages.ts @@ -18,8 +18,6 @@ import { UseMutationOptions, useQueries, useQuery, - UseQueryOptions, - UseQueryResult, } from '@tanstack/react-query'; import { createBackupStorageFn, @@ -32,46 +30,31 @@ import { GetBackupStoragesPayload, } from 'shared-types/backupStorages.types'; import { PerconaQueryOptions } from 'shared-types/query.types'; +import { useNamespaces } from '../namespaces'; export const BACKUP_STORAGES_QUERY_KEY = 'backupStorages'; -export interface BackupStoragesForNamespaceResult { - namespace: string; - queryResult: UseQueryResult; -} +export type BackupStoragesForNamespaceResult = + PerconaQueryOptions; -export const useBackupStorages = ( - queriesParams: Array<{ - namespace: string; - options?: PerconaQueryOptions< - GetBackupStoragesPayload, - unknown, - BackupStorage[] - >; - }> -) => { - const queries = queriesParams.map< - UseQueryOptions - >(({ namespace, options }) => { +export const useBackupStorages = () => { + const { data: namespaces = [] } = useNamespaces({ + refetchInterval: 5 * 1000, + }); + const queries = namespaces.map((namespace) => { return { queryKey: [BACKUP_STORAGES_QUERY_KEY, namespace], retry: false, queryFn: () => getBackupStoragesFn(namespace), refetchInterval: 5 * 1000, - ...options, }; }); - const queryResults = useQueries({ queries }); - - const results: BackupStoragesForNamespaceResult[] = queryResults.map( - (item, i) => ({ - namespace: queriesParams[i].namespace, - queryResult: item, - }) - ); + const queryResults = useQueries({ + queries, + }); - return results; + return queryResults; }; export const useBackupStoragesByNamespace = ( diff --git a/ui/apps/everest/src/hooks/api/monitoring/useMonitoringInstancesList.ts b/ui/apps/everest/src/hooks/api/monitoring/useMonitoringInstancesList.ts index c376e4804..89f623707 100644 --- a/ui/apps/everest/src/hooks/api/monitoring/useMonitoringInstancesList.ts +++ b/ui/apps/everest/src/hooks/api/monitoring/useMonitoringInstancesList.ts @@ -18,6 +18,7 @@ import { UseQueryResult, useMutation, useQueries, + useQuery, } from '@tanstack/react-query'; import { getMonitoringInstancesFn, @@ -78,6 +79,15 @@ export const useMonitoringInstancesList = ( return results; }; +export const useMonitoringInstancesForNamespace = (namespace: string) => { + return useQuery({ + queryKey: [MONITORING_INSTANCES_QUERY_KEY, namespace], + retry: false, + queryFn: () => getMonitoringInstancesFn(namespace), + refetchInterval: 5 * 1000, + }); +}; + export const useCreateMonitoringInstance = ( options?: UseMutationOptions< MonitoringInstance, diff --git a/ui/apps/everest/src/pages/common/empty-state/databases/index.tsx b/ui/apps/everest/src/pages/common/empty-state/databases/index.tsx index 04748670f..7ce293fbf 100644 --- a/ui/apps/everest/src/pages/common/empty-state/databases/index.tsx +++ b/ui/apps/everest/src/pages/common/empty-state/databases/index.tsx @@ -1,4 +1,4 @@ -import { Box, Divider, Typography } from '@mui/material'; +import { Box, Divider, Link, Typography } from '@mui/material'; import { EmptyStateIcon } from '@percona/ui-lib'; import { Messages } from './messages'; import CreateDbButton from 'pages/databases/create-db-button/create-db-button'; @@ -7,8 +7,10 @@ import { ContactSupportLink } from '../ContactSupportLink'; export const EmptyStateDatabases = ({ showCreationButton, + hasCreatePermission, }: { showCreationButton: boolean; + hasCreatePermission: boolean; }) => { return ( <> @@ -22,7 +24,24 @@ export const EmptyStateDatabases = ({ {Messages.noDbClusters} - {Messages.createToStart} + {hasCreatePermission ? ( + {Messages.createToStart} + ) : ( + <> + {Messages.noPermissions} + + Click{' '} + + here + {' '} + to learn how to get permissions. + + + )} {showCreationButton && } diff --git a/ui/apps/everest/src/pages/common/empty-state/databases/messages.ts b/ui/apps/everest/src/pages/common/empty-state/databases/messages.ts index 718d75137..29d1a533b 100644 --- a/ui/apps/everest/src/pages/common/empty-state/databases/messages.ts +++ b/ui/apps/everest/src/pages/common/empty-state/databases/messages.ts @@ -3,4 +3,5 @@ export const Messages = { createToStart: 'Create one to get started.', create: 'Create Database', contactSupport: 'Contact Percona Support', + noPermissions: 'You lack permission to create a database cluster.', }; diff --git a/ui/apps/everest/src/pages/database-form/database-form.tsx b/ui/apps/everest/src/pages/database-form/database-form.tsx index 0abf38ca1..334979999 100644 --- a/ui/apps/everest/src/pages/database-form/database-form.tsx +++ b/ui/apps/everest/src/pages/database-form/database-form.tsx @@ -161,6 +161,12 @@ export const DatabasePage = () => { } }, [defaultValues, isDirty, reset, mode]); + useEffect(() => { + if (!location.state) { + navigate('/'); + } + }, []); + return formSubmitted ? ( ) : ( diff --git a/ui/apps/everest/src/pages/databases/DbClusterView.tsx b/ui/apps/everest/src/pages/databases/DbClusterView.tsx index ffca4dfdf..15e6ec840 100644 --- a/ui/apps/everest/src/pages/databases/DbClusterView.tsx +++ b/ui/apps/everest/src/pages/databases/DbClusterView.tsx @@ -16,7 +16,10 @@ import { Box, Stack } from '@mui/material'; import { Table } from '@percona/ui-lib'; import StatusField from 'components/status-field'; -import { useNamespaces } from 'hooks/api/namespaces/useNamespaces'; +import { + useDBEnginesForNamespaces, + useNamespaces, +} from 'hooks/api/namespaces/useNamespaces'; import { type MRT_ColumnDef } from 'material-react-table'; import { useMemo } from 'react'; import { useNavigate } from 'react-router-dom'; @@ -46,11 +49,14 @@ export const DbClusterView = () => { ); const navigate = useNavigate(); + const { results: dbEngines } = useDBEnginesForNamespaces(); + const hasAvailableDbEngines = dbEngines.some( + (obj) => (obj?.data || []).length > 0 + ); const { canCreate } = useNamespacePermissionsForResource('database-clusters'); - const { canRead } = useNamespacePermissionsForResource('database-engines'); - const canAddCluster = canCreate.length > 0 && canRead.length > 0; + const canAddCluster = canCreate.length > 0 && hasAvailableDbEngines; const dbClustersResults = useDBClustersForNamespaces( namespaces.map((ns) => ({ namespace: ns, @@ -155,7 +161,10 @@ export const DbClusterView = () => { tableName="dbClusterView" emptyState={ namespaces.length > 0 ? ( - + ) : ( ) diff --git a/ui/apps/everest/src/pages/db-cluster-details/cluster-overview/cards/db-details/db-details.tsx b/ui/apps/everest/src/pages/db-cluster-details/cluster-overview/cards/db-details/db-details.tsx index 317ae82c4..cd568a194 100644 --- a/ui/apps/everest/src/pages/db-cluster-details/cluster-overview/cards/db-details/db-details.tsx +++ b/ui/apps/everest/src/pages/db-cluster-details/cluster-overview/cards/db-details/db-details.tsx @@ -21,8 +21,9 @@ import { BasicInformationSection } from './basic-information/basic'; import { ConnectionDetails } from './connection-details'; import { MonitoringDetails } from './monitoring/monitoring'; import { AdvancedConfiguration } from './advanced-configuration'; -import { DbClusterContext } from 'pages/db-cluster-details/dbCluster.context'; -import { useContext } from 'react'; +import { useMemo } from 'react'; +import { useMonitoringInstancesForNamespace } from 'hooks'; +import { useRBACPermissions } from 'hooks/rbac'; export const DbDetails = ({ loading, @@ -40,7 +41,22 @@ export const DbDetails = ({ externalAccess, parameters, }: DatabaseDetailsOverviewCardProps) => { - const { canReadMonitoring } = useContext(DbClusterContext); + const { data: monitoringInstances } = + useMonitoringInstancesForNamespace(namespace); + + const monitoringInstancesToCheck = useMemo( + () => + (monitoringInstances || []).map( + (monitoringInstance) => + `${monitoringInstance.namespace}/${monitoringInstance.name}` + ), + [monitoringInstances] + ); + + const { canRead: canReadMonitoring } = useRBACPermissions( + 'monitoring-instances', + monitoringInstancesToCheck.length > 0 ? monitoringInstancesToCheck : '*' + ); return ( { const [openEditModal, setOpenEditModal] = useState(false); - const { dbCluster, canUpdateDb, canUpdateMonitoring } = - useContext(DbClusterContext); + const { dbCluster, canUpdateDb } = useContext(DbClusterContext); const restoringOrDeleting = [ DbClusterStatus.restoring, DbClusterStatus.deleting, ].includes(dbCluster?.status?.status!); - const editable = canUpdateDb && !restoringOrDeleting && canUpdateMonitoring; + const editable = canUpdateDb && !restoringOrDeleting; const { mutate: updateDbClusterMonitoring } = useUpdateDbClusterMonitoring(); diff --git a/ui/apps/everest/src/pages/db-cluster-details/dbCluster.context.tsx b/ui/apps/everest/src/pages/db-cluster-details/dbCluster.context.tsx index c7ade4c0c..7b1f9415b 100644 --- a/ui/apps/everest/src/pages/db-cluster-details/dbCluster.context.tsx +++ b/ui/apps/everest/src/pages/db-cluster-details/dbCluster.context.tsx @@ -13,8 +13,6 @@ export const DbClusterContext = createContext({ dbCluster: {} as DbCluster, isLoading: false, canReadBackups: false, - canReadMonitoring: false, - canUpdateMonitoring: false, canReadCredentials: false, canUpdateDb: false, clusterDeleted: false, @@ -59,8 +57,6 @@ export const DbClusterContextProvider = ({ 'database-cluster-backups', `${namespace}/${dbClusterName}` ); - const { canRead: canReadMonitoring, canUpdate: canUpdateMonitoring } = - useRBACPermissions('monitoring-instances', `${namespace}/*`); const { canRead: canReadCredentials } = useRBACPermissions( 'database-cluster-credentials', `${namespace}/${dbClusterName}` @@ -97,8 +93,6 @@ export const DbClusterContextProvider = ({ dbCluster, isLoading, canReadBackups, - canReadMonitoring, - canUpdateMonitoring, canUpdateDb, canReadCredentials, clusterDeleted, diff --git a/ui/apps/everest/src/pages/db-cluster-details/dbCluster.context.types.ts b/ui/apps/everest/src/pages/db-cluster-details/dbCluster.context.types.ts index 59f259e06..9be1d249c 100644 --- a/ui/apps/everest/src/pages/db-cluster-details/dbCluster.context.types.ts +++ b/ui/apps/everest/src/pages/db-cluster-details/dbCluster.context.types.ts @@ -5,8 +5,6 @@ export interface DbClusterContextProps { dbCluster?: DbCluster; isLoading: boolean; canReadBackups: boolean; - canReadMonitoring: boolean; - canUpdateMonitoring: boolean; canUpdateDb: boolean; canReadCredentials: boolean; queryResult: QueryObserverResult; diff --git a/ui/apps/everest/src/pages/settings/storage-locations/storage-locations.tsx b/ui/apps/everest/src/pages/settings/storage-locations/storage-locations.tsx index f132548d2..225906d6d 100644 --- a/ui/apps/everest/src/pages/settings/storage-locations/storage-locations.tsx +++ b/ui/apps/everest/src/pages/settings/storage-locations/storage-locations.tsx @@ -29,7 +29,6 @@ import { convertBackupStoragesPayloadToTableFormat, convertStoragesType, } from './storage-locations.utils'; -import { useNamespaces } from 'hooks/api/namespaces'; import { useNamespacePermissionsForResource } from 'hooks/rbac'; import TableActionsMenu from '../../../components/table-actions-menu'; import { StorageLocationsActionButtons } from './storage-locations-menu-actions'; @@ -37,15 +36,10 @@ import { StorageLocationsActionButtons } from './storage-locations-menu-actions' export const StorageLocations = () => { const queryClient = useQueryClient(); const { canCreate } = useNamespacePermissionsForResource('backup-storages'); - const { data: namespaces = [] } = useNamespaces(); - const backupStorages = useBackupStorages( - namespaces.map((namespace) => ({ - namespace: namespace, - })) - ); + const backupStorages = useBackupStorages(); const backupStoragesLoading = backupStorages.some( - (result) => result.queryResult.isLoading + (result) => result.isLoading ); const tableData = useMemo( diff --git a/ui/apps/everest/src/pages/settings/storage-locations/storage-locations.utils.ts b/ui/apps/everest/src/pages/settings/storage-locations/storage-locations.utils.ts index 1a0aab1c4..39df652c4 100644 --- a/ui/apps/everest/src/pages/settings/storage-locations/storage-locations.utils.ts +++ b/ui/apps/everest/src/pages/settings/storage-locations/storage-locations.utils.ts @@ -1,6 +1,9 @@ -import { StorageType } from 'shared-types/backupStorages.types'; +import { UseQueryResult } from '@tanstack/react-query'; +import { + GetBackupStoragesPayload, + StorageType, +} from 'shared-types/backupStorages.types'; import { Messages } from './storage-locations.messages'; -import { BackupStoragesForNamespaceResult } from 'hooks/api/backup-storages/useBackupStorages'; import { BackupStorageTableElement } from './storage-locations.types'; export const convertStoragesType = (value: StorageType) => @@ -11,14 +14,13 @@ export const convertStoragesType = (value: StorageType) => })[value]; export const convertBackupStoragesPayloadToTableFormat = ( - data: BackupStoragesForNamespaceResult[] + data: UseQueryResult[] ): BackupStorageTableElement[] => { const result: BackupStorageTableElement[] = []; data.forEach((item) => { - const tableDataForNamespace: BackupStorageTableElement[] = item?.queryResult - ?.isSuccess - ? item.queryResult?.data.map((storage) => ({ - namespace: item.namespace, + const tableDataForNamespace: BackupStorageTableElement[] = item.isSuccess + ? item.data.map((storage) => ({ + namespace: storage.namespace, name: storage.name, type: storage.type, bucketName: storage.bucketName, From 14e9ddf05c167d9d008b1d3c44c9f841617ad378 Mon Sep 17 00:00:00 2001 From: Oksana Grishchenko <91597950+oksana-grishchenko@users.noreply.github.com> Date: Fri, 31 Jan 2025 13:35:55 +0200 Subject: [PATCH 2/3] FB: Upstream upgrades (#1060) EVERST-1549 PXC 1.16.1 (#953) EVEREST-1836 PSMDB 1.19.0 (#1059) --- api-tests/tests/database-engines.spec.ts | 6 +- api-tests/tests/psmdb-clusters.spec.ts | 2 +- dev/Tiltfile | 4 +- go.mod | 36 +++++++----- go.sum | 73 ++++++++++++++---------- 5 files changed, 71 insertions(+), 50 deletions(-) diff --git a/api-tests/tests/database-engines.spec.ts b/api-tests/tests/database-engines.spec.ts index 9458e171d..943621cde 100644 --- a/api-tests/tests/database-engines.spec.ts +++ b/api-tests/tests/database-engines.spec.ts @@ -37,10 +37,10 @@ test('get/edit database engine versions', async ({ request }) => { const engineData: GetDatabaseEngineResponse = await engineResponse.json(); const availableVersions = engineData.status.availableVersions; - expect(availableVersions.engine['7.0.14-8'].imageHash).toBe('ed932d4e7231dcb793bf609f781226a8393aa8958b103339f4a503a8f70ed17e'); - expect(availableVersions.backup['2.7.0'].status).toBe('recommended'); + expect(availableVersions.engine['8.0.4-1'].imageHash).toBe('873b201ce3d66d97b1225c26db392c5043a73cc19ee8db6f2dc1b8efd4783bcf'); + expect(availableVersions.backup['2.8.0'].status).toBe('recommended'); - const allowedVersions = ['6.0.5-4', '6.0.4-3', '7.0.8-5', '7.0.12-7', '7.0.14-8']; + const allowedVersions = ['6.0.19-16', '7.0.8-5', '7.0.12-7', '7.0.14-8', '7.0.15-9', '8.0.4-1']; delete engineData.status; engineData.spec.allowedVersions = allowedVersions; diff --git a/api-tests/tests/psmdb-clusters.spec.ts b/api-tests/tests/psmdb-clusters.spec.ts index 4bbda1dc8..389b52e86 100644 --- a/api-tests/tests/psmdb-clusters.spec.ts +++ b/api-tests/tests/psmdb-clusters.spec.ts @@ -283,7 +283,7 @@ test('sharded psmdb cluster', async ({ request, page }) => { }, }, engine: { - version: '7.0.14-8', + version: '8.0.4-1', type: 'psmdb', replicas: 1, storage: { diff --git a/dev/Tiltfile b/dev/Tiltfile index 4794e8413..0ac1f92a1 100644 --- a/dev/Tiltfile +++ b/dev/Tiltfile @@ -4,9 +4,9 @@ config_yaml=read_yaml('config.yaml') # Vars everest_namespace = 'everest-system' everest_monitoring_namespace = 'everest-monitoring' -pxc_operator_version = os.getenv('PXC_OPERATOR_VERSION', '1.15.0') +pxc_operator_version = os.getenv('PXC_OPERATOR_VERSION', '1.16.1') print('Using PXC operator version: %s' % pxc_operator_version) -psmdb_operator_version = os.getenv('PSMDB_OPERATOR_VERSION', '1.18.0') +psmdb_operator_version = os.getenv('PSMDB_OPERATOR_VERSION', '1.19.0') print('Using PSMDB operator version: %s' % psmdb_operator_version) pg_operator_version = os.getenv('PG_OPERATOR_VERSION', '2.5.0') print('Using PG operator version: %s' % pg_operator_version) diff --git a/go.mod b/go.mod index ab69ffbf3..7905da938 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/percona/everest -go 1.23.2 +go 1.23.4 replace ( github.com/containerd/containerd v1.7.12 => github.com/containerd/containerd v1.7.13 @@ -37,8 +37,8 @@ require ( github.com/oapi-codegen/runtime v1.1.1 github.com/operator-framework/api v0.27.0 github.com/operator-framework/operator-lifecycle-manager v0.27.0 - github.com/percona/everest-operator v0.6.0-dev1.0.20250128095649-91ac803840ec - github.com/percona/percona-helm-charts/charts/everest v0.0.0-20250128100227-85c800fac705 + github.com/percona/everest-operator v0.6.0-dev1.0.20250131090446-40b6d1d65b10 + github.com/percona/percona-helm-charts/charts/everest v0.0.0-20250130165745-fd11e0611fa8 github.com/rodaine/table v1.3.0 github.com/spf13/cobra v1.8.1 github.com/stretchr/testify v1.10.0 @@ -134,7 +134,7 @@ require ( github.com/gorilla/websocket v1.5.1 // indirect github.com/gosuri/uitable v0.0.4 // indirect github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0 // indirect github.com/h2non/filetype v1.1.3 // indirect github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c // indirect github.com/hashicorp/errwrap v1.1.0 // indirect @@ -147,7 +147,7 @@ require ( github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect - github.com/klauspost/compress v1.17.10 // indirect + github.com/klauspost/compress v1.17.11 // indirect github.com/klauspost/pgzip v1.2.6 // indirect github.com/labstack/gommon v0.4.2 // indirect github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect @@ -174,16 +174,17 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect + github.com/montanaflynn/stats v0.7.1 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect github.com/onsi/gomega v1.36.2 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0 // indirect github.com/operator-framework/operator-registry v1.35.0 // indirect - github.com/percona/percona-backup-mongodb v1.8.1-0.20241002124601-957ac501f939 // indirect + github.com/percona/percona-backup-mongodb v1.8.1-0.20241212160532-0157f87a7eee // indirect github.com/percona/percona-postgresql-operator v0.0.0-20241007204305-35d61aa5aebd // indirect - github.com/percona/percona-server-mongodb-operator v1.18.0 // indirect - github.com/percona/percona-xtradb-cluster-operator v1.15.0 // indirect + github.com/percona/percona-server-mongodb-operator v1.19.0 // indirect + github.com/percona/percona-xtradb-cluster-operator v1.16.1 // indirect github.com/perimeterx/marshmallow v1.1.5 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/pierrec/lz4 v2.6.1+incompatible // indirect @@ -207,25 +208,30 @@ require ( github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasttemplate v1.2.2 // indirect github.com/x448/float16 v0.8.4 // indirect + github.com/xdg-go/pbkdf2 v1.0.0 // indirect + github.com/xdg-go/scram v1.1.2 // indirect + github.com/xdg-go/stringprep v1.0.4 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect github.com/xlab/treeprint v1.2.0 // indirect + github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect + go.mongodb.org/mongo-driver v1.17.1 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 // indirect - go.opentelemetry.io/otel v1.30.0 // indirect - go.opentelemetry.io/otel/metric v1.30.0 // indirect - go.opentelemetry.io/otel/trace v1.30.0 // indirect + go.opentelemetry.io/otel v1.31.0 // indirect + go.opentelemetry.io/otel/metric v1.31.0 // indirect + go.opentelemetry.io/otel/trace v1.31.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect golang.org/x/net v0.33.0 // indirect - golang.org/x/oauth2 v0.23.0 // indirect + golang.org/x/oauth2 v0.24.0 // indirect golang.org/x/sync v0.10.0 // indirect golang.org/x/sys v0.28.0 // indirect golang.org/x/term v0.27.0 // indirect golang.org/x/text v0.21.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect - google.golang.org/grpc v1.67.1 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20241118233622-e639e219e697 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241118233622-e639e219e697 // indirect + google.golang.org/grpc v1.69.2 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect k8s.io/klog/v2 v2.130.1 // indirect diff --git a/go.sum b/go.sum index 30ad838eb..4bbc29fd2 100644 --- a/go.sum +++ b/go.sum @@ -1908,8 +1908,8 @@ github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg= github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1/go.mod h1:5SN9VR2LTsRFsrEC6FHgRbTWrTHu6tqPeKxEQv15giM= github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0 h1:TmHmbvxPmaegwhDubVz0lICL0J5Ka2vwTzhoePEXsGE= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0/go.mod h1:qztMSjm835F2bXf+5HKAPIS5qsmQDqZna/PgVt4rWtI= github.com/h2non/filetype v1.1.3 h1:FKkx9QbD7HR/zjK1Ia5XiBsq9zdLi5Kf3zGyFTAFkGg= github.com/h2non/filetype v1.1.3/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY= github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c h1:fEE5/5VNnYUoBOj2I9TP8Jc+a7lge3QWn9DKE7NCwfc= @@ -1999,8 +1999,8 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/klauspost/compress v1.17.10 h1:oXAz+Vh0PMUvJczoi+flxpnBEPxoER1IaAnU/NMPtT0= -github.com/klauspost/compress v1.17.10/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= +github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= +github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= @@ -2129,6 +2129,8 @@ github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9 github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= +github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE= +github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -2217,18 +2219,18 @@ github.com/otiai10/copy v1.14.0/go.mod h1:ECfuL02W+/FkTWZWgQqXPWZgW9oeKCSQ5qVfSc github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= -github.com/percona/everest-operator v0.6.0-dev1.0.20250128095649-91ac803840ec h1:lo/X9ze5nQFKjOt+VY+9yXYMYnHnr0UcEON2Gh8z02g= -github.com/percona/everest-operator v0.6.0-dev1.0.20250128095649-91ac803840ec/go.mod h1:9MDiyY9Xq9hbfX21MN0do2ipGe7vMPZquWcqTX5qKCM= -github.com/percona/percona-backup-mongodb v1.8.1-0.20241002124601-957ac501f939 h1:OggdqSzqe9pO3A4GaRlrLwZXS3zEQ84O4+7Jm9cg74s= -github.com/percona/percona-backup-mongodb v1.8.1-0.20241002124601-957ac501f939/go.mod h1:KhIlTT4wR2mIkMvDtEFerr9zaADJorL7UThSztzxBaY= -github.com/percona/percona-helm-charts/charts/everest v0.0.0-20250128100227-85c800fac705 h1:P0Vs8bh52osTZpadda7BoPejVcOWOe62Y99SL0q3Vb4= -github.com/percona/percona-helm-charts/charts/everest v0.0.0-20250128100227-85c800fac705/go.mod h1:j5Ci48Azwb4Xs4XvZQNfleWCn2uyiZywazklxNH1ut4= +github.com/percona/everest-operator v0.6.0-dev1.0.20250131090446-40b6d1d65b10 h1:LI/o3pAYQdC+5h50MPbR7q4L7kMcuPN0TlsoiYxi4lc= +github.com/percona/everest-operator v0.6.0-dev1.0.20250131090446-40b6d1d65b10/go.mod h1:jpmlzDw0avyNWwmlBABbaHNZO4/G3q9AonI1GoXfQfE= +github.com/percona/percona-backup-mongodb v1.8.1-0.20241212160532-0157f87a7eee h1:LtitxWyhBqCNjIZqdvsSEPBd2HPg11lDBlIExTQAbGQ= +github.com/percona/percona-backup-mongodb v1.8.1-0.20241212160532-0157f87a7eee/go.mod h1:zikIUTNTflfcth3ZJRqhvW8+7Jj38aVlg+wSV1jwnxo= +github.com/percona/percona-helm-charts/charts/everest v0.0.0-20250130165745-fd11e0611fa8 h1:4j5gNewAo45zr42kf9mp36s2ff5+OFZJEM26bvpyw1c= +github.com/percona/percona-helm-charts/charts/everest v0.0.0-20250130165745-fd11e0611fa8/go.mod h1:j5Ci48Azwb4Xs4XvZQNfleWCn2uyiZywazklxNH1ut4= github.com/percona/percona-postgresql-operator v0.0.0-20241007204305-35d61aa5aebd h1:9RCUfPUxbdXuL/247r77DJmRSowDzA2xzZC9FpuLuUw= github.com/percona/percona-postgresql-operator v0.0.0-20241007204305-35d61aa5aebd/go.mod h1:ICbLstSO4zhYo+SFSciIWO9rLHQg29GJ1335L0tfhR0= -github.com/percona/percona-server-mongodb-operator v1.18.0 h1:inRWonCOTacD++D/tvyFXVUqKx7f2OQzz8w1NyT3cAI= -github.com/percona/percona-server-mongodb-operator v1.18.0/go.mod h1:MWBsK5fpmsQPeudfHP16XtX6tb9cPJmBpMHAQ/xcbvo= -github.com/percona/percona-xtradb-cluster-operator v1.15.0 h1:Dc2VXVCXushIG39TrX1qzX6COEf5iqunr+dZ1IVjoos= -github.com/percona/percona-xtradb-cluster-operator v1.15.0/go.mod h1:uxYXkp7kxc2G4RVxxLU83UT/HqWZgjyAC1p8VEDZqDg= +github.com/percona/percona-server-mongodb-operator v1.19.0 h1:X67Vx2jDYhSzyVfQZBKiVIjV3MICpyMLmon/m7y8tUo= +github.com/percona/percona-server-mongodb-operator v1.19.0/go.mod h1:BEw28t4Byx7NK3APLDc7KENgYxPyMPcDLN2ylML5Jo4= +github.com/percona/percona-xtradb-cluster-operator v1.16.1 h1:iPF05neqOvFC262kwyYCvC/2ClV2FXFkpSmTgEPN63w= +github.com/percona/percona-xtradb-cluster-operator v1.16.1/go.mod h1:hUiKZ/VTc1BeSPbq9atFjWZ91gAaBLhOGdBtem5d75w= github.com/perimeterx/marshmallow v1.1.5 h1:a2LALqQ1BlHM8PZblsDdidgv1mWi1DgC2UmX50IvK2s= github.com/perimeterx/marshmallow v1.1.5/go.mod h1:dsXbUu8CRzfYP5a87xpp0xq9S3u0Vchtcl8we9tYaXw= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= @@ -2423,6 +2425,12 @@ github.com/vbatts/tar-split v0.11.5 h1:3bHCTIheBm1qFTcgh9oPu+nNBtX+XJIupG/vacinC github.com/vbatts/tar-split v0.11.5/go.mod h1:yZbwRsSeGjusneWgA781EKej9HF8vme8okylkAeNKLk= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= +github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY= +github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4= +github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8= +github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -2437,6 +2445,8 @@ github.com/xiang90/probing v0.0.0-20221125231312-a49e3df8f510/go.mod h1:UETIi67q github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 h1:ilQV1hzziu+LLM3zUTJ0trRztfwgjqKnBWNtSRkbmwM= +github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78/go.mod h1:aL8wCCfTfSfmXjznFBSZNN13rSJjlIOI1fUNAtF7rmI= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -2464,6 +2474,8 @@ go.etcd.io/etcd/pkg/v3 v3.5.16/go.mod h1:+lutCZHG5MBBFI/U4eYT5yL7sJfnexsoM20Y0t2 go.etcd.io/etcd/raft/v3 v3.5.16/go.mod h1:P4UP14AxofMJ/54boWilabqqWoW9eLodl6I5GdGzazI= go.etcd.io/etcd/server/v3 v3.5.16/go.mod h1:ynhyZZpdDp1Gq49jkUg5mfkDWZwXnn3eIqCqtJnrD/s= go.etcd.io/gofail v0.1.0/go.mod h1:VZBCXYGZhHAinaBiiqYvuDynvahNsAyLFwB3kEHKz1M= +go.mongodb.org/mongo-driver v1.17.1 h1:Wic5cJIwJgSpBhe3lx3+/RybR5PiYRMpVFgO7cOHyIM= +go.mongodb.org/mongo-driver v1.17.1/go.mod h1:wwWm/+BuOddhcq3n68LKRmgk2wXzmF6s0SFOa0GINL4= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -2494,8 +2506,8 @@ go.opentelemetry.io/otel v1.23.0/go.mod h1:YCycw9ZeKhcJFrb34iVSkyT0iczq/zYDtZYFu go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4= -go.opentelemetry.io/otel v1.30.0 h1:F2t8sK4qf1fAmY9ua4ohFS/K+FUuOPemHUIXHtktrts= -go.opentelemetry.io/otel v1.30.0/go.mod h1:tFw4Br9b7fOS+uEao81PJjVMjW/5fvNCbpsDIXqP0pc= +go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY= +go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0/go.mod h1:GijYcYmNpX1KazD5JmWGsi4P7dDTTTnfv1UbGn84MnU= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0/go.mod h1:OQFyQVrDlbe+R7xrEyDr/2Wr67Ol0hRUgsfA+V5A95s= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0/go.mod h1:s75jGIWA9OfCMzF0xr+ZgfrB5FEbbV7UuYo32ahUiFI= @@ -2512,16 +2524,18 @@ go.opentelemetry.io/otel/metric v1.23.0/go.mod h1:MqUW2X2a6Q8RN96E2/nqNoT+z9BSms go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s= -go.opentelemetry.io/otel/metric v1.30.0 h1:4xNulvn9gjzo4hjg+wzIKG7iNFEaBMX00Qd4QIZs7+w= -go.opentelemetry.io/otel/metric v1.30.0/go.mod h1:aXTfST94tswhWEb+5QjlSqG+cZlmyXy/u8jFpor3WqQ= +go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE= +go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY= go.opentelemetry.io/otel/sdk v1.19.0/go.mod h1:NedEbbS4w3C6zElbLdPJKOpJQOrGUJ+GfzpjUvI0v1A= go.opentelemetry.io/otel/sdk v1.20.0/go.mod h1:rmkSx1cZCm/tn16iWDn1GQbLtsW/LvsdEEFzCSRM6V0= go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= go.opentelemetry.io/otel/sdk v1.22.0/go.mod h1:iu7luyVGYovrRpe2fmj3CVKouQNdTOkxtLzPvPz1DOc= go.opentelemetry.io/otel/sdk v1.27.0/go.mod h1:Ha9vbLwJE6W86YstIywK2xFfPjbWlCuwPtMkKdz/Y4A= go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg= -go.opentelemetry.io/otel/sdk v1.30.0 h1:cHdik6irO49R5IysVhdn8oaiR9m8XluDaJAs4DfOrYE= -go.opentelemetry.io/otel/sdk v1.30.0/go.mod h1:p14X4Ok8S+sygzblytT1nqG98QG2KYKv++HE0LY/mhg= +go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk= +go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0= +go.opentelemetry.io/otel/sdk/metric v1.31.0 h1:i9hxxLJF/9kkvfHppyLL55aW7iIJz4JjxTeYusH7zMc= +go.opentelemetry.io/otel/sdk/metric v1.31.0/go.mod h1:CRInTMVvNhUKgSAMbKyTMxqOBC0zgyxzW55lZzX43Y8= go.opentelemetry.io/otel/trace v1.19.0/go.mod h1:mfaSyvGyEJEI0nyV2I4qhNQnbBOUUmYZpYojqMnX2vo= go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU= go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= @@ -2530,8 +2544,8 @@ go.opentelemetry.io/otel/trace v1.23.0/go.mod h1:GSGTbIClEsuZrGIzoEHqsVfxgn5Ukgg go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI= -go.opentelemetry.io/otel/trace v1.30.0 h1:7UBkkYzeg3C7kQX8VAidWh2biiQbtAKjyIML8dQ9wmc= -go.opentelemetry.io/otel/trace v1.30.0/go.mod h1:5EyKqTzzmyqB9bwtCCq6pDLktPK6fmGf/Dph+8VI02o= +go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys= +go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= @@ -2801,8 +2815,9 @@ golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5H golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8= golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= -golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE= +golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -3410,8 +3425,8 @@ google.golang.org/genproto/googleapis/api v0.0.0-20240513163218-0867130af1f8/go. google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5/go.mod h1:RGnPtTG7r4i8sPlNyDeikXF99hMM+hN6QMm4ooG9g2g= google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157/go.mod h1:99sLkeliLXfdj2J75X3Ho+rrVCaJze0uwN7zDDkjPVU= google.golang.org/genproto/googleapis/api v0.0.0-20240826202546-f6391c0de4c7/go.mod h1:OCdP9MfskevB/rbYvHTsXTtKC+3bHWajPdoKgjcYkfo= -google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1:hjSy6tcFQZ171igDaN5QHOw2n6vx40juYbC/x67CEhc= -google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I= +google.golang.org/genproto/googleapis/api v0.0.0-20241118233622-e639e219e697 h1:pgr/4QbFyktUv9CtQ/Fq4gzEE6/Xs7iCXbktaGzLHbQ= +google.golang.org/genproto/googleapis/api v0.0.0-20241118233622-e639e219e697/go.mod h1:+D9ySVjN8nY8YCVjc5O7PZDIdZporIDY3KaGfJunh88= google.golang.org/genproto/googleapis/bytestream v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:ylj+BE99M198VPbBh6A8d9n3w8fChvyLK3wwBOjXBFA= google.golang.org/genproto/googleapis/bytestream v0.0.0-20230807174057-1744710a1577/go.mod h1:NjCQG/D8JandXxM57PZbAJL1DCNL6EypA0vPPwfsc7c= google.golang.org/genproto/googleapis/bytestream v0.0.0-20231030173426-d783a09b4405/go.mod h1:GRUCuLdzVqZte8+Dl/D4N25yLzcGqqWaYkeVOwulFqw= @@ -3463,8 +3478,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157/go. google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= google.golang.org/genproto/googleapis/rpc v0.0.0-20240823204242-4ba0660f739c/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/genproto/googleapis/rpc v0.0.0-20240826202546-f6391c0de4c7/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241118233622-e639e219e697 h1:LWZqQOEjDyONlF1H6afSWpAL/znlREo2tHfLoe+8LMA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241118233622-e639e219e697/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -3525,8 +3540,8 @@ google.golang.org/grpc v1.63.0/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDom google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= -google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= -google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= +google.golang.org/grpc v1.69.2 h1:U3S9QEtbXC0bYNvRtcoklF3xGtLViumSYxWykJS+7AU= +google.golang.org/grpc v1.69.2/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= From ab67577bb547b0e334b4e4a4afbfc86bb58d42db Mon Sep 17 00:00:00 2001 From: Tomislav Plavcic Date: Mon, 3 Feb 2025 12:05:51 +0100 Subject: [PATCH 3/3] EVEREST-1829 - Add support to run upgrade test on feature build (#1069) * EVEREST-1829 - Add support to run upgrade test on feature build * chore: lint/format * Fix db-cluster/db-wizard/create-db-cluster/sharding.e2e.ts test * Add cluster delete to db-cluster-details/edit-db-cluster/db-version-upgrade.e2e.ts test * Return waiting for cluster deletion * Empty commit * Increase timeout for cluster deletion in sharding test --------- Co-authored-by: tplavcic <4625195+tplavcic@users.noreply.github.com> --- ui/apps/everest/.e2e/constants.ts | 9 +++++-- .../edit-db-cluster/db-version-upgrade.e2e.ts | 11 ++++----- .../create-db-cluster/sharding.e2e.ts | 3 ++- .../everest/.e2e/upgrade/post-upgrade.e2e.ts | 4 ++-- ui/apps/everest/.e2e/upgrade/testData.ts | 24 ++++++++++++------- ui/apps/everest/.e2e/utils/db-cluster.ts | 1 - ui/apps/everest/.e2e/utils/generic.ts | 22 +++++++++++------ 7 files changed, 47 insertions(+), 27 deletions(-) diff --git a/ui/apps/everest/.e2e/constants.ts b/ui/apps/everest/.e2e/constants.ts index a5a1f0fdf..5fcd0d4a4 100644 --- a/ui/apps/everest/.e2e/constants.ts +++ b/ui/apps/everest/.e2e/constants.ts @@ -1,5 +1,9 @@ -const { EVEREST_BUCKETS_NAMESPACES_MAP, EVEREST_DIR, TAG_FOR_UPGRADE } = - process.env; +const { + EVEREST_BUCKETS_NAMESPACES_MAP, + EVEREST_DIR, + TAG_FOR_UPGRADE, + FB_BUILD, +} = process.env; type BucketsNamespaceMap = [string, string[]][]; @@ -17,6 +21,7 @@ export const getBucketNamespacesMap = (): BucketsNamespaceMap => export const everestdir = EVEREST_DIR; export const everestTagForUpgrade = TAG_FOR_UPGRADE; +export const everestFeatureBuildForUpgrade = FB_BUILD; const second = 1_000; const minute = 60 * second; diff --git a/ui/apps/everest/.e2e/pr/db-cluster-details/edit-db-cluster/db-version-upgrade.e2e.ts b/ui/apps/everest/.e2e/pr/db-cluster-details/edit-db-cluster/db-version-upgrade.e2e.ts index 979e882e0..3451c2290 100644 --- a/ui/apps/everest/.e2e/pr/db-cluster-details/edit-db-cluster/db-version-upgrade.e2e.ts +++ b/ui/apps/everest/.e2e/pr/db-cluster-details/edit-db-cluster/db-version-upgrade.e2e.ts @@ -6,7 +6,7 @@ import { } from '@e2e/utils/db-clusters-list'; import { getClusterDetailedInfo } from '@e2e/utils/storage-class'; import { moveForward, submitWizard } from '@e2e/utils/db-wizard'; -import { waitForStatus } from '@e2e/utils/table'; +import { waitForStatus, waitForDelete } from '@e2e/utils/table'; import { selectDbEngine } from '@e2e/pr/db-cluster/db-wizard/db-wizard-utils'; let token: string; @@ -135,11 +135,10 @@ let token: string; }); }); - // test(`Delete cluster [${db} size ${size}]`, async ({ page }) => { - // await deleteDbCluster(page, clusterName); - // await waitForStatus(page, clusterName, 'Deleting', 15000); - // await waitForDelete(page, clusterName, 240000); - // }); + test(`Delete cluster [${db} size ${size}]`, async ({ page }) => { + await deleteDbCluster(page, clusterName); + await waitForDelete(page, clusterName, 240000); + }); }); } ); diff --git a/ui/apps/everest/.e2e/pr/db-cluster/db-wizard/create-db-cluster/sharding.e2e.ts b/ui/apps/everest/.e2e/pr/db-cluster/db-wizard/create-db-cluster/sharding.e2e.ts index 195ecba92..7e549509c 100644 --- a/ui/apps/everest/.e2e/pr/db-cluster/db-wizard/create-db-cluster/sharding.e2e.ts +++ b/ui/apps/everest/.e2e/pr/db-cluster/db-wizard/create-db-cluster/sharding.e2e.ts @@ -130,7 +130,8 @@ test.describe('Sharding (psmdb)', () => { ).toBeVisible(); await deleteDbCluster(page, dbName); - await waitForDelete(page, dbName, 240000); + // TODO: Waiting for cluster deletion should be re-checked afer fix for: https://perconadev.atlassian.net/browse/EVEREST-1849 + await waitForDelete(page, dbName, 600000); }); test('Mongo with sharding should not pass multinode cluster creation if config servers = 1', async ({ diff --git a/ui/apps/everest/.e2e/upgrade/post-upgrade.e2e.ts b/ui/apps/everest/.e2e/upgrade/post-upgrade.e2e.ts index 90708cb56..c080e5443 100644 --- a/ui/apps/everest/.e2e/upgrade/post-upgrade.e2e.ts +++ b/ui/apps/everest/.e2e/upgrade/post-upgrade.e2e.ts @@ -162,7 +162,7 @@ test.describe('Post upgrade tests', { tag: '@post-upgrade' }, async () => { page, `${operator.shortName}-db-cluster`, 'Up', - TIMEOUTS.ThreeMinutes + TIMEOUTS.FiveMinutes ); }); } @@ -229,7 +229,7 @@ test.describe('Post upgrade tests', { tag: '@post-upgrade' }, async () => { 'Initializing', TIMEOUTS.ThreeMinutes ); - await waitForStatus(page, `${c.name}`, 'Up', TIMEOUTS.ThreeMinutes); + await waitForStatus(page, `${c.name}`, 'Up', TIMEOUTS.FiveMinutes); }); } diff --git a/ui/apps/everest/.e2e/upgrade/testData.ts b/ui/apps/everest/.e2e/upgrade/testData.ts index 5fd2a0593..6eb24fe20 100644 --- a/ui/apps/everest/.e2e/upgrade/testData.ts +++ b/ui/apps/everest/.e2e/upgrade/testData.ts @@ -1,4 +1,7 @@ -import { everestTagForUpgrade } from '@e2e/constants'; +import { + everestTagForUpgrade, + everestFeatureBuildForUpgrade, +} from '@e2e/constants'; export const pxcDBCluster = { name: 'pxc-db-cluster', @@ -37,7 +40,13 @@ export const postgresDBCluster = { export const expectedEverestUpgradeLog = ( tag = everestTagForUpgrade.replace(/v/g, '') ) => { - return `ℹ️ Upgrading Everest to version ${tag} + const version = + typeof everestFeatureBuildForUpgrade !== 'undefined' && + everestFeatureBuildForUpgrade + ? everestFeatureBuildForUpgrade + : tag; + + return `ℹ️ Upgrading Everest to version ${version} ✓ Upgrading Custom Resource Definitions ✓ Upgrading Helm chart @@ -45,15 +54,14 @@ export const expectedEverestUpgradeLog = ( ✓ Ensuring Everest operator deployment is ready ✓ Ensuring Everest CatalogSource is ready - 🚀 Everest has been upgraded to version ${tag} - + 🚀 Everest has been upgraded to version ${version} -To view the password for the 'admin' user, run the following command: -everestctl accounts initial-admin-password +Run the following command to get the initial admin password: + everestctl accounts initial-admin-password -IMPORTANT: This password is NOT stored in a hashed format. To secure it, update the password using the following command: +NOTE: The initial password is stored in plain text. For security, change it immediately using the following command: -everestctl accounts set-password --username admin`; + everestctl accounts set-password --username admin`; }; diff --git a/ui/apps/everest/.e2e/utils/db-cluster.ts b/ui/apps/everest/.e2e/utils/db-cluster.ts index 84991e630..10d2d5653 100644 --- a/ui/apps/everest/.e2e/utils/db-cluster.ts +++ b/ui/apps/everest/.e2e/utils/db-cluster.ts @@ -21,7 +21,6 @@ import { getTokenFromLocalStorage } from './localStorage'; import { getNamespacesFn } from './namespaces'; import { DbType } from '@percona/types'; import { checkError, getVersionServiceURL } from '@e2e/utils/generic'; -import { execSync } from 'child_process'; export const createDbClusterFn = async ( request: APIRequestContext, diff --git a/ui/apps/everest/.e2e/utils/generic.ts b/ui/apps/everest/.e2e/utils/generic.ts index f2d93501a..afa5bcfe8 100644 --- a/ui/apps/everest/.e2e/utils/generic.ts +++ b/ui/apps/everest/.e2e/utils/generic.ts @@ -15,6 +15,7 @@ import { expect } from '@playwright/test'; import { execSync } from 'child_process'; +import { everestFeatureBuildForUpgrade } from '@e2e/constants'; export const checkError = async (response) => { if (!response.ok()) { @@ -25,12 +26,19 @@ export const checkError = async (response) => { }; export const getVersionServiceURL = async () => { - try { - const command = `kubectl get deployment everest-server --namespace everest-system -o jsonpath="{.spec.template.spec.containers[0].env[?(@.name=='VERSION_SERVICE_URL')].value}"`; - const output = execSync(command).toString(); - return output; - } catch (error) { - console.error(`Error executing command: ${error}`); - throw error; + if ( + typeof everestFeatureBuildForUpgrade !== 'undefined' && + everestFeatureBuildForUpgrade + ) { + return 'http://localhost:8081'; + } else { + try { + const command = `kubectl get deployment everest-server --namespace everest-system -o jsonpath="{.spec.template.spec.containers[0].env[?(@.name=='VERSION_SERVICE_URL')].value}"`; + const output = execSync(command).toString(); + return output; + } catch (error) { + console.error(`Error executing command: ${error}`); + throw error; + } } };