diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index fcb580427a..0a105f371a 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,3 +1,3 @@ -* @hors @egegunes @inelpandzic @pooknull -/e2e-tests/ @tplavcic @nmarukovich @ptankov @jvpasinatto @eleo007 -Jenkinsfile @tplavcic @nmarukovich @ptankov @jvpasinatto @eleo007 +* @hors @egegunes @pooknull @nmarukovich @gkech +/e2e-tests/ @ptankov @jvpasinatto @eleo007 +Jenkinsfile @ptankov @jvpasinatto @eleo007 diff --git a/.github/linters/go.mod b/.github/linters/go.mod index afdab79548..4cbfd91f14 100644 --- a/.github/linters/go.mod +++ b/.github/linters/go.mod @@ -1,3 +1,3 @@ module linters -go 1.13 +go 1.23.4 diff --git a/.github/workflows/reviewdog.yml b/.github/workflows/reviewdog.yml index 6c79291416..b0e4248d43 100644 --- a/.github/workflows/reviewdog.yml +++ b/.github/workflows/reviewdog.yml @@ -8,7 +8,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: - go-version: '1.21' + go-version: '1.23' - name: golangci-lint uses: golangci/golangci-lint-action@v6 with: @@ -34,7 +34,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: - go-version: '1.21' + go-version: '1.23' - run: go install mvdan.cc/sh/v3/cmd/shfmt@latest - run: $(go env GOPATH)/bin/shfmt -f . | grep -v 'vendor' | xargs $(go env GOPATH)/bin/shfmt -bn -ci -s -w - name: suggester / shfmt @@ -85,7 +85,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: - go-version: '1.21' + go-version: '1.23' - name: check on release branch if: ${{ contains(github.head_ref, 'release-') || contains(github.base_ref, 'release-') }} run: | diff --git a/.github/workflows/scan.yml b/.github/workflows/scan.yml index d179f5fffd..d045319f8c 100644 --- a/.github/workflows/scan.yml +++ b/.github/workflows/scan.yml @@ -31,7 +31,7 @@ jobs: ./e2e-tests/build - name: Run Trivy vulnerability scanner image (linux/arm64) - uses: aquasecurity/trivy-action@0.28.0 + uses: aquasecurity/trivy-action@0.29.0 with: image-ref: '${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}-arm64' format: 'table' @@ -50,7 +50,7 @@ jobs: ./e2e-tests/build - name: Run Trivy vulnerability scanner image (linux/amd64) - uses: aquasecurity/trivy-action@0.28.0 + uses: aquasecurity/trivy-action@0.29.0 with: image-ref: '${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}-amd64' format: 'table' diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 30bde4e992..c613450266 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -7,7 +7,7 @@ jobs: steps: - uses: actions/setup-go@v5 with: - go-version: '1.21' + go-version: '1.23' - uses: actions/checkout@v4 - name: go test run: make test diff --git a/Jenkinsfile b/Jenkinsfile index 0ad3383f28..be0e7fbe8c 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -361,7 +361,7 @@ EOF --rm \ -v $WORKSPACE/src/github.com/percona/percona-xtradb-cluster-operator:/go/src/github.com/percona/percona-xtradb-cluster-operator \ -w /go/src/github.com/percona/percona-xtradb-cluster-operator \ - golang:1.22 sh -c ' + golang:1.23 sh -c ' go install -mod=readonly github.com/google/go-licenses@latest; /go/bin/go-licenses csv github.com/percona/percona-xtradb-cluster-operator/cmd/manager \ | cut -d , -f 3 \ @@ -390,7 +390,7 @@ EOF -w /go/src/github.com/percona/percona-xtradb-cluster-operator \ -e GO111MODULE=on \ -e GOFLAGS='-buildvcs=false' \ - golang:1.22 sh -c 'go build -v -o percona-xtradb-cluster-operator github.com/percona/percona-xtradb-cluster-operator/cmd/manager' + golang:1.23 sh -c 'go build -v -o percona-xtradb-cluster-operator github.com/percona/percona-xtradb-cluster-operator/cmd/manager' " ''' diff --git a/Makefile b/Makefile index 1d806c99da..4a97bea173 100644 --- a/Makefile +++ b/Makefile @@ -101,6 +101,10 @@ ENVTEST = $(shell pwd)/bin/setup-envtest envtest: ## Download envtest-setup locally if necessary. $(call go-get-tool,$(ENVTEST),sigs.k8s.io/controller-runtime/tools/setup-envtest@latest) +SWAGGER = $(shell pwd)/bin/swagger +swagger: ## Download swagger locally if necessary. + $(call go-get-tool,$(SWAGGER),github.com/go-swagger/go-swagger/cmd/swagger@latest) + # Prepare release CERT_MANAGER_VER := $(shell grep -Eo "cert-manager v.*" go.mod|grep -Eo "[0-9]+\.[0-9]+\.[0-9]+") release: manifests @@ -141,3 +145,16 @@ after-release: manifests -e "/^ backup:/,/^ image:/{s#image: .*#image: perconalab/percona-xtradb-cluster-operator:main-pxc8.0-backup#}" \ -e "/initContainer:/,/image:/{s#image: .*#image: perconalab/percona-xtradb-cluster-operator:main#}" \ -e "/^ pmm:/,/^ image:/{s#image: .*#image: perconalab/pmm-client:dev-latest#}" deploy/cr.yaml + +VS_BRANCH = main +version-service-client: swagger + curl https://raw.githubusercontent.com/Percona-Lab/percona-version-service/$(VS_BRANCH)/api/version.swagger.yaml \ + --output ./version.swagger.yaml + rm -rf ./version/client + mkdir -p ./version/client/models + mkdir -p ./version/client/version_service + ./bin/swagger generate client \ + -f ./version.swagger.yaml \ + -c ./version/client \ + -m ./version/client/models + rm ./version.swagger.yaml diff --git a/README.md b/README.md index fbcaec1267..6e1ba1f414 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ [Percona Operator for MySQL based on Percona XtraDB Cluster](https://docs.percona.com/percona-operator-for-mysql/pxc/index.html) (PXC) automates the creation and management of highly available, enterprise-ready MySQL database clusters on Kubernetes. -Within the [Percona Operator for MySQL based on Percona XtraDB Cluster](https://www.percona.com/doc/kubernetes-operator-for-pxc/index.html) we have implemented our best practices for deployment and configuration Percona XtraDB Cluster instances in a Kubernetes-based environment on-premises or in the cloud. The Operator provides the following capabilities to keep the cluster healthy: +Within the [Percona Operator for MySQL based on Percona XtraDB Cluster](https://www.percona.com/doc/kubernetes-operator-for-pxc/index.html) we have implemented our best practices for deployment and configuration of Percona XtraDB Cluster instances in a Kubernetes-based environment on-premises or in the cloud. The Operator provides the following capabilities to keep the cluster healthy: * Easy deployment with no single point of failure * Load balancing and proxy service with either HAProxy or ProxySQL @@ -21,8 +21,7 @@ Within the [Percona Operator for MySQL based on Percona XtraDB Cluster](https:// * Automated Password Rotation – use the standard Kubernetes API to enforce password rotation policies for system user * Private container image registries -You interact with Percona Operator mostly via the command line tool. If you feel more comfortable with operating the Operator and database clusters via the web interface, there is [Percona Everest](https://docs.percona.com/everest/index.html) - an open-source web-based database provisioning tool available for you. It automates day-to-day database management operations for you, reducing the overall administrative overhead. [Get started with Percona Everest](https://docs.percona.com/everest/quickstart-guide/quick-install.html). - +While the Percona Operator is primarily managed through the command line, you can also use **[Percona Everest](https://docs.percona.com/everest/index.html)** for a web-based user interface. This open-source tool provides a streamlined experience for provisioning and managing your databases, simplifying day-to-day tasks and reducing administrative overhead. Learn more about Percona Everest in the [documentation](https://docs.percona.com/everest/index.html) or jump right in with the [quickstart guide](https://docs.percona.com/everest/quickstart-guide/quick-install.html). # Architecture @@ -57,41 +56,24 @@ kubectl apply -f https://raw.githubusercontent.com/percona/percona-xtradb-cluste See full documentation with examples and various advanced cases on [percona.com](https://www.percona.com/doc/kubernetes-operator-for-pxc/index.html). +# Need help? + +**Commercial Support** | **Community Support** | +:-: | :-: | +|
Enterprise-grade assistance for your mission-critical MySQL deployments with the Percona Operator for MySQL. Get expert guidance for complex tasks like multi-cloud replication, database migration and building platforms.

|
Connect with our engineers and fellow users for general questions, troubleshooting, and sharing feedback and ideas.

| +| **[Get Percona Support](https://hubs.ly/Q02ZTH940)** | **[Visit our Forum](https://forums.percona.com/c/mysql-mariadb/percona-kubernetes-operator-for-mysql/28)** | + # Contributing Percona welcomes and encourages community contributions to help improve Percona Operator for MySQL. See the [Contribution Guide](CONTRIBUTING.md) and [Building and Testing Guide](e2e-tests/README.md) for more information on how you can contribute. -## Communication - -We would love to hear from you! Reach out to us on [Forum](https://forums.percona.com/c/mysql-mariadb/percona-kubernetes-operator-for-mysql/28) with your questions, feedback and ideas - -# Join Percona Kubernetes Squad! -``` - % _____ - %%% | __ \ - ###%%%%%%%%%%%%* | |__) |__ _ __ ___ ___ _ __ __ _ - ### ##%% %%%% | ___/ _ \ '__/ __/ _ \| '_ \ / _` | - #### ##% %%%% | | | __/ | | (_| (_) | | | | (_| | - ### #### %%% |_| \___|_| \___\___/|_| |_|\__,_| - ,((### ### %%% _ _ _____ _ - (((( (### #### %%%% | | / _ \ / ____| | | - ((( ((# ###### | | _| (_) |___ | (___ __ _ _ _ __ _ __| | - (((( (((# #### | |/ /> _ ${CFG} grep -E -q "^[#]?log_error_suppression_list" "$CFG" || sed '/^\[mysqld\]/a log_error_suppression_list="MY-010055"\n' ${CFG} 1<>${CFG} else diff --git a/build/pxc-entrypoint.sh b/build/pxc-entrypoint.sh index 1562e8e4d6..9f12e2b97c 100755 --- a/build/pxc-entrypoint.sh +++ b/build/pxc-entrypoint.sh @@ -165,7 +165,7 @@ if [ -f "$vault_secret" ]; then sed -i "/\[mysqld\]/a early-plugin-load=keyring_vault.so" $CFG sed -i "/\[mysqld\]/a keyring_vault_config=$vault_secret" $CFG - if [ "$MYSQL_VERSION" == '8.0' ]; then + if [[ "$MYSQL_VERSION" =~ ^(8\.0|8\.4)$ ]]; then sed -i "/\[mysqld\]/a default_table_encryption=ON" $CFG sed -i "/\[mysqld\]/a table_encryption_privilege_check=ON" $CFG sed -i "/\[mysqld\]/a innodb_undo_log_encrypt=ON" $CFG @@ -189,12 +189,11 @@ fi grep -q "^progress=" $CFG && sed -i "s|^progress=.*|progress=1|" $CFG grep -q "^\[sst\]" "$CFG" || printf '[sst]\n' >>"$CFG" grep -q "^cpat=" "$CFG" || sed '/^\[sst\]/a cpat=.*\\.pem$\\|.*init\\.ok$\\|.*galera\\.cache$\\|.*wsrep_recovery_verbose\\.log$\\|.*readiness-check\\.sh$\\|.*liveness-check\\.sh$\\|.*get-pxc-state$\\|.*sst_in_progress$\\|.*sleep-forever$\\|.*pmm-prerun\\.sh$\\|.*sst-xb-tmpdir$\\|.*\\.sst$\\|.*gvwstate\\.dat$\\|.*grastate\\.dat$\\|.*\\.err$\\|.*\\.log$\\|.*RPM_UPGRADE_MARKER$\\|.*RPM_UPGRADE_HISTORY$\\|.*pxc-entrypoint\\.sh$\\|.*unsafe-bootstrap\\.sh$\\|.*pxc-configure-pxc\\.sh\\|.*peer-list$\\|.*auth_plugin$\\|.*version_info$\\|.*mysql-state-monitor$\\|.*mysql-state-monitor\\.log$\\|.*notify\\.sock$\\|.*mysql\\.state$' "$CFG" 1<>"$CFG" -if [[ $MYSQL_VERSION == '8.0' ]]; then - if [[ $MYSQL_PATCH_VERSION -ge 26 ]]; then - grep -q "^skip_replica_start=ON" "$CFG" || sed -i "/\[mysqld\]/a skip_replica_start=ON" $CFG - else - grep -q "^skip_slave_start=ON" "$CFG" || sed -i "/\[mysqld\]/a skip_slave_start=ON" $CFG - fi + +if [[ $MYSQL_VERSION == '8.0' && $MYSQL_PATCH_VERSION -ge 26 ]] || [[ $MYSQL_VERSION == '8.4' ]]; then + grep -q "^skip_replica_start=ON" "$CFG" || sed -i "/\[mysqld\]/a skip_replica_start=ON" $CFG +else + grep -q "^skip_slave_start=ON" "$CFG" || sed -i "/\[mysqld\]/a skip_slave_start=ON" $CFG fi auth_plugin=${DEFAULT_AUTHENTICATION_PLUGIN} @@ -220,7 +219,7 @@ fi echo "${auth_plugin}" >/var/lib/mysql/auth_plugin sed -i "/default_authentication_plugin/d" $CFG -if [[ $MYSQL_VERSION == '8.0' && $MYSQL_PATCH_VERSION -ge 27 ]]; then +if [[ $MYSQL_VERSION == '8.0' && $MYSQL_PATCH_VERSION -ge 27 ]] || [[ $MYSQL_VERSION == "8.4" ]]; then sed -i "/\[mysqld\]/a authentication_policy=${auth_plugin},," $CFG else sed -i "/\[mysqld\]/a default_authentication_plugin=${auth_plugin}" $CFG @@ -294,7 +293,8 @@ if [[ -z ${WSREP_CLUSTER_NAME} || ${WSREP_CLUSTER_NAME} == 'noname' ]]; then exit 1 fi -if [[ -n ${NOTIFY_SOCKET} && ${MYSQL_VERSION} == '8.0' ]]; then +if [[ -n ${MYSQL_NOTIFY_SOCKET} && ${MYSQL_VERSION} =~ ^(8\.0|8\.4)$ ]]; then + export NOTIFY_SOCKET=${MYSQL_NOTIFY_SOCKET} nohup /var/lib/mysql/mysql-state-monitor >/var/lib/mysql/mysql-state-monitor.log 2>&1 < /dev/null & fi @@ -327,7 +327,11 @@ if [ -z "$CLUSTER_JOIN" ] && [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then echo 'Initializing database' # we initialize database into $TMPDIR because "--initialize-insecure" option does not work if directory is not empty # in some cases storage driver creates unremovable artifacts (see K8SPXC-286), so $DATADIR cleanup is not possible - "$@" --initialize-insecure --skip-ssl --datadir="$TMPDIR" + if [[ $MYSQL_VERSION == "8.4" ]]; then + "$@" --initialize-insecure --datadir="$TMPDIR" + else + "$@" --initialize-insecure --skip-ssl --datadir="$TMPDIR" + fi mv "$TMPDIR"/* "$DATADIR/" rm -rfv "$TMPDIR" echo 'Database initialized' @@ -385,7 +389,7 @@ if [ -z "$CLUSTER_JOIN" ] && [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then file_env 'MONITOR_HOST' 'localhost' file_env 'MONITOR_PASSWORD' 'monitor' 'monitor' file_env 'REPLICATION_PASSWORD' 'replication' 'replication' - if [ "$MYSQL_VERSION" == '8.0' ]; then + if [[ "$MYSQL_VERSION" =~ ^(8\.0|8\.4)$ ]]; then read -r -d '' monitorConnectGrant <<-EOSQL || true GRANT SERVICE_CONNECTION_ADMIN ON *.* TO 'monitor'@'${MONITOR_HOST}'; EOSQL @@ -393,7 +397,7 @@ if [ -z "$CLUSTER_JOIN" ] && [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then # SYSTEM_USER since 8.0.16 # https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_system-user - if [[ $MYSQL_VERSION == "8.0" ]] && ((MYSQL_PATCH_VERSION >= 16)); then + if [[ $MYSQL_VERSION == "8.0" ]] && ((MYSQL_PATCH_VERSION >= 16)) || [[ $MYSQL_VERSION == "8.4" ]]; then read -r -d '' systemUserGrant <<-EOSQL || true GRANT SYSTEM_USER ON *.* TO 'monitor'@'${MONITOR_HOST}'; EOSQL @@ -518,19 +522,11 @@ if [ "$1" = 'mysqld' -a -z "$wantHelp" ]; then fi set -x - if [[ ${MYSQL_VERSION} == '8.0' ]]; then - mysqlState="startup" - while [[ "${mysqlState}" != "ready" ]]; do - mysqlState=$(tr -d '\0' < ${MYSQL_STATE_FILE}) - echo >&2 "MySQL upgrade process in progress..." - sleep 1 - done - fi for i in {120..0}; do if echo 'SELECT 1' | "${mysql[@]}" &>/dev/null; then break fi - + echo >&2 "MySQL upgrade process in progress..." sleep 1 done if [ "$i" = 0 ]; then diff --git a/build/readiness-check.sh b/build/readiness-check.sh index fbb35248b4..7673872759 100755 --- a/build/readiness-check.sh +++ b/build/readiness-check.sh @@ -16,11 +16,6 @@ MYSQL_PASSWORD="${mysql_pass:-$MONITOR_PASSWORD}" DEFAULTS_EXTRA_FILE=${DEFAULTS_EXTRA_FILE:-/etc/my.cnf} AVAILABLE_WHEN_DONOR=${AVAILABLE_WHEN_DONOR:-1} NODE_IP=$(hostname -I | awk ' { print $1 } ') -MYSQL_STATE=ready -if [[ ${MYSQL_VERSION} == '8.0' ]]; then - MYSQL_STATE=$(tr -d '\0' < ${MYSQL_STATE_FILE}) -fi - #Timeout exists for instances where mysqld may be hung TIMEOUT=$((${READINESS_CHECK_TIMEOUT:-10} - 1)) @@ -40,8 +35,7 @@ WSREP_STATUS=($(MYSQL_PWD="${MYSQL_PASSWORD}" $MYSQL_CMDLINE --init-command="SET sed -n -e '2p' -e '5p' | tr '\n' ' ')) set -x -if [[ "${MYSQL_STATE}" == "ready" && ${WSREP_STATUS[1]} == 'Primary' && - (${WSREP_STATUS[0]} -eq 4 || (${WSREP_STATUS[0]} -eq 2 && $AVAILABLE_WHEN_DONOR -eq 1)) ]]; then +if [[ ${WSREP_STATUS[1]} == 'Primary' && (${WSREP_STATUS[0]} -eq 4 || (${WSREP_STATUS[0]} -eq 2 && $AVAILABLE_WHEN_DONOR -eq 1)) ]]; then exit 0 else exit 1 diff --git a/cmd/mysql-state-monitor/main.go b/cmd/mysql-state-monitor/main.go index 912268bab2..33468edb7b 100644 --- a/cmd/mysql-state-monitor/main.go +++ b/cmd/mysql-state-monitor/main.go @@ -8,6 +8,12 @@ import ( "strings" ) +var ( + GitCommit string + GitBranch string + BuildTime string +) + type MySQLState string const ( @@ -33,27 +39,67 @@ func parseDatum(datum string) MySQLState { switch status { case "Server is operational": return MySQLReady - case "Server shutdown in progress": + case "Server shutdown in progress", + "Forceful shutdown of connections in progress", + "Graceful shutdown of connections in progress", + "Components initialization unsuccessful", + "Execution of SQL Commands from Init-file unsuccessful", + "Initialization of dynamic plugins unsuccessful", + "Initialization of MySQL system tables unsuccessful", + "InnoDB crash recovery unsuccessful", + "InnoDB initialization unsuccessful": return MySQLDown case "Server startup in progress", - "Data Dictionary upgrade in progress", - "Data Dictionary upgrade complete", + "Server initialization in progress", "Server upgrade in progress", "Server upgrade complete", "Server downgrade in progress", "Server downgrade complete", + "Data Dictionary upgrade in progress", + "Data Dictionary upgrade complete", "Data Dictionary upgrade from MySQL 5.7 in progress", "Data Dictionary upgrade from MySQL 5.7 complete", + "Components initialization in progress", + "Components initialization successful", + "Connection shutdown complete", + "Execution of SQL Commands from Init-file in progress", + "Execution of SQL Commands from Init-file successful", + "Initialization of dynamic plugins in progress", + "Initialization of dynamic plugins successful", + "Initialization of MySQL system tables in progress", + "Initialization of MySQL system tables successful", + "InnoDB crash recovery in progress", + "InnoDB crash recovery successful", + "InnoDB initialization in progress", + "InnoDB initialization successful", + "Shutdown of plugins complete", + "Shutdown of components in progress", + "Shutdown of components successful", + "Shutdown of plugins in progress", + "Shutdown of replica threads in progress", "Server shutdown complete": // we treat this as startup because during init, MySQL notifies this even if it's up return MySQLStartup } + + // these statuses have variables in it + // that's why we're handling them separately + switch { + case strings.HasPrefix(status, "Pre DD shutdown of MySQL SE plugin"): + return MySQLStartup + case strings.HasPrefix(status, "Server shutdown complete"): + return MySQLStartup + case strings.HasPrefix(status, "Server initialization complete"): + return MySQLStartup + } + } return MySQLUnknown } func main() { - log.Println("Starting mysql-state-monitor") + log.Println("Starting mysql-state-monitor...") + log.Printf("GitCommit=%s GitBranch=%s BuildTime=%s", GitCommit, GitBranch, BuildTime) socketPath, ok := os.LookupEnv("NOTIFY_SOCKET") if !ok { diff --git a/config/crd/bases/pxc.percona.com_perconaxtradbclusters.yaml b/config/crd/bases/pxc.percona.com_perconaxtradbclusters.yaml index 4524cfb602..e4767daa27 100644 --- a/config/crd/bases/pxc.percona.com_perconaxtradbclusters.yaml +++ b/config/crd/bases/pxc.percona.com_perconaxtradbclusters.yaml @@ -793,6 +793,8 @@ spec: runAsUser: format: int64 type: integer + seLinuxChangePolicy: + type: string seLinuxOptions: properties: level: @@ -1954,6 +1956,8 @@ spec: runAsUser: format: int64 type: integer + seLinuxChangePolicy: + type: string seLinuxOptions: properties: level: @@ -5218,6 +5222,8 @@ spec: runAsUser: format: int64 type: integer + seLinuxChangePolicy: + type: string seLinuxOptions: properties: level: @@ -8106,6 +8112,8 @@ spec: runAsUser: format: int64 type: integer + seLinuxChangePolicy: + type: string seLinuxOptions: properties: level: diff --git a/deploy/bundle.yaml b/deploy/bundle.yaml index 5555405b7d..48cfacbf03 100644 --- a/deploy/bundle.yaml +++ b/deploy/bundle.yaml @@ -1713,6 +1713,8 @@ spec: runAsUser: format: int64 type: integer + seLinuxChangePolicy: + type: string seLinuxOptions: properties: level: @@ -2874,6 +2876,8 @@ spec: runAsUser: format: int64 type: integer + seLinuxChangePolicy: + type: string seLinuxOptions: properties: level: @@ -6138,6 +6142,8 @@ spec: runAsUser: format: int64 type: integer + seLinuxChangePolicy: + type: string seLinuxOptions: properties: level: @@ -9026,6 +9032,8 @@ spec: runAsUser: format: int64 type: integer + seLinuxChangePolicy: + type: string seLinuxOptions: properties: level: diff --git a/deploy/cr-minimal.yaml b/deploy/cr-minimal.yaml index 26fccfbac3..ae69121c41 100644 --- a/deploy/cr-minimal.yaml +++ b/deploy/cr-minimal.yaml @@ -3,7 +3,7 @@ kind: PerconaXtraDBCluster metadata: name: minimal-cluster spec: - crVersion: 1.16.0 + crVersion: 1.17.0 secretsName: minimal-cluster-secrets unsafeFlags: tls: true diff --git a/deploy/cr.yaml b/deploy/cr.yaml index 42f319486d..7278d66f99 100644 --- a/deploy/cr.yaml +++ b/deploy/cr.yaml @@ -10,8 +10,8 @@ metadata: # annotations: # percona.com/issue-vault-token: "true" spec: - crVersion: 1.16.0 -# enableVolumeExpansion: true + crVersion: 1.17.0 +# enableVolumeExpansion: false # ignoreAnnotations: # - iam.amazonaws.com/role # ignoreLabels: diff --git a/deploy/crd.yaml b/deploy/crd.yaml index 364a833e88..ea2b5fe71a 100644 --- a/deploy/crd.yaml +++ b/deploy/crd.yaml @@ -1713,6 +1713,8 @@ spec: runAsUser: format: int64 type: integer + seLinuxChangePolicy: + type: string seLinuxOptions: properties: level: @@ -2874,6 +2876,8 @@ spec: runAsUser: format: int64 type: integer + seLinuxChangePolicy: + type: string seLinuxOptions: properties: level: @@ -6138,6 +6142,8 @@ spec: runAsUser: format: int64 type: integer + seLinuxChangePolicy: + type: string seLinuxOptions: properties: level: @@ -9026,6 +9032,8 @@ spec: runAsUser: format: int64 type: integer + seLinuxChangePolicy: + type: string seLinuxOptions: properties: level: diff --git a/deploy/cw-bundle.yaml b/deploy/cw-bundle.yaml index 40bd8b1bcd..94d9623bc6 100644 --- a/deploy/cw-bundle.yaml +++ b/deploy/cw-bundle.yaml @@ -1713,6 +1713,8 @@ spec: runAsUser: format: int64 type: integer + seLinuxChangePolicy: + type: string seLinuxOptions: properties: level: @@ -2874,6 +2876,8 @@ spec: runAsUser: format: int64 type: integer + seLinuxChangePolicy: + type: string seLinuxOptions: properties: level: @@ -6138,6 +6142,8 @@ spec: runAsUser: format: int64 type: integer + seLinuxChangePolicy: + type: string seLinuxOptions: properties: level: @@ -9026,6 +9032,8 @@ spec: runAsUser: format: int64 type: integer + seLinuxChangePolicy: + type: string seLinuxOptions: properties: level: diff --git a/e2e-tests/affinity/compare/statefulset_custom-pxc-k127-oc.yml b/e2e-tests/affinity/compare/statefulset_custom-pxc-k127-oc.yml index 85bd88018b..fe440e9a68 100644 --- a/e2e-tests/affinity/compare/statefulset_custom-pxc-k127-oc.yml +++ b/e2e-tests/affinity/compare/statefulset_custom-pxc-k127-oc.yml @@ -105,7 +105,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state @@ -155,7 +155,7 @@ spec: resources: limits: cpu: "1" - memory: 1G + memory: 2G requests: cpu: 600m memory: 1G diff --git a/e2e-tests/affinity/compare/statefulset_custom-pxc-k127.yml b/e2e-tests/affinity/compare/statefulset_custom-pxc-k127.yml index 07a30bfe38..7523daa624 100644 --- a/e2e-tests/affinity/compare/statefulset_custom-pxc-k127.yml +++ b/e2e-tests/affinity/compare/statefulset_custom-pxc-k127.yml @@ -105,7 +105,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state @@ -155,7 +155,7 @@ spec: resources: limits: cpu: "1" - memory: 1G + memory: 2G requests: cpu: 600m memory: 1G diff --git a/e2e-tests/affinity/compare/statefulset_custom-pxc-oc.yml b/e2e-tests/affinity/compare/statefulset_custom-pxc-oc.yml index bb535f98d4..d46257dc04 100644 --- a/e2e-tests/affinity/compare/statefulset_custom-pxc-oc.yml +++ b/e2e-tests/affinity/compare/statefulset_custom-pxc-oc.yml @@ -102,7 +102,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/affinity/compare/statefulset_custom-pxc.yml b/e2e-tests/affinity/compare/statefulset_custom-pxc.yml index 1f2ed28eca..fe227d30e3 100644 --- a/e2e-tests/affinity/compare/statefulset_custom-pxc.yml +++ b/e2e-tests/affinity/compare/statefulset_custom-pxc.yml @@ -102,7 +102,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/affinity/compare/statefulset_hostname-pxc-k127-oc.yml b/e2e-tests/affinity/compare/statefulset_hostname-pxc-k127-oc.yml index fc02957d8c..21fe723a55 100644 --- a/e2e-tests/affinity/compare/statefulset_hostname-pxc-k127-oc.yml +++ b/e2e-tests/affinity/compare/statefulset_hostname-pxc-k127-oc.yml @@ -78,7 +78,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state @@ -128,7 +128,7 @@ spec: resources: limits: cpu: "1" - memory: 1G + memory: 2G requests: cpu: 600m memory: 1G diff --git a/e2e-tests/affinity/compare/statefulset_hostname-pxc-k127.yml b/e2e-tests/affinity/compare/statefulset_hostname-pxc-k127.yml index e11dc0cb0b..2100d03134 100644 --- a/e2e-tests/affinity/compare/statefulset_hostname-pxc-k127.yml +++ b/e2e-tests/affinity/compare/statefulset_hostname-pxc-k127.yml @@ -78,7 +78,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state @@ -128,7 +128,7 @@ spec: resources: limits: cpu: "1" - memory: 1G + memory: 2G requests: cpu: 600m memory: 1G diff --git a/e2e-tests/affinity/compare/statefulset_hostname-pxc-oc.yml b/e2e-tests/affinity/compare/statefulset_hostname-pxc-oc.yml index 0fea26ac7f..5cb937c6a5 100644 --- a/e2e-tests/affinity/compare/statefulset_hostname-pxc-oc.yml +++ b/e2e-tests/affinity/compare/statefulset_hostname-pxc-oc.yml @@ -75,7 +75,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/affinity/compare/statefulset_hostname-pxc.yml b/e2e-tests/affinity/compare/statefulset_hostname-pxc.yml index 9519cb8efc..5d6f269bac 100644 --- a/e2e-tests/affinity/compare/statefulset_hostname-pxc.yml +++ b/e2e-tests/affinity/compare/statefulset_hostname-pxc.yml @@ -75,7 +75,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/affinity/compare/statefulset_region-pxc-k127-oc.yml b/e2e-tests/affinity/compare/statefulset_region-pxc-k127-oc.yml index e27ccfa7cc..a5ebd21f01 100644 --- a/e2e-tests/affinity/compare/statefulset_region-pxc-k127-oc.yml +++ b/e2e-tests/affinity/compare/statefulset_region-pxc-k127-oc.yml @@ -78,7 +78,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state @@ -128,7 +128,7 @@ spec: resources: limits: cpu: "1" - memory: 1G + memory: 2G requests: cpu: 600m memory: 1G diff --git a/e2e-tests/affinity/compare/statefulset_region-pxc-k127.yml b/e2e-tests/affinity/compare/statefulset_region-pxc-k127.yml index ee4c8945a5..5e6416abbd 100644 --- a/e2e-tests/affinity/compare/statefulset_region-pxc-k127.yml +++ b/e2e-tests/affinity/compare/statefulset_region-pxc-k127.yml @@ -78,7 +78,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state @@ -128,7 +128,7 @@ spec: resources: limits: cpu: "1" - memory: 1G + memory: 2G requests: cpu: 600m memory: 1G diff --git a/e2e-tests/affinity/compare/statefulset_region-pxc-oc.yml b/e2e-tests/affinity/compare/statefulset_region-pxc-oc.yml index 4d8dd6e001..fbb2107b8b 100644 --- a/e2e-tests/affinity/compare/statefulset_region-pxc-oc.yml +++ b/e2e-tests/affinity/compare/statefulset_region-pxc-oc.yml @@ -75,7 +75,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/affinity/compare/statefulset_region-pxc.yml b/e2e-tests/affinity/compare/statefulset_region-pxc.yml index c7985966cd..9db0799592 100644 --- a/e2e-tests/affinity/compare/statefulset_region-pxc.yml +++ b/e2e-tests/affinity/compare/statefulset_region-pxc.yml @@ -75,7 +75,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/affinity/compare/statefulset_zone-pxc-k127-oc.yml b/e2e-tests/affinity/compare/statefulset_zone-pxc-k127-oc.yml index 0f6fb0b3e7..0446d8f58d 100644 --- a/e2e-tests/affinity/compare/statefulset_zone-pxc-k127-oc.yml +++ b/e2e-tests/affinity/compare/statefulset_zone-pxc-k127-oc.yml @@ -78,7 +78,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state @@ -128,7 +128,7 @@ spec: resources: limits: cpu: "1" - memory: 1G + memory: 2G requests: cpu: 600m memory: 1G diff --git a/e2e-tests/affinity/compare/statefulset_zone-pxc-k127.yml b/e2e-tests/affinity/compare/statefulset_zone-pxc-k127.yml index dbe982b820..91a0747a9d 100644 --- a/e2e-tests/affinity/compare/statefulset_zone-pxc-k127.yml +++ b/e2e-tests/affinity/compare/statefulset_zone-pxc-k127.yml @@ -78,7 +78,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state @@ -128,7 +128,7 @@ spec: resources: limits: cpu: "1" - memory: 1G + memory: 2G requests: cpu: 600m memory: 1G diff --git a/e2e-tests/affinity/compare/statefulset_zone-pxc-oc.yml b/e2e-tests/affinity/compare/statefulset_zone-pxc-oc.yml index 35d5885b8f..b96c86597e 100644 --- a/e2e-tests/affinity/compare/statefulset_zone-pxc-oc.yml +++ b/e2e-tests/affinity/compare/statefulset_zone-pxc-oc.yml @@ -75,7 +75,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/affinity/compare/statefulset_zone-pxc.yml b/e2e-tests/affinity/compare/statefulset_zone-pxc.yml index 07cac91e4c..b1b716f9b8 100644 --- a/e2e-tests/affinity/compare/statefulset_zone-pxc.yml +++ b/e2e-tests/affinity/compare/statefulset_zone-pxc.yml @@ -75,7 +75,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/affinity/conf/custom.yml b/e2e-tests/affinity/conf/custom.yml index 23217bc465..b26f17392e 100644 --- a/e2e-tests/affinity/conf/custom.yml +++ b/e2e-tests/affinity/conf/custom.yml @@ -13,7 +13,7 @@ spec: memory: 1G cpu: 600m limits: - memory: "1G" + memory: "2G" cpu: "1" volumeSpec: persistentVolumeClaim: diff --git a/e2e-tests/affinity/conf/hostname.yml b/e2e-tests/affinity/conf/hostname.yml index a62a26aeb5..557b3d20dd 100644 --- a/e2e-tests/affinity/conf/hostname.yml +++ b/e2e-tests/affinity/conf/hostname.yml @@ -13,7 +13,7 @@ spec: memory: 1G cpu: 600m limits: - memory: "1G" + memory: "2G" cpu: "1" volumeSpec: persistentVolumeClaim: diff --git a/e2e-tests/affinity/conf/region.yml b/e2e-tests/affinity/conf/region.yml index 09440c04ca..e81d6d10f4 100644 --- a/e2e-tests/affinity/conf/region.yml +++ b/e2e-tests/affinity/conf/region.yml @@ -13,7 +13,7 @@ spec: memory: 1G cpu: 600m limits: - memory: "1G" + memory: "2G" cpu: "1" volumeSpec: persistentVolumeClaim: diff --git a/e2e-tests/affinity/conf/zone.yml b/e2e-tests/affinity/conf/zone.yml index f92c2aa51d..5a9bfe21b2 100644 --- a/e2e-tests/affinity/conf/zone.yml +++ b/e2e-tests/affinity/conf/zone.yml @@ -13,7 +13,7 @@ spec: memory: 1G cpu: 600m limits: - memory: "1G" + memory: "2G" cpu: "1" volumeSpec: persistentVolumeClaim: diff --git a/e2e-tests/auto-tuning/conf/auto-tuning-with-limits.yml b/e2e-tests/auto-tuning/conf/auto-tuning-with-limits.yml index 80dcf752a8..38a18f6882 100644 --- a/e2e-tests/auto-tuning/conf/auto-tuning-with-limits.yml +++ b/e2e-tests/auto-tuning/conf/auto-tuning-with-limits.yml @@ -11,7 +11,7 @@ spec: image: -pxc resources: limits: - memory: 1Gi + memory: 2Gi cpu: 1000m volumeSpec: persistentVolumeClaim: diff --git a/e2e-tests/auto-tuning/conf/auto-tuning-with-template-transform.yml b/e2e-tests/auto-tuning/conf/auto-tuning-with-template-transform.yml index 9484353658..760fcc7f38 100644 --- a/e2e-tests/auto-tuning/conf/auto-tuning-with-template-transform.yml +++ b/e2e-tests/auto-tuning/conf/auto-tuning-with-template-transform.yml @@ -15,7 +15,7 @@ spec: image: -pxc resources: limits: - memory: 1Gi + memory: 4Gi requests: memory: 1Gi volumeSpec: diff --git a/e2e-tests/auto-tuning/conf/auto-tuning-with-template.yml b/e2e-tests/auto-tuning/conf/auto-tuning-with-template.yml index db229e521f..9ef4745c2c 100644 --- a/e2e-tests/auto-tuning/conf/auto-tuning-with-template.yml +++ b/e2e-tests/auto-tuning/conf/auto-tuning-with-template.yml @@ -9,7 +9,7 @@ spec: pxc: configuration: | [mysqld] - innodb_buffer_pool_size={{containerMemoryLimit}} + innodb_buffer_pool_size={{containerMemoryLimit * 1 / 2}} max_connections=200 size: 3 image: -pxc @@ -17,7 +17,7 @@ spec: requests: memory: 1Gi limits: - memory: 2Gi + memory: 4Gi volumeSpec: persistentVolumeClaim: resources: diff --git a/e2e-tests/auto-tuning/run b/e2e-tests/auto-tuning/run index 0b4b141dc5..031cb5e0fa 100755 --- a/e2e-tests/auto-tuning/run +++ b/e2e-tests/auto-tuning/run @@ -106,8 +106,8 @@ CONNECTIONS=$(run_mysql \ 'SELECT @@max_connections;' \ "-h $cluster-pxc -uroot -proot_password") -if [[ ${INNODB_SIZE} != 805306368 ]]; then - echo "with-template-transform: innodb_buffer_pool_size ${INNODB_SIZE} should be 805306368" +if [[ ${INNODB_SIZE} != 3221225472 ]]; then + echo "with-template-transform: innodb_buffer_pool_size ${INNODB_SIZE} should be 3221225472" exit 1 fi diff --git a/e2e-tests/big-data/conf/restore-backup-84.yml b/e2e-tests/big-data/conf/restore-backup-84.yml new file mode 100644 index 0000000000..7b7566fc89 --- /dev/null +++ b/e2e-tests/big-data/conf/restore-backup-84.yml @@ -0,0 +1,12 @@ +apiVersion: pxc.percona.com/v1 +kind: PerconaXtraDBClusterRestore +metadata: + name: restore1 +spec: + pxcCluster: some-name + backupSource: + destination: s3://percona-jenkins-artifactory/big-data-test/some-name-2024-11-23-19:32:52-full + s3: + credentialsSecret: aws-s3-secret + region: us-east-1 + endpointUrl: https://s3.amazonaws.com diff --git a/e2e-tests/big-data/run b/e2e-tests/big-data/run index 4b73f5f405..d4b556dd3d 100755 --- a/e2e-tests/big-data/run +++ b/e2e-tests/big-data/run @@ -19,10 +19,12 @@ main() { desc 'create first PXC cluster' cluster="some-name" spinup_pxc "$cluster" "$test_dir/conf/$cluster.yml" "3" "10" "$test_dir/conf/secrets_without_tls.yml" - if [[ $IMAGE_PXC =~ 8\.0 ]]; then desc 'Switch to 8.0 backup' kubectl_bin apply -f "${test_dir}/conf/restore-backup.yml" + elif [[ $IMAGE_PXC =~ 8\.4 ]]; then + desc 'Switch to 8.4 backup' + kubectl_bin apply -f "${test_dir}/conf/restore-backup-84.yml" else kubectl_bin apply -f "${test_dir}/conf/restore-backup-57.yml" fi diff --git a/e2e-tests/conf/some-name.yml b/e2e-tests/conf/some-name.yml index a4448cd7a5..058c8138a1 100644 --- a/e2e-tests/conf/some-name.yml +++ b/e2e-tests/conf/some-name.yml @@ -18,7 +18,7 @@ spec: memory: 0.1G cpu: 100m limits: - memory: "1G" + memory: "2G" cpu: "1" volumeSpec: persistentVolumeClaim: diff --git a/e2e-tests/cross-site/conf/cross-site-replica.yml b/e2e-tests/cross-site/conf/cross-site-replica.yml index 2a1ee73d4e..36d8535d99 100644 --- a/e2e-tests/cross-site/conf/cross-site-replica.yml +++ b/e2e-tests/cross-site/conf/cross-site-replica.yml @@ -29,7 +29,7 @@ spec: memory: 1G cpu: 600m limits: - memory: "1G" + memory: "2G" cpu: "1" volumeSpec: persistentVolumeClaim: diff --git a/e2e-tests/cross-site/conf/cross-site-source.yml b/e2e-tests/cross-site/conf/cross-site-source.yml index f3831f55e0..ddf40103d9 100644 --- a/e2e-tests/cross-site/conf/cross-site-source.yml +++ b/e2e-tests/cross-site/conf/cross-site-source.yml @@ -29,7 +29,7 @@ spec: memory: 1G cpu: 600m limits: - memory: "1G" + memory: "2G" cpu: "1" volumeSpec: persistentVolumeClaim: diff --git a/e2e-tests/custom-users/compare/user-five-57.sql b/e2e-tests/custom-users/compare/user-five-57.sql new file mode 100644 index 0000000000..d91c85576e --- /dev/null +++ b/e2e-tests/custom-users/compare/user-five-57.sql @@ -0,0 +1,4 @@ +GRANT USAGE ON *.* TO 'user-five'@'%' +GRANT SELECT, UPDATE, DELETE ON `db1`.* TO 'user-five'@'%' +GRANT SELECT, UPDATE, DELETE ON `db2`.* TO 'user-five'@'%' +GRANT SELECT, UPDATE, DELETE ON `db3`.* TO 'user-five'@'%' diff --git a/e2e-tests/custom-users/compare/user-four-2-57.sql b/e2e-tests/custom-users/compare/user-four-2-57.sql new file mode 100644 index 0000000000..11be89d861 --- /dev/null +++ b/e2e-tests/custom-users/compare/user-four-2-57.sql @@ -0,0 +1,4 @@ +GRANT USAGE ON *.* TO 'user-four'@'%' +GRANT SELECT, UPDATE ON `db1`.* TO 'user-four'@'%' +GRANT SELECT, UPDATE ON `db2`.* TO 'user-four'@'%' +GRANT SELECT, UPDATE ON `db3`.* TO 'user-four'@'%' diff --git a/e2e-tests/custom-users/compare/user-four-3-57.sql b/e2e-tests/custom-users/compare/user-four-3-57.sql new file mode 100644 index 0000000000..268149a72a --- /dev/null +++ b/e2e-tests/custom-users/compare/user-four-3-57.sql @@ -0,0 +1,4 @@ +GRANT USAGE ON *.* TO 'user-four'@'%' +GRANT SELECT, UPDATE, DELETE ON `db1`.* TO 'user-four'@'%' +GRANT SELECT, UPDATE, DELETE ON `db2`.* TO 'user-four'@'%' +GRANT SELECT, UPDATE, DELETE ON `db3`.* TO 'user-four'@'%' diff --git a/e2e-tests/custom-users/compare/user-four-4-57.sql b/e2e-tests/custom-users/compare/user-four-4-57.sql new file mode 100644 index 0000000000..fd56ff360f --- /dev/null +++ b/e2e-tests/custom-users/compare/user-four-4-57.sql @@ -0,0 +1,4 @@ +GRANT USAGE ON *.* TO 'user-four'@'%' +GRANT SELECT, INSERT, UPDATE, DELETE ON `db1`.* TO 'user-four'@'%' +GRANT SELECT, UPDATE, DELETE ON `db2`.* TO 'user-four'@'%' +GRANT SELECT, UPDATE, DELETE ON `db3`.* TO 'user-four'@'%' diff --git a/e2e-tests/custom-users/compare/user-four-57.sql b/e2e-tests/custom-users/compare/user-four-57.sql new file mode 100644 index 0000000000..0f267fd683 --- /dev/null +++ b/e2e-tests/custom-users/compare/user-four-57.sql @@ -0,0 +1,3 @@ +GRANT USAGE ON *.* TO 'user-four'@'%' +GRANT SELECT, UPDATE ON `db1`.* TO 'user-four'@'%' +GRANT SELECT, UPDATE ON `db2`.* TO 'user-four'@'%' diff --git a/e2e-tests/custom-users/compare/user-one-2-57.sql b/e2e-tests/custom-users/compare/user-one-2-57.sql new file mode 100644 index 0000000000..fbffaa448c --- /dev/null +++ b/e2e-tests/custom-users/compare/user-one-2-57.sql @@ -0,0 +1,5 @@ +GRANT USAGE ON *.* TO 'user-one'@'127.0.0.1' +GRANT SELECT, INSERT ON `db1`.* TO 'user-one'@'127.0.0.1' +GRANT SELECT, INSERT ON `db2`.* TO 'user-one'@'127.0.0.1' +GRANT SELECT, INSERT ON `db1`.* TO 'user-one'@'%' +GRANT SELECT, INSERT ON `db2`.* TO 'user-one'@'%' diff --git a/e2e-tests/custom-users/compare/user-one-57.sql b/e2e-tests/custom-users/compare/user-one-57.sql new file mode 100644 index 0000000000..753cf0b587 --- /dev/null +++ b/e2e-tests/custom-users/compare/user-one-57.sql @@ -0,0 +1,3 @@ +GRANT USAGE ON *.* TO 'user-one'@'%' +GRANT SELECT, INSERT ON `db1`.* TO 'user-one'@'%' +GRANT SELECT, INSERT ON `db2`.* TO 'user-one'@'%' diff --git a/e2e-tests/custom-users/compare/user-three-57.sql b/e2e-tests/custom-users/compare/user-three-57.sql new file mode 100644 index 0000000000..df32fc9768 --- /dev/null +++ b/e2e-tests/custom-users/compare/user-three-57.sql @@ -0,0 +1 @@ +GRANT USAGE ON *.* TO 'user-three'@'%' diff --git a/e2e-tests/custom-users/compare/user-two-57.sql b/e2e-tests/custom-users/compare/user-two-57.sql new file mode 100644 index 0000000000..13394515ea --- /dev/null +++ b/e2e-tests/custom-users/compare/user-two-57.sql @@ -0,0 +1 @@ +GRANT INSERT, UPDATE ON *.* TO 'user-two'@'%' diff --git a/e2e-tests/custom-users/conf/some-name.yml b/e2e-tests/custom-users/conf/some-name.yml index 1fdfaff139..b6ed347ced 100644 --- a/e2e-tests/custom-users/conf/some-name.yml +++ b/e2e-tests/custom-users/conf/some-name.yml @@ -41,7 +41,7 @@ spec: memory: 0.1G cpu: 100m limits: - memory: "1G" + memory: "2G" cpu: "1" volumeSpec: persistentVolumeClaim: diff --git a/e2e-tests/custom-users/run b/e2e-tests/custom-users/run index 3de89a325b..a16ace5ee3 100755 --- a/e2e-tests/custom-users/run +++ b/e2e-tests/custom-users/run @@ -37,6 +37,15 @@ compare_mysql_user "-h $cluster-haproxy -uuser-one -pnew-password" compare_mysql_cmd "user-one-1" "SELECT User, Host from mysql.user WHERE User = 'user-one';" "-h $cluster-haproxy -uroot -proot_password" compare_mysql_cmd "user-one-2" "SHOW GRANTS FOR 'user-one'@'127.0.0.1';" "-h $cluster-haproxy -uroot -proot_password" +desc 'check removing secretPasswordRef from user generates user password stored in generated custom-user-secret' +kubectl_bin patch pxc some-name \ + --type=json \ + -p='[{"op": "replace", "path": "/spec/users/1/passwordSecretRef", "value": null}]' +wait_cluster_consistency "$cluster" 3 3 + +userTwoPass=$(kubectl_bin get secret $generatedUserSecret -o jsonpath="{.data.user-two}" | base64 -d) +compare_mysql_user "-h $cluster-haproxy -uuser-two -p'$userTwoPass'" + desc 'delete initial users from CR and create a new one' kubectl_bin patch pxc some-name --type=merge -p='{ "spec": {"users":[ @@ -44,7 +53,7 @@ kubectl_bin patch pxc some-name --type=merge -p='{ "name":"user-four", "dbs": ["db1", "db2"], "grants":["SELECT, UPDATE"], - "hosts": ["%"] + "hosts": ["%"] } ]} }' @@ -57,7 +66,7 @@ compare_mysql_cmd "user-four-1" "SELECT User, Host from mysql.user WHERE User = # user-one, user-two and three should not be deleted compare_mysql_user "-h $cluster-haproxy -uuser-one -pnew-password" -compare_mysql_user "-h $cluster-haproxy -uuser-two -ptestpass3" +compare_mysql_user "-h $cluster-haproxy -uuser-two -p'$userTwoPass'" desc 'check user DBs updated' kubectl_bin patch pxc some-name --type=merge -p='{ @@ -66,7 +75,7 @@ kubectl_bin patch pxc some-name --type=merge -p='{ "name":"user-four", "dbs": ["db1", "db2", "db3"], "grants":["SELECT, UPDATE"], - "hosts": ["%"] + "hosts": ["%"] } ]} }' @@ -80,7 +89,7 @@ kubectl_bin patch pxc some-name --type=merge -p='{ "name":"user-four", "dbs": ["db1", "db2", "db3"], "grants":["SELECT, UPDATE, DELETE"], - "hosts": ["%"] + "hosts": ["%"] } ]} }' @@ -106,7 +115,7 @@ kubectl_bin patch pxc some-name --type=merge -p='{ "name":"user-five", "dbs": ["db1", "db2", "db3"], "grants":["SELECT, UPDATE, DELETE"], - "hosts": ["%"] + "hosts": ["%"] } ]} }' diff --git a/e2e-tests/default-cr/compare/statefulset_cluster1-pxc-k127-oc.yml b/e2e-tests/default-cr/compare/statefulset_cluster1-pxc-k127-oc.yml index 383659ea24..ce95abb0eb 100644 --- a/e2e-tests/default-cr/compare/statefulset_cluster1-pxc-k127-oc.yml +++ b/e2e-tests/default-cr/compare/statefulset_cluster1-pxc-k127-oc.yml @@ -131,7 +131,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/default-cr/compare/statefulset_cluster1-pxc-k127.yml b/e2e-tests/default-cr/compare/statefulset_cluster1-pxc-k127.yml index a4b71c93d0..4026eafc62 100644 --- a/e2e-tests/default-cr/compare/statefulset_cluster1-pxc-k127.yml +++ b/e2e-tests/default-cr/compare/statefulset_cluster1-pxc-k127.yml @@ -131,7 +131,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/default-cr/compare/statefulset_cluster1-pxc-oc.yml b/e2e-tests/default-cr/compare/statefulset_cluster1-pxc-oc.yml index ed62d10432..9247e5d9a3 100644 --- a/e2e-tests/default-cr/compare/statefulset_cluster1-pxc-oc.yml +++ b/e2e-tests/default-cr/compare/statefulset_cluster1-pxc-oc.yml @@ -128,7 +128,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/default-cr/compare/statefulset_cluster1-pxc.yml b/e2e-tests/default-cr/compare/statefulset_cluster1-pxc.yml index 9eaa4cc85e..74245c17f8 100644 --- a/e2e-tests/default-cr/compare/statefulset_cluster1-pxc.yml +++ b/e2e-tests/default-cr/compare/statefulset_cluster1-pxc.yml @@ -128,7 +128,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/default-cr/compare/statefulset_minimal-cluster-pxc-k127-oc.yml b/e2e-tests/default-cr/compare/statefulset_minimal-cluster-pxc-k127-oc.yml index 1bdf904f8b..b33ecdfd68 100644 --- a/e2e-tests/default-cr/compare/statefulset_minimal-cluster-pxc-k127-oc.yml +++ b/e2e-tests/default-cr/compare/statefulset_minimal-cluster-pxc-k127-oc.yml @@ -125,7 +125,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/default-cr/compare/statefulset_minimal-cluster-pxc-k127.yml b/e2e-tests/default-cr/compare/statefulset_minimal-cluster-pxc-k127.yml index f06650fb18..139f26d632 100644 --- a/e2e-tests/default-cr/compare/statefulset_minimal-cluster-pxc-k127.yml +++ b/e2e-tests/default-cr/compare/statefulset_minimal-cluster-pxc-k127.yml @@ -125,7 +125,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/default-cr/compare/statefulset_minimal-cluster-pxc-oc.yml b/e2e-tests/default-cr/compare/statefulset_minimal-cluster-pxc-oc.yml index f055929445..8b4fa88fe4 100644 --- a/e2e-tests/default-cr/compare/statefulset_minimal-cluster-pxc-oc.yml +++ b/e2e-tests/default-cr/compare/statefulset_minimal-cluster-pxc-oc.yml @@ -122,7 +122,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/default-cr/compare/statefulset_minimal-cluster-pxc.yml b/e2e-tests/default-cr/compare/statefulset_minimal-cluster-pxc.yml index b260dbee1a..58a165feef 100644 --- a/e2e-tests/default-cr/compare/statefulset_minimal-cluster-pxc.yml +++ b/e2e-tests/default-cr/compare/statefulset_minimal-cluster-pxc.yml @@ -122,7 +122,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/demand-backup-cloud/conf/demand-backup-cloud.yml b/e2e-tests/demand-backup-cloud/conf/demand-backup-cloud.yml index c71e87057b..a509fc57b2 100644 --- a/e2e-tests/demand-backup-cloud/conf/demand-backup-cloud.yml +++ b/e2e-tests/demand-backup-cloud/conf/demand-backup-cloud.yml @@ -27,7 +27,7 @@ spec: memory: 0.1G cpu: 100m limits: - memory: "1G" + memory: "2G" cpu: "1" volumeSpec: persistentVolumeClaim: diff --git a/e2e-tests/demand-backup/conf/demand-backup.yml b/e2e-tests/demand-backup/conf/demand-backup.yml index 3aa2b80470..93a4f7c1d4 100644 --- a/e2e-tests/demand-backup/conf/demand-backup.yml +++ b/e2e-tests/demand-backup/conf/demand-backup.yml @@ -30,7 +30,7 @@ spec: memory: 0.1G cpu: 100m limits: - memory: "1G" + memory: "2G" cpu: "1" volumeSpec: persistentVolumeClaim: diff --git a/e2e-tests/demand-backup/run b/e2e-tests/demand-backup/run index 30d99f5f0b..80b2469b25 100755 --- a/e2e-tests/demand-backup/run +++ b/e2e-tests/demand-backup/run @@ -30,18 +30,26 @@ main() { kubectl_bin apply -f "$test_dir/conf/$wrong_creds_backup_name.yml" - sleep 10 - run_backup "$cluster" "$minio_backup_name" compare_kubectl "job/xb-$minio_backup_name" + sleep 90 + wrong_backup_job_fail_timestamp=$(kubectl_bin get job xb-$wrong_creds_backup_name -o yaml \ | yq '.status.conditions[] | select(.type == "Failed").lastTransitionTime' \ | xargs -I {} "$date" -d "{}" +%s) + if [[ -z $wrong_backup_job_fail_timestamp ]]; then + echo 'failed to get wrong_backup_job_fail_timestamp' + exit 1 + fi minio_job_creation_timestamp=$(kubectl get job xb-$minio_backup_name -o yaml \ | yq '.metadata.creationTimestamp' \ | xargs -I {} "$date" -d "{}" +%s) + if [[ -z $minio_job_creation_timestamp ]]; then + echo 'failed to get minio_job_creation_timestamp' + exit 1 + fi if [[ $wrong_backup_job_fail_timestamp > $minio_job_creation_timestamp ]]; then echo "\"allowParallel: false\" doesn't work as expected. $minio_backup_name job was created before $wrong_creds_backup_name backup job failed" diff --git a/e2e-tests/functions b/e2e-tests/functions index 72bf29c79d..ec9549928f 100755 --- a/e2e-tests/functions +++ b/e2e-tests/functions @@ -16,7 +16,7 @@ SKIP_REMOTE_BACKUPS=${SKIP_REMOTE_BACKUPS:-1} PMM_SERVER_VER=${PMM_SERVER_VER:-"9.9.9"} IMAGE_PMM_CLIENT=${IMAGE_PMM_CLIENT:-"perconalab/pmm-client:dev-latest"} IMAGE_PMM_SERVER=${IMAGE_PMM_SERVER:-"perconalab/pmm-server:dev-latest"} -CERT_MANAGER_VER="1.15.2" +CERT_MANAGER_VER="1.16.2" tmp_dir=$(mktemp -d) sed=$(which gsed || which sed) date=$(which gdate || which date) @@ -177,7 +177,7 @@ wait_pod() { set +o xtrace kubectl_bin wait --for=condition=Ready pod/${pod} --timeout="${max_retry}s" ${ns:+-n $ns} || true retry=0 - echo -n $pod + echo -n "waiting for pod/$pod to become Ready" until kubectl_bin get ${ns:+-n $ns} pod/$pod -o jsonpath='{.status.conditions[?(@.type == "Ready")].status}' 2>/dev/null | grep -q -i 'True' \ && kubectl_bin get ${ns:+-n $ns} pod/$pod | grep -q "^$pod" \ && ! IS_FULL_CRASH=$(kubectl_bin logs --tail=1 ${ns:+-n $ns} pod/$pod ${container:+ -c $container} | grep LAST_LINE); do @@ -251,22 +251,24 @@ wait_backup() { wait_backup_restore() { local backup_name=$1 - local status=${2:-'Succeeded'} + local target_state=${2:-'Succeeded'} local wait_time=${3:-720} - desc "wait backup restore" set +o xtrace retry=0 - echo -n $backup_name - until kubectl_bin get pxc-restore/$backup_name -o jsonpath='{.status.state}' 2>/dev/null | grep $status; do - sleep 1 - echo -n . - let retry+=1 - if [ $retry -ge $wait_time ]; then - kubectl_bin logs ${OPERATOR_NS:+-n $OPERATOR_NS} $(get_operator_pod) - echo max retry count $retry reached. something went wrong with operator or kubernetes cluster + echo "waiting for pxc-restore/${backup_name} to reach ${target_state} state" + local current_state= + until [[ ${current_state} == ${target_state} ]]; do + current_state=$(kubectl_bin get pxc-restore $backup_name -o jsonpath='{.status.state}') + if [[ $retry -ge $wait_time || ${current_state} == 'error' ]]; then + kubectl_bin get pxc-restore ${backup_name} -o yaml + echo "Restore object pxc-restore/${backup_name} is in ${current_state} state." + echo something went wrong with operator or kubernetes cluster exit 1 fi + echo "$(date +%Y-%m-%dT%H:%M:%S) pxc-restore/${backup_name} state: ${current_state}" + sleep 1 + let retry+=1 done echo set_debug @@ -376,10 +378,10 @@ wait_for_generation() { wait_for_delete() { local res="$1" - echo -n "$res - " + echo -n "waiting for $res to be deleted" set +o xtrace retry=0 - until (kubectl_bin get $res || :) 2>&1 | grep NotFound; do + until (kubectl get $res || :) 2>&1 | grep NotFound; do sleep 1 echo -n . let retry+=1 @@ -405,6 +407,8 @@ compare_kubectl() { if [[ $IMAGE_PXC =~ 8\.0 ]] && [ -f ${expected_result//.yml/-80.yml} ]; then expected_result=${expected_result//.yml/-80.yml} + elif [[ $IMAGE_PXC =~ 8\.4 ]] && [ -f ${expected_result//.yml/-84.yml} ]; then + expected_result=${expected_result//.yml/-84.yml} fi if version_gt "1.29" && [ -f ${expected_result//.yml/-k129.yml} ]; then @@ -443,6 +447,7 @@ compare_kubectl() { del(.spec.template.spec.containers[].env[] | select(.name == "AZURE_CONTAINER_NAME")) | del(.metadata.selfLink) | del(.metadata.deletionTimestamp) | + del(.metadata.annotations."kubectl.kubernetes.io/last-applied-configuration") | del(.metadata.annotations."kubernetes.io/psp") | del(.metadata.annotations."batch.kubernetes.io/job-tracking") | del(.metadata.labels."batch.kubernetes.io/job-name") | @@ -491,6 +496,7 @@ compare_kubectl() { (.. | select(tag == "!!str")) |= sub("'$namespace'", "namespace") | (.. | select(tag == "!!str")) |= sub("kube-api-access-.*", "kube-api-access") | del(.. | select(has("annotations")).annotations | select(length==0)) | + del(.spec.crVersion) | del(.. | select(.[] == "percona-xtradb-cluster-operator-workload-token*"))' - >${new_result} diff -u ${expected_result} ${new_result} @@ -535,10 +541,14 @@ compare_mysql_cmd() { local command="$2" local uri="$3" local postfix="$4" - local expected_result=${test_dir}/compare/${command_id}${postfix}.sql - - if [[ $IMAGE_PXC =~ 8\.0 ]] && [ -f ${test_dir}/compare/${command_id}${postfix}-80.sql ]; then - expected_result=${test_dir}/compare/${command_id}${postfix}-80.sql + local expected_result=$test_dir/compare/$command_id$postfix.sql + + if [[ $IMAGE_PXC =~ 8\.4 && -f $test_dir/compare/$command_id$postfix-84.sql ]]; then + expected_result=$test_dir/compare/$command_id$postfix-84.sql + elif [[ $IMAGE_PXC =~ 8\.0 && -f $test_dir/compare/$command_id$postfix-80.sql ]]; then + expected_result=$test_dir/compare/$command_id$postfix-80.sql + elif [[ $IMAGE_PXC =~ 5\.7 && -f $test_dir/compare/$command_id$postfix-57.sql ]]; then + expected_result=$test_dir/compare/$command_id$postfix-57.sql fi run_mysql "$command" "$uri" \ @@ -562,6 +572,8 @@ compare_mysql_cmd_local() { if [[ $IMAGE_PXC =~ 8\.0 ]] && [ -f ${test_dir}/compare/${command_id}${postfix}-80.sql ]; then expected_result=${test_dir}/compare/${command_id}${postfix}-80.sql + elif [[ $IMAGE_PXC =~ 8\.4 ]] && [ -f ${test_dir}/compare/${command_id}${postfix}-84.sql ]; then + expected_result=${test_dir}/compare/${command_id}${postfix}-84.sql fi run_mysql_local "$command" "$uri" "$pod" "$container_name" \ @@ -603,8 +615,12 @@ compare_mysql_user() { local user=$(echo $uri | sed -e 's/.*-u//; s/ .*//') local expected_result=${test_dir}/compare/$user$postfix.sql - if [[ $IMAGE_PXC =~ 8\.0 ]] && [ -f ${test_dir}/compare/$user$postfix-80.sql ]; then - expected_result=${test_dir}/compare/$user$postfix-80.sql + if [[ $IMAGE_PXC =~ 8\.4 && -f $test_dir/compare/$user$postfix-84.sql ]]; then + expected_result=$test_dir/compare/$user$postfix-84.sql + elif [[ $IMAGE_PXC =~ 8\.0 && -f $test_dir/compare/$user$postfix-80.sql ]]; then + expected_result=$test_dir/compare/$user$postfix-80.sql + elif [[ $IMAGE_PXC =~ 5\.7 && -f $test_dir/compare/$user$postfix-57.sql ]]; then + expected_result=$test_dir/compare/$user$postfix-57.sql fi (run_mysql "SHOW GRANTS;" "$uri" || :) \ @@ -623,6 +639,8 @@ compare_mysql_user_local() { if [[ $IMAGE_PXC =~ 8\.0 ]] && [ -f ${test_dir}/compare/$user$postfix-80.sql ]; then expected_result=${test_dir}/compare/$user$postfix-80.sql + elif [[ $IMAGE_PXC =~ 8\.4 ]] && [ -f ${test_dir}/compare/$user$postfix-84.sql ]; then + expected_result=${test_dir}/compare/$user$postfix-84.sql fi (run_mysql_local "SHOW GRANTS;" "$uri" "$pod" "$container_name" || :) \ @@ -1655,8 +1673,24 @@ run_recovery_check_pitr() { | $sed -e "s//${gtid}/g" \ | $sed -e "s~minio-service.#namespace~minio-service.$namespace~" \ | kubectl_bin apply -f - - wait_backup_restore ${backup} - kubectl_bin logs job/restore-job-${backup}-${cluster} + + wait_backup_restore ${restore} "Stopping Cluster" + wait_for_delete pod/${cluster}-proxysql-0 + wait_for_delete pod/${cluster}-proxysql-1 + wait_for_delete pod/${cluster}-pxc-2 + wait_for_delete pod/${cluster}-pxc-1 + wait_for_delete pod/${cluster}-pxc-0 + + wait_backup_restore ${restore} "Point-in-time recovering" + wait_for_delete pod/${cluster}-proxysql-0 + wait_for_delete pod/${cluster}-proxysql-1 + wait_for_delete pod/${cluster}-pxc-2 + wait_for_delete pod/${cluster}-pxc-1 + + wait_pod ${cluster}-pxc-0 + + wait_backup_restore ${restore} + kubectl_bin logs job/restore-job-${restore}-${cluster} wait_for_running "$cluster-proxysql" 2 wait_for_running "$cluster-pxc" 3 wait_cluster_consistency "$cluster" 3 2 diff --git a/e2e-tests/haproxy/conf/haproxy.yml b/e2e-tests/haproxy/conf/haproxy.yml index f7b330ebbc..df75e4ebc0 100644 --- a/e2e-tests/haproxy/conf/haproxy.yml +++ b/e2e-tests/haproxy/conf/haproxy.yml @@ -24,7 +24,7 @@ spec: memory: 0.1G cpu: 100m limits: - memory: "1G" + memory: "2G" cpu: "1" volumeSpec: persistentVolumeClaim: diff --git a/e2e-tests/init-deploy/compare/max_allowed_packet-1-84.sql b/e2e-tests/init-deploy/compare/max_allowed_packet-1-84.sql new file mode 100644 index 0000000000..e6c68622ac --- /dev/null +++ b/e2e-tests/init-deploy/compare/max_allowed_packet-1-84.sql @@ -0,0 +1 @@ +67108864 diff --git a/e2e-tests/init-deploy/compare/monitor-84.sql b/e2e-tests/init-deploy/compare/monitor-84.sql new file mode 100644 index 0000000000..2a8c724ee0 --- /dev/null +++ b/e2e-tests/init-deploy/compare/monitor-84.sql @@ -0,0 +1,3 @@ +GRANT SELECT, RELOAD, PROCESS, SUPER, REPLICATION CLIENT ON *.* TO `monitor`@`%` +GRANT SERVICE_CONNECTION_ADMIN,SYSTEM_USER ON *.* TO `monitor`@`%` +GRANT SELECT ON `performance_schema`.* TO `monitor`@`%` diff --git a/e2e-tests/init-deploy/compare/root-84.sql b/e2e-tests/init-deploy/compare/root-84.sql new file mode 100644 index 0000000000..9fbcaf9dea --- /dev/null +++ b/e2e-tests/init-deploy/compare/root-84.sql @@ -0,0 +1,2 @@ +GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, CREATE ROLE, DROP ROLE ON *.* TO `root`@`%` WITH GRANT OPTION +GRANT ALLOW_NONEXISTENT_DEFINER,APPLICATION_PASSWORD_ADMIN,AUDIT_ABORT_EXEMPT,AUDIT_ADMIN,AUTHENTICATION_POLICY_ADMIN,BACKUP_ADMIN,BINLOG_ADMIN,BINLOG_ENCRYPTION_ADMIN,CLONE_ADMIN,CONNECTION_ADMIN,ENCRYPTION_KEY_ADMIN,FIREWALL_EXEMPT,FLUSH_OPTIMIZER_COSTS,FLUSH_PRIVILEGES,FLUSH_STATUS,FLUSH_TABLES,FLUSH_USER_RESOURCES,GROUP_REPLICATION_ADMIN,GROUP_REPLICATION_STREAM,INNODB_REDO_LOG_ARCHIVE,INNODB_REDO_LOG_ENABLE,OPTIMIZE_LOCAL_TABLE,PASSWORDLESS_USER_ADMIN,PERSIST_RO_VARIABLES_ADMIN,REPLICATION_APPLIER,REPLICATION_SLAVE_ADMIN,RESOURCE_GROUP_ADMIN,RESOURCE_GROUP_USER,ROLE_ADMIN,SENSITIVE_VARIABLES_OBSERVER,SERVICE_CONNECTION_ADMIN,SESSION_VARIABLES_ADMIN,SET_ANY_DEFINER,SHOW_ROUTINE,SYSTEM_VARIABLES_ADMIN,TABLE_ENCRYPTION_ADMIN,TELEMETRY_LOG_ADMIN,TRANSACTION_GTID_TAG,XA_RECOVER_ADMIN ON *.* TO `root`@`%` WITH GRANT OPTION diff --git a/e2e-tests/init-deploy/compare/statefulset_no-proxysql-pxc-k127-oc.yml b/e2e-tests/init-deploy/compare/statefulset_no-proxysql-pxc-k127-oc.yml index 4823144fea..02f02c265a 100644 --- a/e2e-tests/init-deploy/compare/statefulset_no-proxysql-pxc-k127-oc.yml +++ b/e2e-tests/init-deploy/compare/statefulset_no-proxysql-pxc-k127-oc.yml @@ -67,7 +67,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/init-deploy/compare/statefulset_no-proxysql-pxc-k127.yml b/e2e-tests/init-deploy/compare/statefulset_no-proxysql-pxc-k127.yml index 184ec15cd5..39e3aab198 100644 --- a/e2e-tests/init-deploy/compare/statefulset_no-proxysql-pxc-k127.yml +++ b/e2e-tests/init-deploy/compare/statefulset_no-proxysql-pxc-k127.yml @@ -67,7 +67,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/init-deploy/compare/statefulset_no-proxysql-pxc-oc.yml b/e2e-tests/init-deploy/compare/statefulset_no-proxysql-pxc-oc.yml index 53e7e218e9..7d7acfd3cb 100644 --- a/e2e-tests/init-deploy/compare/statefulset_no-proxysql-pxc-oc.yml +++ b/e2e-tests/init-deploy/compare/statefulset_no-proxysql-pxc-oc.yml @@ -64,7 +64,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/init-deploy/compare/statefulset_no-proxysql-pxc.yml b/e2e-tests/init-deploy/compare/statefulset_no-proxysql-pxc.yml index a4053d9434..57d557517b 100644 --- a/e2e-tests/init-deploy/compare/statefulset_no-proxysql-pxc.yml +++ b/e2e-tests/init-deploy/compare/statefulset_no-proxysql-pxc.yml @@ -64,7 +64,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/init-deploy/compare/statefulset_some-name-pxc-k127-oc.yml b/e2e-tests/init-deploy/compare/statefulset_some-name-pxc-k127-oc.yml index 13ae08cdb8..07236d80a1 100644 --- a/e2e-tests/init-deploy/compare/statefulset_some-name-pxc-k127-oc.yml +++ b/e2e-tests/init-deploy/compare/statefulset_some-name-pxc-k127-oc.yml @@ -125,7 +125,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state @@ -175,7 +175,7 @@ spec: resources: limits: cpu: "1" - memory: 1G + memory: 2G requests: cpu: 100m memory: 100M diff --git a/e2e-tests/init-deploy/compare/statefulset_some-name-pxc-k127.yml b/e2e-tests/init-deploy/compare/statefulset_some-name-pxc-k127.yml index 92a1885e22..41c5f5b0ae 100644 --- a/e2e-tests/init-deploy/compare/statefulset_some-name-pxc-k127.yml +++ b/e2e-tests/init-deploy/compare/statefulset_some-name-pxc-k127.yml @@ -125,7 +125,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state @@ -175,7 +175,7 @@ spec: resources: limits: cpu: "1" - memory: 1G + memory: 2G requests: cpu: 100m memory: 100M diff --git a/e2e-tests/init-deploy/compare/statefulset_some-name-pxc-oc.yml b/e2e-tests/init-deploy/compare/statefulset_some-name-pxc-oc.yml index 5f09fcc44d..68f6194f5f 100644 --- a/e2e-tests/init-deploy/compare/statefulset_some-name-pxc-oc.yml +++ b/e2e-tests/init-deploy/compare/statefulset_some-name-pxc-oc.yml @@ -122,7 +122,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/init-deploy/compare/statefulset_some-name-pxc.yml b/e2e-tests/init-deploy/compare/statefulset_some-name-pxc.yml index de929e9391..85b2effc27 100644 --- a/e2e-tests/init-deploy/compare/statefulset_some-name-pxc.yml +++ b/e2e-tests/init-deploy/compare/statefulset_some-name-pxc.yml @@ -122,7 +122,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/init-deploy/compare/xtrabackup-84.sql b/e2e-tests/init-deploy/compare/xtrabackup-84.sql new file mode 100644 index 0000000000..4f27afeec7 --- /dev/null +++ b/e2e-tests/init-deploy/compare/xtrabackup-84.sql @@ -0,0 +1,2 @@ +GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, CREATE ROLE, DROP ROLE ON *.* TO `xtrabackup`@`%` WITH GRANT OPTION +GRANT ALLOW_NONEXISTENT_DEFINER,APPLICATION_PASSWORD_ADMIN,AUDIT_ABORT_EXEMPT,AUDIT_ADMIN,AUTHENTICATION_POLICY_ADMIN,BACKUP_ADMIN,BINLOG_ADMIN,BINLOG_ENCRYPTION_ADMIN,CLONE_ADMIN,CONNECTION_ADMIN,ENCRYPTION_KEY_ADMIN,FIREWALL_EXEMPT,FLUSH_OPTIMIZER_COSTS,FLUSH_PRIVILEGES,FLUSH_STATUS,FLUSH_TABLES,FLUSH_USER_RESOURCES,GROUP_REPLICATION_ADMIN,GROUP_REPLICATION_STREAM,INNODB_REDO_LOG_ARCHIVE,INNODB_REDO_LOG_ENABLE,OPTIMIZE_LOCAL_TABLE,PASSWORDLESS_USER_ADMIN,PERSIST_RO_VARIABLES_ADMIN,REPLICATION_APPLIER,REPLICATION_SLAVE_ADMIN,RESOURCE_GROUP_ADMIN,RESOURCE_GROUP_USER,ROLE_ADMIN,SENSITIVE_VARIABLES_OBSERVER,SERVICE_CONNECTION_ADMIN,SESSION_VARIABLES_ADMIN,SET_ANY_DEFINER,SHOW_ROUTINE,SYSTEM_USER,SYSTEM_VARIABLES_ADMIN,TABLE_ENCRYPTION_ADMIN,TELEMETRY_LOG_ADMIN,TRANSACTION_GTID_TAG,XA_RECOVER_ADMIN ON *.* TO `xtrabackup`@`%` WITH GRANT OPTION diff --git a/e2e-tests/init-deploy/run b/e2e-tests/init-deploy/run index 5debd5b76c..b4d18d4344 100755 --- a/e2e-tests/init-deploy/run +++ b/e2e-tests/init-deploy/run @@ -27,7 +27,7 @@ compare_kubectl service/$cluster-pxc compare_kubectl service/$cluster-proxysql compare_kubectl service/$cluster-proxysql-unready -if [[ ${MYSQL_VERSION} == '8.0' ]]; then +if [[ ! $IMAGE_PXC =~ 5\.7 ]]; then desc 'check if mysql-state-monitor works as expected' for pod in $(kubectl_bin get pod -l app.kubernetes.io/component=pxc --no-headers | awk '{print $1}'); do state=$(kubectl_bin exec ${pod} -- cat /var/lib/mysql/mysql.state) diff --git a/e2e-tests/limits/compare/statefulset_no-limits-pxc-increased-k127-oc.yml b/e2e-tests/limits/compare/statefulset_no-limits-pxc-increased-k127-oc.yml index 78ca6b2b5a..e1bc1a6f34 100644 --- a/e2e-tests/limits/compare/statefulset_no-limits-pxc-increased-k127-oc.yml +++ b/e2e-tests/limits/compare/statefulset_no-limits-pxc-increased-k127-oc.yml @@ -196,7 +196,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/limits/compare/statefulset_no-limits-pxc-increased-k127.yml b/e2e-tests/limits/compare/statefulset_no-limits-pxc-increased-k127.yml index 5a0e8a76b7..c962f4fe1e 100644 --- a/e2e-tests/limits/compare/statefulset_no-limits-pxc-increased-k127.yml +++ b/e2e-tests/limits/compare/statefulset_no-limits-pxc-increased-k127.yml @@ -196,7 +196,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/limits/compare/statefulset_no-limits-pxc-increased-oc.yml b/e2e-tests/limits/compare/statefulset_no-limits-pxc-increased-oc.yml index 7a9f14deee..9e6a40bcc3 100644 --- a/e2e-tests/limits/compare/statefulset_no-limits-pxc-increased-oc.yml +++ b/e2e-tests/limits/compare/statefulset_no-limits-pxc-increased-oc.yml @@ -193,7 +193,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/limits/compare/statefulset_no-limits-pxc-increased.yml b/e2e-tests/limits/compare/statefulset_no-limits-pxc-increased.yml index f6ba0c9441..78b88d411f 100644 --- a/e2e-tests/limits/compare/statefulset_no-limits-pxc-increased.yml +++ b/e2e-tests/limits/compare/statefulset_no-limits-pxc-increased.yml @@ -193,7 +193,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/limits/compare/statefulset_no-limits-pxc-k127-oc.yml b/e2e-tests/limits/compare/statefulset_no-limits-pxc-k127-oc.yml index e6391feac1..cfe935609f 100644 --- a/e2e-tests/limits/compare/statefulset_no-limits-pxc-k127-oc.yml +++ b/e2e-tests/limits/compare/statefulset_no-limits-pxc-k127-oc.yml @@ -196,7 +196,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/limits/compare/statefulset_no-limits-pxc-k127.yml b/e2e-tests/limits/compare/statefulset_no-limits-pxc-k127.yml index d088ca960b..68400e4c0d 100644 --- a/e2e-tests/limits/compare/statefulset_no-limits-pxc-k127.yml +++ b/e2e-tests/limits/compare/statefulset_no-limits-pxc-k127.yml @@ -196,7 +196,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/limits/compare/statefulset_no-limits-pxc-oc.yml b/e2e-tests/limits/compare/statefulset_no-limits-pxc-oc.yml index 54fd449662..8218b78d11 100644 --- a/e2e-tests/limits/compare/statefulset_no-limits-pxc-oc.yml +++ b/e2e-tests/limits/compare/statefulset_no-limits-pxc-oc.yml @@ -193,7 +193,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/limits/compare/statefulset_no-limits-pxc.yml b/e2e-tests/limits/compare/statefulset_no-limits-pxc.yml index 82cbb4a4c6..672d981146 100644 --- a/e2e-tests/limits/compare/statefulset_no-limits-pxc.yml +++ b/e2e-tests/limits/compare/statefulset_no-limits-pxc.yml @@ -193,7 +193,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-increased-k127-oc.yml b/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-increased-k127-oc.yml index 83536fa262..15426e41de 100644 --- a/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-increased-k127-oc.yml +++ b/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-increased-k127-oc.yml @@ -67,7 +67,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-increased-k127.yml b/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-increased-k127.yml index a9fa714ce4..605f6dccff 100644 --- a/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-increased-k127.yml +++ b/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-increased-k127.yml @@ -67,7 +67,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-increased-oc.yml b/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-increased-oc.yml index 94a8278b69..6659fe4132 100644 --- a/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-increased-oc.yml +++ b/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-increased-oc.yml @@ -64,7 +64,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-increased.yml b/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-increased.yml index 802d0fde8d..484c45300d 100644 --- a/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-increased.yml +++ b/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-increased.yml @@ -64,7 +64,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-k127-oc.yml b/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-k127-oc.yml index 83536fa262..15426e41de 100644 --- a/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-k127-oc.yml +++ b/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-k127-oc.yml @@ -67,7 +67,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-k127.yml b/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-k127.yml index a9fa714ce4..605f6dccff 100644 --- a/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-k127.yml +++ b/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-k127.yml @@ -67,7 +67,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-oc.yml b/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-oc.yml index 94a8278b69..6659fe4132 100644 --- a/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-oc.yml +++ b/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc-oc.yml @@ -64,7 +64,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc.yml b/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc.yml index 802d0fde8d..484c45300d 100644 --- a/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc.yml +++ b/e2e-tests/limits/compare/statefulset_no-requests-no-limits-pxc.yml @@ -64,7 +64,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/limits/compare/statefulset_no-requests-pxc-increased-k127-oc.yml b/e2e-tests/limits/compare/statefulset_no-requests-pxc-increased-k127-oc.yml index 62cd9b6fc1..9f746df730 100644 --- a/e2e-tests/limits/compare/statefulset_no-requests-pxc-increased-k127-oc.yml +++ b/e2e-tests/limits/compare/statefulset_no-requests-pxc-increased-k127-oc.yml @@ -67,7 +67,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state @@ -117,7 +117,7 @@ spec: resources: limits: cpu: 600m - memory: 1G + memory: 2G terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: diff --git a/e2e-tests/limits/compare/statefulset_no-requests-pxc-increased-k127.yml b/e2e-tests/limits/compare/statefulset_no-requests-pxc-increased-k127.yml index dc06cf0cb1..43315840b1 100644 --- a/e2e-tests/limits/compare/statefulset_no-requests-pxc-increased-k127.yml +++ b/e2e-tests/limits/compare/statefulset_no-requests-pxc-increased-k127.yml @@ -67,7 +67,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state @@ -117,7 +117,7 @@ spec: resources: limits: cpu: 600m - memory: 1G + memory: 2G terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: diff --git a/e2e-tests/limits/compare/statefulset_no-requests-pxc-increased-oc.yml b/e2e-tests/limits/compare/statefulset_no-requests-pxc-increased-oc.yml index 9d2f03b464..5dc58f8e90 100644 --- a/e2e-tests/limits/compare/statefulset_no-requests-pxc-increased-oc.yml +++ b/e2e-tests/limits/compare/statefulset_no-requests-pxc-increased-oc.yml @@ -64,7 +64,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/limits/compare/statefulset_no-requests-pxc-increased.yml b/e2e-tests/limits/compare/statefulset_no-requests-pxc-increased.yml index 0a2fd5d571..135ac1bd1a 100644 --- a/e2e-tests/limits/compare/statefulset_no-requests-pxc-increased.yml +++ b/e2e-tests/limits/compare/statefulset_no-requests-pxc-increased.yml @@ -64,7 +64,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/limits/compare/statefulset_no-requests-pxc-k127-oc.yml b/e2e-tests/limits/compare/statefulset_no-requests-pxc-k127-oc.yml index 8d00c014b7..a2d986c268 100644 --- a/e2e-tests/limits/compare/statefulset_no-requests-pxc-k127-oc.yml +++ b/e2e-tests/limits/compare/statefulset_no-requests-pxc-k127-oc.yml @@ -67,7 +67,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state @@ -117,7 +117,7 @@ spec: resources: limits: cpu: 300m - memory: 600M + memory: 2G terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: diff --git a/e2e-tests/limits/compare/statefulset_no-requests-pxc-k127.yml b/e2e-tests/limits/compare/statefulset_no-requests-pxc-k127.yml index a38cb56472..68a73a88ec 100644 --- a/e2e-tests/limits/compare/statefulset_no-requests-pxc-k127.yml +++ b/e2e-tests/limits/compare/statefulset_no-requests-pxc-k127.yml @@ -67,7 +67,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state @@ -117,7 +117,7 @@ spec: resources: limits: cpu: 300m - memory: 600M + memory: 2G terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: diff --git a/e2e-tests/limits/compare/statefulset_no-requests-pxc-oc.yml b/e2e-tests/limits/compare/statefulset_no-requests-pxc-oc.yml index 0664375a85..caff3d6a81 100644 --- a/e2e-tests/limits/compare/statefulset_no-requests-pxc-oc.yml +++ b/e2e-tests/limits/compare/statefulset_no-requests-pxc-oc.yml @@ -64,7 +64,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/limits/compare/statefulset_no-requests-pxc.yml b/e2e-tests/limits/compare/statefulset_no-requests-pxc.yml index 6292601a07..b451a1a48a 100644 --- a/e2e-tests/limits/compare/statefulset_no-requests-pxc.yml +++ b/e2e-tests/limits/compare/statefulset_no-requests-pxc.yml @@ -64,7 +64,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/limits/conf/no-requests.yml b/e2e-tests/limits/conf/no-requests.yml index 6b591a5c0a..5049dd65f2 100644 --- a/e2e-tests/limits/conf/no-requests.yml +++ b/e2e-tests/limits/conf/no-requests.yml @@ -11,7 +11,7 @@ spec: image: -pxc resources: limits: - memory: 600M + memory: 2G cpu: 300m volumeSpec: persistentVolumeClaim: diff --git a/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-k127-no-prefix-oc.yml b/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-k127-no-prefix-oc.yml index 400ea020a4..c6fe65dd49 100644 --- a/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-k127-no-prefix-oc.yml +++ b/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-k127-no-prefix-oc.yml @@ -203,7 +203,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-k127-oc.yml b/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-k127-oc.yml index dc06495677..25bbe7949c 100644 --- a/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-k127-oc.yml +++ b/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-k127-oc.yml @@ -203,7 +203,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-k127.yml b/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-k127.yml index 7485605c10..967f865e90 100644 --- a/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-k127.yml +++ b/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-k127.yml @@ -203,7 +203,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-no-prefix-k127-oc.yml b/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-no-prefix-k127-oc.yml index 400ea020a4..c6fe65dd49 100644 --- a/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-no-prefix-k127-oc.yml +++ b/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-no-prefix-k127-oc.yml @@ -203,7 +203,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-no-prefix-k127.yml b/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-no-prefix-k127.yml index d259e6782c..020c50bd7f 100644 --- a/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-no-prefix-k127.yml +++ b/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-no-prefix-k127.yml @@ -203,7 +203,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-no-prefix-oc.yml b/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-no-prefix-oc.yml index 7b7363c84f..08bb15647d 100644 --- a/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-no-prefix-oc.yml +++ b/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-no-prefix-oc.yml @@ -200,7 +200,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-no-prefix.yml b/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-no-prefix.yml index 3c23cb009d..1090678c45 100644 --- a/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-no-prefix.yml +++ b/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-no-prefix.yml @@ -200,7 +200,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-oc.yml b/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-oc.yml index b805ae701a..b6b8accb54 100644 --- a/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-oc.yml +++ b/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc-oc.yml @@ -200,7 +200,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc.yml b/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc.yml index abddb12666..ea1cabc2de 100644 --- a/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc.yml +++ b/e2e-tests/monitoring-2-0/compare/statefulset_monitoring-pxc.yml @@ -200,7 +200,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-k127-oc.yml b/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-k127-oc.yml index 2d8730eac5..a962a611fa 100644 --- a/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-k127-oc.yml +++ b/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-k127-oc.yml @@ -78,7 +78,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-k127.yml b/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-k127.yml index de5f579f78..1af1290120 100644 --- a/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-k127.yml +++ b/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-k127.yml @@ -78,7 +78,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-oc.yml b/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-oc.yml index e95e4e10b3..06767ef20f 100644 --- a/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-oc.yml +++ b/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-oc.yml @@ -75,7 +75,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-secret-k127-oc.yml b/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-secret-k127-oc.yml index 17502c0ab5..dead37d94d 100644 --- a/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-secret-k127-oc.yml +++ b/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-secret-k127-oc.yml @@ -78,7 +78,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-secret-k127.yml b/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-secret-k127.yml index 3be1f5837a..211fd6ca0e 100644 --- a/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-secret-k127.yml +++ b/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-secret-k127.yml @@ -78,7 +78,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-secret-oc.yml b/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-secret-oc.yml index 04cf2f14c9..a2dddc2677 100644 --- a/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-secret-oc.yml +++ b/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-secret-oc.yml @@ -75,7 +75,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-secret.yml b/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-secret.yml index 4906bc7f92..9da3ae1b39 100644 --- a/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-secret.yml +++ b/e2e-tests/one-pod/compare/statefulset_one-pod-pxc-secret.yml @@ -75,7 +75,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/one-pod/compare/statefulset_one-pod-pxc.yml b/e2e-tests/one-pod/compare/statefulset_one-pod-pxc.yml index 0f22c1427a..54ec1d13bf 100644 --- a/e2e-tests/one-pod/compare/statefulset_one-pod-pxc.yml +++ b/e2e-tests/one-pod/compare/statefulset_one-pod-pxc.yml @@ -75,7 +75,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/pitr-gap-errors/conf/pitr-gap-errors.yml b/e2e-tests/pitr-gap-errors/conf/pitr-gap-errors.yml index 830b9aea17..213751aed3 100755 --- a/e2e-tests/pitr-gap-errors/conf/pitr-gap-errors.yml +++ b/e2e-tests/pitr-gap-errors/conf/pitr-gap-errors.yml @@ -23,7 +23,7 @@ spec: memory: 0.1G cpu: 100m limits: - memory: "1G" + memory: "2G" cpu: "1" volumeSpec: persistentVolumeClaim: diff --git a/e2e-tests/pitr-gap-errors/conf/restore-on-pitr-minio-gap-error.yaml b/e2e-tests/pitr-gap-errors/conf/restore-on-pitr-minio-gap-error.yaml index 48149abe35..9816786a01 100755 --- a/e2e-tests/pitr-gap-errors/conf/restore-on-pitr-minio-gap-error.yaml +++ b/e2e-tests/pitr-gap-errors/conf/restore-on-pitr-minio-gap-error.yaml @@ -1,7 +1,7 @@ apiVersion: pxc.percona.com/v1 kind: PerconaXtraDBClusterRestore metadata: - name: on-pitr-minio-gap-error + name: restore-on-pitr-minio-gap-error spec: pxcCluster: pitr-gap-errors backupName: on-pitr-minio-gap diff --git a/e2e-tests/pitr-gap-errors/conf/restore-on-pitr-minio-gap-force.yaml b/e2e-tests/pitr-gap-errors/conf/restore-on-pitr-minio-gap-force.yaml index 77ef85701d..11eecbbc86 100755 --- a/e2e-tests/pitr-gap-errors/conf/restore-on-pitr-minio-gap-force.yaml +++ b/e2e-tests/pitr-gap-errors/conf/restore-on-pitr-minio-gap-force.yaml @@ -3,7 +3,7 @@ kind: PerconaXtraDBClusterRestore metadata: annotations: percona.com/unsafe-pitr: "true" - name: on-pitr-minio-gap-force + name: restore-on-pitr-minio-gap-force spec: pxcCluster: pitr-gap-errors backupName: on-pitr-minio-gap diff --git a/e2e-tests/pitr-gap-errors/conf/restore-on-pitr-minio-gap-no-pitr.yaml b/e2e-tests/pitr-gap-errors/conf/restore-on-pitr-minio-gap-no-pitr.yaml index 15c467b54f..a5f6b844a5 100755 --- a/e2e-tests/pitr-gap-errors/conf/restore-on-pitr-minio-gap-no-pitr.yaml +++ b/e2e-tests/pitr-gap-errors/conf/restore-on-pitr-minio-gap-no-pitr.yaml @@ -1,7 +1,7 @@ apiVersion: pxc.percona.com/v1 kind: PerconaXtraDBClusterRestore metadata: - name: on-pitr-minio-gap-no-pitr + name: restore-on-pitr-minio-gap-no-pitr spec: pxcCluster: pitr-gap-errors backupName: on-pitr-minio-gap diff --git a/e2e-tests/pitr-gap-errors/conf/restore-on-pitr-minio-invalid.yaml b/e2e-tests/pitr-gap-errors/conf/restore-on-pitr-minio-invalid.yaml index 40d66e91b0..1cb21560bb 100755 --- a/e2e-tests/pitr-gap-errors/conf/restore-on-pitr-minio-invalid.yaml +++ b/e2e-tests/pitr-gap-errors/conf/restore-on-pitr-minio-invalid.yaml @@ -3,7 +3,7 @@ kind: PerconaXtraDBClusterRestore metadata: annotations: percona.com/unsafe-pitr: "true" - name: on-pitr-minio-invalid + name: restore-on-pitr-minio-invalid spec: pxcCluster: pitr-gap-errors backupName: on-pitr-minio diff --git a/e2e-tests/pitr-gap-errors/conf/restore-on-pitr-minio.yaml b/e2e-tests/pitr-gap-errors/conf/restore-on-pitr-minio.yaml index 848fde4dbe..a3a0b68607 100755 --- a/e2e-tests/pitr-gap-errors/conf/restore-on-pitr-minio.yaml +++ b/e2e-tests/pitr-gap-errors/conf/restore-on-pitr-minio.yaml @@ -1,7 +1,7 @@ apiVersion: pxc.percona.com/v1 kind: PerconaXtraDBClusterRestore metadata: - name: on-pitr-minio + name: restore-on-pitr-minio spec: pxcCluster: pitr-gap-errors backupSource: diff --git a/e2e-tests/pitr-gap-errors/conf/restore-on-pitr-minio1.yaml b/e2e-tests/pitr-gap-errors/conf/restore-on-pitr-minio1.yaml index afd7b1eadb..ab376d2610 100755 --- a/e2e-tests/pitr-gap-errors/conf/restore-on-pitr-minio1.yaml +++ b/e2e-tests/pitr-gap-errors/conf/restore-on-pitr-minio1.yaml @@ -1,7 +1,7 @@ apiVersion: pxc.percona.com/v1 kind: PerconaXtraDBClusterRestore metadata: - name: on-pitr-minio1 + name: restore-on-pitr-minio1 spec: pxcCluster: pitr-gap-errors backupSource: diff --git a/e2e-tests/pitr-gap-errors/run b/e2e-tests/pitr-gap-errors/run index 7154c182b6..a49992789a 100755 --- a/e2e-tests/pitr-gap-errors/run +++ b/e2e-tests/pitr-gap-errors/run @@ -126,30 +126,33 @@ check_binlog_gap_restore() { kubectl patch pxc $cluster --type=merge -p '{"spec":{"backup":{"pitr":{"enabled":false}}}}' # try restore, check error if [ "$type" == "error" ]; then - kubectl_bin apply -f $test_dir/conf/restore-on-pitr-minio-gap-error.yaml - wait_backup_restore "on-pitr-minio-gap-error" "Failed" - local backup_error=$(kubectl_bin get pxc-restore on-pitr-minio-gap-error -ojsonpath='{.status.comments}' | grep -c "Backup doesn't guarantee consistent recovery with PITR. Annotate PerconaXtraDBClusterRestore with percona.com/unsafe-pitr to force it.") + local restore=restore-on-pitr-minio-gap-error + kubectl_bin apply -f $test_dir/conf/${restore}.yaml + wait_backup_restore "${restore}" "Failed" + local backup_error=$(kubectl_bin get pxc-restore ${restore} -ojsonpath='{.status.comments}' | grep -c "Backup doesn't guarantee consistent recovery with PITR. Annotate PerconaXtraDBClusterRestore with percona.com/unsafe-pitr to force it.") if [[ $backup_error -eq 0 ]]; then echo "ERROR: Backup is not tagged as PITR unready in the backup condition." kubectl_bin get pxc-backup on-pitr-minio-gap -oyaml exit 1 fi - kubectl_bin delete -f "$test_dir/conf/restore-on-pitr-minio-gap-error.yaml" + kubectl_bin delete -f "$test_dir/conf/${restore}.yaml" elif [ "$type" == "force" ]; then - kubectl_bin apply -f "$test_dir/conf/restore-on-pitr-minio-gap-force.yaml" - wait_backup_restore "on-pitr-minio-gap-force" "Succeeded" + local restore=restore-on-pitr-minio-gap-force + kubectl_bin apply -f "$test_dir/conf/${restore}.yaml" + wait_backup_restore "${restore}" "Succeeded" wait_for_running "$cluster-proxysql" 2 wait_for_running "$cluster-pxc" 3 wait_cluster_consistency "$cluster" 3 2 - kubectl_bin logs job/restore-job-on-pitr-minio-gap-force-${cluster} + kubectl_bin logs job/restore-job-${restore}-${cluster} compare_mysql_cmd "select-gap" "SELECT * from test.gap;" "-h $cluster-pxc-0.$cluster-pxc -uroot -proot_password" compare_mysql_cmd "select-gap" "SELECT * from test.gap;" "-h $cluster-pxc-1.$cluster-pxc -uroot -proot_password" compare_mysql_cmd "select-gap" "SELECT * from test.gap;" "-h $cluster-pxc-2.$cluster-pxc -uroot -proot_password" - kubectl_bin delete -f "$test_dir/conf/restore-on-pitr-minio-gap-force.yaml" + kubectl_bin delete -f "$test_dir/conf/${restore}.yaml" elif [ "$type" == "no-pitr" ]; then - kubectl_bin apply -f $test_dir/conf/restore-on-pitr-minio-gap-no-pitr.yaml - wait_backup_restore "on-pitr-minio-gap-no-pitr" "Succeeded" - local backup_error=$(kubectl_bin get pxc-restore on-pitr-minio-gap-no-pitr -ojsonpath='{.status.comments}' | grep -c "Backup doesn't guarantee consistent recovery with PITR. Annotate PerconaXtraDBClusterRestore with percona.com/unsafe-pitr to force it.") + local restore=restore-on-pitr-minio-gap-no-pitr + kubectl_bin apply -f $test_dir/conf/${restore}.yaml + wait_backup_restore "${restore}" "Succeeded" + local backup_error=$(kubectl_bin get pxc-restore ${restore} -ojsonpath='{.status.comments}' | grep -c "Backup doesn't guarantee consistent recovery with PITR. Annotate PerconaXtraDBClusterRestore with percona.com/unsafe-pitr to force it.") if [[ $backup_error -ne 0 ]]; then echo "ERROR: Restore without PiTR is failed because backups is tagged PiTR unready in the backup condition." kubectl_bin get pxc-backup on-pitr-minio-gap -oyaml @@ -230,7 +233,7 @@ invalid_binlog_test() { | yq eval 'del(.spec.backupSource)' \ | yq eval ".spec.backupName=\"$backup\"" \ | kubectl_bin apply -f - - wait_backup_restore ${backup} + wait_backup_restore restore-${backup} wait_for_running "$cluster-proxysql" 2 wait_for_running "$cluster-pxc" 3 wait_cluster_consistency "$cluster" 3 2 diff --git a/e2e-tests/pitr/conf/pitr.yml b/e2e-tests/pitr/conf/pitr.yml index fbced6e1f8..41ef4dbf7c 100755 --- a/e2e-tests/pitr/conf/pitr.yml +++ b/e2e-tests/pitr/conf/pitr.yml @@ -23,7 +23,7 @@ spec: memory: 0.1G cpu: 100m limits: - memory: "1G" + memory: "2G" cpu: "1" volumeSpec: persistentVolumeClaim: diff --git a/e2e-tests/pitr/conf/restore-on-pitr-minio-gtid.yaml b/e2e-tests/pitr/conf/restore-on-pitr-minio-gtid.yaml index f04a6f850b..6160779906 100755 --- a/e2e-tests/pitr/conf/restore-on-pitr-minio-gtid.yaml +++ b/e2e-tests/pitr/conf/restore-on-pitr-minio-gtid.yaml @@ -1,7 +1,7 @@ apiVersion: pxc.percona.com/v1 kind: PerconaXtraDBClusterRestore metadata: - name: on-pitr-minio + name: restore-on-pitr-minio-gtid spec: pxcCluster: pitr backupName: on-pitr-minio diff --git a/e2e-tests/pitr/conf/restore-on-pitr-minio-time.yaml b/e2e-tests/pitr/conf/restore-on-pitr-minio-time.yaml index 54768916c9..6177a2f53b 100755 --- a/e2e-tests/pitr/conf/restore-on-pitr-minio-time.yaml +++ b/e2e-tests/pitr/conf/restore-on-pitr-minio-time.yaml @@ -1,7 +1,7 @@ apiVersion: pxc.percona.com/v1 kind: PerconaXtraDBClusterRestore metadata: - name: on-pitr-minio + name: restore-on-pitr-minio-time spec: pxcCluster: pitr backupName: on-pitr-minio diff --git a/e2e-tests/pitr/conf/restore-on-pitr-minio.yaml b/e2e-tests/pitr/conf/restore-on-pitr-minio.yaml index 0bd799bf5f..70dbcdbe95 100755 --- a/e2e-tests/pitr/conf/restore-on-pitr-minio.yaml +++ b/e2e-tests/pitr/conf/restore-on-pitr-minio.yaml @@ -1,7 +1,7 @@ apiVersion: pxc.percona.com/v1 kind: PerconaXtraDBClusterRestore metadata: - name: on-pitr-minio + name: restore-on-pitr-minio spec: pxcCluster: pitr backupSource: diff --git a/e2e-tests/pitr/run b/e2e-tests/pitr/run index af124cd7cd..0883e374fb 100755 --- a/e2e-tests/pitr/run +++ b/e2e-tests/pitr/run @@ -116,15 +116,21 @@ main() { timeout=60 binlogs_exist=0 - for i in $(seq 2 3); do + for i in $(seq 1 5); do + echo "Checking if binlogs exist in bucket (attempt $i)..." binlogs_exist=$( kubectl_bin run -n "${NAMESPACE}" -i --rm aws-cli --image=perconalab/awscli --restart=Never -- \ /usr/bin/env AWS_ACCESS_KEY_ID=some-access-key AWS_SECRET_ACCESS_KEY=some-secret-key AWS_DEFAULT_REGION=us-east-1 \ /usr/bin/aws --endpoint-url https://minio-service:9000 --no-verify-ssl s3 ls operator-testing/binlogs/ | grep -c "binlog" | cat exit "${PIPESTATUS[0]}" ) - if [ "$binlogs_exist" -eq 0 ]; then - sleep "$((timeout * i))" + if [ "$binlogs_exist" -gt 0 ]; then + echo "${binlogs_exist} binlogs found in bucket" + break + else + d=$((timeout * i)) + echo "No binlogs found in bucket. Sleeping for ${d} seconds..." + sleep ${d} fi done diff --git a/e2e-tests/proxy-protocol/compare/statefulset_proxy-protocol-pxc-k127-oc.yml b/e2e-tests/proxy-protocol/compare/statefulset_proxy-protocol-pxc-k127-oc.yml index 907e4cbf5d..35433daa8e 100644 --- a/e2e-tests/proxy-protocol/compare/statefulset_proxy-protocol-pxc-k127-oc.yml +++ b/e2e-tests/proxy-protocol/compare/statefulset_proxy-protocol-pxc-k127-oc.yml @@ -67,7 +67,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/proxy-protocol/compare/statefulset_proxy-protocol-pxc-k127.yml b/e2e-tests/proxy-protocol/compare/statefulset_proxy-protocol-pxc-k127.yml index 19e45be134..3ae9de8753 100644 --- a/e2e-tests/proxy-protocol/compare/statefulset_proxy-protocol-pxc-k127.yml +++ b/e2e-tests/proxy-protocol/compare/statefulset_proxy-protocol-pxc-k127.yml @@ -67,7 +67,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/proxy-protocol/compare/statefulset_proxy-protocol-pxc-oc.yml b/e2e-tests/proxy-protocol/compare/statefulset_proxy-protocol-pxc-oc.yml index bd9fb543bd..514856c1b8 100644 --- a/e2e-tests/proxy-protocol/compare/statefulset_proxy-protocol-pxc-oc.yml +++ b/e2e-tests/proxy-protocol/compare/statefulset_proxy-protocol-pxc-oc.yml @@ -64,7 +64,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/proxy-protocol/compare/statefulset_proxy-protocol-pxc.yml b/e2e-tests/proxy-protocol/compare/statefulset_proxy-protocol-pxc.yml index 6f51e86289..aadb9d2238 100644 --- a/e2e-tests/proxy-protocol/compare/statefulset_proxy-protocol-pxc.yml +++ b/e2e-tests/proxy-protocol/compare/statefulset_proxy-protocol-pxc.yml @@ -64,7 +64,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/proxysql-sidecar-res-limits/conf/side-car.yml b/e2e-tests/proxysql-sidecar-res-limits/conf/side-car.yml index d0ea625f8e..244d328d2e 100644 --- a/e2e-tests/proxysql-sidecar-res-limits/conf/side-car.yml +++ b/e2e-tests/proxysql-sidecar-res-limits/conf/side-car.yml @@ -16,7 +16,7 @@ spec: memory: 0.1G cpu: 100m limits: - memory: "1G" + memory: "2G" cpu: "1" volumeSpec: persistentVolumeClaim: diff --git a/e2e-tests/pvc-resize/conf/some-name-eks.yml b/e2e-tests/pvc-resize/conf/some-name-eks.yml index a07a187383..be33e3b2cf 100644 --- a/e2e-tests/pvc-resize/conf/some-name-eks.yml +++ b/e2e-tests/pvc-resize/conf/some-name-eks.yml @@ -19,7 +19,7 @@ spec: memory: 0.1G cpu: 100m limits: - memory: "1G" + memory: "2G" cpu: "1" volumeSpec: persistentVolumeClaim: diff --git a/e2e-tests/pvc-resize/conf/some-name.yml b/e2e-tests/pvc-resize/conf/some-name.yml index bada501d4c..84f824d5a0 100644 --- a/e2e-tests/pvc-resize/conf/some-name.yml +++ b/e2e-tests/pvc-resize/conf/some-name.yml @@ -18,7 +18,7 @@ spec: memory: 0.1G cpu: 100m limits: - memory: "1G" + memory: "2G" cpu: "1" volumeSpec: persistentVolumeClaim: diff --git a/e2e-tests/pvc-resize/run b/e2e-tests/pvc-resize/run index 21e929845c..b16645e471 100755 --- a/e2e-tests/pvc-resize/run +++ b/e2e-tests/pvc-resize/run @@ -148,6 +148,9 @@ if [ "$EKS" == 1 -o -n "$OPENSHIFT" ]; then echo "Deleting and recreating PXC cluster ${cluster}" kubectl_bin delete pxc ${cluster} spinup_pxc "${cluster}" "$test_dir/conf/$cluster-eks.yml" "3" "10" "${conf_dir}/secrets.yml" + echo "Enabling PVC resize for 2nd eks/openshift cluster" + kubectl_bin patch pxc "${cluster}" --type=json -p='[{"op": "add", "path": "/spec/enableVolumeExpansion", "value":true }]' + sleep 10 fi desc 'create resourcequota' diff --git a/e2e-tests/release_versions b/e2e-tests/release_versions new file mode 100644 index 0000000000..c1d8bc5343 --- /dev/null +++ b/e2e-tests/release_versions @@ -0,0 +1,28 @@ +# Images versions +IMAGE_OPERATOR=percona/percona-xtradb-cluster-operator:1.16.1 + +IMAGE_PXC84=percona/percona-xtradb-cluster:8.4.2-2.1 +IMAGE_BACKUP84=percona/percona-xtradb-cluster-operator:1.16.1-pxc8.4-backup-pxb8.4.0 + +IMAGE_PXC80=percona/percona-xtradb-cluster:8.0.39-30.1 +IMAGE_BACKUP80=percona/percona-xtradb-cluster-operator:1.16.1-pxc8.0-backup-pxb8.0.35 + +IMAGE_PXC57=percona/percona-xtradb-cluster:5.7.44-31.65 +IMAGE_BACKUP57=percona/percona-xtradb-cluster-operator:1.16.1-pxc5.7-backup-pxb2.4.29 + +IMAGE_PROXY=percona/proxysql2:2.7.1 +IMAGE_HAPROXY=percona/haproxy:2.8.11 +IMAGE_LOGCOLLECTOR=percona/percona-xtradb-cluster-operator:1.16.1-logcollector-fluentbit3.2.2 +IMAGE_PMM_CLIENT=percona/pmm-client:2.44.0 +IMAGE_PMM_SERVER=percona/pmm-server:2.44.0 + +# Supported k8s versions +GKE_MIN=1.28 +GKE_MAX=1.30 +EKS_MIN=1.28 +EKS_MAX=1.31 +AKS_MIN=1.28 +AKS_MAX=1.31 +OPENSHIFT_MIN=4.14.42 +OPENSHIFT_MAX=4.17.8 +MINIKUBE_REL=1.31.0 \ No newline at end of file diff --git a/e2e-tests/scaling-proxysql/conf/scaling-proxysql.yml b/e2e-tests/scaling-proxysql/conf/scaling-proxysql.yml index 864e8fccc5..d9e037b36d 100644 --- a/e2e-tests/scaling-proxysql/conf/scaling-proxysql.yml +++ b/e2e-tests/scaling-proxysql/conf/scaling-proxysql.yml @@ -15,7 +15,7 @@ spec: memory: 0.1G cpu: 100m limits: - memory: "1G" + memory: "2G" cpu: "1" volumeSpec: persistentVolumeClaim: diff --git a/e2e-tests/security-context/compare/job.batch_restore-job-restore-pvc-sec-context-k127.yml b/e2e-tests/security-context/compare/job.batch_restore-job-restore-pvc-sec-context-k127.yml deleted file mode 100644 index d4f6962390..0000000000 --- a/e2e-tests/security-context/compare/job.batch_restore-job-restore-pvc-sec-context-k127.yml +++ /dev/null @@ -1,92 +0,0 @@ -apiVersion: batch/v1 -kind: Job -metadata: - generation: 1 - labels: - app.kubernetes.io/instance: sec-context - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - percona.com/restore-job-name: restore-job-restore-pvc-sec-context - name: restore-job-restore-pvc-sec-context - ownerReferences: - - controller: true - kind: PerconaXtraDBClusterRestore - name: restore-pvc -spec: - backoffLimit: 4 - completionMode: NonIndexed - completions: 1 - parallelism: 1 - selector: - matchLabels: {} - suspend: false - template: - metadata: - annotations: - openshift.io/scc: privileged - labels: - app.kubernetes.io/instance: sec-context - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - percona.com/restore-job-name: restore-job-restore-pvc-sec-context - spec: - containers: - - command: - - recovery-pvc-joiner.sh - env: - - name: RESTORE_SRC_SERVICE - value: restore-src-restore-pvc-sec-context - - name: XB_USE_MEMORY - value: 100MB - imagePullPolicy: Always - name: xtrabackup - resources: {} - securityContext: - privileged: true - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /datadir - name: datadir - - mountPath: /etc/mysql/vault-keyring-secret - name: vault-keyring-secret - - mountPath: /etc/mysql/ssl - name: ssl - - mountPath: /etc/mysql/ssl-internal - name: ssl-internal - dnsPolicy: ClusterFirst - restartPolicy: Never - schedulerName: default-scheduler - securityContext: - fsGroup: 1001 - runAsUser: 1001 - supplementalGroups: - - 1001 - serviceAccount: percona-xtradb-cluster-operator-workload - serviceAccountName: percona-xtradb-cluster-operator-workload - terminationGracePeriodSeconds: 30 - topologySpreadConstraints: - - maxSkew: 1 - topologyKey: kubernetes.io/hostname - whenUnsatisfiable: ScheduleAnyway - volumes: - - name: datadir - persistentVolumeClaim: - claimName: datadir-sec-context-pxc-0 - - name: vault-keyring-secret - secret: - defaultMode: 420 - optional: true - secretName: sec-context-vault - - name: ssl-internal - secret: - defaultMode: 420 - optional: true - secretName: some-name-ssl-internal - - name: ssl - secret: - defaultMode: 420 - optional: false - secretName: some-name-ssl diff --git a/e2e-tests/security-context/compare/job.batch_restore-job-restore-s3-sec-context-k127.yml b/e2e-tests/security-context/compare/job.batch_restore-job-restore-s3-sec-context-k127.yml deleted file mode 100644 index 521e2e5c0c..0000000000 --- a/e2e-tests/security-context/compare/job.batch_restore-job-restore-s3-sec-context-k127.yml +++ /dev/null @@ -1,101 +0,0 @@ -apiVersion: batch/v1 -kind: Job -metadata: - generation: 1 - labels: - app.kubernetes.io/instance: sec-context - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - percona.com/restore-job-name: restore-job-restore-s3-sec-context - name: restore-job-restore-s3-sec-context - ownerReferences: - - controller: true - kind: PerconaXtraDBClusterRestore - name: restore-s3 -spec: - backoffLimit: 4 - completionMode: NonIndexed - completions: 1 - parallelism: 1 - selector: - matchLabels: {} - suspend: false - template: - metadata: - annotations: - openshift.io/scc: privileged - labels: - app.kubernetes.io/instance: sec-context - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - percona.com/restore-job-name: restore-job-restore-s3-sec-context - spec: - containers: - - command: - - recovery-cloud.sh - env: - - name: PXC_SERVICE - value: sec-context-pxc - - name: PXC_USER - value: xtrabackup - - name: PXC_PASS - valueFrom: - secretKeyRef: - key: xtrabackup - name: my-cluster-secrets - - name: VERIFY_TLS - value: "true" - - name: ENDPOINT - value: http://minio-service.namespace:9000/ - - name: DEFAULT_REGION - value: us-east-1 - - name: ACCESS_KEY_ID - valueFrom: - secretKeyRef: - key: AWS_ACCESS_KEY_ID - name: minio-secret - - name: SECRET_ACCESS_KEY - valueFrom: - secretKeyRef: - key: AWS_SECRET_ACCESS_KEY - name: minio-secret - - name: XB_USE_MEMORY - value: 100MB - imagePullPolicy: Always - name: xtrabackup - resources: {} - securityContext: - privileged: true - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /datadir - name: datadir - - mountPath: /etc/mysql/vault-keyring-secret - name: vault-keyring-secret - dnsPolicy: ClusterFirst - restartPolicy: Never - schedulerName: default-scheduler - securityContext: - fsGroup: 1001 - runAsUser: 1001 - supplementalGroups: - - 1001 - serviceAccount: percona-xtradb-cluster-operator-workload - serviceAccountName: percona-xtradb-cluster-operator-workload - terminationGracePeriodSeconds: 30 - topologySpreadConstraints: - - maxSkew: 1 - topologyKey: kubernetes.io/hostname - whenUnsatisfiable: ScheduleAnyway - volumes: - - name: datadir - persistentVolumeClaim: - claimName: datadir-sec-context-pxc-0 - - name: vault-keyring-secret - secret: - defaultMode: 420 - optional: true - secretName: sec-context-vault diff --git a/e2e-tests/security-context/compare/statefulset_sec-context-proxysql-changes-k127.yml b/e2e-tests/security-context/compare/statefulset_sec-context-proxysql-changes-k127.yml deleted file mode 100644 index 0d9ae745da..0000000000 --- a/e2e-tests/security-context/compare/statefulset_sec-context-proxysql-changes-k127.yml +++ /dev/null @@ -1,251 +0,0 @@ -apiVersion: apps/v1 -kind: StatefulSet -metadata: - generation: 2 - name: sec-context-proxysql - ownerReferences: - - controller: true - kind: PerconaXtraDBCluster - name: sec-context -spec: - persistentVolumeClaimRetentionPolicy: - whenDeleted: Retain - whenScaled: Retain - podManagementPolicy: OrderedReady - replicas: 2 - revisionHistoryLimit: 10 - selector: - matchLabels: - app.kubernetes.io/component: proxysql - app.kubernetes.io/instance: sec-context - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - serviceName: sec-context-proxysql-unready - template: - metadata: - labels: - app.kubernetes.io/component: proxysql - app.kubernetes.io/instance: sec-context - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - spec: - containers: - - args: - - proxysql - - -f - - -c - - /etc/proxysql/proxysql.cnf - - --reload - command: - - /opt/percona/proxysql-entrypoint.sh - env: - - name: PXC_SERVICE - value: sec-context-pxc - - name: OPERATOR_PASSWORD - valueFrom: - secretKeyRef: - key: operator - name: internal-sec-context - - name: PROXY_ADMIN_USER - value: proxyadmin - - name: PROXY_ADMIN_PASSWORD - valueFrom: - secretKeyRef: - key: proxyadmin - name: internal-sec-context - - name: MONITOR_PASSWORD - valueFrom: - secretKeyRef: - key: monitor - name: internal-sec-context - envFrom: - - secretRef: - name: sec-context-env-vars-proxysql - optional: true - imagePullPolicy: Always - name: proxysql - ports: - - containerPort: 3306 - name: mysql - protocol: TCP - - containerPort: 6032 - name: proxyadm - protocol: TCP - resources: - requests: - cpu: 100m - memory: 100M - securityContext: - privileged: true - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/proxysql - name: proxydata - - mountPath: /etc/proxysql/ssl - name: ssl - - mountPath: /etc/proxysql/ssl-internal - name: ssl-internal - - mountPath: /opt/percona - name: bin - - args: - - /opt/percona/peer-list - - -on-change=/opt/percona/proxysql_add_pxc_nodes.sh - - -service=$(PXC_SERVICE) - env: - - name: PXC_SERVICE - value: sec-context-pxc - - name: OPERATOR_PASSWORD - valueFrom: - secretKeyRef: - key: operator - name: internal-sec-context - - name: PROXY_ADMIN_USER - value: proxyadmin - - name: PROXY_ADMIN_PASSWORD - valueFrom: - secretKeyRef: - key: proxyadmin - name: internal-sec-context - - name: MONITOR_PASSWORD - valueFrom: - secretKeyRef: - key: monitor - name: internal-sec-context - envFrom: - - secretRef: - name: sec-context-env-vars-proxysql - optional: true - imagePullPolicy: Always - name: pxc-monit - resources: {} - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /opt/percona - name: bin - - args: - - /opt/percona/peer-list - - -on-change=/opt/percona/proxysql_add_proxysql_nodes.sh - - -service=$(PROXYSQL_SERVICE) - env: - - name: PROXYSQL_SERVICE - value: sec-context-proxysql-unready - - name: OPERATOR_PASSWORD - valueFrom: - secretKeyRef: - key: operator - name: internal-sec-context - - name: PROXY_ADMIN_USER - value: proxyadmin - - name: PROXY_ADMIN_PASSWORD - valueFrom: - secretKeyRef: - key: proxyadmin - name: internal-sec-context - - name: MONITOR_PASSWORD - valueFrom: - secretKeyRef: - key: monitor - name: internal-sec-context - envFrom: - - secretRef: - name: sec-context-env-vars-proxysql - optional: true - imagePullPolicy: Always - name: proxysql-monit - resources: {} - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /opt/percona - name: bin - dnsPolicy: ClusterFirst - initContainers: - - command: - - /pxc-init-entrypoint.sh - imagePullPolicy: Always - name: pxc-init - resources: - limits: - cpu: 50m - memory: 50M - securityContext: - privileged: true - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/mysql - name: bin - - command: - - /proxysql-init-entrypoint.sh - imagePullPolicy: Always - name: proxysql-init - resources: - limits: - cpu: 50m - memory: 50M - securityContext: - privileged: true - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /opt/percona - name: bin - restartPolicy: Always - schedulerName: default-scheduler - securityContext: - runAsGroup: 1001 - runAsUser: 1001 - supplementalGroups: - - 1001 - serviceAccount: percona-xtradb-cluster-operator-workload - serviceAccountName: percona-xtradb-cluster-operator-workload - terminationGracePeriodSeconds: 30 - topologySpreadConstraints: - - labelSelector: - matchLabels: - app.kubernetes.io/component: proxysql - app.kubernetes.io/instance: sec-context - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - maxSkew: 1 - topologyKey: kubernetes.io/hostname - whenUnsatisfiable: ScheduleAnyway - volumes: - - name: ssl-internal - secret: - defaultMode: 420 - optional: true - secretName: some-name-ssl-internal - - name: ssl - secret: - defaultMode: 420 - optional: false - secretName: some-name-ssl - - emptyDir: {} - name: bin - updateStrategy: - rollingUpdate: - partition: 0 - type: RollingUpdate - volumeClaimTemplates: - - metadata: - labels: - app.kubernetes.io/component: proxysql - app.kubernetes.io/instance: sec-context - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - name: proxydata - spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 6Gi - status: - phase: Pending diff --git a/e2e-tests/security-context/compare/statefulset_sec-context-proxysql-changes-oc.yml b/e2e-tests/security-context/compare/statefulset_sec-context-proxysql-changes-oc.yml index d4f5c84c4c..cee9bb7351 100644 --- a/e2e-tests/security-context/compare/statefulset_sec-context-proxysql-changes-oc.yml +++ b/e2e-tests/security-context/compare/statefulset_sec-context-proxysql-changes-oc.yml @@ -8,6 +8,9 @@ metadata: kind: PerconaXtraDBCluster name: sec-context spec: + persistentVolumeClaimRetentionPolicy: + whenDeleted: Retain + whenScaled: Retain podManagementPolicy: OrderedReady replicas: 2 revisionHistoryLimit: 10 @@ -171,6 +174,8 @@ spec: memory: 50M securityContext: privileged: true + runAsGroup: 1001 + runAsUser: 1001 terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: @@ -186,6 +191,8 @@ spec: memory: 50M securityContext: privileged: true + runAsGroup: 1001 + runAsUser: 1001 terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: diff --git a/e2e-tests/security-context/compare/statefulset_sec-context-proxysql-changes.yml b/e2e-tests/security-context/compare/statefulset_sec-context-proxysql-changes.yml index 39c6df2635..cee9bb7351 100644 --- a/e2e-tests/security-context/compare/statefulset_sec-context-proxysql-changes.yml +++ b/e2e-tests/security-context/compare/statefulset_sec-context-proxysql-changes.yml @@ -8,6 +8,9 @@ metadata: kind: PerconaXtraDBCluster name: sec-context spec: + persistentVolumeClaimRetentionPolicy: + whenDeleted: Retain + whenScaled: Retain podManagementPolicy: OrderedReady replicas: 2 revisionHistoryLimit: 10 @@ -29,7 +32,15 @@ spec: app.kubernetes.io/part-of: percona-xtradb-cluster spec: containers: - - env: + - args: + - proxysql + - -f + - -c + - /etc/proxysql/proxysql.cnf + - --reload + command: + - /opt/percona/proxysql-entrypoint.sh + env: - name: PXC_SERVICE value: sec-context-pxc - name: OPERATOR_PASSWORD @@ -163,6 +174,8 @@ spec: memory: 50M securityContext: privileged: true + runAsGroup: 1001 + runAsUser: 1001 terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: @@ -177,7 +190,9 @@ spec: cpu: 50m memory: 50M securityContext: - privileged: false + privileged: true + runAsGroup: 1001 + runAsUser: 1001 terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: diff --git a/e2e-tests/security-context/compare/statefulset_sec-context-proxysql-k127.yml b/e2e-tests/security-context/compare/statefulset_sec-context-proxysql-k127.yml deleted file mode 100644 index 3ff6b9b4c6..0000000000 --- a/e2e-tests/security-context/compare/statefulset_sec-context-proxysql-k127.yml +++ /dev/null @@ -1,238 +0,0 @@ -apiVersion: apps/v1 -kind: StatefulSet -metadata: - generation: 1 - name: sec-context-proxysql - ownerReferences: - - controller: true - kind: PerconaXtraDBCluster - name: sec-context -spec: - persistentVolumeClaimRetentionPolicy: - whenDeleted: Retain - whenScaled: Retain - podManagementPolicy: OrderedReady - replicas: 2 - revisionHistoryLimit: 10 - selector: - matchLabels: - app.kubernetes.io/component: proxysql - app.kubernetes.io/instance: sec-context - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - serviceName: sec-context-proxysql-unready - template: - metadata: - labels: - app.kubernetes.io/component: proxysql - app.kubernetes.io/instance: sec-context - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - spec: - containers: - - args: - - proxysql - - -f - - -c - - /etc/proxysql/proxysql.cnf - - --reload - command: - - /opt/percona/proxysql-entrypoint.sh - env: - - name: PXC_SERVICE - value: sec-context-pxc - - name: OPERATOR_PASSWORD - valueFrom: - secretKeyRef: - key: operator - name: internal-sec-context - - name: PROXY_ADMIN_USER - value: proxyadmin - - name: PROXY_ADMIN_PASSWORD - valueFrom: - secretKeyRef: - key: proxyadmin - name: internal-sec-context - - name: MONITOR_PASSWORD - valueFrom: - secretKeyRef: - key: monitor - name: internal-sec-context - envFrom: - - secretRef: - name: sec-context-env-vars-proxysql - optional: true - imagePullPolicy: Always - name: proxysql - ports: - - containerPort: 3306 - name: mysql - protocol: TCP - - containerPort: 6032 - name: proxyadm - protocol: TCP - resources: - requests: - cpu: 100m - memory: 100M - securityContext: - privileged: false - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/proxysql - name: proxydata - - mountPath: /etc/proxysql/ssl - name: ssl - - mountPath: /etc/proxysql/ssl-internal - name: ssl-internal - - mountPath: /opt/percona - name: bin - - args: - - /opt/percona/peer-list - - -on-change=/opt/percona/proxysql_add_pxc_nodes.sh - - -service=$(PXC_SERVICE) - env: - - name: PXC_SERVICE - value: sec-context-pxc - - name: OPERATOR_PASSWORD - valueFrom: - secretKeyRef: - key: operator - name: internal-sec-context - - name: PROXY_ADMIN_USER - value: proxyadmin - - name: PROXY_ADMIN_PASSWORD - valueFrom: - secretKeyRef: - key: proxyadmin - name: internal-sec-context - - name: MONITOR_PASSWORD - valueFrom: - secretKeyRef: - key: monitor - name: internal-sec-context - envFrom: - - secretRef: - name: sec-context-env-vars-proxysql - optional: true - imagePullPolicy: Always - name: pxc-monit - resources: {} - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /opt/percona - name: bin - - args: - - /opt/percona/peer-list - - -on-change=/opt/percona/proxysql_add_proxysql_nodes.sh - - -service=$(PROXYSQL_SERVICE) - env: - - name: PROXYSQL_SERVICE - value: sec-context-proxysql-unready - - name: OPERATOR_PASSWORD - valueFrom: - secretKeyRef: - key: operator - name: internal-sec-context - - name: PROXY_ADMIN_USER - value: proxyadmin - - name: PROXY_ADMIN_PASSWORD - valueFrom: - secretKeyRef: - key: proxyadmin - name: internal-sec-context - - name: MONITOR_PASSWORD - valueFrom: - secretKeyRef: - key: monitor - name: internal-sec-context - envFrom: - - secretRef: - name: sec-context-env-vars-proxysql - optional: true - imagePullPolicy: Always - name: proxysql-monit - resources: {} - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /opt/percona - name: bin - dnsPolicy: ClusterFirst - initContainers: - - command: - - /pxc-init-entrypoint.sh - imagePullPolicy: Always - name: pxc-init - resources: - limits: - cpu: 50m - memory: 50M - securityContext: - privileged: false - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/mysql - name: bin - - command: - - /proxysql-init-entrypoint.sh - imagePullPolicy: Always - name: proxysql-init - resources: - limits: - cpu: 50m - memory: 50M - securityContext: - privileged: false - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /opt/percona - name: bin - restartPolicy: Always - schedulerName: default-scheduler - securityContext: - fsGroup: 1001 - runAsUser: 1001 - serviceAccount: percona-xtradb-cluster-operator-workload - serviceAccountName: percona-xtradb-cluster-operator-workload - terminationGracePeriodSeconds: 30 - volumes: - - name: ssl-internal - secret: - defaultMode: 420 - optional: true - secretName: some-name-ssl-internal - - name: ssl - secret: - defaultMode: 420 - optional: false - secretName: some-name-ssl - - emptyDir: {} - name: bin - updateStrategy: - rollingUpdate: - partition: 0 - type: RollingUpdate - volumeClaimTemplates: - - metadata: - labels: - app.kubernetes.io/component: proxysql - app.kubernetes.io/instance: sec-context - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - name: proxydata - spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 6Gi - status: - phase: Pending diff --git a/e2e-tests/security-context/compare/statefulset_sec-context-proxysql-oc.yml b/e2e-tests/security-context/compare/statefulset_sec-context-proxysql-oc.yml index 5a7aac1b6b..3ff6b9b4c6 100644 --- a/e2e-tests/security-context/compare/statefulset_sec-context-proxysql-oc.yml +++ b/e2e-tests/security-context/compare/statefulset_sec-context-proxysql-oc.yml @@ -8,6 +8,9 @@ metadata: kind: PerconaXtraDBCluster name: sec-context spec: + persistentVolumeClaimRetentionPolicy: + whenDeleted: Retain + whenScaled: Retain podManagementPolicy: OrderedReady replicas: 2 revisionHistoryLimit: 10 diff --git a/e2e-tests/security-context/compare/statefulset_sec-context-proxysql.yml b/e2e-tests/security-context/compare/statefulset_sec-context-proxysql.yml index 36decd4138..3ff6b9b4c6 100644 --- a/e2e-tests/security-context/compare/statefulset_sec-context-proxysql.yml +++ b/e2e-tests/security-context/compare/statefulset_sec-context-proxysql.yml @@ -8,6 +8,9 @@ metadata: kind: PerconaXtraDBCluster name: sec-context spec: + persistentVolumeClaimRetentionPolicy: + whenDeleted: Retain + whenScaled: Retain podManagementPolicy: OrderedReady replicas: 2 revisionHistoryLimit: 10 @@ -29,7 +32,15 @@ spec: app.kubernetes.io/part-of: percona-xtradb-cluster spec: containers: - - env: + - args: + - proxysql + - -f + - -c + - /etc/proxysql/proxysql.cnf + - --reload + command: + - /opt/percona/proxysql-entrypoint.sh + env: - name: PXC_SERVICE value: sec-context-pxc - name: OPERATOR_PASSWORD diff --git a/e2e-tests/security-context/compare/statefulset_sec-context-pxc-changes-k127.yml b/e2e-tests/security-context/compare/statefulset_sec-context-pxc-changes-k127.yml deleted file mode 100644 index ddcf3101f3..0000000000 --- a/e2e-tests/security-context/compare/statefulset_sec-context-pxc-changes-k127.yml +++ /dev/null @@ -1,256 +0,0 @@ -apiVersion: apps/v1 -kind: StatefulSet -metadata: - generation: 2 - name: sec-context-pxc - ownerReferences: - - controller: true - kind: PerconaXtraDBCluster - name: sec-context -spec: - persistentVolumeClaimRetentionPolicy: - whenDeleted: Retain - whenScaled: Retain - podManagementPolicy: OrderedReady - replicas: 3 - revisionHistoryLimit: 10 - selector: - matchLabels: - app.kubernetes.io/component: pxc - app.kubernetes.io/instance: sec-context - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - serviceName: sec-context-pxc - template: - metadata: - annotations: - openshift.io/scc: privileged - labels: - app.kubernetes.io/component: pxc - app.kubernetes.io/instance: sec-context - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - spec: - affinity: - podAntiAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - - labelSelector: - matchLabels: - app.kubernetes.io/component: pxc - app.kubernetes.io/instance: sec-context - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - topologyKey: kubernetes.io/hostname - containers: - - args: - - mysqld - command: - - /var/lib/mysql/pxc-entrypoint.sh - env: - - name: PXC_SERVICE - value: sec-context-pxc-unready - - name: MONITOR_HOST - value: '%' - - name: MYSQL_ROOT_PASSWORD - valueFrom: - secretKeyRef: - key: root - name: internal-sec-context - - name: XTRABACKUP_PASSWORD - valueFrom: - secretKeyRef: - key: xtrabackup - name: internal-sec-context - - name: MONITOR_PASSWORD - valueFrom: - secretKeyRef: - key: monitor - name: internal-sec-context - - name: OPERATOR_ADMIN_PASSWORD - valueFrom: - secretKeyRef: - key: operator - name: internal-sec-context - - name: LIVENESS_CHECK_TIMEOUT - value: "5" - - name: READINESS_CHECK_TIMEOUT - value: "15" - - name: DEFAULT_AUTHENTICATION_PLUGIN - value: mysql_native_password - - name: NOTIFY_SOCKET - value: /var/lib/mysql/notify.sock - - name: MYSQL_STATE_FILE - value: /var/lib/mysql/mysql.state - envFrom: - - secretRef: - name: sec-context-env-vars-pxc - optional: true - imagePullPolicy: Always - livenessProbe: - exec: - command: - - /var/lib/mysql/liveness-check.sh - failureThreshold: 3 - initialDelaySeconds: 300 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 5 - name: pxc - ports: - - containerPort: 3306 - name: mysql - protocol: TCP - - containerPort: 4444 - name: sst - protocol: TCP - - containerPort: 4567 - name: write-set - protocol: TCP - - containerPort: 4568 - name: ist - protocol: TCP - - containerPort: 33062 - name: mysql-admin - protocol: TCP - - containerPort: 33060 - name: mysqlx - protocol: TCP - readinessProbe: - exec: - command: - - /var/lib/mysql/readiness-check.sh - failureThreshold: 5 - initialDelaySeconds: 15 - periodSeconds: 30 - successThreshold: 1 - timeoutSeconds: 15 - resources: - limits: - cpu: "1" - memory: 1G - requests: - cpu: 100m - memory: 100M - securityContext: - privileged: true - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/mysql - name: datadir - - mountPath: /etc/percona-xtradb-cluster.conf.d - name: config - - mountPath: /tmp - name: tmp - - mountPath: /etc/mysql/ssl - name: ssl - - mountPath: /etc/mysql/ssl-internal - name: ssl-internal - - mountPath: /etc/mysql/mysql-users-secret - name: mysql-users-secret-file - - mountPath: /etc/my.cnf.d - name: auto-config - - mountPath: /etc/mysql/vault-keyring-secret - name: vault-keyring-secret - - mountPath: /etc/mysql/init-file - name: mysql-init-file - dnsPolicy: ClusterFirst - initContainers: - - command: - - /pxc-init-entrypoint.sh - imagePullPolicy: Always - name: pxc-init - resources: - limits: - cpu: 50m - memory: 50M - securityContext: - privileged: true - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/mysql - name: datadir - restartPolicy: Always - schedulerName: default-scheduler - securityContext: - fsGroup: 1001 - runAsUser: 1001 - supplementalGroups: - - 1001 - serviceAccount: percona-xtradb-cluster-operator-workload - serviceAccountName: percona-xtradb-cluster-operator-workload - terminationGracePeriodSeconds: 600 - topologySpreadConstraints: - - labelSelector: - matchLabels: - app.kubernetes.io/component: pxc - app.kubernetes.io/instance: sec-context - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - maxSkew: 1 - topologyKey: kubernetes.io/hostname - whenUnsatisfiable: ScheduleAnyway - volumes: - - emptyDir: {} - name: tmp - - configMap: - defaultMode: 420 - name: sec-context-pxc - optional: true - name: config - - name: ssl-internal - secret: - defaultMode: 420 - optional: true - secretName: some-name-ssl-internal - - name: ssl - secret: - defaultMode: 420 - optional: false - secretName: some-name-ssl - - configMap: - defaultMode: 420 - name: auto-sec-context-pxc - optional: true - name: auto-config - - name: vault-keyring-secret - secret: - defaultMode: 420 - optional: true - secretName: sec-context-vault - - name: mysql-users-secret-file - secret: - defaultMode: 420 - optional: false - secretName: internal-sec-context - - name: mysql-init-file - secret: - defaultMode: 420 - optional: true - secretName: sec-context-mysql-init - updateStrategy: - rollingUpdate: - partition: 0 - type: RollingUpdate - volumeClaimTemplates: - - metadata: - labels: - app.kubernetes.io/component: pxc - app.kubernetes.io/instance: sec-context - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - name: datadir - spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 2Gi - status: - phase: Pending diff --git a/e2e-tests/security-context/compare/statefulset_sec-context-pxc-changes.yml b/e2e-tests/security-context/compare/statefulset_sec-context-pxc-changes.yml index edb925f12f..1c47f01cde 100644 --- a/e2e-tests/security-context/compare/statefulset_sec-context-pxc-changes.yml +++ b/e2e-tests/security-context/compare/statefulset_sec-context-pxc-changes.yml @@ -8,6 +8,9 @@ metadata: kind: PerconaXtraDBCluster name: sec-context spec: + persistentVolumeClaimRetentionPolicy: + whenDeleted: Retain + whenScaled: Retain podManagementPolicy: OrderedReady replicas: 3 revisionHistoryLimit: 10 @@ -77,7 +80,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state @@ -127,7 +130,7 @@ spec: resources: limits: cpu: "1" - memory: 1G + memory: 2G requests: cpu: 100m memory: 100M @@ -166,6 +169,8 @@ spec: memory: 50M securityContext: privileged: true + runAsGroup: 1001 + runAsUser: 1001 terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: diff --git a/e2e-tests/security-context/compare/statefulset_sec-context-pxc-k127.yml b/e2e-tests/security-context/compare/statefulset_sec-context-pxc-k127.yml deleted file mode 100644 index b7eccb73b4..0000000000 --- a/e2e-tests/security-context/compare/statefulset_sec-context-pxc-k127.yml +++ /dev/null @@ -1,243 +0,0 @@ -apiVersion: apps/v1 -kind: StatefulSet -metadata: - generation: 1 - name: sec-context-pxc - ownerReferences: - - controller: true - kind: PerconaXtraDBCluster - name: sec-context -spec: - persistentVolumeClaimRetentionPolicy: - whenDeleted: Retain - whenScaled: Retain - podManagementPolicy: OrderedReady - replicas: 3 - revisionHistoryLimit: 10 - selector: - matchLabels: - app.kubernetes.io/component: pxc - app.kubernetes.io/instance: sec-context - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - serviceName: sec-context-pxc - template: - metadata: - annotations: - openshift.io/scc: privileged - labels: - app.kubernetes.io/component: pxc - app.kubernetes.io/instance: sec-context - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - spec: - affinity: - podAntiAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - - labelSelector: - matchLabels: - app.kubernetes.io/component: pxc - app.kubernetes.io/instance: sec-context - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - topologyKey: kubernetes.io/hostname - containers: - - args: - - mysqld - command: - - /var/lib/mysql/pxc-entrypoint.sh - env: - - name: PXC_SERVICE - value: sec-context-pxc-unready - - name: MONITOR_HOST - value: '%' - - name: MYSQL_ROOT_PASSWORD - valueFrom: - secretKeyRef: - key: root - name: internal-sec-context - - name: XTRABACKUP_PASSWORD - valueFrom: - secretKeyRef: - key: xtrabackup - name: internal-sec-context - - name: MONITOR_PASSWORD - valueFrom: - secretKeyRef: - key: monitor - name: internal-sec-context - - name: OPERATOR_ADMIN_PASSWORD - valueFrom: - secretKeyRef: - key: operator - name: internal-sec-context - - name: LIVENESS_CHECK_TIMEOUT - value: "5" - - name: READINESS_CHECK_TIMEOUT - value: "15" - - name: DEFAULT_AUTHENTICATION_PLUGIN - value: mysql_native_password - - name: NOTIFY_SOCKET - value: /var/lib/mysql/notify.sock - - name: MYSQL_STATE_FILE - value: /var/lib/mysql/mysql.state - envFrom: - - secretRef: - name: sec-context-env-vars-pxc - optional: true - imagePullPolicy: Always - livenessProbe: - exec: - command: - - /var/lib/mysql/liveness-check.sh - failureThreshold: 3 - initialDelaySeconds: 300 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 5 - name: pxc - ports: - - containerPort: 3306 - name: mysql - protocol: TCP - - containerPort: 4444 - name: sst - protocol: TCP - - containerPort: 4567 - name: write-set - protocol: TCP - - containerPort: 4568 - name: ist - protocol: TCP - - containerPort: 33062 - name: mysql-admin - protocol: TCP - - containerPort: 33060 - name: mysqlx - protocol: TCP - readinessProbe: - exec: - command: - - /var/lib/mysql/readiness-check.sh - failureThreshold: 5 - initialDelaySeconds: 15 - periodSeconds: 30 - successThreshold: 1 - timeoutSeconds: 15 - resources: - limits: - cpu: "1" - memory: 1G - requests: - cpu: 100m - memory: 100M - securityContext: - privileged: false - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/mysql - name: datadir - - mountPath: /etc/percona-xtradb-cluster.conf.d - name: config - - mountPath: /tmp - name: tmp - - mountPath: /etc/mysql/ssl - name: ssl - - mountPath: /etc/mysql/ssl-internal - name: ssl-internal - - mountPath: /etc/mysql/mysql-users-secret - name: mysql-users-secret-file - - mountPath: /etc/my.cnf.d - name: auto-config - - mountPath: /etc/mysql/vault-keyring-secret - name: vault-keyring-secret - - mountPath: /etc/mysql/init-file - name: mysql-init-file - dnsPolicy: ClusterFirst - initContainers: - - command: - - /pxc-init-entrypoint.sh - imagePullPolicy: Always - name: pxc-init - resources: - limits: - cpu: 50m - memory: 50M - securityContext: - privileged: false - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/mysql - name: datadir - restartPolicy: Always - schedulerName: default-scheduler - securityContext: - fsGroup: 1001 - runAsUser: 1001 - serviceAccount: percona-xtradb-cluster-operator-workload - serviceAccountName: percona-xtradb-cluster-operator-workload - terminationGracePeriodSeconds: 600 - volumes: - - emptyDir: {} - name: tmp - - configMap: - defaultMode: 420 - name: sec-context-pxc - optional: true - name: config - - name: ssl-internal - secret: - defaultMode: 420 - optional: true - secretName: some-name-ssl-internal - - name: ssl - secret: - defaultMode: 420 - optional: false - secretName: some-name-ssl - - configMap: - defaultMode: 420 - name: auto-sec-context-pxc - optional: true - name: auto-config - - name: vault-keyring-secret - secret: - defaultMode: 420 - optional: true - secretName: sec-context-vault - - name: mysql-users-secret-file - secret: - defaultMode: 420 - optional: false - secretName: internal-sec-context - - name: mysql-init-file - secret: - defaultMode: 420 - optional: true - secretName: sec-context-mysql-init - updateStrategy: - rollingUpdate: - partition: 0 - type: RollingUpdate - volumeClaimTemplates: - - metadata: - labels: - app.kubernetes.io/component: pxc - app.kubernetes.io/instance: sec-context - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - name: datadir - spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 2Gi - status: - phase: Pending diff --git a/e2e-tests/security-context/compare/statefulset_sec-context-pxc.yml b/e2e-tests/security-context/compare/statefulset_sec-context-pxc.yml index 3c8b459fb5..1f6eafdd38 100644 --- a/e2e-tests/security-context/compare/statefulset_sec-context-pxc.yml +++ b/e2e-tests/security-context/compare/statefulset_sec-context-pxc.yml @@ -8,6 +8,9 @@ metadata: kind: PerconaXtraDBCluster name: sec-context spec: + persistentVolumeClaimRetentionPolicy: + whenDeleted: Retain + whenScaled: Retain podManagementPolicy: OrderedReady replicas: 3 revisionHistoryLimit: 10 @@ -77,7 +80,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state @@ -127,7 +130,7 @@ spec: resources: limits: cpu: "1" - memory: 1G + memory: 2G requests: cpu: 100m memory: 100M diff --git a/e2e-tests/security-context/conf/sec-context-changes.yml b/e2e-tests/security-context/conf/sec-context-changes.yml index ff904c9f3c..111ca808af 100644 --- a/e2e-tests/security-context/conf/sec-context-changes.yml +++ b/e2e-tests/security-context/conf/sec-context-changes.yml @@ -8,6 +8,11 @@ spec: secretsName: my-cluster-secrets sslSecretName: some-name-ssl sslInternalSecretName: some-name-ssl-internal + initContainer: + containerSecurityContext: + privileged: true + runAsUser: 1001 + runAsGroup: 1001 pxc: annotations: openshift.io/scc: privileged @@ -29,7 +34,7 @@ spec: memory: 0.1G cpu: 100m limits: - memory: "1G" + memory: "2G" cpu: "1" volumeSpec: persistentVolumeClaim: diff --git a/e2e-tests/security-context/conf/sec-context.yml b/e2e-tests/security-context/conf/sec-context.yml index 9167c0b287..f5ee878322 100644 --- a/e2e-tests/security-context/conf/sec-context.yml +++ b/e2e-tests/security-context/conf/sec-context.yml @@ -24,7 +24,7 @@ spec: memory: 0.1G cpu: 100m limits: - memory: "1G" + memory: "2G" cpu: "1" volumeSpec: persistentVolumeClaim: diff --git a/e2e-tests/storage/compare/statefulset_emptydir-pxc-k127-oc.yml b/e2e-tests/storage/compare/statefulset_emptydir-pxc-k127-oc.yml index 6e3e75f4e4..45fdf979d4 100644 --- a/e2e-tests/storage/compare/statefulset_emptydir-pxc-k127-oc.yml +++ b/e2e-tests/storage/compare/statefulset_emptydir-pxc-k127-oc.yml @@ -78,7 +78,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/storage/compare/statefulset_emptydir-pxc-k127.yml b/e2e-tests/storage/compare/statefulset_emptydir-pxc-k127.yml index 29cdfeac78..ed11f9c414 100644 --- a/e2e-tests/storage/compare/statefulset_emptydir-pxc-k127.yml +++ b/e2e-tests/storage/compare/statefulset_emptydir-pxc-k127.yml @@ -78,7 +78,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/storage/compare/statefulset_emptydir-pxc-oc.yml b/e2e-tests/storage/compare/statefulset_emptydir-pxc-oc.yml index 178c791238..6d14b8df70 100644 --- a/e2e-tests/storage/compare/statefulset_emptydir-pxc-oc.yml +++ b/e2e-tests/storage/compare/statefulset_emptydir-pxc-oc.yml @@ -75,7 +75,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/storage/compare/statefulset_emptydir-pxc.yml b/e2e-tests/storage/compare/statefulset_emptydir-pxc.yml index 5d3a0d188a..dca67a1f35 100644 --- a/e2e-tests/storage/compare/statefulset_emptydir-pxc.yml +++ b/e2e-tests/storage/compare/statefulset_emptydir-pxc.yml @@ -75,7 +75,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/storage/compare/statefulset_hostpath-pxc-k127-oc.yml b/e2e-tests/storage/compare/statefulset_hostpath-pxc-k127-oc.yml index f266934eec..4ae4cb0e38 100644 --- a/e2e-tests/storage/compare/statefulset_hostpath-pxc-k127-oc.yml +++ b/e2e-tests/storage/compare/statefulset_hostpath-pxc-k127-oc.yml @@ -78,7 +78,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/storage/compare/statefulset_hostpath-pxc-k127.yml b/e2e-tests/storage/compare/statefulset_hostpath-pxc-k127.yml index f37c6f8380..36da26bf0f 100644 --- a/e2e-tests/storage/compare/statefulset_hostpath-pxc-k127.yml +++ b/e2e-tests/storage/compare/statefulset_hostpath-pxc-k127.yml @@ -78,7 +78,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/storage/compare/statefulset_hostpath-pxc-oc.yml b/e2e-tests/storage/compare/statefulset_hostpath-pxc-oc.yml index 660de80306..4fc356ba7a 100644 --- a/e2e-tests/storage/compare/statefulset_hostpath-pxc-oc.yml +++ b/e2e-tests/storage/compare/statefulset_hostpath-pxc-oc.yml @@ -75,7 +75,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/storage/compare/statefulset_hostpath-pxc.yml b/e2e-tests/storage/compare/statefulset_hostpath-pxc.yml index 38ab61a6fe..a91dca8301 100644 --- a/e2e-tests/storage/compare/statefulset_hostpath-pxc.yml +++ b/e2e-tests/storage/compare/statefulset_hostpath-pxc.yml @@ -75,7 +75,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state diff --git a/e2e-tests/tls-issue-cert-manager-ref/compare/clusterissuer_special-selfsigned-issuer.yml b/e2e-tests/tls-issue-cert-manager-ref/compare/clusterissuer_special-selfsigned-issuer.yml index dfb003a132..a879bbc6fd 100644 --- a/e2e-tests/tls-issue-cert-manager-ref/compare/clusterissuer_special-selfsigned-issuer.yml +++ b/e2e-tests/tls-issue-cert-manager-ref/compare/clusterissuer_special-selfsigned-issuer.yml @@ -1,9 +1,6 @@ apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: - annotations: - kubectl.kubernetes.io/last-applied-configuration: | - {"apiVersion":"cert-manager.io/v1","kind":"ClusterIssuer","metadata":{"annotations":{},"name":"special-selfsigned-issuer"},"spec":{"selfSigned":{}}} generation: 1 name: special-selfsigned-issuer spec: diff --git a/e2e-tests/tls-issue-cert-manager-ref/conf/some-name-tls-issueref.yml b/e2e-tests/tls-issue-cert-manager-ref/conf/some-name-tls-issueref.yml index ea1d1531e1..ad121ef4ea 100644 --- a/e2e-tests/tls-issue-cert-manager-ref/conf/some-name-tls-issueref.yml +++ b/e2e-tests/tls-issue-cert-manager-ref/conf/some-name-tls-issueref.yml @@ -22,7 +22,7 @@ spec: memory: 0.1G cpu: 100m limits: - memory: "1G" + memory: "2G" cpu: "1" volumeSpec: persistentVolumeClaim: diff --git a/e2e-tests/tls-issue-cert-manager/conf/some-name-tls-issue-haproxy.yml b/e2e-tests/tls-issue-cert-manager/conf/some-name-tls-issue-haproxy.yml index b258645407..6df30dd9a7 100644 --- a/e2e-tests/tls-issue-cert-manager/conf/some-name-tls-issue-haproxy.yml +++ b/e2e-tests/tls-issue-cert-manager/conf/some-name-tls-issue-haproxy.yml @@ -19,7 +19,7 @@ spec: memory: 0.1G cpu: 100m limits: - memory: "1G" + memory: "2G" cpu: "1" volumeSpec: persistentVolumeClaim: diff --git a/e2e-tests/tls-issue-cert-manager/conf/some-name-tls-issue.yml b/e2e-tests/tls-issue-cert-manager/conf/some-name-tls-issue.yml index 84700992ea..1f05d871d6 100644 --- a/e2e-tests/tls-issue-cert-manager/conf/some-name-tls-issue.yml +++ b/e2e-tests/tls-issue-cert-manager/conf/some-name-tls-issue.yml @@ -19,7 +19,7 @@ spec: memory: 0.1G cpu: 100m limits: - memory: "1G" + memory: "2G" cpu: "1" volumeSpec: persistentVolumeClaim: diff --git a/e2e-tests/tls-issue-self/compare/pxc_some-name-enabled.yml b/e2e-tests/tls-issue-self/compare/pxc_some-name-enabled.yml new file mode 100644 index 0000000000..264d3c94f3 --- /dev/null +++ b/e2e-tests/tls-issue-self/compare/pxc_some-name-enabled.yml @@ -0,0 +1,81 @@ +apiVersion: pxc.percona.com/v1 +kind: PerconaXtraDBCluster +metadata: + generation: 9 + name: some-name +spec: + backup: + storages: + aws-s3: + s3: + bucket: operator-testing + credentialsSecret: aws-s3-secret + region: us-east-1 + type: s3 + gcp-cs: + s3: + bucket: operator-testing + credentialsSecret: gcp-cs-secret + endpointUrl: https://storage.googleapis.com + region: us-east-1 + type: s3 + minio: + s3: + bucket: operator-testing + credentialsSecret: minio-secret + endpointUrl: http://minio-service:9000/ + region: us-east-1 + type: s3 + pvc: + type: filesystem + volume: + persistentVolumeClaim: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + logcollector: + enabled: true + pmm: + enabled: false + serverHost: monitoring-service + serverUser: pmm + proxysql: + affinity: + antiAffinityTopologyKey: kubernetes.io/hostname + enabled: true + resources: + limits: + cpu: 700m + memory: 1G + requests: + cpu: 100m + memory: 0.1G + size: 2 + volumeSpec: + persistentVolumeClaim: + resources: + requests: + storage: 2Gi + pxc: + affinity: + antiAffinityTopologyKey: kubernetes.io/hostname + resources: + limits: + cpu: "1" + memory: 2G + requests: + cpu: 100m + memory: 0.1G + size: 3 + volumeSpec: + persistentVolumeClaim: + resources: + requests: + storage: 2Gi + secretsName: my-cluster-secrets + tls: + enabled: true + unsafeFlags: {} + vaultSecretName: some-name-vault diff --git a/e2e-tests/tls-issue-self/compare/pxc_some-name.yml b/e2e-tests/tls-issue-self/compare/pxc_some-name.yml new file mode 100644 index 0000000000..5bbf5a8c75 --- /dev/null +++ b/e2e-tests/tls-issue-self/compare/pxc_some-name.yml @@ -0,0 +1,82 @@ +apiVersion: pxc.percona.com/v1 +kind: PerconaXtraDBCluster +metadata: + generation: 5 + name: some-name +spec: + backup: + storages: + aws-s3: + s3: + bucket: operator-testing + credentialsSecret: aws-s3-secret + region: us-east-1 + type: s3 + gcp-cs: + s3: + bucket: operator-testing + credentialsSecret: gcp-cs-secret + endpointUrl: https://storage.googleapis.com + region: us-east-1 + type: s3 + minio: + s3: + bucket: operator-testing + credentialsSecret: minio-secret + endpointUrl: http://minio-service:9000/ + region: us-east-1 + type: s3 + pvc: + type: filesystem + volume: + persistentVolumeClaim: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + logcollector: + enabled: true + pmm: + enabled: false + serverHost: monitoring-service + serverUser: pmm + proxysql: + affinity: + antiAffinityTopologyKey: kubernetes.io/hostname + enabled: true + resources: + limits: + cpu: 700m + memory: 1G + requests: + cpu: 100m + memory: 0.1G + size: 2 + volumeSpec: + persistentVolumeClaim: + resources: + requests: + storage: 2Gi + pxc: + affinity: + antiAffinityTopologyKey: kubernetes.io/hostname + resources: + limits: + cpu: "1" + memory: 2G + requests: + cpu: 100m + memory: 0.1G + size: 3 + volumeSpec: + persistentVolumeClaim: + resources: + requests: + storage: 2Gi + secretsName: my-cluster-secrets + tls: + enabled: false + unsafeFlags: + tls: true + vaultSecretName: some-name-vault diff --git a/e2e-tests/tls-issue-self/run b/e2e-tests/tls-issue-self/run index af72619873..d3019188fa 100755 --- a/e2e-tests/tls-issue-self/run +++ b/e2e-tests/tls-issue-self/run @@ -25,7 +25,46 @@ main() { desc 'invalid owner of secret' exit 1 fi - destroy $namespace + + # generation = 2 on this step + desc 'check disabling tls' + kubectl_bin patch pxc "$cluster" --type=merge --patch '{"spec": {"tls":{"enabled": false}, "unsafeFlags": {"tls": true}}}' # generation + 1 (total 3) + sleep 10 + # operator performs: + # - patch .spec.pause to true (generation = 4) + # - patch .spec.pause to false (generation = 5) + wait_cluster_consistency "$cluster" 3 2 + desc 'secrets should be deleted' + if kubectl get secret "$cluster-ssl" &>/dev/null; then + echo "error: secret $cluster-ssl exists" + exit 1 + fi + if kubectl get secret "$cluster-ssl-internal" &>/dev/null; then + echo "error: secret $cluster-ssl-internal exists" + exit 1 + fi + compare_kubectl "pxc/$cluster" + + desc 'check enabling tls' + kubectl_bin patch pxc "$cluster" --type=merge --patch '{"spec": {"tls":{"enabled": true}}}' # generation + 1 (total = 6) + sleep 10 + # operator performs: + # - patch .spec.pause to true (generation = 7) + # - patch spec.unsafeFlags.tls to false (generation = 8) + # - patch .spec.pause to false (generation = 9) + wait_cluster_consistency "$cluster" 3 2 + compare_kubectl "pxc/$cluster" "-enabled" + desc 'secrets should be recreated' + if ! kubectl get secret "$cluster-ssl" &>/dev/null; then + echo "error: secret $cluster-ssl doesn't exist" + exit 1 + fi + if ! kubectl get secret "$cluster-ssl-internal" &>/dev/null; then + echo "error: secret $cluster-ssl-internal doesn't exist" + exit 1 + fi + + destroy "$namespace" desc "test passed" } diff --git a/e2e-tests/upgrade-consistency/compare/service_some-name-proxysql-1160.yml b/e2e-tests/upgrade-consistency/compare/service_some-name-proxysql-1161.yml similarity index 100% rename from e2e-tests/upgrade-consistency/compare/service_some-name-proxysql-1160.yml rename to e2e-tests/upgrade-consistency/compare/service_some-name-proxysql-1161.yml diff --git a/e2e-tests/upgrade-consistency/compare/service_some-name-proxysql-1141.yml b/e2e-tests/upgrade-consistency/compare/service_some-name-proxysql-1170.yml similarity index 87% rename from e2e-tests/upgrade-consistency/compare/service_some-name-proxysql-1141.yml rename to e2e-tests/upgrade-consistency/compare/service_some-name-proxysql-1170.yml index f8230024bc..5b72198ae1 100644 --- a/e2e-tests/upgrade-consistency/compare/service_some-name-proxysql-1141.yml +++ b/e2e-tests/upgrade-consistency/compare/service_some-name-proxysql-1170.yml @@ -26,6 +26,8 @@ spec: selector: app.kubernetes.io/component: proxysql app.kubernetes.io/instance: some-name + app.kubernetes.io/managed-by: percona-xtradb-cluster-operator app.kubernetes.io/name: percona-xtradb-cluster + app.kubernetes.io/part-of: percona-xtradb-cluster sessionAffinity: None type: ClusterIP diff --git a/e2e-tests/upgrade-consistency/compare/service_some-name-pxc-1160.yml b/e2e-tests/upgrade-consistency/compare/service_some-name-pxc-1161.yml similarity index 100% rename from e2e-tests/upgrade-consistency/compare/service_some-name-pxc-1160.yml rename to e2e-tests/upgrade-consistency/compare/service_some-name-pxc-1161.yml diff --git a/e2e-tests/upgrade-consistency/compare/service_some-name-pxc-1141.yml b/e2e-tests/upgrade-consistency/compare/service_some-name-pxc-1170.yml similarity index 88% rename from e2e-tests/upgrade-consistency/compare/service_some-name-pxc-1141.yml rename to e2e-tests/upgrade-consistency/compare/service_some-name-pxc-1170.yml index 84b12b6a85..951a2e3f8a 100644 --- a/e2e-tests/upgrade-consistency/compare/service_some-name-pxc-1141.yml +++ b/e2e-tests/upgrade-consistency/compare/service_some-name-pxc-1170.yml @@ -30,6 +30,8 @@ spec: selector: app.kubernetes.io/component: pxc app.kubernetes.io/instance: some-name + app.kubernetes.io/managed-by: percona-xtradb-cluster-operator app.kubernetes.io/name: percona-xtradb-cluster + app.kubernetes.io/part-of: percona-xtradb-cluster sessionAffinity: None type: ClusterIP diff --git a/e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1151-oc.yml b/e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1151-oc.yml index 43a9e27175..eb6c7be0c7 100644 --- a/e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1151-oc.yml +++ b/e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1151-oc.yml @@ -1,7 +1,7 @@ apiVersion: apps/v1 kind: StatefulSet metadata: - generation: 3 + generation: 1 name: some-name-proxysql ownerReferences: - controller: true diff --git a/e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1151.yml b/e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1151.yml index da341987be..e6b49d6831 100644 --- a/e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1151.yml +++ b/e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1151.yml @@ -1,7 +1,7 @@ apiVersion: apps/v1 kind: StatefulSet metadata: - generation: 2 + generation: 1 name: some-name-proxysql ownerReferences: - controller: true diff --git a/e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1141-oc.yml b/e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1161-oc.yml similarity index 85% rename from e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1141-oc.yml rename to e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1161-oc.yml index 4e26ab7efe..4c620b3631 100644 --- a/e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1141-oc.yml +++ b/e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1161-oc.yml @@ -43,7 +43,15 @@ spec: app.kubernetes.io/part-of: percona-xtradb-cluster topologyKey: kubernetes.io/hostname containers: - - env: + - args: + - proxysql + - -f + - -c + - /etc/proxysql/proxysql.cnf + - --reload + command: + - /opt/percona/proxysql-entrypoint.sh + env: - name: PXC_SERVICE value: some-name-pxc - name: OPERATOR_PASSWORD @@ -92,9 +100,11 @@ spec: name: ssl - mountPath: /etc/proxysql/ssl-internal name: ssl-internal + - mountPath: /opt/percona + name: bin - args: - - /usr/bin/peer-list - - -on-change=/usr/bin/add_pxc_nodes.sh + - /opt/percona/peer-list + - -on-change=/opt/percona/proxysql_add_pxc_nodes.sh - -service=$(PXC_SERVICE) env: - name: PXC_SERVICE @@ -125,9 +135,12 @@ spec: resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File + volumeMounts: + - mountPath: /opt/percona + name: bin - args: - - /usr/bin/peer-list - - -on-change=/usr/bin/add_proxysql_nodes.sh + - /opt/percona/peer-list + - -on-change=/opt/percona/proxysql_add_proxysql_nodes.sh - -service=$(PROXYSQL_SERVICE) env: - name: PROXYSQL_SERVICE @@ -158,6 +171,9 @@ spec: resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File + volumeMounts: + - mountPath: /opt/percona + name: bin dnsPolicy: ClusterFirst initContainers: - command: @@ -173,6 +189,19 @@ spec: volumeMounts: - mountPath: /var/lib/mysql name: bin + - command: + - /proxysql-init-entrypoint.sh + imagePullPolicy: Always + name: proxysql-init + resources: + limits: + cpu: 50m + memory: 50M + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /opt/percona + name: bin restartPolicy: Always schedulerName: default-scheduler securityContext: diff --git a/e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1141.yml b/e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1161.yml similarity index 85% rename from e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1141.yml rename to e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1161.yml index 24b74084f7..da341987be 100644 --- a/e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1141.yml +++ b/e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1161.yml @@ -1,7 +1,7 @@ apiVersion: apps/v1 kind: StatefulSet metadata: - generation: 1 + generation: 2 name: some-name-proxysql ownerReferences: - controller: true @@ -43,7 +43,15 @@ spec: app.kubernetes.io/part-of: percona-xtradb-cluster topologyKey: kubernetes.io/hostname containers: - - env: + - args: + - proxysql + - -f + - -c + - /etc/proxysql/proxysql.cnf + - --reload + command: + - /opt/percona/proxysql-entrypoint.sh + env: - name: PXC_SERVICE value: some-name-pxc - name: OPERATOR_PASSWORD @@ -92,9 +100,11 @@ spec: name: ssl - mountPath: /etc/proxysql/ssl-internal name: ssl-internal + - mountPath: /opt/percona + name: bin - args: - - /usr/bin/peer-list - - -on-change=/usr/bin/add_pxc_nodes.sh + - /opt/percona/peer-list + - -on-change=/opt/percona/proxysql_add_pxc_nodes.sh - -service=$(PXC_SERVICE) env: - name: PXC_SERVICE @@ -125,9 +135,12 @@ spec: resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File + volumeMounts: + - mountPath: /opt/percona + name: bin - args: - - /usr/bin/peer-list - - -on-change=/usr/bin/add_proxysql_nodes.sh + - /opt/percona/peer-list + - -on-change=/opt/percona/proxysql_add_proxysql_nodes.sh - -service=$(PROXYSQL_SERVICE) env: - name: PROXYSQL_SERVICE @@ -158,6 +171,9 @@ spec: resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File + volumeMounts: + - mountPath: /opt/percona + name: bin dnsPolicy: ClusterFirst initContainers: - command: @@ -173,6 +189,19 @@ spec: volumeMounts: - mountPath: /var/lib/mysql name: bin + - command: + - /proxysql-init-entrypoint.sh + imagePullPolicy: Always + name: proxysql-init + resources: + limits: + cpu: 50m + memory: 50M + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /opt/percona + name: bin restartPolicy: Always schedulerName: default-scheduler securityContext: diff --git a/e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1160-oc.yml b/e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1170-oc.yml similarity index 100% rename from e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1160-oc.yml rename to e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1170-oc.yml diff --git a/e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1160.yml b/e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1170.yml similarity index 100% rename from e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1160.yml rename to e2e-tests/upgrade-consistency/compare/statefulset_some-name-proxysql-1170.yml diff --git a/e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1151-oc.yml b/e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1151-oc.yml index 9f269576f7..668b2e76d8 100644 --- a/e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1151-oc.yml +++ b/e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1151-oc.yml @@ -1,7 +1,7 @@ apiVersion: apps/v1 kind: StatefulSet metadata: - generation: 3 + generation: 1 name: some-name-pxc ownerReferences: - controller: true @@ -171,7 +171,7 @@ spec: resources: limits: cpu: "1" - memory: 1G + memory: 2G requests: cpu: 100m memory: 100M diff --git a/e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1151.yml b/e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1151.yml index d00b0abed2..47f50b57f0 100644 --- a/e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1151.yml +++ b/e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1151.yml @@ -1,7 +1,7 @@ apiVersion: apps/v1 kind: StatefulSet metadata: - generation: 2 + generation: 1 name: some-name-pxc ownerReferences: - controller: true @@ -171,7 +171,7 @@ spec: resources: limits: cpu: "1" - memory: 1G + memory: 2G requests: cpu: 100m memory: 100M diff --git a/e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1141-oc.yml b/e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1161-oc.yml similarity index 97% rename from e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1141-oc.yml rename to e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1161-oc.yml index d775f78770..3c7cefba6e 100644 --- a/e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1141-oc.yml +++ b/e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1161-oc.yml @@ -125,6 +125,10 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password + - name: MYSQL_NOTIFY_SOCKET + value: /var/lib/mysql/notify.sock + - name: MYSQL_STATE_FILE + value: /var/lib/mysql/mysql.state envFrom: - secretRef: name: some-name-env-vars-pxc @@ -171,7 +175,7 @@ spec: resources: limits: cpu: "1" - memory: 1G + memory: 2G requests: cpu: 100m memory: 100M diff --git a/e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1141.yml b/e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1161.yml similarity index 97% rename from e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1141.yml rename to e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1161.yml index 1449ca31f0..76f6d99273 100644 --- a/e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1141.yml +++ b/e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1161.yml @@ -1,7 +1,7 @@ apiVersion: apps/v1 kind: StatefulSet metadata: - generation: 1 + generation: 2 name: some-name-pxc ownerReferences: - controller: true @@ -125,6 +125,10 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password + - name: MYSQL_NOTIFY_SOCKET + value: /var/lib/mysql/notify.sock + - name: MYSQL_STATE_FILE + value: /var/lib/mysql/mysql.state envFrom: - secretRef: name: some-name-env-vars-pxc @@ -171,7 +175,7 @@ spec: resources: limits: cpu: "1" - memory: 1G + memory: 2G requests: cpu: 100m memory: 100M diff --git a/e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1160-oc.yml b/e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1170-oc.yml similarity index 99% rename from e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1160-oc.yml rename to e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1170-oc.yml index 97a6c7d61b..247a3e4e05 100644 --- a/e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1160-oc.yml +++ b/e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1170-oc.yml @@ -125,7 +125,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state @@ -175,7 +175,7 @@ spec: resources: limits: cpu: "1" - memory: 1G + memory: 2G requests: cpu: 100m memory: 100M diff --git a/e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1160.yml b/e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1170.yml similarity index 99% rename from e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1160.yml rename to e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1170.yml index 8c782a17ae..af86099bc3 100644 --- a/e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1160.yml +++ b/e2e-tests/upgrade-consistency/compare/statefulset_some-name-pxc-1170.yml @@ -125,7 +125,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state @@ -175,7 +175,7 @@ spec: resources: limits: cpu: "1" - memory: 1G + memory: 2G requests: cpu: 100m memory: 100M diff --git a/e2e-tests/upgrade-consistency/run b/e2e-tests/upgrade-consistency/run index 5372faa4f6..ec0c87ba9a 100755 --- a/e2e-tests/upgrade-consistency/run +++ b/e2e-tests/upgrade-consistency/run @@ -35,47 +35,46 @@ main() { create_infra $namespace apply_config "$conf_dir/client.yml" - kubectl_bin apply \ - -f "$test_dir/conf/secrets.yml" + kubectl_bin apply -f "$test_dir/conf/secrets.yml" cat_config "$conf_dir/$cluster.yml" \ - | yq eval '.spec.crVersion = "1.14.1"' - \ + | yq eval '.spec.crVersion = "1.15.1"' - \ | kubectl_bin apply -f - - desc "test 1.14.1" + desc "test 1.15.1" kubectl_bin patch pxc "$cluster" --type=merge --patch '{ - "spec": {"crVersion":"1.14.1"} + "spec": {"crVersion":"1.15.1"} }' wait_cluster_consistency "$cluster" 3 2 wait_for_sts_generation "$cluster-pxc" "1" "1" desc "compare k8s objects" - compare_kubectl service/$cluster-pxc "-1141" - compare_kubectl service/$cluster-proxysql "-1141" - compare_kubectl statefulset/$cluster-pxc "-1141" - compare_kubectl statefulset/$cluster-proxysql "-1141" + compare_kubectl service/$cluster-pxc "-1151" + compare_kubectl service/$cluster-proxysql "-1151" + compare_kubectl statefulset/$cluster-pxc "-1151" + compare_kubectl statefulset/$cluster-proxysql "-1151" - desc "test 1.15.1" + desc "test 1.16.1" kubectl_bin patch pxc "$cluster" --type=merge --patch '{ - "spec": {"crVersion":"1.15.1"} + "spec": {"crVersion":"1.16.1"} }' wait_cluster_consistency "$cluster" 3 2 wait_for_sts_generation "$cluster-pxc" "2" "1" desc "compare k8s objects" - compare_kubectl service/$cluster-pxc "-1151" - compare_kubectl service/$cluster-proxysql "-1151" - compare_kubectl statefulset/$cluster-pxc "-1151" - compare_kubectl statefulset/$cluster-proxysql "-1151" + compare_kubectl service/$cluster-pxc "-1161" + compare_kubectl service/$cluster-proxysql "-1161" + compare_kubectl statefulset/$cluster-pxc "-1161" + compare_kubectl statefulset/$cluster-proxysql "-1161" - desc "test 1.16.0" + desc "test 1.17.0" kubectl_bin patch pxc "$cluster" --type=merge --patch '{ - "spec": {"crVersion":"1.16.0"} + "spec": {"crVersion":"1.17.0"} }' wait_cluster_consistency "$cluster" 3 2 wait_for_sts_generation "$cluster-pxc" "3" "1" desc "compare k8s objects" - compare_kubectl service/$cluster-pxc "-1160" - compare_kubectl service/$cluster-proxysql "-1160" - compare_kubectl statefulset/$cluster-pxc "-1160" - compare_kubectl statefulset/$cluster-proxysql "-1160" + compare_kubectl service/$cluster-pxc "-1170" + compare_kubectl service/$cluster-proxysql "-1170" + compare_kubectl statefulset/$cluster-pxc "-1170" + compare_kubectl statefulset/$cluster-proxysql "-1170" destroy "${namespace}" desc "test passed" diff --git a/e2e-tests/upgrade-haproxy/compare/statefulset_upgrade-haproxy-haproxy-k127.yml b/e2e-tests/upgrade-haproxy/compare/statefulset_upgrade-haproxy-haproxy-k127.yml deleted file mode 100644 index 8691d5d175..0000000000 --- a/e2e-tests/upgrade-haproxy/compare/statefulset_upgrade-haproxy-haproxy-k127.yml +++ /dev/null @@ -1,202 +0,0 @@ -apiVersion: apps/v1 -kind: StatefulSet -metadata: - generation: 2 - name: upgrade-haproxy-haproxy - ownerReferences: - - controller: true - kind: PerconaXtraDBCluster - name: upgrade-haproxy -spec: - persistentVolumeClaimRetentionPolicy: - whenDeleted: Retain - whenScaled: Retain - podManagementPolicy: OrderedReady - replicas: 3 - revisionHistoryLimit: 10 - selector: - matchLabels: - app.kubernetes.io/component: haproxy - app.kubernetes.io/instance: upgrade-haproxy - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - serviceName: upgrade-haproxy-haproxy - template: - metadata: - labels: - app.kubernetes.io/component: haproxy - app.kubernetes.io/instance: upgrade-haproxy - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - spec: - affinity: - podAntiAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - - labelSelector: - matchLabels: - app.kubernetes.io/component: haproxy - app.kubernetes.io/instance: upgrade-haproxy - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - topologyKey: kubernetes.io/hostname - containers: - - args: - - haproxy - command: - - /opt/percona/haproxy-entrypoint.sh - env: - - name: PXC_SERVICE - value: upgrade-haproxy-pxc - - name: LIVENESS_CHECK_TIMEOUT - value: "5" - - name: READINESS_CHECK_TIMEOUT - value: "1" - envFrom: - - secretRef: - name: upgrade-haproxy-env-vars-haproxy - optional: true - imagePullPolicy: Always - livenessProbe: - exec: - command: - - /opt/percona/haproxy_liveness_check.sh - failureThreshold: 4 - initialDelaySeconds: 60 - periodSeconds: 30 - successThreshold: 1 - timeoutSeconds: 5 - name: haproxy - ports: - - containerPort: 3306 - name: mysql - protocol: TCP - - containerPort: 3307 - name: mysql-replicas - protocol: TCP - - containerPort: 3309 - name: proxy-protocol - protocol: TCP - - containerPort: 33062 - name: mysql-admin - protocol: TCP - - containerPort: 33060 - name: mysqlx - protocol: TCP - readinessProbe: - exec: - command: - - /opt/percona/haproxy_readiness_check.sh - failureThreshold: 3 - initialDelaySeconds: 15 - periodSeconds: 5 - successThreshold: 1 - timeoutSeconds: 1 - resources: - requests: - cpu: 600m - memory: 1G - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /etc/haproxy-custom/ - name: haproxy-custom - - mountPath: /etc/haproxy/pxc - name: haproxy-auto - - mountPath: /opt/percona - name: bin - - mountPath: /etc/mysql/mysql-users-secret - name: mysql-users-secret-file - - mountPath: /etc/mysql/haproxy-env-secret - name: upgrade-haproxy-env-vars-haproxy - - args: - - /opt/percona/peer-list - - -on-change=/opt/percona/haproxy_add_pxc_nodes.sh - - -service=$(PXC_SERVICE) - command: - - /opt/percona/haproxy-entrypoint.sh - env: - - name: PXC_SERVICE - value: upgrade-haproxy-pxc - - name: REPLICAS_SVC_ONLY_READERS - value: "false" - envFrom: - - secretRef: - name: upgrade-haproxy-env-vars-haproxy - optional: true - imagePullPolicy: Always - name: pxc-monit - resources: {} - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /etc/haproxy-custom/ - name: haproxy-custom - - mountPath: /etc/haproxy/pxc - name: haproxy-auto - - mountPath: /etc/mysql/mysql-users-secret - name: mysql-users-secret-file - - mountPath: /etc/mysql/haproxy-env-secret - name: upgrade-haproxy-env-vars-haproxy - - mountPath: /opt/percona - name: bin - dnsPolicy: ClusterFirst - initContainers: - - command: - - /pxc-init-entrypoint.sh - imagePullPolicy: Always - name: pxc-init - resources: - limits: - cpu: 50m - memory: 50M - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/mysql - name: bin - - command: - - /haproxy-init-entrypoint.sh - imagePullPolicy: Always - name: haproxy-init - resources: - limits: - cpu: 50m - memory: 50M - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /opt/percona - name: bin - restartPolicy: Always - schedulerName: default-scheduler - securityContext: {} - serviceAccount: default - serviceAccountName: default - terminationGracePeriodSeconds: 30 - volumes: - - configMap: - defaultMode: 420 - name: upgrade-haproxy-haproxy - optional: true - name: haproxy-custom - - emptyDir: {} - name: haproxy-auto - - name: mysql-users-secret-file - secret: - defaultMode: 420 - optional: false - secretName: internal-upgrade-haproxy - - name: upgrade-haproxy-env-vars-haproxy - secret: - defaultMode: 420 - optional: true - secretName: upgrade-haproxy-env-vars-haproxy - - emptyDir: {} - name: bin - updateStrategy: - rollingUpdate: - partition: 0 - type: RollingUpdate diff --git a/e2e-tests/upgrade-haproxy/compare/statefulset_upgrade-haproxy-haproxy.yml b/e2e-tests/upgrade-haproxy/compare/statefulset_upgrade-haproxy-haproxy.yml index b5e6f0f05d..8691d5d175 100644 --- a/e2e-tests/upgrade-haproxy/compare/statefulset_upgrade-haproxy-haproxy.yml +++ b/e2e-tests/upgrade-haproxy/compare/statefulset_upgrade-haproxy-haproxy.yml @@ -8,6 +8,9 @@ metadata: kind: PerconaXtraDBCluster name: upgrade-haproxy spec: + persistentVolumeClaimRetentionPolicy: + whenDeleted: Retain + whenScaled: Retain podManagementPolicy: OrderedReady replicas: 3 revisionHistoryLimit: 10 @@ -40,7 +43,11 @@ spec: app.kubernetes.io/part-of: percona-xtradb-cluster topologyKey: kubernetes.io/hostname containers: - - env: + - args: + - haproxy + command: + - /opt/percona/haproxy-entrypoint.sh + env: - name: PXC_SERVICE value: upgrade-haproxy-pxc - name: LIVENESS_CHECK_TIMEOUT @@ -108,6 +115,8 @@ spec: - /opt/percona/peer-list - -on-change=/opt/percona/haproxy_add_pxc_nodes.sh - -service=$(PXC_SERVICE) + command: + - /opt/percona/haproxy-entrypoint.sh env: - name: PXC_SERVICE value: upgrade-haproxy-pxc @@ -131,6 +140,8 @@ spec: name: mysql-users-secret-file - mountPath: /etc/mysql/haproxy-env-secret name: upgrade-haproxy-env-vars-haproxy + - mountPath: /opt/percona + name: bin dnsPolicy: ClusterFirst initContainers: - command: diff --git a/e2e-tests/upgrade-haproxy/compare/statefulset_upgrade-haproxy-pxc-k127-oc.yml b/e2e-tests/upgrade-haproxy/compare/statefulset_upgrade-haproxy-pxc-k127-oc.yml deleted file mode 100644 index 90e4983cf1..0000000000 --- a/e2e-tests/upgrade-haproxy/compare/statefulset_upgrade-haproxy-pxc-k127-oc.yml +++ /dev/null @@ -1,279 +0,0 @@ -apiVersion: apps/v1 -kind: StatefulSet -metadata: - generation: 2 - name: upgrade-haproxy-pxc - ownerReferences: - - controller: true - kind: PerconaXtraDBCluster - name: upgrade-haproxy -spec: - persistentVolumeClaimRetentionPolicy: - whenDeleted: Retain - whenScaled: Retain - podManagementPolicy: OrderedReady - replicas: 3 - revisionHistoryLimit: 10 - selector: - matchLabels: - app.kubernetes.io/component: pxc - app.kubernetes.io/instance: upgrade-haproxy - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - serviceName: upgrade-haproxy-pxc - template: - metadata: - labels: - app.kubernetes.io/component: pxc - app.kubernetes.io/instance: upgrade-haproxy - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - spec: - affinity: - podAntiAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - - labelSelector: - matchLabels: - app.kubernetes.io/component: pxc - app.kubernetes.io/instance: upgrade-haproxy - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - topologyKey: kubernetes.io/hostname - containers: - - env: - - name: LOG_DATA_DIR - value: /var/lib/mysql - - name: POD_NAMESPASE - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: metadata.namespace - - name: POD_NAME - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: metadata.name - envFrom: - - secretRef: - name: upgrade-haproxy-log-collector - optional: true - imagePullPolicy: Always - name: logs - resources: - requests: - cpu: 200m - memory: 100M - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/mysql - name: datadir - - args: - - logrotate - env: - - name: SERVICE_TYPE - value: mysql - - name: MONITOR_PASSWORD - valueFrom: - secretKeyRef: - key: monitor - name: internal-upgrade-haproxy - imagePullPolicy: Always - name: logrotate - resources: - requests: - cpu: 200m - memory: 100M - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/mysql - name: datadir - - args: - - mysqld - command: - - /var/lib/mysql/pxc-entrypoint.sh - env: - - name: PXC_SERVICE - value: upgrade-haproxy-pxc-unready - - name: MONITOR_HOST - value: '%' - - name: MYSQL_ROOT_PASSWORD - valueFrom: - secretKeyRef: - key: root - name: internal-upgrade-haproxy - - name: XTRABACKUP_PASSWORD - valueFrom: - secretKeyRef: - key: xtrabackup - name: internal-upgrade-haproxy - - name: MONITOR_PASSWORD - valueFrom: - secretKeyRef: - key: monitor - name: internal-upgrade-haproxy - - name: LOG_DATA_DIR - value: /var/lib/mysql - - name: IS_LOGCOLLECTOR - value: "yes" - - name: OPERATOR_ADMIN_PASSWORD - valueFrom: - secretKeyRef: - key: operator - name: internal-upgrade-haproxy - - name: LIVENESS_CHECK_TIMEOUT - value: "5" - - name: READINESS_CHECK_TIMEOUT - value: "15" - - name: DEFAULT_AUTHENTICATION_PLUGIN - value: caching_sha2_password - - name: NOTIFY_SOCKET - value: /var/lib/mysql/notify.sock - - name: MYSQL_STATE_FILE - value: /var/lib/mysql/mysql.state - envFrom: - - secretRef: - name: upgrade-haproxy-env-vars-pxc - optional: true - imagePullPolicy: Always - livenessProbe: - exec: - command: - - /var/lib/mysql/liveness-check.sh - failureThreshold: 3 - initialDelaySeconds: 300 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 5 - name: pxc - ports: - - containerPort: 3306 - name: mysql - protocol: TCP - - containerPort: 4444 - name: sst - protocol: TCP - - containerPort: 4567 - name: write-set - protocol: TCP - - containerPort: 4568 - name: ist - protocol: TCP - - containerPort: 33062 - name: mysql-admin - protocol: TCP - - containerPort: 33060 - name: mysqlx - protocol: TCP - readinessProbe: - exec: - command: - - /var/lib/mysql/readiness-check.sh - failureThreshold: 5 - initialDelaySeconds: 15 - periodSeconds: 30 - successThreshold: 1 - timeoutSeconds: 15 - resources: - requests: - cpu: 600m - memory: 1G - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/mysql - name: datadir - - mountPath: /etc/percona-xtradb-cluster.conf.d - name: config - - mountPath: /tmp - name: tmp - - mountPath: /etc/mysql/ssl - name: ssl - - mountPath: /etc/mysql/ssl-internal - name: ssl-internal - - mountPath: /etc/mysql/mysql-users-secret - name: mysql-users-secret-file - - mountPath: /etc/my.cnf.d - name: auto-config - - mountPath: /etc/mysql/vault-keyring-secret - name: vault-keyring-secret - - mountPath: /etc/mysql/init-file - name: mysql-init-file - dnsPolicy: ClusterFirst - initContainers: - - command: - - /pxc-init-entrypoint.sh - imagePullPolicy: Always - name: pxc-init - resources: - limits: - cpu: 50m - memory: 50M - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/mysql - name: datadir - restartPolicy: Always - schedulerName: default-scheduler - securityContext: - supplementalGroups: - - 1001 - serviceAccount: default - serviceAccountName: default - terminationGracePeriodSeconds: 600 - volumes: - - emptyDir: {} - name: tmp - - configMap: - defaultMode: 420 - name: upgrade-haproxy-pxc - optional: true - name: config - - name: ssl-internal - secret: - defaultMode: 420 - optional: true - secretName: some-name-ssl-internal - - name: ssl - secret: - defaultMode: 420 - optional: false - secretName: some-name-ssl - - configMap: - defaultMode: 420 - name: auto-upgrade-haproxy-pxc - optional: true - name: auto-config - - name: vault-keyring-secret - secret: - defaultMode: 420 - optional: true - secretName: some-name-vault - - name: mysql-users-secret-file - secret: - defaultMode: 420 - optional: false - secretName: internal-upgrade-haproxy - - name: mysql-init-file - secret: - defaultMode: 420 - optional: true - secretName: upgrade-haproxy-mysql-init - updateStrategy: - type: OnDelete - volumeClaimTemplates: - - metadata: - name: datadir - spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 6G - status: - phase: Pending diff --git a/e2e-tests/upgrade-haproxy/compare/statefulset_upgrade-haproxy-pxc-k127.yml b/e2e-tests/upgrade-haproxy/compare/statefulset_upgrade-haproxy-pxc-k127.yml deleted file mode 100644 index 4780e553a5..0000000000 --- a/e2e-tests/upgrade-haproxy/compare/statefulset_upgrade-haproxy-pxc-k127.yml +++ /dev/null @@ -1,280 +0,0 @@ -apiVersion: apps/v1 -kind: StatefulSet -metadata: - generation: 2 - name: upgrade-haproxy-pxc - ownerReferences: - - controller: true - kind: PerconaXtraDBCluster - name: upgrade-haproxy -spec: - persistentVolumeClaimRetentionPolicy: - whenDeleted: Retain - whenScaled: Retain - podManagementPolicy: OrderedReady - replicas: 3 - revisionHistoryLimit: 10 - selector: - matchLabels: - app.kubernetes.io/component: pxc - app.kubernetes.io/instance: upgrade-haproxy - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - serviceName: upgrade-haproxy-pxc - template: - metadata: - labels: - app.kubernetes.io/component: pxc - app.kubernetes.io/instance: upgrade-haproxy - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - spec: - affinity: - podAntiAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - - labelSelector: - matchLabels: - app.kubernetes.io/component: pxc - app.kubernetes.io/instance: upgrade-haproxy - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - topologyKey: kubernetes.io/hostname - containers: - - env: - - name: LOG_DATA_DIR - value: /var/lib/mysql - - name: POD_NAMESPASE - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: metadata.namespace - - name: POD_NAME - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: metadata.name - envFrom: - - secretRef: - name: upgrade-haproxy-log-collector - optional: true - imagePullPolicy: Always - name: logs - resources: - requests: - cpu: 200m - memory: 100M - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/mysql - name: datadir - - args: - - logrotate - env: - - name: SERVICE_TYPE - value: mysql - - name: MONITOR_PASSWORD - valueFrom: - secretKeyRef: - key: monitor - name: internal-upgrade-haproxy - imagePullPolicy: Always - name: logrotate - resources: - requests: - cpu: 200m - memory: 100M - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/mysql - name: datadir - - args: - - mysqld - command: - - /var/lib/mysql/pxc-entrypoint.sh - env: - - name: PXC_SERVICE - value: upgrade-haproxy-pxc-unready - - name: MONITOR_HOST - value: '%' - - name: MYSQL_ROOT_PASSWORD - valueFrom: - secretKeyRef: - key: root - name: internal-upgrade-haproxy - - name: XTRABACKUP_PASSWORD - valueFrom: - secretKeyRef: - key: xtrabackup - name: internal-upgrade-haproxy - - name: MONITOR_PASSWORD - valueFrom: - secretKeyRef: - key: monitor - name: internal-upgrade-haproxy - - name: LOG_DATA_DIR - value: /var/lib/mysql - - name: IS_LOGCOLLECTOR - value: "yes" - - name: OPERATOR_ADMIN_PASSWORD - valueFrom: - secretKeyRef: - key: operator - name: internal-upgrade-haproxy - - name: LIVENESS_CHECK_TIMEOUT - value: "5" - - name: READINESS_CHECK_TIMEOUT - value: "15" - - name: DEFAULT_AUTHENTICATION_PLUGIN - value: caching_sha2_password - - name: NOTIFY_SOCKET - value: /var/lib/mysql/notify.sock - - name: MYSQL_STATE_FILE - value: /var/lib/mysql/mysql.state - envFrom: - - secretRef: - name: upgrade-haproxy-env-vars-pxc - optional: true - imagePullPolicy: Always - livenessProbe: - exec: - command: - - /var/lib/mysql/liveness-check.sh - failureThreshold: 3 - initialDelaySeconds: 300 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 5 - name: pxc - ports: - - containerPort: 3306 - name: mysql - protocol: TCP - - containerPort: 4444 - name: sst - protocol: TCP - - containerPort: 4567 - name: write-set - protocol: TCP - - containerPort: 4568 - name: ist - protocol: TCP - - containerPort: 33062 - name: mysql-admin - protocol: TCP - - containerPort: 33060 - name: mysqlx - protocol: TCP - readinessProbe: - exec: - command: - - /var/lib/mysql/readiness-check.sh - failureThreshold: 5 - initialDelaySeconds: 15 - periodSeconds: 30 - successThreshold: 1 - timeoutSeconds: 15 - resources: - requests: - cpu: 600m - memory: 1G - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/mysql - name: datadir - - mountPath: /etc/percona-xtradb-cluster.conf.d - name: config - - mountPath: /tmp - name: tmp - - mountPath: /etc/mysql/ssl - name: ssl - - mountPath: /etc/mysql/ssl-internal - name: ssl-internal - - mountPath: /etc/mysql/mysql-users-secret - name: mysql-users-secret-file - - mountPath: /etc/my.cnf.d - name: auto-config - - mountPath: /etc/mysql/vault-keyring-secret - name: vault-keyring-secret - - mountPath: /etc/mysql/init-file - name: mysql-init-file - dnsPolicy: ClusterFirst - initContainers: - - command: - - /pxc-init-entrypoint.sh - imagePullPolicy: Always - name: pxc-init - resources: - limits: - cpu: 50m - memory: 50M - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/mysql - name: datadir - restartPolicy: Always - schedulerName: default-scheduler - securityContext: - fsGroup: 1001 - supplementalGroups: - - 1001 - serviceAccount: default - serviceAccountName: default - terminationGracePeriodSeconds: 600 - volumes: - - emptyDir: {} - name: tmp - - configMap: - defaultMode: 420 - name: upgrade-haproxy-pxc - optional: true - name: config - - name: ssl-internal - secret: - defaultMode: 420 - optional: true - secretName: some-name-ssl-internal - - name: ssl - secret: - defaultMode: 420 - optional: false - secretName: some-name-ssl - - configMap: - defaultMode: 420 - name: auto-upgrade-haproxy-pxc - optional: true - name: auto-config - - name: vault-keyring-secret - secret: - defaultMode: 420 - optional: true - secretName: some-name-vault - - name: mysql-users-secret-file - secret: - defaultMode: 420 - optional: false - secretName: internal-upgrade-haproxy - - name: mysql-init-file - secret: - defaultMode: 420 - optional: true - secretName: upgrade-haproxy-mysql-init - updateStrategy: - type: OnDelete - volumeClaimTemplates: - - metadata: - name: datadir - spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 6G - status: - phase: Pending diff --git a/e2e-tests/upgrade-haproxy/compare/statefulset_upgrade-haproxy-pxc-oc.yml b/e2e-tests/upgrade-haproxy/compare/statefulset_upgrade-haproxy-pxc-oc.yml index 9ecf43d80a..8f1c3a0ebf 100644 --- a/e2e-tests/upgrade-haproxy/compare/statefulset_upgrade-haproxy-pxc-oc.yml +++ b/e2e-tests/upgrade-haproxy/compare/statefulset_upgrade-haproxy-pxc-oc.yml @@ -8,6 +8,9 @@ metadata: kind: PerconaXtraDBCluster name: upgrade-haproxy spec: + persistentVolumeClaimRetentionPolicy: + whenDeleted: Retain + whenScaled: Retain podManagementPolicy: OrderedReady replicas: 3 revisionHistoryLimit: 10 @@ -128,7 +131,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state @@ -265,6 +268,12 @@ spec: type: OnDelete volumeClaimTemplates: - metadata: + labels: + app.kubernetes.io/component: pxc + app.kubernetes.io/instance: upgrade-haproxy + app.kubernetes.io/managed-by: percona-xtradb-cluster-operator + app.kubernetes.io/name: percona-xtradb-cluster + app.kubernetes.io/part-of: percona-xtradb-cluster name: datadir spec: accessModes: diff --git a/e2e-tests/upgrade-haproxy/compare/statefulset_upgrade-haproxy-pxc.yml b/e2e-tests/upgrade-haproxy/compare/statefulset_upgrade-haproxy-pxc.yml index dd44b178b5..d674ed97e8 100644 --- a/e2e-tests/upgrade-haproxy/compare/statefulset_upgrade-haproxy-pxc.yml +++ b/e2e-tests/upgrade-haproxy/compare/statefulset_upgrade-haproxy-pxc.yml @@ -8,6 +8,9 @@ metadata: kind: PerconaXtraDBCluster name: upgrade-haproxy spec: + persistentVolumeClaimRetentionPolicy: + whenDeleted: Retain + whenScaled: Retain podManagementPolicy: OrderedReady replicas: 3 revisionHistoryLimit: 10 @@ -128,7 +131,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: caching_sha2_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state @@ -266,6 +269,12 @@ spec: type: OnDelete volumeClaimTemplates: - metadata: + labels: + app.kubernetes.io/component: pxc + app.kubernetes.io/instance: upgrade-haproxy + app.kubernetes.io/managed-by: percona-xtradb-cluster-operator + app.kubernetes.io/name: percona-xtradb-cluster + app.kubernetes.io/part-of: percona-xtradb-cluster name: datadir spec: accessModes: diff --git a/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-proxysql-k127-oc.yml b/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-proxysql-k127-oc.yml deleted file mode 100644 index 64121f4e1d..0000000000 --- a/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-proxysql-k127-oc.yml +++ /dev/null @@ -1,235 +0,0 @@ -apiVersion: apps/v1 -kind: StatefulSet -metadata: - generation: 2 - name: upgrade-proxysql-proxysql - ownerReferences: - - controller: true - kind: PerconaXtraDBCluster - name: upgrade-proxysql -spec: - persistentVolumeClaimRetentionPolicy: - whenDeleted: Retain - whenScaled: Retain - podManagementPolicy: OrderedReady - replicas: 3 - revisionHistoryLimit: 10 - selector: - matchLabels: - app.kubernetes.io/component: proxysql - app.kubernetes.io/instance: upgrade-proxysql - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - serviceName: upgrade-proxysql-proxysql-unready - template: - metadata: - labels: - app.kubernetes.io/component: proxysql - app.kubernetes.io/instance: upgrade-proxysql - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - spec: - affinity: - podAntiAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - - labelSelector: - matchLabels: - app.kubernetes.io/component: proxysql - app.kubernetes.io/instance: upgrade-proxysql - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - topologyKey: kubernetes.io/hostname - containers: - - args: - - proxysql - - -f - - -c - - /etc/proxysql/proxysql.cnf - - --reload - command: - - /opt/percona/proxysql-entrypoint.sh - env: - - name: PXC_SERVICE - value: upgrade-proxysql-pxc - - name: OPERATOR_PASSWORD - valueFrom: - secretKeyRef: - key: operator - name: internal-upgrade-proxysql - - name: PROXY_ADMIN_USER - value: proxyadmin - - name: PROXY_ADMIN_PASSWORD - valueFrom: - secretKeyRef: - key: proxyadmin - name: internal-upgrade-proxysql - - name: MONITOR_PASSWORD - valueFrom: - secretKeyRef: - key: monitor - name: internal-upgrade-proxysql - envFrom: - - secretRef: - name: upgrade-proxysql-env-vars-proxysql - optional: true - imagePullPolicy: Always - name: proxysql - ports: - - containerPort: 3306 - name: mysql - protocol: TCP - - containerPort: 6032 - name: proxyadm - protocol: TCP - resources: - requests: - cpu: 600m - memory: 1G - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/proxysql - name: proxydata - - mountPath: /etc/proxysql/ssl - name: ssl - - mountPath: /etc/proxysql/ssl-internal - name: ssl-internal - - mountPath: /opt/percona - name: bin - - args: - - /opt/percona/peer-list - - -on-change=/opt/percona/proxysql_add_pxc_nodes.sh - - -service=$(PXC_SERVICE) - env: - - name: PXC_SERVICE - value: upgrade-proxysql-pxc - - name: OPERATOR_PASSWORD - valueFrom: - secretKeyRef: - key: operator - name: internal-upgrade-proxysql - - name: PROXY_ADMIN_USER - value: proxyadmin - - name: PROXY_ADMIN_PASSWORD - valueFrom: - secretKeyRef: - key: proxyadmin - name: internal-upgrade-proxysql - - name: MONITOR_PASSWORD - valueFrom: - secretKeyRef: - key: monitor - name: internal-upgrade-proxysql - envFrom: - - secretRef: - name: upgrade-proxysql-env-vars-proxysql - optional: true - imagePullPolicy: Always - name: pxc-monit - resources: {} - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /opt/percona - name: bin - - args: - - /opt/percona/peer-list - - -on-change=/opt/percona/proxysql_add_proxysql_nodes.sh - - -service=$(PROXYSQL_SERVICE) - env: - - name: PROXYSQL_SERVICE - value: upgrade-proxysql-proxysql-unready - - name: OPERATOR_PASSWORD - valueFrom: - secretKeyRef: - key: operator - name: internal-upgrade-proxysql - - name: PROXY_ADMIN_USER - value: proxyadmin - - name: PROXY_ADMIN_PASSWORD - valueFrom: - secretKeyRef: - key: proxyadmin - name: internal-upgrade-proxysql - - name: MONITOR_PASSWORD - valueFrom: - secretKeyRef: - key: monitor - name: internal-upgrade-proxysql - envFrom: - - secretRef: - name: upgrade-proxysql-env-vars-proxysql - optional: true - imagePullPolicy: Always - name: proxysql-monit - resources: {} - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /opt/percona - name: bin - dnsPolicy: ClusterFirst - initContainers: - - command: - - /pxc-init-entrypoint.sh - imagePullPolicy: Always - name: pxc-init - resources: - limits: - cpu: 50m - memory: 50M - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/mysql - name: bin - - command: - - /proxysql-init-entrypoint.sh - imagePullPolicy: Always - name: proxysql-init - resources: - limits: - cpu: 50m - memory: 50M - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /opt/percona - name: bin - restartPolicy: Always - schedulerName: default-scheduler - securityContext: - supplementalGroups: - - 1001 - serviceAccount: default - serviceAccountName: default - terminationGracePeriodSeconds: 30 - volumes: - - name: ssl-internal - secret: - defaultMode: 420 - optional: true - secretName: some-name-ssl-internal - - name: ssl - secret: - defaultMode: 420 - optional: false - secretName: some-name-ssl - - emptyDir: {} - name: bin - updateStrategy: - type: RollingUpdate - volumeClaimTemplates: - - metadata: - name: proxydata - spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 2G - status: - phase: Pending diff --git a/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-proxysql-k127.yml b/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-proxysql-k127.yml deleted file mode 100644 index 85ba99bea1..0000000000 --- a/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-proxysql-k127.yml +++ /dev/null @@ -1,236 +0,0 @@ -apiVersion: apps/v1 -kind: StatefulSet -metadata: - generation: 2 - name: upgrade-proxysql-proxysql - ownerReferences: - - controller: true - kind: PerconaXtraDBCluster - name: upgrade-proxysql -spec: - persistentVolumeClaimRetentionPolicy: - whenDeleted: Retain - whenScaled: Retain - podManagementPolicy: OrderedReady - replicas: 3 - revisionHistoryLimit: 10 - selector: - matchLabels: - app.kubernetes.io/component: proxysql - app.kubernetes.io/instance: upgrade-proxysql - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - serviceName: upgrade-proxysql-proxysql-unready - template: - metadata: - labels: - app.kubernetes.io/component: proxysql - app.kubernetes.io/instance: upgrade-proxysql - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - spec: - affinity: - podAntiAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - - labelSelector: - matchLabels: - app.kubernetes.io/component: proxysql - app.kubernetes.io/instance: upgrade-proxysql - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - topologyKey: kubernetes.io/hostname - containers: - - args: - - proxysql - - -f - - -c - - /etc/proxysql/proxysql.cnf - - --reload - command: - - /opt/percona/proxysql-entrypoint.sh - env: - - name: PXC_SERVICE - value: upgrade-proxysql-pxc - - name: OPERATOR_PASSWORD - valueFrom: - secretKeyRef: - key: operator - name: internal-upgrade-proxysql - - name: PROXY_ADMIN_USER - value: proxyadmin - - name: PROXY_ADMIN_PASSWORD - valueFrom: - secretKeyRef: - key: proxyadmin - name: internal-upgrade-proxysql - - name: MONITOR_PASSWORD - valueFrom: - secretKeyRef: - key: monitor - name: internal-upgrade-proxysql - envFrom: - - secretRef: - name: upgrade-proxysql-env-vars-proxysql - optional: true - imagePullPolicy: Always - name: proxysql - ports: - - containerPort: 3306 - name: mysql - protocol: TCP - - containerPort: 6032 - name: proxyadm - protocol: TCP - resources: - requests: - cpu: 600m - memory: 1G - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/proxysql - name: proxydata - - mountPath: /etc/proxysql/ssl - name: ssl - - mountPath: /etc/proxysql/ssl-internal - name: ssl-internal - - mountPath: /opt/percona - name: bin - - args: - - /opt/percona/peer-list - - -on-change=/opt/percona/proxysql_add_pxc_nodes.sh - - -service=$(PXC_SERVICE) - env: - - name: PXC_SERVICE - value: upgrade-proxysql-pxc - - name: OPERATOR_PASSWORD - valueFrom: - secretKeyRef: - key: operator - name: internal-upgrade-proxysql - - name: PROXY_ADMIN_USER - value: proxyadmin - - name: PROXY_ADMIN_PASSWORD - valueFrom: - secretKeyRef: - key: proxyadmin - name: internal-upgrade-proxysql - - name: MONITOR_PASSWORD - valueFrom: - secretKeyRef: - key: monitor - name: internal-upgrade-proxysql - envFrom: - - secretRef: - name: upgrade-proxysql-env-vars-proxysql - optional: true - imagePullPolicy: Always - name: pxc-monit - resources: {} - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /opt/percona - name: bin - - args: - - /opt/percona/peer-list - - -on-change=/opt/percona/proxysql_add_proxysql_nodes.sh - - -service=$(PROXYSQL_SERVICE) - env: - - name: PROXYSQL_SERVICE - value: upgrade-proxysql-proxysql-unready - - name: OPERATOR_PASSWORD - valueFrom: - secretKeyRef: - key: operator - name: internal-upgrade-proxysql - - name: PROXY_ADMIN_USER - value: proxyadmin - - name: PROXY_ADMIN_PASSWORD - valueFrom: - secretKeyRef: - key: proxyadmin - name: internal-upgrade-proxysql - - name: MONITOR_PASSWORD - valueFrom: - secretKeyRef: - key: monitor - name: internal-upgrade-proxysql - envFrom: - - secretRef: - name: upgrade-proxysql-env-vars-proxysql - optional: true - imagePullPolicy: Always - name: proxysql-monit - resources: {} - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /opt/percona - name: bin - dnsPolicy: ClusterFirst - initContainers: - - command: - - /pxc-init-entrypoint.sh - imagePullPolicy: Always - name: pxc-init - resources: - limits: - cpu: 50m - memory: 50M - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/mysql - name: bin - - command: - - /proxysql-init-entrypoint.sh - imagePullPolicy: Always - name: proxysql-init - resources: - limits: - cpu: 50m - memory: 50M - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /opt/percona - name: bin - restartPolicy: Always - schedulerName: default-scheduler - securityContext: - fsGroup: 1001 - supplementalGroups: - - 1001 - serviceAccount: default - serviceAccountName: default - terminationGracePeriodSeconds: 30 - volumes: - - name: ssl-internal - secret: - defaultMode: 420 - optional: true - secretName: some-name-ssl-internal - - name: ssl - secret: - defaultMode: 420 - optional: false - secretName: some-name-ssl - - emptyDir: {} - name: bin - updateStrategy: - type: RollingUpdate - volumeClaimTemplates: - - metadata: - name: proxydata - spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 2G - status: - phase: Pending diff --git a/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-proxysql-oc.yml b/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-proxysql-oc.yml index 4ad887b1ba..2507201037 100644 --- a/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-proxysql-oc.yml +++ b/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-proxysql-oc.yml @@ -8,6 +8,9 @@ metadata: kind: PerconaXtraDBCluster name: upgrade-proxysql spec: + persistentVolumeClaimRetentionPolicy: + whenDeleted: Retain + whenScaled: Retain podManagementPolicy: OrderedReady replicas: 3 revisionHistoryLimit: 10 @@ -221,6 +224,12 @@ spec: type: RollingUpdate volumeClaimTemplates: - metadata: + labels: + app.kubernetes.io/component: proxysql + app.kubernetes.io/instance: upgrade-proxysql + app.kubernetes.io/managed-by: percona-xtradb-cluster-operator + app.kubernetes.io/name: percona-xtradb-cluster + app.kubernetes.io/part-of: percona-xtradb-cluster name: proxydata spec: accessModes: diff --git a/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-proxysql.yml b/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-proxysql.yml index 998fb3a571..35250906a3 100644 --- a/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-proxysql.yml +++ b/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-proxysql.yml @@ -8,6 +8,9 @@ metadata: kind: PerconaXtraDBCluster name: upgrade-proxysql spec: + persistentVolumeClaimRetentionPolicy: + whenDeleted: Retain + whenScaled: Retain podManagementPolicy: OrderedReady replicas: 3 revisionHistoryLimit: 10 @@ -40,7 +43,15 @@ spec: app.kubernetes.io/part-of: percona-xtradb-cluster topologyKey: kubernetes.io/hostname containers: - - env: + - args: + - proxysql + - -f + - -c + - /etc/proxysql/proxysql.cnf + - --reload + command: + - /opt/percona/proxysql-entrypoint.sh + env: - name: PXC_SERVICE value: upgrade-proxysql-pxc - name: OPERATOR_PASSWORD @@ -214,6 +225,12 @@ spec: type: RollingUpdate volumeClaimTemplates: - metadata: + labels: + app.kubernetes.io/component: proxysql + app.kubernetes.io/instance: upgrade-proxysql + app.kubernetes.io/managed-by: percona-xtradb-cluster-operator + app.kubernetes.io/name: percona-xtradb-cluster + app.kubernetes.io/part-of: percona-xtradb-cluster name: proxydata spec: accessModes: diff --git a/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-pxc-k127-oc.yml b/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-pxc-k127-oc.yml deleted file mode 100644 index e487a6c638..0000000000 --- a/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-pxc-k127-oc.yml +++ /dev/null @@ -1,279 +0,0 @@ -apiVersion: apps/v1 -kind: StatefulSet -metadata: - generation: 2 - name: upgrade-proxysql-pxc - ownerReferences: - - controller: true - kind: PerconaXtraDBCluster - name: upgrade-proxysql -spec: - persistentVolumeClaimRetentionPolicy: - whenDeleted: Retain - whenScaled: Retain - podManagementPolicy: OrderedReady - replicas: 3 - revisionHistoryLimit: 10 - selector: - matchLabels: - app.kubernetes.io/component: pxc - app.kubernetes.io/instance: upgrade-proxysql - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - serviceName: upgrade-proxysql-pxc - template: - metadata: - labels: - app.kubernetes.io/component: pxc - app.kubernetes.io/instance: upgrade-proxysql - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - spec: - affinity: - podAntiAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - - labelSelector: - matchLabels: - app.kubernetes.io/component: pxc - app.kubernetes.io/instance: upgrade-proxysql - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - topologyKey: kubernetes.io/hostname - containers: - - env: - - name: LOG_DATA_DIR - value: /var/lib/mysql - - name: POD_NAMESPASE - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: metadata.namespace - - name: POD_NAME - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: metadata.name - envFrom: - - secretRef: - name: upgrade-proxysql-log-collector - optional: true - imagePullPolicy: Always - name: logs - resources: - requests: - cpu: 200m - memory: 100M - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/mysql - name: datadir - - args: - - logrotate - env: - - name: SERVICE_TYPE - value: mysql - - name: MONITOR_PASSWORD - valueFrom: - secretKeyRef: - key: monitor - name: internal-upgrade-proxysql - imagePullPolicy: Always - name: logrotate - resources: - requests: - cpu: 200m - memory: 100M - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/mysql - name: datadir - - args: - - mysqld - command: - - /var/lib/mysql/pxc-entrypoint.sh - env: - - name: PXC_SERVICE - value: upgrade-proxysql-pxc-unready - - name: MONITOR_HOST - value: '%' - - name: MYSQL_ROOT_PASSWORD - valueFrom: - secretKeyRef: - key: root - name: internal-upgrade-proxysql - - name: XTRABACKUP_PASSWORD - valueFrom: - secretKeyRef: - key: xtrabackup - name: internal-upgrade-proxysql - - name: MONITOR_PASSWORD - valueFrom: - secretKeyRef: - key: monitor - name: internal-upgrade-proxysql - - name: LOG_DATA_DIR - value: /var/lib/mysql - - name: IS_LOGCOLLECTOR - value: "yes" - - name: OPERATOR_ADMIN_PASSWORD - valueFrom: - secretKeyRef: - key: operator - name: internal-upgrade-proxysql - - name: LIVENESS_CHECK_TIMEOUT - value: "5" - - name: READINESS_CHECK_TIMEOUT - value: "15" - - name: DEFAULT_AUTHENTICATION_PLUGIN - value: mysql_native_password - - name: NOTIFY_SOCKET - value: /var/lib/mysql/notify.sock - - name: MYSQL_STATE_FILE - value: /var/lib/mysql/mysql.state - envFrom: - - secretRef: - name: upgrade-proxysql-env-vars-pxc - optional: true - imagePullPolicy: Always - livenessProbe: - exec: - command: - - /var/lib/mysql/liveness-check.sh - failureThreshold: 3 - initialDelaySeconds: 300 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 5 - name: pxc - ports: - - containerPort: 3306 - name: mysql - protocol: TCP - - containerPort: 4444 - name: sst - protocol: TCP - - containerPort: 4567 - name: write-set - protocol: TCP - - containerPort: 4568 - name: ist - protocol: TCP - - containerPort: 33062 - name: mysql-admin - protocol: TCP - - containerPort: 33060 - name: mysqlx - protocol: TCP - readinessProbe: - exec: - command: - - /var/lib/mysql/readiness-check.sh - failureThreshold: 5 - initialDelaySeconds: 15 - periodSeconds: 30 - successThreshold: 1 - timeoutSeconds: 15 - resources: - requests: - cpu: 600m - memory: 1G - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/mysql - name: datadir - - mountPath: /etc/percona-xtradb-cluster.conf.d - name: config - - mountPath: /tmp - name: tmp - - mountPath: /etc/mysql/ssl - name: ssl - - mountPath: /etc/mysql/ssl-internal - name: ssl-internal - - mountPath: /etc/mysql/mysql-users-secret - name: mysql-users-secret-file - - mountPath: /etc/my.cnf.d - name: auto-config - - mountPath: /etc/mysql/vault-keyring-secret - name: vault-keyring-secret - - mountPath: /etc/mysql/init-file - name: mysql-init-file - dnsPolicy: ClusterFirst - initContainers: - - command: - - /pxc-init-entrypoint.sh - imagePullPolicy: Always - name: pxc-init - resources: - limits: - cpu: 50m - memory: 50M - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/mysql - name: datadir - restartPolicy: Always - schedulerName: default-scheduler - securityContext: - supplementalGroups: - - 1001 - serviceAccount: default - serviceAccountName: default - terminationGracePeriodSeconds: 600 - volumes: - - emptyDir: {} - name: tmp - - configMap: - defaultMode: 420 - name: upgrade-proxysql-pxc - optional: true - name: config - - name: ssl-internal - secret: - defaultMode: 420 - optional: true - secretName: some-name-ssl-internal - - name: ssl - secret: - defaultMode: 420 - optional: false - secretName: some-name-ssl - - configMap: - defaultMode: 420 - name: auto-upgrade-proxysql-pxc - optional: true - name: auto-config - - name: vault-keyring-secret - secret: - defaultMode: 420 - optional: true - secretName: some-name-vault - - name: mysql-users-secret-file - secret: - defaultMode: 420 - optional: false - secretName: internal-upgrade-proxysql - - name: mysql-init-file - secret: - defaultMode: 420 - optional: true - secretName: upgrade-proxysql-mysql-init - updateStrategy: - type: OnDelete - volumeClaimTemplates: - - metadata: - name: datadir - spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 6G - status: - phase: Pending diff --git a/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-pxc-k127.yml b/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-pxc-k127.yml deleted file mode 100644 index 5cf13414bf..0000000000 --- a/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-pxc-k127.yml +++ /dev/null @@ -1,280 +0,0 @@ -apiVersion: apps/v1 -kind: StatefulSet -metadata: - generation: 2 - name: upgrade-proxysql-pxc - ownerReferences: - - controller: true - kind: PerconaXtraDBCluster - name: upgrade-proxysql -spec: - persistentVolumeClaimRetentionPolicy: - whenDeleted: Retain - whenScaled: Retain - podManagementPolicy: OrderedReady - replicas: 3 - revisionHistoryLimit: 10 - selector: - matchLabels: - app.kubernetes.io/component: pxc - app.kubernetes.io/instance: upgrade-proxysql - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - serviceName: upgrade-proxysql-pxc - template: - metadata: - labels: - app.kubernetes.io/component: pxc - app.kubernetes.io/instance: upgrade-proxysql - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - spec: - affinity: - podAntiAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - - labelSelector: - matchLabels: - app.kubernetes.io/component: pxc - app.kubernetes.io/instance: upgrade-proxysql - app.kubernetes.io/managed-by: percona-xtradb-cluster-operator - app.kubernetes.io/name: percona-xtradb-cluster - app.kubernetes.io/part-of: percona-xtradb-cluster - topologyKey: kubernetes.io/hostname - containers: - - env: - - name: LOG_DATA_DIR - value: /var/lib/mysql - - name: POD_NAMESPASE - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: metadata.namespace - - name: POD_NAME - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: metadata.name - envFrom: - - secretRef: - name: upgrade-proxysql-log-collector - optional: true - imagePullPolicy: Always - name: logs - resources: - requests: - cpu: 200m - memory: 100M - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/mysql - name: datadir - - args: - - logrotate - env: - - name: SERVICE_TYPE - value: mysql - - name: MONITOR_PASSWORD - valueFrom: - secretKeyRef: - key: monitor - name: internal-upgrade-proxysql - imagePullPolicy: Always - name: logrotate - resources: - requests: - cpu: 200m - memory: 100M - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/mysql - name: datadir - - args: - - mysqld - command: - - /var/lib/mysql/pxc-entrypoint.sh - env: - - name: PXC_SERVICE - value: upgrade-proxysql-pxc-unready - - name: MONITOR_HOST - value: '%' - - name: MYSQL_ROOT_PASSWORD - valueFrom: - secretKeyRef: - key: root - name: internal-upgrade-proxysql - - name: XTRABACKUP_PASSWORD - valueFrom: - secretKeyRef: - key: xtrabackup - name: internal-upgrade-proxysql - - name: MONITOR_PASSWORD - valueFrom: - secretKeyRef: - key: monitor - name: internal-upgrade-proxysql - - name: LOG_DATA_DIR - value: /var/lib/mysql - - name: IS_LOGCOLLECTOR - value: "yes" - - name: OPERATOR_ADMIN_PASSWORD - valueFrom: - secretKeyRef: - key: operator - name: internal-upgrade-proxysql - - name: LIVENESS_CHECK_TIMEOUT - value: "5" - - name: READINESS_CHECK_TIMEOUT - value: "15" - - name: DEFAULT_AUTHENTICATION_PLUGIN - value: mysql_native_password - - name: NOTIFY_SOCKET - value: /var/lib/mysql/notify.sock - - name: MYSQL_STATE_FILE - value: /var/lib/mysql/mysql.state - envFrom: - - secretRef: - name: upgrade-proxysql-env-vars-pxc - optional: true - imagePullPolicy: Always - livenessProbe: - exec: - command: - - /var/lib/mysql/liveness-check.sh - failureThreshold: 3 - initialDelaySeconds: 300 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 5 - name: pxc - ports: - - containerPort: 3306 - name: mysql - protocol: TCP - - containerPort: 4444 - name: sst - protocol: TCP - - containerPort: 4567 - name: write-set - protocol: TCP - - containerPort: 4568 - name: ist - protocol: TCP - - containerPort: 33062 - name: mysql-admin - protocol: TCP - - containerPort: 33060 - name: mysqlx - protocol: TCP - readinessProbe: - exec: - command: - - /var/lib/mysql/readiness-check.sh - failureThreshold: 5 - initialDelaySeconds: 15 - periodSeconds: 30 - successThreshold: 1 - timeoutSeconds: 15 - resources: - requests: - cpu: 600m - memory: 1G - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/mysql - name: datadir - - mountPath: /etc/percona-xtradb-cluster.conf.d - name: config - - mountPath: /tmp - name: tmp - - mountPath: /etc/mysql/ssl - name: ssl - - mountPath: /etc/mysql/ssl-internal - name: ssl-internal - - mountPath: /etc/mysql/mysql-users-secret - name: mysql-users-secret-file - - mountPath: /etc/my.cnf.d - name: auto-config - - mountPath: /etc/mysql/vault-keyring-secret - name: vault-keyring-secret - - mountPath: /etc/mysql/init-file - name: mysql-init-file - dnsPolicy: ClusterFirst - initContainers: - - command: - - /pxc-init-entrypoint.sh - imagePullPolicy: Always - name: pxc-init - resources: - limits: - cpu: 50m - memory: 50M - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/mysql - name: datadir - restartPolicy: Always - schedulerName: default-scheduler - securityContext: - fsGroup: 1001 - supplementalGroups: - - 1001 - serviceAccount: default - serviceAccountName: default - terminationGracePeriodSeconds: 600 - volumes: - - emptyDir: {} - name: tmp - - configMap: - defaultMode: 420 - name: upgrade-proxysql-pxc - optional: true - name: config - - name: ssl-internal - secret: - defaultMode: 420 - optional: true - secretName: some-name-ssl-internal - - name: ssl - secret: - defaultMode: 420 - optional: false - secretName: some-name-ssl - - configMap: - defaultMode: 420 - name: auto-upgrade-proxysql-pxc - optional: true - name: auto-config - - name: vault-keyring-secret - secret: - defaultMode: 420 - optional: true - secretName: some-name-vault - - name: mysql-users-secret-file - secret: - defaultMode: 420 - optional: false - secretName: internal-upgrade-proxysql - - name: mysql-init-file - secret: - defaultMode: 420 - optional: true - secretName: upgrade-proxysql-mysql-init - updateStrategy: - type: OnDelete - volumeClaimTemplates: - - metadata: - name: datadir - spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 6G - status: - phase: Pending diff --git a/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-pxc-oc.yml b/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-pxc-oc.yml index e4c5ec86c9..8d71c22e54 100644 --- a/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-pxc-oc.yml +++ b/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-pxc-oc.yml @@ -8,6 +8,9 @@ metadata: kind: PerconaXtraDBCluster name: upgrade-proxysql spec: + persistentVolumeClaimRetentionPolicy: + whenDeleted: Retain + whenScaled: Retain podManagementPolicy: OrderedReady replicas: 3 revisionHistoryLimit: 10 @@ -128,7 +131,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state @@ -265,6 +268,12 @@ spec: type: OnDelete volumeClaimTemplates: - metadata: + labels: + app.kubernetes.io/component: pxc + app.kubernetes.io/instance: upgrade-proxysql + app.kubernetes.io/managed-by: percona-xtradb-cluster-operator + app.kubernetes.io/name: percona-xtradb-cluster + app.kubernetes.io/part-of: percona-xtradb-cluster name: datadir spec: accessModes: diff --git a/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-pxc.yml b/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-pxc.yml index a766631c89..925167d358 100644 --- a/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-pxc.yml +++ b/e2e-tests/upgrade-proxysql/compare/statefulset_upgrade-proxysql-pxc.yml @@ -8,6 +8,9 @@ metadata: kind: PerconaXtraDBCluster name: upgrade-proxysql spec: + persistentVolumeClaimRetentionPolicy: + whenDeleted: Retain + whenScaled: Retain podManagementPolicy: OrderedReady replicas: 3 revisionHistoryLimit: 10 @@ -128,7 +131,7 @@ spec: value: "15" - name: DEFAULT_AUTHENTICATION_PLUGIN value: mysql_native_password - - name: NOTIFY_SOCKET + - name: MYSQL_NOTIFY_SOCKET value: /var/lib/mysql/notify.sock - name: MYSQL_STATE_FILE value: /var/lib/mysql/mysql.state @@ -266,6 +269,12 @@ spec: type: OnDelete volumeClaimTemplates: - metadata: + labels: + app.kubernetes.io/component: pxc + app.kubernetes.io/instance: upgrade-proxysql + app.kubernetes.io/managed-by: percona-xtradb-cluster-operator + app.kubernetes.io/name: percona-xtradb-cluster + app.kubernetes.io/part-of: percona-xtradb-cluster name: datadir spec: accessModes: diff --git a/e2e-tests/users/compare/select-4-84.sql b/e2e-tests/users/compare/select-4-84.sql new file mode 100644 index 0000000000..d9695b3c54 --- /dev/null +++ b/e2e-tests/users/compare/select-4-84.sql @@ -0,0 +1,87 @@ +ADMINISTRABLE_ROLE_AUTHORIZATIONS +APPLICABLE_ROLES +CHARACTER_SETS +CHECK_CONSTRAINTS +CLIENT_STATISTICS +COLLATIONS +COLLATION_CHARACTER_SET_APPLICABILITY +COLUMNS +COLUMNS_EXTENSIONS +COLUMN_PRIVILEGES +COLUMN_STATISTICS +COMPRESSION_DICTIONARY +COMPRESSION_DICTIONARY_TABLES +ENABLED_ROLES +ENGINES +EVENTS +FILES +GLOBAL_TEMPORARY_TABLES +INDEX_STATISTICS +INNODB_BUFFER_PAGE +INNODB_BUFFER_PAGE_LRU +INNODB_BUFFER_POOL_STATS +INNODB_CACHED_INDEXES +INNODB_CMP +INNODB_CMPMEM +INNODB_CMPMEM_RESET +INNODB_CMP_PER_INDEX +INNODB_CMP_PER_INDEX_RESET +INNODB_CMP_RESET +INNODB_COLUMNS +INNODB_DATAFILES +INNODB_FIELDS +INNODB_FOREIGN +INNODB_FOREIGN_COLS +INNODB_FT_BEING_DELETED +INNODB_FT_CONFIG +INNODB_FT_DEFAULT_STOPWORD +INNODB_FT_DELETED +INNODB_FT_INDEX_CACHE +INNODB_FT_INDEX_TABLE +INNODB_INDEXES +INNODB_METRICS +INNODB_SESSION_TEMP_TABLESPACES +INNODB_TABLES +INNODB_TABLESPACES +INNODB_TABLESPACES_BRIEF +INNODB_TABLESTATS +INNODB_TEMP_TABLE_INFO +INNODB_TRX +INNODB_VIRTUAL +KEYWORDS +KEY_COLUMN_USAGE +OPTIMIZER_TRACE +PARAMETERS +PARTITIONS +PLUGINS +PROCESSLIST +PROFILING +REFERENTIAL_CONSTRAINTS +RESOURCE_GROUPS +ROLE_COLUMN_GRANTS +ROLE_ROUTINE_GRANTS +ROLE_TABLE_GRANTS +ROUTINES +SCHEMATA +SCHEMATA_EXTENSIONS +SCHEMA_PRIVILEGES +STATISTICS +ST_GEOMETRY_COLUMNS +ST_SPATIAL_REFERENCE_SYSTEMS +ST_UNITS_OF_MEASURE +TABLES +TABLESPACES_EXTENSIONS +TABLES_EXTENSIONS +TABLE_CONSTRAINTS +TABLE_CONSTRAINTS_EXTENSIONS +TABLE_PRIVILEGES +TABLE_STATISTICS +TEMPORARY_TABLES +THREAD_STATISTICS +TRIGGERS +USER_ATTRIBUTES +USER_PRIVILEGES +USER_STATISTICS +VIEWS +VIEW_ROUTINE_USAGE +VIEW_TABLE_USAGE diff --git a/e2e-tests/users/conf/some-name.yml b/e2e-tests/users/conf/some-name.yml index ce30c6c6b7..76798b8ccd 100644 --- a/e2e-tests/users/conf/some-name.yml +++ b/e2e-tests/users/conf/some-name.yml @@ -16,7 +16,7 @@ spec: memory: 0.1G cpu: 100m limits: - memory: "1G" + memory: "2G" cpu: "1" volumeSpec: persistentVolumeClaim: diff --git a/go.mod b/go.mod index 6b49da38ea..d96b3f3df8 100644 --- a/go.mod +++ b/go.mod @@ -1,12 +1,12 @@ module github.com/percona/percona-xtradb-cluster-operator -go 1.22.6 +go 1.23.4 require ( github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.5.0 github.com/Percona-Lab/percona-version-service/api v0.0.0-20201216104127-a39f2dded3cc github.com/caarlos0/env v3.5.0+incompatible - github.com/cert-manager/cert-manager v1.16.1 + github.com/cert-manager/cert-manager v1.16.2 github.com/flosch/pongo2/v6 v6.0.0 github.com/go-ini/ini v1.67.0 github.com/go-logr/logr v1.4.2 @@ -19,18 +19,18 @@ require ( github.com/go-sql-driver/mysql v1.8.1 github.com/google/go-cmp v0.6.0 github.com/hashicorp/go-version v1.7.0 - github.com/minio/minio-go/v7 v7.0.80 - github.com/onsi/ginkgo/v2 v2.21.0 - github.com/onsi/gomega v1.35.1 + github.com/minio/minio-go/v7 v7.0.81 + github.com/onsi/ginkgo/v2 v2.22.1 + github.com/onsi/gomega v1.36.2 github.com/pkg/errors v0.9.1 github.com/robfig/cron/v3 v3.0.1 go.uber.org/zap v1.27.0 - golang.org/x/sync v0.9.0 - k8s.io/api v0.31.2 - k8s.io/apimachinery v0.31.2 - k8s.io/client-go v0.31.2 + golang.org/x/sync v0.10.0 + k8s.io/api v0.32.0 + k8s.io/apimachinery v0.32.0 + k8s.io/client-go v0.32.0 k8s.io/klog/v2 v2.130.1 - sigs.k8s.io/controller-runtime v0.19.1 + sigs.k8s.io/controller-runtime v0.19.3 ) require ( @@ -44,7 +44,6 @@ require ( github.com/dustin/go-humanize v1.0.1 // indirect github.com/emicklei/go-restful/v3 v3.12.1 // indirect github.com/evanphx/json-patch/v5 v5.9.0 // indirect - github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-openapi/analysis v0.23.0 // indirect @@ -55,14 +54,12 @@ require ( github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/goccy/go-json v0.10.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/google/gofuzz v1.2.0 // indirect - github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db // indirect + github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad // indirect github.com/google/uuid v1.6.0 // indirect github.com/gorilla/websocket v1.5.1 // indirect - github.com/imdario/mergo v0.3.16 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/compress v1.17.11 // indirect @@ -70,7 +67,7 @@ require ( github.com/mailru/easyjson v0.7.7 // indirect github.com/minio/md5-simd v1.1.2 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/moby/spdystream v0.4.0 // indirect + github.com/moby/spdystream v0.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect @@ -89,27 +86,26 @@ require ( go.opentelemetry.io/otel/metric v1.29.0 // indirect go.opentelemetry.io/otel/trace v1.29.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.28.0 // indirect + golang.org/x/crypto v0.31.0 // indirect golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect - golang.org/x/net v0.30.0 // indirect + golang.org/x/net v0.33.0 // indirect golang.org/x/oauth2 v0.23.0 // indirect - golang.org/x/sys v0.26.0 // indirect - golang.org/x/term v0.25.0 // indirect - golang.org/x/text v0.19.0 // indirect - golang.org/x/time v0.6.0 // indirect - golang.org/x/tools v0.26.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 + golang.org/x/time v0.7.0 // indirect + golang.org/x/tools v0.28.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect - google.golang.org/protobuf v1.35.1 // indirect + google.golang.org/protobuf v1.36.1 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/apiextensions-apiserver v0.31.1 // indirect - k8s.io/kube-openapi v0.0.0-20240903163716-9e1beecbcb38 // indirect - k8s.io/utils v0.0.0-20240921022957-49e7df575cb6 // indirect + k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect + k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect sigs.k8s.io/gateway-api v1.1.0 // indirect - sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect + sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect sigs.k8s.io/yaml v1.4.0 // indirect ) diff --git a/go.sum b/go.sum index 157a03768d..1acfbc0d4f 100644 --- a/go.sum +++ b/go.sum @@ -22,8 +22,8 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/caarlos0/env v3.5.0+incompatible h1:Yy0UN8o9Wtr/jGHZDpCBLpNrzcFLLM2yixi/rBrKyJs= github.com/caarlos0/env v3.5.0+incompatible/go.mod h1:tdCsowwCzMLdkqRYDlHpZCp2UooDD3MspDBjZ2AD02Y= -github.com/cert-manager/cert-manager v1.16.1 h1:1ceFMqTtwiqY2vyfaRT85CNiVmK7pJjt3GebYCx9awY= -github.com/cert-manager/cert-manager v1.16.1/go.mod h1:MfLVTL45hFZsqmaT1O0+b2ugaNNQQZttSFV9hASHUb0= +github.com/cert-manager/cert-manager v1.16.2 h1:c9UU2E+8XWGruyvC/mdpc1wuLddtgmNr8foKdP7a8Jg= +github.com/cert-manager/cert-manager v1.16.2/go.mod h1:MfLVTL45hFZsqmaT1O0+b2ugaNNQQZttSFV9hASHUb0= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -40,8 +40,6 @@ github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0 github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/flosch/pongo2/v6 v6.0.0 h1:lsGru8IAzHgIAw6H2m4PCyleO58I40ow6apih0WprMU= github.com/flosch/pongo2/v6 v6.0.0/go.mod h1:CuDpFm47R0uGGE7z13/tTlt1Y6zdxvr2RLT5LJhsHEU= -github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= -github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A= @@ -83,8 +81,6 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= @@ -95,16 +91,14 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgYQBbFN4U4JNXUNYpxael3UzMyo= -github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= +github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg= +github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= -github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= @@ -126,12 +120,12 @@ github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0 github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= -github.com/minio/minio-go/v7 v7.0.80 h1:2mdUHXEykRdY/BigLt3Iuu1otL0JTogT0Nmltg0wujk= -github.com/minio/minio-go/v7 v7.0.80/go.mod h1:84gmIilaX4zcvAWWzJ5Z1WI5axN+hAbM5w25xf8xvC0= +github.com/minio/minio-go/v7 v7.0.81 h1:SzhMN0TQ6T/xSBu6Nvw3M5M8voM+Ht8RH3hE8S7zxaA= +github.com/minio/minio-go/v7 v7.0.81/go.mod h1:84gmIilaX4zcvAWWzJ5Z1WI5axN+hAbM5w25xf8xvC0= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/moby/spdystream v0.4.0 h1:Vy79D6mHeJJjiPdFEL2yku1kl0chZpJfZcPpb16BRl8= -github.com/moby/spdystream v0.4.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI= +github.com/moby/spdystream v0.5.0 h1:7r0J1Si3QO/kjRitvSLVVFUjxMEb/YLj6S9FF62JBCU= +github.com/moby/spdystream v0.5.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -143,10 +137,10 @@ github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/onsi/ginkgo/v2 v2.21.0 h1:7rg/4f3rB88pb5obDgNZrNHrQ4e6WpjonchcpuBRnZM= -github.com/onsi/ginkgo/v2 v2.21.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo= -github.com/onsi/gomega v1.35.1 h1:Cwbd75ZBPxFSuZ6T+rN/WCb/gOc6YgFBXLlZLhC7Ds4= -github.com/onsi/gomega v1.35.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog= +github.com/onsi/ginkgo/v2 v2.22.1 h1:QW7tbJAUDyVDVOM5dFa7qaybo+CRfR7bemlQUN6Z8aM= +github.com/onsi/ginkgo/v2 v2.22.1/go.mod h1:S6aTpoRsSq2cZOd+pssHAlKW/Q/jZt6cPrPlnj4a1xM= +github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8= +github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= @@ -199,8 +193,8 @@ go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= -golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -209,43 +203,43 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= -golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= +golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= +golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= -golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= -golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= -golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= -golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= -golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= -golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= +golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ= -golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0= +golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= +golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= -google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk= +google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= @@ -253,32 +247,29 @@ gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSP gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -k8s.io/api v0.31.2 h1:3wLBbL5Uom/8Zy98GRPXpJ254nEFpl+hwndmk9RwmL0= -k8s.io/api v0.31.2/go.mod h1:bWmGvrGPssSK1ljmLzd3pwCQ9MgoTsRCuK35u6SygUk= +k8s.io/api v0.32.0 h1:OL9JpbvAU5ny9ga2fb24X8H6xQlVp+aJMFlgtQjR9CE= +k8s.io/api v0.32.0/go.mod h1:4LEwHZEf6Q/cG96F3dqR965sYOfmPM7rq81BLgsE0p0= k8s.io/apiextensions-apiserver v0.31.1 h1:L+hwULvXx+nvTYX/MKM3kKMZyei+UiSXQWciX/N6E40= k8s.io/apiextensions-apiserver v0.31.1/go.mod h1:tWMPR3sgW+jsl2xm9v7lAyRF1rYEK71i9G5dRtkknoQ= -k8s.io/apimachinery v0.31.2 h1:i4vUt2hPK56W6mlT7Ry+AO8eEsyxMD1U44NR22CLTYw= -k8s.io/apimachinery v0.31.2/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= -k8s.io/client-go v0.31.2 h1:Y2F4dxU5d3AQj+ybwSMqQnpZH9F30//1ObxOKlTI9yc= -k8s.io/client-go v0.31.2/go.mod h1:NPa74jSVR/+eez2dFsEIHNa+3o09vtNaWwWwb1qSxSs= +k8s.io/apimachinery v0.32.0 h1:cFSE7N3rmEEtv4ei5X6DaJPHHX0C+upp+v5lVPiEwpg= +k8s.io/apimachinery v0.32.0/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= +k8s.io/client-go v0.32.0 h1:DimtMcnN/JIKZcrSrstiwvvZvLjG0aSxy8PxN8IChp8= +k8s.io/client-go v0.32.0/go.mod h1:boDWvdM1Drk4NJj/VddSLnx59X3OPgwrOo0vGbtq9+8= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= -k8s.io/kube-openapi v0.0.0-20240903163716-9e1beecbcb38 h1:1dWzkmJrrprYvjGwh9kEUxmcUV/CtNU8QM7h1FLWQOo= -k8s.io/kube-openapi v0.0.0-20240903163716-9e1beecbcb38/go.mod h1:coRQXBK9NxO98XUv3ZD6AK3xzHCxV6+b7lrquKwaKzA= -k8s.io/utils v0.0.0-20240921022957-49e7df575cb6 h1:MDF6h2H/h4tbzmtIKTuctcwZmY0tY9mD9fNT47QO6HI= -k8s.io/utils v0.0.0-20240921022957-49e7df575cb6/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -sigs.k8s.io/controller-runtime v0.19.1 h1:Son+Q40+Be3QWb+niBXAg2vFiYWolDjjRfO8hn/cxOk= -sigs.k8s.io/controller-runtime v0.19.1/go.mod h1:iRmWllt8IlaLjvTTDLhRBXIEtkCK6hwVBJJsYS9Ajf4= +k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y= +k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4= +k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro= +k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +sigs.k8s.io/controller-runtime v0.19.3 h1:XO2GvC9OPftRst6xWCpTgBZO04S2cbp0Qqkj8bX1sPw= +sigs.k8s.io/controller-runtime v0.19.3/go.mod h1:j4j87DqtsThvwTv5/Tc5NFRyyF/RF0ip4+62tbTSIUM= sigs.k8s.io/gateway-api v1.1.0 h1:DsLDXCi6jR+Xz8/xd0Z1PYl2Pn0TyaFMOPPZIj4inDM= sigs.k8s.io/gateway-api v1.1.0/go.mod h1:ZH4lHrL2sDi0FHZ9jjneb8kKnGzFWyrTya35sWUTrRs= -sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= -sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= -sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= +sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8= +sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo= +sigs.k8s.io/structured-merge-diff/v4 v4.4.2 h1:MdmvkGuXi/8io6ixD5wud3vOLwc1rj0aNqRlpuvjmwA= +sigs.k8s.io/structured-merge-diff/v4 v4.4.2/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/pkg/apis/pxc/v1/pxc_types.go b/pkg/apis/pxc/v1/pxc_types.go index 59fea50c2f..65f689f757 100644 --- a/pkg/apis/pxc/v1/pxc_types.go +++ b/pkg/apis/pxc/v1/pxc_types.go @@ -417,6 +417,14 @@ func (cr *PerconaXtraDBCluster) Validate() error { return errors.Errorf("ProxySQL or HAProxy should be enabled if SmartUpdate set") } + customUsers := make(map[string]int8, len(c.Users)) + for _, user := range c.Users { + customUsers[user.Name]++ + if customUsers[user.Name] > 1 { + return errors.Errorf("user %s is duplicated", user.Name) + } + } + return nil } @@ -501,6 +509,35 @@ type PodSpec struct { TopologySpreadConstraints []corev1.TopologySpreadConstraint `json:"topologySpreadConstraints,omitempty"` } +func (spec *PodSpec) HasSidecarInternalSecret(secret *corev1.Secret) bool { + if spec.Sidecars != nil { + for _, container := range spec.Sidecars { + for _, env := range container.Env { + if env.ValueFrom != nil && env.ValueFrom.SecretKeyRef != nil { + if env.ValueFrom.SecretKeyRef.Name == secret.Name { + return true + } + } + } + } + } + if spec.SidecarVolumes != nil { + for _, volume := range spec.SidecarVolumes { + if volume.Secret != nil && volume.Secret.SecretName == secret.Name { + return true + } + if volume.Projected != nil { + for _, source := range volume.Projected.Sources { + if source.Secret != nil && source.Secret.Name == secret.Name { + return true + } + } + } + } + } + return false +} + type ProxySQLSpec struct { PodSpec `json:",inline"` Expose ServiceExpose `json:"expose,omitempty"` @@ -1211,7 +1248,7 @@ func (cr *PerconaXtraDBCluster) setProbesDefaults() { } func (cr *PerconaXtraDBCluster) checkSafeDefaults() error { - if !cr.Spec.Unsafe.TLS && !cr.TLSEnabled() { + if !cr.Spec.Unsafe.TLS && !*cr.Spec.TLS.Enabled { return errors.New("TLS must be enabled. Set spec.unsafeFlags.tls to true to disable this check") } @@ -1545,6 +1582,17 @@ func (s *PerconaXtraDBClusterStatus) AddCondition(c ClusterCondition) { } } +// FindCondition finds the conditionType in conditions. +func (s *PerconaXtraDBClusterStatus) FindCondition(conditionType AppState) *ClusterCondition { + for i := range s.Conditions { + if s.Conditions[i].Type == conditionType { + return &s.Conditions[i] + } + } + + return nil +} + func (cr *PerconaXtraDBCluster) CanBackup() error { if cr.Status.Status == AppStateReady { return nil diff --git a/pkg/controller/pxc/backup.go b/pkg/controller/pxc/backup.go index fa54c92a19..29af995c76 100644 --- a/pkg/controller/pxc/backup.go +++ b/pkg/controller/pxc/backup.go @@ -48,6 +48,10 @@ func (r *ReconcilePerconaXtraDBCluster) reconcileBackups(ctx context.Context, cr if err != nil { return errors.Errorf("get binlog collector deployment for cluster '%s': %v", cr.Name, err) } + err = setControllerReference(cr, &binlogCollector, r.scheme) + if err != nil { + return errors.Wrapf(err, "set controller reference for binlog collector deployment '%s'", binlogCollector.Name) + } currentCollector := appsv1.Deployment{} err = r.client.Get(context.TODO(), types.NamespacedName{Name: binlogCollector.Name, Namespace: binlogCollector.Namespace}, ¤tCollector) diff --git a/pkg/controller/pxc/controller.go b/pkg/controller/pxc/controller.go index a139ca2775..508e11f9a1 100644 --- a/pkg/controller/pxc/controller.go +++ b/pkg/controller/pxc/controller.go @@ -33,7 +33,6 @@ import ( "github.com/percona/percona-xtradb-cluster-operator/clientcmd" api "github.com/percona/percona-xtradb-cluster-operator/pkg/apis/pxc/v1" - "github.com/percona/percona-xtradb-cluster-operator/pkg/k8s" "github.com/percona/percona-xtradb-cluster-operator/pkg/naming" "github.com/percona/percona-xtradb-cluster-operator/pkg/pxc" "github.com/percona/percona-xtradb-cluster-operator/pkg/pxc/app" @@ -225,7 +224,7 @@ func (r *ReconcilePerconaXtraDBCluster) Reconcile(ctx context.Context, request r log.Info("The finalizer delete-ssl is deprecated and will be deleted in 1.18.0. Use percona.com/delete-ssl") fallthrough case naming.FinalizerDeleteSSL: - err = r.deleteCerts(o) + err = r.deleteCerts(ctx, o) case "delete-proxysql-pvc": log.Info("The finalizer delete-proxysql-pvc is deprecated and will be deleted in 1.18.0. Use percona.com/delete-proxysql-pvc") fallthrough @@ -332,13 +331,18 @@ func (r *ReconcilePerconaXtraDBCluster) Reconcile(ctx context.Context, request r return reconcile.Result{}, errors.Wrap(err, "reconcile persistent volumes") } + err = r.reconcileSSL(ctx, o) + if err != nil { + return reconcile.Result{}, errors.Wrapf(err, "failed to reconcile SSL. Please create your TLS secret %s and %s manually or setup cert-manager correctly", o.Spec.PXC.SSLSecretName, o.Spec.PXC.SSLInternalSecretName) + } + err = r.deploy(ctx, o) if err != nil { return reconcile.Result{}, err } pxcSet := statefulset.NewNode(o) - err = r.updatePod(ctx, pxcSet, o.Spec.PXC.PodSpec, o, userReconcileResult.pxcAnnotations) + err = r.updatePod(ctx, pxcSet, o.Spec.PXC.PodSpec, o, userReconcileResult.pxcAnnotations, true) if err != nil { return reconcile.Result{}, errors.Wrap(err, "pxc upgrade error") } @@ -374,7 +378,7 @@ func (r *ReconcilePerconaXtraDBCluster) Reconcile(ctx context.Context, request r proxysqlSet := statefulset.NewProxy(o) if o.Spec.ProxySQLEnabled() { - err = r.updatePod(ctx, proxysqlSet, &o.Spec.ProxySQL.PodSpec, o, userReconcileResult.proxysqlAnnotations) + err = r.updatePod(ctx, proxysqlSet, &o.Spec.ProxySQL.PodSpec, o, userReconcileResult.proxysqlAnnotations, true) if err != nil { return reconcile.Result{}, errors.Wrap(err, "ProxySQL upgrade error") } @@ -487,7 +491,7 @@ func (r *ReconcilePerconaXtraDBCluster) reconcileHAProxy(ctx context.Context, cr } sts := statefulset.NewHAProxy(cr) - if err := r.updatePod(ctx, sts, &cr.Spec.HAProxy.PodSpec, cr, templateAnnotations); err != nil { + if err := r.updatePod(ctx, sts, &cr.Spec.HAProxy.PodSpec, cr, templateAnnotations, true); err != nil { return errors.Wrap(err, "HAProxy upgrade error") } svc := pxc.NewServiceHAProxy(cr) @@ -532,266 +536,29 @@ func (r *ReconcilePerconaXtraDBCluster) reconcileHAProxy(ctx context.Context, cr } func (r *ReconcilePerconaXtraDBCluster) deploy(ctx context.Context, cr *api.PerconaXtraDBCluster) error { - log := logf.FromContext(ctx) - - if cr.PVCResizeInProgress() { - log.V(1).Info("PVC resize in progress, skipping statefulset") - return nil - } - - stsApp := statefulset.NewNode(cr) - err := r.reconcileConfigMap(cr) - if err != nil { - return err - } - - initImageName, err := k8s.GetInitImage(ctx, cr, r.client) - if err != nil { - return errors.Wrap(err, "failed to get initImage") - } - - secretsName := cr.Spec.SecretsName - if cr.CompareVersionWith("1.6.0") >= 0 { - secretsName = "internal-" + cr.Name - } - secrets := new(corev1.Secret) - err = r.client.Get(context.TODO(), types.NamespacedName{ - Name: secretsName, Namespace: cr.Namespace, - }, secrets) - if client.IgnoreNotFound(err) != nil { - return errors.Wrap(err, "get internal secret") - } - nodeSet, err := pxc.StatefulSet(ctx, r.client, stsApp, cr.Spec.PXC.PodSpec, cr, secrets, initImageName, r.getConfigVolume) - if err != nil { - return errors.Wrap(err, "get pxc statefulset") - } - currentNodeSet := new(appsv1.StatefulSet) - err = r.client.Get(context.TODO(), types.NamespacedName{ - Namespace: nodeSet.Namespace, - Name: nodeSet.Name, - }, currentNodeSet) - if client.IgnoreNotFound(err) != nil { - return errors.Wrap(err, "get current pxc sts") - } - // Keep same volumeClaimTemplates labels if statefulset already exists. - // We can't update volumeClaimTemplates. - if err == nil && cr.CompareVersionWith("1.16.0") >= 0 { - for i, pvc := range currentNodeSet.Spec.VolumeClaimTemplates { - nodeSet.Spec.VolumeClaimTemplates[i].Labels = pvc.Labels - } - } - // TODO: code duplication with updatePod function - if nodeSet.Spec.Template.Annotations == nil { - nodeSet.Spec.Template.Annotations = make(map[string]string) - } - if v, ok := currentNodeSet.Spec.Template.Annotations["last-applied-secret"]; ok { - nodeSet.Spec.Template.Annotations["last-applied-secret"] = v - } - if cr.CompareVersionWith("1.1.0") >= 0 { - hash, err := r.getConfigHash(cr, stsApp) - if err != nil { - return errors.Wrap(err, "getting node config hash") - } - nodeSet.Spec.Template.Annotations["percona.com/configuration-hash"] = hash - } - - err = r.reconcileSSL(cr) - if err != nil { - return errors.Wrapf(err, "failed to reconcile SSL.Please create your TLS secret %s and %s manually or setup cert-manager correctly", - cr.Spec.PXC.SSLSecretName, cr.Spec.PXC.SSLInternalSecretName) - } - - sslHash, err := r.getSecretHash(cr, cr.Spec.PXC.SSLSecretName, !cr.TLSEnabled()) - if err != nil { - return errors.Wrap(err, "get secret hash") - } - if sslHash != "" && cr.CompareVersionWith("1.1.0") >= 0 { - nodeSet.Spec.Template.Annotations["percona.com/ssl-hash"] = sslHash - } - - sslInternalHash, err := r.getSecretHash(cr, cr.Spec.PXC.SSLInternalSecretName, !cr.TLSEnabled()) - if err != nil && !k8serrors.IsNotFound(err) { - return errors.Wrap(err, "get internal secret hash") - } - if sslInternalHash != "" && cr.CompareVersionWith("1.1.0") >= 0 { - nodeSet.Spec.Template.Annotations["percona.com/ssl-internal-hash"] = sslInternalHash - } - - if cr.CompareVersionWith("1.9.0") >= 0 { - envVarsHash, err := r.getSecretHash(cr, cr.Spec.PXC.EnvVarsSecretName, true) - if err != nil { - return errors.Wrap(err, "upgradePod/updateApp error: update secret error") + deployStatefulApp := func(stsApp api.StatefulApp, podSpec *api.PodSpec) error { + if err := r.updatePod(ctx, stsApp, podSpec, cr, nil, false); err != nil { + return errors.Wrapf(err, "updatePod for %s", stsApp.Name()) } - if envVarsHash != "" { - nodeSet.Spec.Template.Annotations["percona.com/env-secret-config-hash"] = envVarsHash + if err := r.reconcilePDB(ctx, cr, podSpec.PodDisruptionBudget, stsApp); err != nil { + return errors.Wrapf(err, "failed to reconcile PodDisruptionBudget for %s", stsApp.Name()) } + return nil } - vaultConfigHash, err := r.getSecretHash(cr, cr.Spec.VaultSecretName, true) - if err != nil { - return errors.Wrap(err, "get vault config hash") - } - if vaultConfigHash != "" && cr.CompareVersionWith("1.6.0") >= 0 { - nodeSet.Spec.Template.Annotations["percona.com/vault-config-hash"] = vaultConfigHash - } - nodeSet.Spec.Template.Spec.Tolerations = cr.Spec.PXC.Tolerations - err = setControllerReference(cr, nodeSet, r.scheme) - if err != nil { - return err - } - - err = r.createOrUpdate(ctx, cr, nodeSet) - if err != nil { - return errors.Wrap(err, "create newStatefulSetNode") - } - - // PodDisruptionBudget object for nodes - err = r.client.Get(ctx, types.NamespacedName{Name: nodeSet.Name, Namespace: nodeSet.Namespace}, nodeSet) - if err == nil { - err := r.reconcilePDB(ctx, cr, cr.Spec.PXC.PodDisruptionBudget, stsApp, nodeSet) - if err != nil { - return errors.Wrapf(err, "PodDisruptionBudget for %s", nodeSet.Name) - } - } else if !k8serrors.IsNotFound(err) { - return errors.Wrap(err, "get PXC stateful set") + if err := deployStatefulApp(statefulset.NewNode(cr), cr.Spec.PXC.PodSpec); err != nil { + return errors.Wrap(err, "failed to deploy pxc") } - - // HAProxy StatefulSet if cr.HAProxyEnabled() { - sfsHAProxy := statefulset.NewHAProxy(cr) - haProxySet, err := pxc.StatefulSet(ctx, r.client, sfsHAProxy, &cr.Spec.HAProxy.PodSpec, cr, secrets, initImageName, r.getConfigVolume) - if err != nil { - return errors.Wrap(err, "create HAProxy StatefulSet") - } - err = setControllerReference(cr, haProxySet, r.scheme) - if err != nil { - return err - } - - // TODO: code duplication with updatePod function - if haProxySet.Spec.Template.Annotations == nil { - haProxySet.Spec.Template.Annotations = make(map[string]string) - } - hash, err := r.getConfigHash(cr, sfsHAProxy) - if err != nil { - return errors.Wrap(err, "getting HAProxy config hash") - } - haProxySet.Spec.Template.Annotations["percona.com/configuration-hash"] = hash - if cr.CompareVersionWith("1.5.0") == 0 { - if sslHash != "" { - haProxySet.Spec.Template.Annotations["percona.com/ssl-hash"] = sslHash - } - if sslInternalHash != "" { - haProxySet.Spec.Template.Annotations["percona.com/ssl-internal-hash"] = sslInternalHash - } - } - if cr.CompareVersionWith("1.9.0") >= 0 { - envVarsHash, err := r.getSecretHash(cr, cr.Spec.HAProxy.EnvVarsSecretName, true) - if err != nil { - return errors.Wrap(err, "upgradePod/updateApp error: update secret error") - } - if envVarsHash != "" { - haProxySet.Spec.Template.Annotations["percona.com/env-secret-config-hash"] = envVarsHash - } - } - // PodDisruptionBudget object for HAProxy - currentHAProxySts := new(appsv1.StatefulSet) - err = r.client.Get(ctx, types.NamespacedName{Name: haProxySet.Name, Namespace: haProxySet.Namespace}, currentHAProxySts) - if client.IgnoreNotFound(err) != nil { - return errors.Wrap(err, "get HAProxy stateful set") - } - if err == nil { - err := r.reconcilePDB(ctx, cr, cr.Spec.HAProxy.PodDisruptionBudget, sfsHAProxy, currentHAProxySts) - if err != nil { - return errors.Wrapf(err, "PodDisruptionBudget for %s", haProxySet.Name) - } - // Keep same volumeClaimTemplates labels if statefulset already exists. - // We can't update volumeClaimTemplates. - if cr.CompareVersionWith("1.16.0") >= 0 { - for i, pvc := range currentHAProxySts.Spec.VolumeClaimTemplates { - haProxySet.Spec.VolumeClaimTemplates[i].Labels = pvc.Labels - } - } - } - - err = r.client.Create(context.TODO(), haProxySet) - if err != nil && !k8serrors.IsAlreadyExists(err) { - return errors.Wrap(err, "create newStatefulSetHAProxy") + if err := deployStatefulApp(statefulset.NewHAProxy(cr), &cr.Spec.HAProxy.PodSpec); err != nil { + return errors.Wrap(err, "failed to deploy haproxy") } } - - if cr.Spec.ProxySQLEnabled() { - sfsProxy := statefulset.NewProxy(cr) - proxySet, err := pxc.StatefulSet(ctx, r.client, sfsProxy, &cr.Spec.ProxySQL.PodSpec, cr, secrets, initImageName, r.getConfigVolume) - if err != nil { - return errors.Wrap(err, "create ProxySQL Service") - } - err = setControllerReference(cr, proxySet, r.scheme) - if err != nil { - return err - } - currentProxySet := new(appsv1.StatefulSet) - err = r.client.Get(context.TODO(), types.NamespacedName{ - Namespace: proxySet.Namespace, - Name: proxySet.Name, - }, currentProxySet) - if client.IgnoreNotFound(err) != nil { - return errors.Wrap(err, "get current proxy sts") - } - // Keep same volumeClaimTemplates labels if statefulset already exists. - // We can't update volumeClaimTemplates. - if err == nil && cr.CompareVersionWith("1.16.0") >= 0 { - for i, pvc := range currentProxySet.Spec.VolumeClaimTemplates { - proxySet.Spec.VolumeClaimTemplates[i].Labels = pvc.Labels - } - } - - // TODO: code duplication with updatePod function - if proxySet.Spec.Template.Annotations == nil { - proxySet.Spec.Template.Annotations = make(map[string]string) - } - if v, ok := currentProxySet.Spec.Template.Annotations["last-applied-secret"]; ok { - proxySet.Spec.Template.Annotations["last-applied-secret"] = v - } - if cr.CompareVersionWith("1.1.0") >= 0 { - hash, err := r.getConfigHash(cr, sfsProxy) - if err != nil { - return errors.Wrap(err, "getting proxySQL config hash") - } - proxySet.Spec.Template.Annotations["percona.com/configuration-hash"] = hash - if sslHash != "" { - proxySet.Spec.Template.Annotations["percona.com/ssl-hash"] = sslHash - } - if sslInternalHash != "" { - proxySet.Spec.Template.Annotations["percona.com/ssl-internal-hash"] = sslInternalHash - } - } - if cr.CompareVersionWith("1.9.0") >= 0 { - envVarsHash, err := r.getSecretHash(cr, cr.Spec.ProxySQL.EnvVarsSecretName, true) - if err != nil { - return errors.Wrap(err, "upgradePod/updateApp error: update secret error") - } - if envVarsHash != "" { - proxySet.Spec.Template.Annotations["percona.com/env-secret-config-hash"] = envVarsHash - } - } - err = r.client.Create(context.TODO(), proxySet) - if err != nil && !k8serrors.IsAlreadyExists(err) { - return errors.Wrap(err, "create newStatefulSetProxySQL") - } - - // PodDisruptionBudget object for ProxySQL - err = r.client.Get(ctx, types.NamespacedName{Name: proxySet.Name, Namespace: proxySet.Namespace}, proxySet) - if err == nil { - err := r.reconcilePDB(ctx, cr, cr.Spec.ProxySQL.PodDisruptionBudget, sfsProxy, proxySet) - if err != nil { - return errors.Wrapf(err, "PodDisruptionBudget for %s", proxySet.Name) - } - } else if !k8serrors.IsNotFound(err) { - return errors.Wrap(err, "get ProxySQL stateful set") + if cr.ProxySQLEnabled() { + if err := deployStatefulApp(statefulset.NewProxy(cr), &cr.Spec.ProxySQL.PodSpec); err != nil { + return errors.Wrap(err, "failed to deploy proxysql") } } - return nil } @@ -958,14 +725,21 @@ func (r *ReconcilePerconaXtraDBCluster) createHookScriptConfigMap(cr *api.Percon return nil } -func (r *ReconcilePerconaXtraDBCluster) reconcilePDB(ctx context.Context, cr *api.PerconaXtraDBCluster, spec *api.PodDisruptionBudgetSpec, sfs api.StatefulApp, owner runtime.Object) error { +func (r *ReconcilePerconaXtraDBCluster) reconcilePDB(ctx context.Context, cr *api.PerconaXtraDBCluster, spec *api.PodDisruptionBudgetSpec, sfs api.StatefulApp) error { if spec == nil { return nil } + sts := new(appsv1.StatefulSet) + if err := r.client.Get(ctx, client.ObjectKeyFromObject(sfs.StatefulSet()), sts); err != nil { + if k8serrors.IsNotFound(err) { + return nil + } + return errors.Wrap(err, "get PXC stateful set") + } + pdb := pxc.PodDisruptionBudget(cr, spec, sfs.Labels()) - err := setControllerReference(owner, pdb, r.scheme) - if err != nil { + if err := setControllerReference(sts, pdb, r.scheme); err != nil { return errors.Wrap(err, "set owner reference") } @@ -1139,19 +913,19 @@ func (r *ReconcilePerconaXtraDBCluster) deleteSecrets(cr *api.PerconaXtraDBClust return nil } -func (r *ReconcilePerconaXtraDBCluster) deleteCerts(cr *api.PerconaXtraDBCluster) error { +func (r *ReconcilePerconaXtraDBCluster) deleteCerts(ctx context.Context, cr *api.PerconaXtraDBCluster) error { issuers := []string{ cr.Name + "-pxc-ca-issuer", cr.Name + "-pxc-issuer", } for _, issuerName := range issuers { issuer := &cm.Issuer{} - err := r.client.Get(context.TODO(), types.NamespacedName{Namespace: cr.Namespace, Name: issuerName}, issuer) + err := r.client.Get(ctx, types.NamespacedName{Namespace: cr.Namespace, Name: issuerName}, issuer) if err != nil { continue } - err = r.client.Delete(context.TODO(), issuer, &client.DeleteOptions{Preconditions: &metav1.Preconditions{UID: &issuer.UID}}) + err = r.client.Delete(ctx, issuer, &client.DeleteOptions{Preconditions: &metav1.Preconditions{UID: &issuer.UID}}) if err != nil { return errors.Wrapf(err, "delete issuer %s", issuerName) } @@ -1164,12 +938,12 @@ func (r *ReconcilePerconaXtraDBCluster) deleteCerts(cr *api.PerconaXtraDBCluster } for _, certName := range certs { cert := &cm.Certificate{} - err := r.client.Get(context.TODO(), types.NamespacedName{Namespace: cr.Namespace, Name: certName}, cert) + err := r.client.Get(ctx, types.NamespacedName{Namespace: cr.Namespace, Name: certName}, cert) if err != nil { continue } - err = r.client.Delete(context.TODO(), cert, &client.DeleteOptions{Preconditions: &metav1.Preconditions{UID: &cert.UID}}) + err = r.client.Delete(ctx, cert, &client.DeleteOptions{Preconditions: &metav1.Preconditions{UID: &cert.UID}}) if err != nil { return errors.Wrapf(err, "delete certificate %s", certName) } @@ -1193,12 +967,12 @@ func (r *ReconcilePerconaXtraDBCluster) deleteCerts(cr *api.PerconaXtraDBCluster for _, secretName := range secrets { secret := &corev1.Secret{} - err := r.client.Get(context.TODO(), types.NamespacedName{Namespace: cr.Namespace, Name: secretName}, secret) + err := r.client.Get(ctx, types.NamespacedName{Namespace: cr.Namespace, Name: secretName}, secret) if err != nil { continue } - err = r.client.Delete(context.TODO(), secret, &client.DeleteOptions{Preconditions: &metav1.Preconditions{UID: &secret.UID}}) + err = r.client.Delete(ctx, secret, &client.DeleteOptions{Preconditions: &metav1.Preconditions{UID: &secret.UID}}) if err != nil { return errors.Wrapf(err, "delete secret %s", secretName) } diff --git a/pkg/controller/pxc/status.go b/pkg/controller/pxc/status.go index 77fb3bd2c2..f7f08e3dae 100644 --- a/pkg/controller/pxc/status.go +++ b/pkg/controller/pxc/status.go @@ -2,6 +2,7 @@ package pxc import ( "context" + "reflect" "time" "github.com/pkg/errors" @@ -11,6 +12,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/wait" k8sretry "k8s.io/client-go/util/retry" "sigs.k8s.io/controller-runtime/pkg/client" @@ -22,7 +24,7 @@ func (r *ReconcilePerconaXtraDBCluster) updateStatus(ctx context.Context, cr *ap clusterCondition := api.ClusterCondition{ Status: api.ConditionTrue, Type: api.AppStateInit, - LastTransitionTime: metav1.NewTime(time.Now()), + LastTransitionTime: metav1.NewTime(time.Now().Truncate(time.Second)), } if reconcileErr != nil { @@ -32,7 +34,7 @@ func (r *ReconcilePerconaXtraDBCluster) updateStatus(ctx context.Context, cr *ap Type: api.AppStateError, Message: reconcileErr.Error(), Reason: "ErrorReconcile", - LastTransitionTime: metav1.NewTime(time.Now()), + LastTransitionTime: metav1.NewTime(time.Now().Truncate(time.Second)), } cr.Status.AddCondition(clusterCondition) @@ -155,6 +157,29 @@ func (r *ReconcilePerconaXtraDBCluster) writeStatus(ctx context.Context, cr *api return r.client.Status().Update(ctx, c) }) + // We need to make sure that the next reconcile gets a PerconaXtraDBCluster with an updated status. + // Without this, the next reconcile may occur too quickly, possibly before the status is updated. + // In this case, the next reconcile may use outdated status data, + // potentially breaking functionality that depends on it, such as the reconcileTLSToggle method. + b := wait.Backoff{ + Steps: 10, + Duration: 500 * time.Millisecond, + Factor: 1.0, + } + if err := k8sretry.OnError(b, func(error) bool { return true }, func() error { + c := &api.PerconaXtraDBCluster{} + if err := r.client.Get(ctx, client.ObjectKeyFromObject(cr), c); err != nil { + return err + } + + if !reflect.DeepEqual(c.Status.Conditions, cr.Status.Conditions) { + return errors.Errorf("conditions are not equal: expected %v, have %v", cr.Status.Conditions, c.Status.Conditions) + } + return nil + }); err != nil { + return err + } + return errors.Wrap(client.IgnoreNotFound(err), "write status") } diff --git a/pkg/controller/pxc/tls.go b/pkg/controller/pxc/tls.go index 142a4139a2..3a133d2abf 100644 --- a/pkg/controller/pxc/tls.go +++ b/pkg/controller/pxc/tls.go @@ -12,27 +12,33 @@ import ( k8serr "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" + "sigs.k8s.io/controller-runtime/pkg/client" api "github.com/percona/percona-xtradb-cluster-operator/pkg/apis/pxc/v1" + "github.com/percona/percona-xtradb-cluster-operator/pkg/k8s" "github.com/percona/percona-xtradb-cluster-operator/pkg/naming" "github.com/percona/percona-xtradb-cluster-operator/pkg/pxctls" ) -func (r *ReconcilePerconaXtraDBCluster) reconcileSSL(cr *api.PerconaXtraDBCluster) error { +func (r *ReconcilePerconaXtraDBCluster) reconcileSSL(ctx context.Context, cr *api.PerconaXtraDBCluster) error { + if err := r.reconcileTLSToggle(ctx, cr); err != nil { + return errors.Wrap(err, "reconcile tls toggle") + } + if !cr.TLSEnabled() { return nil } secretObj := corev1.Secret{} secretInternalObj := corev1.Secret{} - errSecret := r.client.Get(context.TODO(), + errSecret := r.client.Get(ctx, types.NamespacedName{ Namespace: cr.Namespace, Name: cr.Spec.PXC.SSLSecretName, }, &secretObj, ) - errInternalSecret := r.client.Get(context.TODO(), + errInternalSecret := r.client.Get(ctx, types.NamespacedName{ Namespace: cr.Namespace, Name: cr.Spec.PXC.SSLInternalSecretName, @@ -331,3 +337,56 @@ func (r *ReconcilePerconaXtraDBCluster) createSSLManualy(cr *api.PerconaXtraDBCl } return nil } + +func (r *ReconcilePerconaXtraDBCluster) reconcileTLSToggle(ctx context.Context, cr *api.PerconaXtraDBCluster) error { + if cr.CompareVersionWith("1.16.0") < 0 { + return nil + } + + condition := cr.Status.FindCondition(naming.ConditionTLS) + if condition == nil { + cr.Status.AddCondition(api.ClusterCondition{ + Type: naming.ConditionTLS, + Status: api.ConditionStatus(naming.GetConditionTLSState(cr)), + LastTransitionTime: metav1.NewTime(time.Now().Truncate(time.Second)), + }) + return nil + } + + if condition.Status == api.ConditionStatus(naming.GetConditionTLSState(cr)) { + return nil + } + + clusterPaused, err := k8s.PauseCluster(ctx, r.client, cr) + if err != nil { + return errors.Wrap(err, "failed to pause cluster") + } + if !clusterPaused { + return nil + } + + switch naming.ConditionTLSState(condition.Status) { + case naming.ConditionTLSStateEnabled: + if err := r.deleteCerts(ctx, cr); err != nil { + return errors.Wrap(err, "failed to delete tls secrets") + } + case naming.ConditionTLSStateDisabled: + default: + return errors.Errorf("unknown value for %s condition status: %s", naming.ConditionTLS, condition.Status) + } + + patch := client.MergeFrom(cr.DeepCopy()) + cr.Spec.Unsafe.TLS = !*cr.Spec.TLS.Enabled + if err := r.client.Patch(ctx, cr.DeepCopy(), patch); err != nil { + return errors.Wrap(err, "failed to patch cr") + } + + _, err = k8s.UnpauseCluster(ctx, r.client, cr) + if err != nil { + return errors.Wrap(err, "failed to start cluster") + } + + condition.Status = api.ConditionStatus(naming.GetConditionTLSState(cr)) + condition.LastTransitionTime = metav1.NewTime(time.Now().Truncate(time.Second)) + return nil +} diff --git a/pkg/controller/pxc/upgrade.go b/pkg/controller/pxc/upgrade.go index 85fcbc1702..0c232e2a42 100644 --- a/pkg/controller/pxc/upgrade.go +++ b/pkg/controller/pxc/upgrade.go @@ -29,7 +29,7 @@ import ( "github.com/percona/percona-xtradb-cluster-operator/pkg/util" ) -func (r *ReconcilePerconaXtraDBCluster) updatePod(ctx context.Context, sfs api.StatefulApp, podSpec *api.PodSpec, cr *api.PerconaXtraDBCluster, newAnnotations map[string]string) error { +func (r *ReconcilePerconaXtraDBCluster) updatePod(ctx context.Context, sfs api.StatefulApp, podSpec *api.PodSpec, cr *api.PerconaXtraDBCluster, newAnnotations map[string]string, smartUpdate bool) error { log := logf.FromContext(ctx) if cr.PVCResizeInProgress() { @@ -43,7 +43,6 @@ func (r *ReconcilePerconaXtraDBCluster) updatePod(ctx context.Context, sfs api.S } // embed DB configuration hash - // TODO: code duplication with deploy function configHash, err := r.getConfigHash(cr, sfs) if err != nil { return errors.Wrap(err, "getting config hash") @@ -97,18 +96,17 @@ func (r *ReconcilePerconaXtraDBCluster) updatePod(ctx context.Context, sfs api.S } err = k8sretry.RetryOnConflict(k8sretry.DefaultRetry, func() error { - sts, err := pxc.StatefulSet(ctx, r.client, sfs, podSpec, cr, secrets, initImageName, r.getConfigVolume) - if err != nil { - return errors.Wrap(err, "construct statefulset") - } - if err = setControllerReference(cr, sts, r.scheme); err != nil { - return errors.Wrap(err, "set controller reference") + currentSet := sfs.StatefulSet() + err := r.client.Get(ctx, client.ObjectKeyFromObject(currentSet), currentSet) + if client.IgnoreNotFound(err) != nil { + return errors.Wrap(err, "failed to get statefulset") } + annotations := currentSet.Spec.Template.Annotations + labels := currentSet.Spec.Template.Labels - currentSet := sfs.StatefulSet() - err = r.client.Get(ctx, types.NamespacedName{Name: currentSet.Name, Namespace: currentSet.Namespace}, currentSet) + sts, err := pxc.StatefulSet(ctx, r.client, sfs, podSpec, cr, secrets, initImageName, r.getConfigVolume) if err != nil { - return errors.Wrap(err, "failed to get statefulset") + return errors.Wrap(err, "construct statefulset") } // Keep same volumeClaimTemplates labels if statefulset already exists. // We can't update volumeClaimTemplates. @@ -118,13 +116,10 @@ func (r *ReconcilePerconaXtraDBCluster) updatePod(ctx context.Context, sfs api.S } } - annotations := currentSet.Spec.Template.Annotations - labels := currentSet.Spec.Template.Labels - - // support annotation adjustements - util.MergeMaps(annotations, sts.Spec.Template.Annotations, newAnnotations) - - util.MergeMaps(labels, sts.Spec.Template.Labels) + // If currentSet is not found, both annotations and labels will be nil. + // In such cases, MergeMaps will initialize a new map and return it. + annotations = util.MergeMaps(annotations, sts.Spec.Template.Annotations, newAnnotations) + labels = util.MergeMaps(labels, sts.Spec.Template.Labels) for k, v := range hashAnnotations { if v != "" || k == "percona.com/configuration-hash" { @@ -134,6 +129,10 @@ func (r *ReconcilePerconaXtraDBCluster) updatePod(ctx context.Context, sfs api.S sts.Spec.Template.Annotations = annotations sts.Spec.Template.Labels = labels + + if err := setControllerReference(cr, sts, r.scheme); err != nil { + return errors.Wrap(err, "set controller reference") + } err = r.createOrUpdate(ctx, cr, sts) if err != nil { return errors.Wrap(err, "update error") @@ -148,7 +147,13 @@ func (r *ReconcilePerconaXtraDBCluster) updatePod(ctx context.Context, sfs api.S return nil } - return r.smartUpdate(ctx, sfs, cr) + if smartUpdate { + if err := r.smartUpdate(ctx, sfs, cr); err != nil { + return errors.Wrap(err, "smart update") + } + } + + return nil } func (r *ReconcilePerconaXtraDBCluster) smartUpdate(ctx context.Context, sfs api.StatefulApp, cr *api.PerconaXtraDBCluster) error { diff --git a/pkg/controller/pxc/users.go b/pkg/controller/pxc/users.go index 55d4a99f57..f2d5ef266f 100644 --- a/pkg/controller/pxc/users.go +++ b/pkg/controller/pxc/users.go @@ -475,6 +475,9 @@ func (r *ReconcilePerconaXtraDBCluster) handleMonitorUser(ctx context.Context, c if cr.Spec.PMM != nil && cr.Spec.PMM.IsEnabled(internalSecrets) { actions.restartPXC = true } + if cr.Spec.PXC.Sidecars != nil && cr.Spec.PXC.HasSidecarInternalSecret(internalSecrets) { + actions.restartPXC = true + } err = r.discardOldPassword(cr, secrets, internalSecrets, user) if err != nil { diff --git a/pkg/controller/pxc/users_custom.go b/pkg/controller/pxc/users_custom.go index 85efb9f883..0dc8803746 100644 --- a/pkg/controller/pxc/users_custom.go +++ b/pkg/controller/pxc/users_custom.go @@ -51,6 +51,11 @@ func (r *ReconcilePerconaXtraDBCluster) reconcileCustomUsers(ctx context.Context sysUserNames := sysUserNames() for _, user := range cr.Spec.Users { + if user.Name == "" { + log.Error(nil, "user name is not set", "user", user) + continue + } + if _, ok := sysUserNames[user.Name]; ok { log.Error(nil, "creating user with reserved user name is forbidden", "user", user.Name) continue @@ -91,7 +96,13 @@ func (r *ReconcilePerconaXtraDBCluster) reconcileCustomUsers(ctx context.Context annotationKey := fmt.Sprintf("percona.com/%s-%s-hash", cr.Name, user.Name) - if userPasswordChanged(userSecret, annotationKey, userSecretPassKey) { + u, err := um.GetUser(ctx, user.Name) + if err != nil { + log.Error(err, "failed to get user", "user", user) + continue + } + + if userPasswordChanged(userSecret, u, annotationKey, userSecretPassKey) { log.Info("User password changed", "user", user.Name) err := um.UpsertUser(ctx, alterUserQuery(&user), string(userSecret.Data[userSecretPassKey])) @@ -109,12 +120,6 @@ func (r *ReconcilePerconaXtraDBCluster) reconcileCustomUsers(ctx context.Context log.Info("User password updated", "user", user.Name) } - u, err := um.GetUser(ctx, user.Name) - if err != nil { - log.Error(err, "failed to get user", "user", user) - continue - } - if userChanged(u, &user, log) { log.Info("Creating/updating user", "user", user.Name) @@ -165,18 +170,19 @@ func generateUserPass( return nil } -func userPasswordChanged(secret *corev1.Secret, key, passKey string) bool { +func userPasswordChanged(secret *corev1.Secret, dbUser *users.User, key, passKey string) bool { if secret.Annotations == nil { return false } hash, ok := secret.Annotations[key] if !ok { - return false + // If annotation is not present in the secret and the user is created (not nil), + // we assume that password has changed. + return dbUser != nil } newHash := sha256Hash(secret.Data[passKey]) - return hash != newHash } @@ -188,16 +194,6 @@ func userChanged(current *users.User, desired *api.User, log logr.Logger) bool { return true } - if len(current.Hosts) != len(desired.Hosts) { - log.Info("Hosts changed", "current", current.Hosts, "desired", desired.Hosts, "user", userName) - return true - } - - if len(current.DBs) != len(desired.DBs) { - log.Info("DBs changed", "current", current.DBs, "desired", desired.DBs) - return true - } - for _, u := range desired.Hosts { if !current.Hosts.Has(u) { log.Info("Hosts changed", "current", current.Hosts, "desired", desired.Hosts, "user", userName) diff --git a/pkg/controller/pxc/users_without_dp.go b/pkg/controller/pxc/users_without_dp.go index 3aea25076c..381d9979f2 100644 --- a/pkg/controller/pxc/users_without_dp.go +++ b/pkg/controller/pxc/users_without_dp.go @@ -249,6 +249,9 @@ func (r *ReconcilePerconaXtraDBCluster) handleMonitorUserWithoutDP(ctx context.C if cr.Spec.PMM != nil && cr.Spec.PMM.IsEnabled(internalSecrets) { actions.restartPXC = true } + if cr.Spec.PXC.Sidecars != nil && cr.Spec.PXC.HasSidecarInternalSecret(internalSecrets) { + actions.restartPXC = true + } orig := internalSecrets.DeepCopy() internalSecrets.Data[user.Name] = secrets.Data[user.Name] diff --git a/pkg/controller/pxc/version.go b/pkg/controller/pxc/version.go index d239f350f4..e922cf6cff 100644 --- a/pkg/controller/pxc/version.go +++ b/pkg/controller/pxc/version.go @@ -237,17 +237,18 @@ func (r *ReconcilePerconaXtraDBCluster) getNewVersions(ctx context.Context, cr * } vm := versionMeta{ - Apply: cr.Spec.UpgradeOptions.Apply, - Platform: string(cr.Spec.Platform), - KubeVersion: r.serverVersion.Info.GitVersion, - PXCVersion: cr.Status.PXC.Version, - PMMVersion: cr.Status.PMM.Version, - HAProxyVersion: cr.Status.HAProxy.Version, - ProxySQLVersion: cr.Status.ProxySQL.Version, - BackupVersion: cr.Status.Backup.Version, - LogCollectorVersion: cr.Status.LogCollector.Version, - CRUID: string(cr.GetUID()), - ClusterWideEnabled: watchNs == "", + Apply: cr.Spec.UpgradeOptions.Apply, + Platform: string(cr.Spec.Platform), + KubeVersion: r.serverVersion.Info.GitVersion, + PXCVersion: cr.Status.PXC.Version, + PMMVersion: cr.Status.PMM.Version, + HAProxyVersion: cr.Status.HAProxy.Version, + ProxySQLVersion: cr.Status.ProxySQL.Version, + BackupVersion: cr.Status.Backup.Version, + LogCollectorVersion: cr.Status.LogCollector.Version, + CRUID: string(cr.GetUID()), + ClusterWideEnabled: watchNs == "", + UserManagementEnabled: len(cr.Spec.Users) > 0, } endpoint := apiv1.GetDefaultVersionServiceEndpoint() diff --git a/pkg/controller/pxc/volumes.go b/pkg/controller/pxc/volumes.go index d7a705766e..518800bff9 100644 --- a/pkg/controller/pxc/volumes.go +++ b/pkg/controller/pxc/volumes.go @@ -226,7 +226,7 @@ func (r *ReconcilePerconaXtraDBCluster) reconcilePersistentVolumes(ctx context.C return nil } - if cr.CompareVersionWith("1.16.0") >= 0 && !cr.Spec.VolumeExpansionEnabled { + if !cr.Spec.VolumeExpansionEnabled { // If expansion is disabled we should keep the old value cr.Spec.PXC.VolumeSpec.PersistentVolumeClaim.Resources.Requests[corev1.ResourceStorage] = configured return nil diff --git a/pkg/controller/pxc/vs.go b/pkg/controller/pxc/vs.go index 8356b917ee..577e1114e9 100644 --- a/pkg/controller/pxc/vs.go +++ b/pkg/controller/pxc/vs.go @@ -31,22 +31,23 @@ func (vs VersionServiceClient) GetExactVersion(cr *api.PerconaXtraDBCluster, end }) applyParams := &version_service.VersionServiceApplyParams{ - Apply: vm.Apply, - BackupVersion: &vm.BackupVersion, - CustomResourceUID: &vm.CRUID, - DatabaseVersion: &vm.PXCVersion, - HaproxyVersion: &vm.HAProxyVersion, - KubeVersion: &vm.KubeVersion, - LogCollectorVersion: &vm.LogCollectorVersion, - NamespaceUID: new(string), - OperatorVersion: cr.Spec.CRVersion, - Platform: &vm.Platform, - PmmVersion: &vm.PMMVersion, - Product: productName, - ProxysqlVersion: &vm.ProxySQLVersion, - Context: nil, - ClusterWideEnabled: &vm.ClusterWideEnabled, - HTTPClient: &http.Client{Timeout: 10 * time.Second}, + Apply: vm.Apply, + BackupVersion: &vm.BackupVersion, + CustomResourceUID: &vm.CRUID, + DatabaseVersion: &vm.PXCVersion, + HaproxyVersion: &vm.HAProxyVersion, + KubeVersion: &vm.KubeVersion, + LogCollectorVersion: &vm.LogCollectorVersion, + NamespaceUID: new(string), + OperatorVersion: cr.Spec.CRVersion, + Platform: &vm.Platform, + PmmVersion: &vm.PMMVersion, + Product: productName, + ProxysqlVersion: &vm.ProxySQLVersion, + Context: nil, + ClusterWideEnabled: &vm.ClusterWideEnabled, + HTTPClient: &http.Client{Timeout: 10 * time.Second}, + UserManagementEnabled: &vm.UserManagementEnabled, } applyParams = applyParams.WithTimeout(10 * time.Second) @@ -151,15 +152,16 @@ type VersionServiceClient struct { } type versionMeta struct { - Apply string - PXCVersion string - KubeVersion string - Platform string - PMMVersion string - BackupVersion string - ProxySQLVersion string - HAProxyVersion string - LogCollectorVersion string - CRUID string - ClusterWideEnabled bool + Apply string + PXCVersion string + KubeVersion string + Platform string + PMMVersion string + BackupVersion string + ProxySQLVersion string + HAProxyVersion string + LogCollectorVersion string + CRUID string + ClusterWideEnabled bool + UserManagementEnabled bool } diff --git a/pkg/controller/pxcbackup/controller.go b/pkg/controller/pxcbackup/controller.go index fb354bfd70..c4ae96379d 100644 --- a/pkg/controller/pxcbackup/controller.go +++ b/pkg/controller/pxcbackup/controller.go @@ -166,7 +166,7 @@ func (r *ReconcilePerconaXtraDBClusterBackup) Reconcile(ctx context.Context, req } if !cluster.Spec.Backup.GetAllowParallel() { - isRunning, err := r.isOtherBackupRunning(ctx, cr) + isRunning, err := r.isOtherBackupRunning(ctx, cr, cluster) if err != nil { return rr, errors.Wrap(err, "failed to check if other backups running") } @@ -546,21 +546,21 @@ func setControllerReference(cr *api.PerconaXtraDBClusterBackup, obj metav1.Objec return nil } -func (r *ReconcilePerconaXtraDBClusterBackup) isOtherBackupRunning(ctx context.Context, cr *api.PerconaXtraDBClusterBackup) (bool, error) { +func (r *ReconcilePerconaXtraDBClusterBackup) isOtherBackupRunning(ctx context.Context, cr *api.PerconaXtraDBClusterBackup, cluster *api.PerconaXtraDBCluster) (bool, error) { list := new(batchv1.JobList) - lbls := map[string]string{ - "type": "xtrabackup", - "cluster": cr.Spec.PXCCluster, - } if err := r.client.List(ctx, list, &client.ListOptions{ - Namespace: cr.Namespace, - LabelSelector: labels.SelectorFromSet(lbls), + Namespace: cluster.Namespace, + LabelSelector: labels.SelectorFromSet(naming.LabelsBackup(cluster)), }); err != nil { return false, errors.Wrap(err, "list jobs") } for _, job := range list.Items { - if job.Labels["backup-name"] == cr.Name || job.Labels["backup-name"] == "" { + backupNameLabelKey := naming.LabelPerconaBackupName + if cluster.CompareVersionWith("1.16.0") < 0 { + backupNameLabelKey = "backup-name" + } + if job.Labels[backupNameLabelKey] == cr.Name { continue } if job.Status.Active == 0 && (jobSucceded(&job) || jobFailed(&job)) { diff --git a/pkg/controller/pxcrestore/controller.go b/pkg/controller/pxcrestore/controller.go index 07280a42dc..fc92370598 100644 --- a/pkg/controller/pxcrestore/controller.go +++ b/pkg/controller/pxcrestore/controller.go @@ -3,7 +3,6 @@ package pxcrestore import ( "context" "fmt" - "strings" "time" "github.com/pkg/errors" @@ -14,7 +13,6 @@ import ( "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - k8sretry "k8s.io/client-go/util/retry" "sigs.k8s.io/controller-runtime/pkg/builder" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/handler" @@ -24,8 +22,7 @@ import ( "github.com/percona/percona-xtradb-cluster-operator/clientcmd" api "github.com/percona/percona-xtradb-cluster-operator/pkg/apis/pxc/v1" - "github.com/percona/percona-xtradb-cluster-operator/pkg/pxc/app" - "github.com/percona/percona-xtradb-cluster-operator/pkg/pxc/app/statefulset" + "github.com/percona/percona-xtradb-cluster-operator/pkg/k8s" "github.com/percona/percona-xtradb-cluster-operator/pkg/pxc/backup" "github.com/percona/percona-xtradb-cluster-operator/pkg/pxc/backup/storage" "github.com/percona/percona-xtradb-cluster-operator/version" @@ -201,7 +198,7 @@ func (r *ReconcilePerconaXtraDBClusterRestore) Reconcile(ctx context.Context, re err = errors.Wrap(err, "set status") return rr, err } - err = r.stopCluster(cluster.DeepCopy()) + err = k8s.PauseClusterWithWait(ctx, r.client, cluster, true) if err != nil { err = errors.Wrapf(err, "stop cluster %s", cluster.Name) return rr, err @@ -252,7 +249,7 @@ func (r *ReconcilePerconaXtraDBClusterRestore) Reconcile(ctx context.Context, re cluster.Spec.HAProxy.Size = 0 } - if err := r.startCluster(cluster); err != nil { + if err := k8s.UnpauseClusterWithWait(ctx, r.client, cluster); err != nil { return rr, errors.Wrap(err, "restart cluster for pitr") } @@ -286,7 +283,7 @@ func (r *ReconcilePerconaXtraDBClusterRestore) Reconcile(ctx context.Context, re } } - err = r.startCluster(clusterOrig) + err = k8s.UnpauseClusterWithWait(ctx, r.client, clusterOrig) if err != nil { err = errors.Wrap(err, "restart cluster") return rr, err @@ -336,100 +333,6 @@ If everything is fine, you can cleanup the job: $ kubectl delete pxc-restore/%s ` -func (r *ReconcilePerconaXtraDBClusterRestore) stopCluster(c *api.PerconaXtraDBCluster) error { - var gracePeriodSec int64 - - if c.Spec.PXC != nil && c.Spec.PXC.TerminationGracePeriodSeconds != nil { - gracePeriodSec = int64(c.Spec.PXC.Size) * *c.Spec.PXC.TerminationGracePeriodSeconds - } - - patch := client.MergeFrom(c.DeepCopy()) - c.Spec.Pause = true - err := r.client.Patch(context.TODO(), c, patch) - if err != nil { - return errors.Wrap(err, "shutdown pods") - } - - ls := statefulset.NewNode(c).Labels() - err = r.waitForPodsShutdown(ls, c.Namespace, gracePeriodSec) - if err != nil { - return errors.Wrap(err, "shutdown pods") - } - - pvcs := corev1.PersistentVolumeClaimList{} - err = r.client.List( - context.TODO(), - &pvcs, - &client.ListOptions{ - Namespace: c.Namespace, - LabelSelector: labels.SelectorFromSet(ls), - }, - ) - if err != nil { - return errors.Wrap(err, "get pvc list") - } - - pxcNode := statefulset.NewNode(c) - pvcNameTemplate := app.DataVolumeName + "-" + pxcNode.StatefulSet().Name - for _, pvc := range pvcs.Items { - // check prefix just in case, to be sure we're not going to delete a wrong pvc - if pvc.Name == pvcNameTemplate+"-0" || !strings.HasPrefix(pvc.Name, pvcNameTemplate) { - continue - } - - err = r.client.Delete(context.TODO(), &pvc) - if err != nil { - return errors.Wrap(err, "delete pvc") - } - } - - err = r.waitForPVCShutdown(ls, c.Namespace) - if err != nil { - return errors.Wrap(err, "shutdown pvc") - } - - return nil -} - -func (r *ReconcilePerconaXtraDBClusterRestore) startCluster(cr *api.PerconaXtraDBCluster) (err error) { - // tryin several times just to avoid possible conflicts with the main controller - err = k8sretry.RetryOnConflict(k8sretry.DefaultRetry, func() error { - // need to get the object with latest version of meta-data for update - current := &api.PerconaXtraDBCluster{} - rerr := r.client.Get(context.TODO(), types.NamespacedName{Name: cr.Name, Namespace: cr.Namespace}, current) - if rerr != nil { - return errors.Wrap(err, "get cluster") - } - current.Spec = cr.Spec - return r.client.Update(context.TODO(), current) - }) - if err != nil { - return errors.Wrap(err, "update cluster") - } - - // give time for process new state - time.Sleep(10 * time.Second) - - var waitLimit int32 = 2 * 60 * 60 // 2 hours - if cr.Spec.PXC.LivenessInitialDelaySeconds != nil { - waitLimit = *cr.Spec.PXC.LivenessInitialDelaySeconds * cr.Spec.PXC.Size - } - - for i := int32(0); i < waitLimit; i++ { - current := &api.PerconaXtraDBCluster{} - err = r.client.Get(context.TODO(), types.NamespacedName{Name: cr.Name, Namespace: cr.Namespace}, current) - if err != nil { - return errors.Wrap(err, "get cluster") - } - if current.Status.ObservedGeneration == current.Generation && current.Status.PXC.Status == api.AppStateReady { - return nil - } - time.Sleep(time.Second * 1) - } - - return errors.Errorf("exceeded wait limit") -} - const waitLimitSec int64 = 300 func (r *ReconcilePerconaXtraDBClusterRestore) waitForPodsShutdown(ls map[string]string, namespace string, gracePeriodSec int64) error { diff --git a/pkg/k8s/cluster.go b/pkg/k8s/cluster.go new file mode 100644 index 0000000000..85054b313a --- /dev/null +++ b/pkg/k8s/cluster.go @@ -0,0 +1,239 @@ +package k8s + +import ( + "context" + "strings" + "time" + + "github.com/pkg/errors" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/types" + k8sretry "k8s.io/client-go/util/retry" + "sigs.k8s.io/controller-runtime/pkg/client" + + api "github.com/percona/percona-xtradb-cluster-operator/pkg/apis/pxc/v1" + "github.com/percona/percona-xtradb-cluster-operator/pkg/pxc/app" + "github.com/percona/percona-xtradb-cluster-operator/pkg/pxc/app/statefulset" +) + +func PauseCluster(ctx context.Context, cl client.Client, cr *api.PerconaXtraDBCluster) (bool, error) { + if !cr.Spec.Pause { + cr := cr.DeepCopy() // calling patch will overwrite cr, removing values set by CheckNsetDefaults. We need to copy it into a new variable + + patch := client.MergeFrom(cr.DeepCopy()) + cr.Spec.Pause = true + err := cl.Patch(ctx, cr, patch) + if err != nil { + return false, errors.Wrap(err, "shutdown pods") + } + time.Sleep(time.Second) + } + cr.Spec.Pause = true + + pods := corev1.PodList{} + + ls := statefulset.NewNode(cr).Labels() + if err := cl.List( + ctx, + &pods, + &client.ListOptions{ + Namespace: cr.Namespace, + LabelSelector: labels.SelectorFromSet(ls), + }, + ); err != nil { + return false, errors.Wrap(err, "get pods list") + } + + if len(pods.Items) != 0 { + return false, nil + } + + return true, nil +} + +func UnpauseCluster(ctx context.Context, cl client.Client, cr *api.PerconaXtraDBCluster) (bool, error) { + if cr.Spec.Pause { + cr := cr.DeepCopy() // calling patch will overwrite cr, removing values set by CheckNsetDefaults. We need to copy it into a new variable + + patch := client.MergeFrom(cr.DeepCopy()) + cr.Spec.Pause = false + err := cl.Patch(ctx, cr, patch) + if err != nil { + return false, errors.Wrap(err, "patch") + } + } + cr.Spec.Pause = false + + ls := statefulset.NewNode(cr).Labels() + pods := new(corev1.PodList) + if err := cl.List( + ctx, + pods, + &client.ListOptions{ + Namespace: cr.Namespace, + LabelSelector: labels.SelectorFromSet(ls), + }, + ); err != nil { + return false, errors.Wrap(err, "get pods list") + } + + if len(pods.Items) != int(cr.Spec.PXC.Size) { + return false, nil + } + + return true, nil +} + +// Deprecated: PauseClusterWithWait is a function which blocks reconcile process. Use PauseCluster instead +func PauseClusterWithWait(ctx context.Context, cl client.Client, cr *api.PerconaXtraDBCluster, deletePVC bool) error { + cr = cr.DeepCopy() + var gracePeriodSec int64 + + if cr.Spec.PXC != nil && cr.Spec.PXC.TerminationGracePeriodSeconds != nil { + gracePeriodSec = int64(cr.Spec.PXC.Size) * *cr.Spec.PXC.TerminationGracePeriodSeconds + } + + patch := client.MergeFrom(cr.DeepCopy()) + cr.Spec.Pause = true + err := cl.Patch(ctx, cr, patch) + if err != nil { + return errors.Wrap(err, "shutdown pods") + } + + ls := statefulset.NewNode(cr).Labels() + err = waitForPodsShutdown(ctx, cl, ls, cr.Namespace, gracePeriodSec) + if err != nil { + return errors.Wrap(err, "shutdown pods") + } + if !deletePVC { + return nil + } + + pvcs := corev1.PersistentVolumeClaimList{} + err = cl.List( + ctx, + &pvcs, + &client.ListOptions{ + Namespace: cr.Namespace, + LabelSelector: labels.SelectorFromSet(ls), + }, + ) + if err != nil { + return errors.Wrap(err, "get pvc list") + } + pxcNode := statefulset.NewNode(cr) + pvcNameTemplate := app.DataVolumeName + "-" + pxcNode.StatefulSet().Name + for _, pvc := range pvcs.Items { + // check prefix just in case, to be sure we're not going to delete a wrong pvc + if pvc.Name == pvcNameTemplate+"-0" || !strings.HasPrefix(pvc.Name, pvcNameTemplate) { + continue + } + + err = cl.Delete(ctx, &pvc) + if err != nil { + return errors.Wrap(err, "delete pvc") + } + } + + err = waitForPVCShutdown(ctx, cl, ls, cr.Namespace) + if err != nil { + return errors.Wrap(err, "shutdown pvc") + } + + return nil +} + +func waitForPodsShutdown(ctx context.Context, cl client.Client, ls map[string]string, namespace string, gracePeriodSec int64) error { + for i := int64(0); i < waitLimitSec+gracePeriodSec; i++ { + pods := corev1.PodList{} + + err := cl.List( + ctx, + &pods, + &client.ListOptions{ + Namespace: namespace, + LabelSelector: labels.SelectorFromSet(ls), + }, + ) + if err != nil { + return errors.Wrap(err, "get pods list") + } + + if len(pods.Items) == 0 { + return nil + } + + time.Sleep(time.Second * 1) + } + + return errors.Errorf("exceeded wait limit") +} + +const waitLimitSec int64 = 300 + +func waitForPVCShutdown(ctx context.Context, cl client.Client, ls map[string]string, namespace string) error { + for i := int64(0); i < waitLimitSec; i++ { + pvcs := corev1.PersistentVolumeClaimList{} + + err := cl.List( + ctx, + &pvcs, + &client.ListOptions{ + Namespace: namespace, + LabelSelector: labels.SelectorFromSet(ls), + }, + ) + if err != nil { + return errors.Wrap(err, "get pvc list") + } + + if len(pvcs.Items) == 1 { + return nil + } + + time.Sleep(time.Second * 1) + } + + return errors.Errorf("exceeded wait limit") +} + +// Deprecated: UnpauseClusterWithWait is a function which blocks reconcile process. Use UnpauseCluster instead +func UnpauseClusterWithWait(ctx context.Context, cl client.Client, cr *api.PerconaXtraDBCluster) (err error) { + // tryin several times just to avoid possible conflicts with the main controller + err = k8sretry.RetryOnConflict(k8sretry.DefaultRetry, func() error { + // need to get the object with latest version of meta-data for update + current := new(api.PerconaXtraDBCluster) + rerr := cl.Get(ctx, types.NamespacedName{Name: cr.Name, Namespace: cr.Namespace}, current) + if rerr != nil { + return errors.Wrap(err, "get cluster") + } + current.Spec = cr.Spec + return cl.Update(ctx, current) + }) + if err != nil { + return errors.Wrap(err, "update cluster") + } + + // give time for process new state + time.Sleep(10 * time.Second) + + var waitLimit int32 = 2 * 60 * 60 // 2 hours + if cr.Spec.PXC.LivenessInitialDelaySeconds != nil { + waitLimit = *cr.Spec.PXC.LivenessInitialDelaySeconds * cr.Spec.PXC.Size + } + + for i := int32(0); i < waitLimit; i++ { + current := new(api.PerconaXtraDBCluster) + err = cl.Get(ctx, types.NamespacedName{Name: cr.Name, Namespace: cr.Namespace}, current) + if err != nil { + return errors.Wrap(err, "get cluster") + } + if current.Status.ObservedGeneration == current.Generation && current.Status.PXC.Status == api.AppStateReady { + return nil + } + time.Sleep(time.Second * 1) + } + + return errors.Errorf("exceeded wait limit") +} diff --git a/pkg/naming/backup.go b/pkg/naming/backup.go index ec7957d5d6..c7e876d03e 100644 --- a/pkg/naming/backup.go +++ b/pkg/naming/backup.go @@ -52,23 +52,22 @@ func trimJobName(name string) string { } func ScheduledBackupName(crName, storageName, schedule string) string { - result := "cron-" + result := "cron" if len(crName) > 16 { - result += crName[:16] + result += "-" + crName[:16] } else { - result += crName + result += "-" + crName } if len(storageName) > 16 { - result += storageName[:16] + result += "-" + storageName[:16] } else { - result += storageName + result += "-" + storageName } - result += "-" + storageName + "-" tnow := time.Now() - result += fmt.Sprintf("%d%d%d%d%d%d", tnow.Year(), tnow.Month(), tnow.Day(), tnow.Hour(), tnow.Minute(), tnow.Second()) + result += "-" + fmt.Sprintf("%d%d%d%d%d%d", tnow.Year(), tnow.Month(), tnow.Day(), tnow.Hour(), tnow.Minute(), tnow.Second()) result += "-" + strconv.FormatUint(uint64(crc32.ChecksumIEEE([]byte(schedule))), 32)[:5] return result } diff --git a/pkg/naming/condition.go b/pkg/naming/condition.go new file mode 100644 index 0000000000..0b8a79524a --- /dev/null +++ b/pkg/naming/condition.go @@ -0,0 +1,21 @@ +package naming + +import ( + api "github.com/percona/percona-xtradb-cluster-operator/pkg/apis/pxc/v1" +) + +const ConditionTLS api.AppState = "tls" + +type ConditionTLSState string + +const ( + ConditionTLSStateEnabled ConditionTLSState = "enabled" + ConditionTLSStateDisabled ConditionTLSState = "disabled" +) + +func GetConditionTLSState(cr *api.PerconaXtraDBCluster) ConditionTLSState { + if *cr.Spec.TLS.Enabled { + return ConditionTLSStateEnabled + } + return ConditionTLSStateDisabled +} diff --git a/pkg/naming/labels.go b/pkg/naming/labels.go index 56d0d08b5e..8fe38bd668 100644 --- a/pkg/naming/labels.go +++ b/pkg/naming/labels.go @@ -126,25 +126,34 @@ func LabelsScheduledBackup(cluster *api.PerconaXtraDBCluster, ancestor string) m return labels } +func LabelsBackup(cluster *api.PerconaXtraDBCluster) map[string]string { + if cluster.CompareVersionWith("1.16.0") < 0 { + return map[string]string{ + "type": "xtrabackup", + "cluster": cluster.Name, + } + } + return map[string]string{ + LabelPerconaBackupType: "xtrabackup", + LabelPerconaClusterName: cluster.Name, + } +} + func LabelsBackupJob(cr *api.PerconaXtraDBClusterBackup, cluster *api.PerconaXtraDBCluster, jobName string) map[string]string { labels := make(map[string]string) util.MergeMaps(labels, cluster.Spec.Backup.Storages[cr.Spec.StorageName].Labels) if cluster.CompareVersionWith("1.16.0") < 0 { - util.MergeMaps(labels, map[string]string{ - "type": "xtrabackup", - "cluster": cr.Spec.PXCCluster, + util.MergeMaps(labels, LabelsBackup(cluster), map[string]string{ "backup-name": cr.Name, "job-name": jobName, }) - } else { - util.MergeMaps(labels, LabelsCluster(cluster), map[string]string{ - LabelPerconaBackupType: "xtrabackup", - LabelPerconaClusterName: cr.Spec.PXCCluster, - LabelPerconaBackupName: cr.Name, - LabelPerconaBackupJobName: jobName, - }) + return labels } + util.MergeMaps(labels, LabelsCluster(cluster), LabelsBackup(cluster), map[string]string{ + LabelPerconaBackupName: cr.Name, + LabelPerconaBackupJobName: jobName, + }) return labels } diff --git a/pkg/pxc/app/pvc.go b/pkg/pxc/app/pvc.go index 9f706ea10a..32e9566538 100644 --- a/pkg/pxc/app/pvc.go +++ b/pkg/pxc/app/pvc.go @@ -1,9 +1,10 @@ package app import ( - api "github.com/percona/percona-xtradb-cluster-operator/pkg/apis/pxc/v1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + api "github.com/percona/percona-xtradb-cluster-operator/pkg/apis/pxc/v1" ) // PVCs returns the list of PersistentVolumeClaims for the pod diff --git a/pkg/pxc/app/statefulset/node.go b/pkg/pxc/app/statefulset/node.go index 938bb56989..8995744c05 100644 --- a/pkg/pxc/app/statefulset/node.go +++ b/pkg/pxc/app/statefulset/node.go @@ -255,7 +255,7 @@ func (c *Node) AppContainer(spec *api.PodSpec, secrets string, cr *api.PerconaXt if cr.CompareVersionWith("1.16.0") >= 0 { appc.Env = append(appc.Env, []corev1.EnvVar{ { - Name: "NOTIFY_SOCKET", + Name: "MYSQL_NOTIFY_SOCKET", Value: "/var/lib/mysql/notify.sock", }, { diff --git a/pkg/pxc/users/users.go b/pkg/pxc/users/users.go index 4bf2218837..ec1555ae2c 100644 --- a/pkg/pxc/users/users.go +++ b/pkg/pxc/users/users.go @@ -335,6 +335,8 @@ func (p *Manager) GetUser(ctx context.Context, user string) (*User, error) { if err != nil { return nil, err } + defer rows.Close() + for rows.Next() { var host string var db sql.NullString @@ -349,11 +351,16 @@ func (p *Manager) GetUser(ctx context.Context, user string) (*User, error) { u.Hosts.Insert(host) } + if len(u.Hosts) == 0 { + return nil, nil + } + for host := range u.Hosts { rows, err := p.db.QueryContext(ctx, "SHOW GRANTS FOR ?@?", user, host) if err != nil { return nil, err } + // Plus 1 is for the default grant every user has, which is USAGE. grants := make([]string, 0, len(u.DBs)+1) for rows.Next() { var grant string diff --git a/pkg/util/map.go b/pkg/util/map.go index b87a0b93af..de8eea6602 100644 --- a/pkg/util/map.go +++ b/pkg/util/map.go @@ -11,7 +11,11 @@ func MergeTemplateAnnotations(sfs *appsv1.StatefulSet, annotations map[string]st MergeMaps(sfs.Spec.Template.Annotations, annotations) } -func MergeMaps(dest map[string]string, mapList ...map[string]string) { +// MergeMaps merges multiple maps into the provided `dest` map. +// If `dest` is nil, a new map is created. +// When keys overlap across maps, the value from the last map takes precedence. +// The function returns the resulting `dest` map. +func MergeMaps(dest map[string]string, mapList ...map[string]string) map[string]string { if dest == nil { dest = make(map[string]string) } @@ -20,4 +24,5 @@ func MergeMaps(dest map[string]string, mapList ...map[string]string) { dest[k] = v } } + return dest } diff --git a/version/client/models/googlerpc_status.go b/version/client/models/googlerpc_status.go index dc0414ab10..2a3a4a9854 100644 --- a/version/client/models/googlerpc_status.go +++ b/version/client/models/googlerpc_status.go @@ -88,6 +88,11 @@ func (m *GooglerpcStatus) contextValidateDetails(ctx context.Context, formats st for i := 0; i < len(m.Details); i++ { if m.Details[i] != nil { + + if swag.IsZero(m.Details[i]) { // not required + return nil + } + if err := m.Details[i].ContextValidate(ctx, formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("details" + "." + strconv.Itoa(i)) diff --git a/version/client/models/protobuf_any.go b/version/client/models/protobuf_any.go index 4454016000..f25b51ed38 100644 --- a/version/client/models/protobuf_any.go +++ b/version/client/models/protobuf_any.go @@ -7,125 +7,95 @@ package models import ( "context" + "encoding/json" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" ) -// ProtobufAny `Any` contains an arbitrary serialized protocol buffer message along with a -// URL that describes the type of the serialized message. -// -// Protobuf library provides support to pack/unpack Any values in the form -// of utility functions or additional generated methods of the Any type. -// -// Example 1: Pack and unpack a message in C++. -// -// Foo foo = ...; -// Any any; -// any.PackFrom(foo); -// ... -// if (any.UnpackTo(&foo)) { -// ... -// } -// -// Example 2: Pack and unpack a message in Java. -// -// Foo foo = ...; -// Any any = Any.pack(foo); -// ... -// if (any.is(Foo.class)) { -// foo = any.unpack(Foo.class); -// } -// -// Example 3: Pack and unpack a message in Python. -// -// foo = Foo(...) -// any = Any() -// any.Pack(foo) -// ... -// if any.Is(Foo.DESCRIPTOR): -// any.Unpack(foo) -// ... -// -// Example 4: Pack and unpack a message in Go -// -// foo := &pb.Foo{...} -// any, err := ptypes.MarshalAny(foo) -// ... -// foo := &pb.Foo{} -// if err := ptypes.UnmarshalAny(any, foo); err != nil { -// ... -// } -// -// The pack methods provided by protobuf library will by default use -// 'type.googleapis.com/full.type.name' as the type URL and the unpack -// methods only use the fully qualified type name after the last '/' -// in the type URL, for example "foo.bar.com/x/y.z" will yield type -// name "y.z". -// -// JSON -// ==== -// The JSON representation of an `Any` value uses the regular -// representation of the deserialized, embedded message, with an -// additional field `@type` which contains the type URL. Example: -// -// package google.profile; -// message Person { -// string first_name = 1; -// string last_name = 2; -// } -// -// { -// "@type": "type.googleapis.com/google.profile.Person", -// "firstName": , -// "lastName": -// } -// -// If the embedded message type is well-known and has a custom JSON -// representation, that representation will be embedded adding a field -// `value` which holds the custom JSON in addition to the `@type` -// field. Example (for message [google.protobuf.Duration][]): -// -// { -// "@type": "type.googleapis.com/google.protobuf.Duration", -// "value": "1.212s" -// } +// ProtobufAny protobuf any // // swagger:model protobufAny type ProtobufAny struct { - // A URL/resource name that uniquely identifies the type of the serialized - // protocol buffer message. This string must contain at least - // one "/" character. The last segment of the URL's path must represent - // the fully qualified name of the type (as in - // `path/google.protobuf.Duration`). The name should be in a canonical form - // (e.g., leading "." is not accepted). - // - // In practice, teams usually precompile into the binary all types that they - // expect it to use in the context of Any. However, for URLs which use the - // scheme `http`, `https`, or no scheme, one can optionally set up a type - // server that maps type URLs to message definitions as follows: - // - // * If no scheme is provided, `https` is assumed. - // * An HTTP GET on the URL must yield a [google.protobuf.Type][] - // value in binary format, or produce an error. - // * Applications are allowed to cache lookup results based on the - // URL, or have them precompiled into a binary to avoid any - // lookup. Therefore, binary compatibility needs to be preserved - // on changes to types. (Use versioned type names to manage - // breaking changes.) - // - // Note: this functionality is not currently available in the official - // protobuf release, and it is not used for type URLs beginning with - // type.googleapis.com. - // - // Schemes other than `http`, `https` (or the empty scheme) might be - // used with implementation specific semantics. - TypeURL string `json:"typeUrl,omitempty"` - - // Must be a valid serialized protocol buffer of the above specified type. - // Format: byte - Value strfmt.Base64 `json:"value,omitempty"` + // at type + AtType string `json:"@type,omitempty"` + + // protobuf any + ProtobufAny map[string]interface{} `json:"-"` +} + +// UnmarshalJSON unmarshals this object with additional properties from JSON +func (m *ProtobufAny) UnmarshalJSON(data []byte) error { + // stage 1, bind the properties + var stage1 struct { + + // at type + AtType string `json:"@type,omitempty"` + } + if err := json.Unmarshal(data, &stage1); err != nil { + return err + } + var rcv ProtobufAny + + rcv.AtType = stage1.AtType + *m = rcv + + // stage 2, remove properties and add to map + stage2 := make(map[string]json.RawMessage) + if err := json.Unmarshal(data, &stage2); err != nil { + return err + } + + delete(stage2, "@type") + // stage 3, add additional properties values + if len(stage2) > 0 { + result := make(map[string]interface{}) + for k, v := range stage2 { + var toadd interface{} + if err := json.Unmarshal(v, &toadd); err != nil { + return err + } + result[k] = toadd + } + m.ProtobufAny = result + } + + return nil +} + +// MarshalJSON marshals this object with additional properties into a JSON object +func (m ProtobufAny) MarshalJSON() ([]byte, error) { + var stage1 struct { + + // at type + AtType string `json:"@type,omitempty"` + } + + stage1.AtType = m.AtType + + // make JSON object for known properties + props, err := json.Marshal(stage1) + if err != nil { + return nil, err + } + + if len(m.ProtobufAny) == 0 { // no additional properties + return props, nil + } + + // make JSON object for the additional properties + additional, err := json.Marshal(m.ProtobufAny) + if err != nil { + return nil, err + } + + if len(props) < 3 { // "{}": only additional properties + return additional, nil + } + + // concatenate the 2 objects + return swag.ConcatJSON(props, additional), nil } // Validate validates this protobuf any diff --git a/version/client/models/version_get_release_notes_response.go b/version/client/models/version_get_release_notes_response.go new file mode 100644 index 0000000000..74229dacd0 --- /dev/null +++ b/version/client/models/version_get_release_notes_response.go @@ -0,0 +1,56 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package models + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" +) + +// VersionGetReleaseNotesResponse version get release notes response +// +// swagger:model versionGetReleaseNotesResponse +type VersionGetReleaseNotesResponse struct { + + // The product name. + Product string `json:"product,omitempty"` + + // release_notes is the release note for this version. + ReleaseNote string `json:"releaseNote,omitempty"` + + // version + Version string `json:"version,omitempty"` +} + +// Validate validates this version get release notes response +func (m *VersionGetReleaseNotesResponse) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this version get release notes response based on context it is used +func (m *VersionGetReleaseNotesResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (m *VersionGetReleaseNotesResponse) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *VersionGetReleaseNotesResponse) UnmarshalBinary(b []byte) error { + var res VersionGetReleaseNotesResponse + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} diff --git a/version/client/models/version_metadata_response.go b/version/client/models/version_metadata_response.go new file mode 100644 index 0000000000..c5978122fc --- /dev/null +++ b/version/client/models/version_metadata_response.go @@ -0,0 +1,121 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package models + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + "strconv" + + "github.com/go-openapi/errors" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" +) + +// VersionMetadataResponse version metadata response +// +// swagger:model versionMetadataResponse +type VersionMetadataResponse struct { + + // versions + Versions []*VersionMetadataVersion `json:"versions"` +} + +// Validate validates this version metadata response +func (m *VersionMetadataResponse) Validate(formats strfmt.Registry) error { + var res []error + + if err := m.validateVersions(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *VersionMetadataResponse) validateVersions(formats strfmt.Registry) error { + if swag.IsZero(m.Versions) { // not required + return nil + } + + for i := 0; i < len(m.Versions); i++ { + if swag.IsZero(m.Versions[i]) { // not required + continue + } + + if m.Versions[i] != nil { + if err := m.Versions[i].Validate(formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("versions" + "." + strconv.Itoa(i)) + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("versions" + "." + strconv.Itoa(i)) + } + return err + } + } + + } + + return nil +} + +// ContextValidate validate this version metadata response based on the context it is used +func (m *VersionMetadataResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + var res []error + + if err := m.contextValidateVersions(ctx, formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *VersionMetadataResponse) contextValidateVersions(ctx context.Context, formats strfmt.Registry) error { + + for i := 0; i < len(m.Versions); i++ { + + if m.Versions[i] != nil { + + if swag.IsZero(m.Versions[i]) { // not required + return nil + } + + if err := m.Versions[i].ContextValidate(ctx, formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("versions" + "." + strconv.Itoa(i)) + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("versions" + "." + strconv.Itoa(i)) + } + return err + } + } + + } + + return nil +} + +// MarshalBinary interface implementation +func (m *VersionMetadataResponse) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *VersionMetadataResponse) UnmarshalBinary(b []byte) error { + var res VersionMetadataResponse + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} diff --git a/version/client/models/version_metadata_v2_response.go b/version/client/models/version_metadata_v2_response.go new file mode 100644 index 0000000000..b32e3bfc31 --- /dev/null +++ b/version/client/models/version_metadata_v2_response.go @@ -0,0 +1,121 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package models + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + "strconv" + + "github.com/go-openapi/errors" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" +) + +// VersionMetadataV2Response version metadata v2 response +// +// swagger:model versionMetadataV2Response +type VersionMetadataV2Response struct { + + // versions + Versions []*VersionMetadataV2Version `json:"versions"` +} + +// Validate validates this version metadata v2 response +func (m *VersionMetadataV2Response) Validate(formats strfmt.Registry) error { + var res []error + + if err := m.validateVersions(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *VersionMetadataV2Response) validateVersions(formats strfmt.Registry) error { + if swag.IsZero(m.Versions) { // not required + return nil + } + + for i := 0; i < len(m.Versions); i++ { + if swag.IsZero(m.Versions[i]) { // not required + continue + } + + if m.Versions[i] != nil { + if err := m.Versions[i].Validate(formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("versions" + "." + strconv.Itoa(i)) + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("versions" + "." + strconv.Itoa(i)) + } + return err + } + } + + } + + return nil +} + +// ContextValidate validate this version metadata v2 response based on the context it is used +func (m *VersionMetadataV2Response) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + var res []error + + if err := m.contextValidateVersions(ctx, formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *VersionMetadataV2Response) contextValidateVersions(ctx context.Context, formats strfmt.Registry) error { + + for i := 0; i < len(m.Versions); i++ { + + if m.Versions[i] != nil { + + if swag.IsZero(m.Versions[i]) { // not required + return nil + } + + if err := m.Versions[i].ContextValidate(ctx, formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("versions" + "." + strconv.Itoa(i)) + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("versions" + "." + strconv.Itoa(i)) + } + return err + } + } + + } + + return nil +} + +// MarshalBinary interface implementation +func (m *VersionMetadataV2Response) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *VersionMetadataV2Response) UnmarshalBinary(b []byte) error { + var res VersionMetadataV2Response + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} diff --git a/version/client/models/version_metadata_v2_version.go b/version/client/models/version_metadata_v2_version.go new file mode 100644 index 0000000000..c5437cab09 --- /dev/null +++ b/version/client/models/version_metadata_v2_version.go @@ -0,0 +1,118 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package models + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + + "github.com/go-openapi/errors" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" +) + +// VersionMetadataV2Version MetadataV2Version represents metadata for a given version with additional fields. +// +// swagger:model versionMetadataV2Version +type VersionMetadataV2Version struct { + + // ImageInfo holds information about the docker image for this version. + ImageInfo *VersionVersionV2 `json:"imageInfo,omitempty"` + + // Recommended is the recommended version for a given component. + Recommended map[string]string `json:"recommended,omitempty"` + + // Supported holds semver constraint per component, such as ">= 1.0, < 1.4". + Supported map[string]string `json:"supported,omitempty"` + + // version + Version string `json:"version,omitempty"` +} + +// Validate validates this version metadata v2 version +func (m *VersionMetadataV2Version) Validate(formats strfmt.Registry) error { + var res []error + + if err := m.validateImageInfo(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *VersionMetadataV2Version) validateImageInfo(formats strfmt.Registry) error { + if swag.IsZero(m.ImageInfo) { // not required + return nil + } + + if m.ImageInfo != nil { + if err := m.ImageInfo.Validate(formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("imageInfo") + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("imageInfo") + } + return err + } + } + + return nil +} + +// ContextValidate validate this version metadata v2 version based on the context it is used +func (m *VersionMetadataV2Version) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + var res []error + + if err := m.contextValidateImageInfo(ctx, formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *VersionMetadataV2Version) contextValidateImageInfo(ctx context.Context, formats strfmt.Registry) error { + + if m.ImageInfo != nil { + + if swag.IsZero(m.ImageInfo) { // not required + return nil + } + + if err := m.ImageInfo.ContextValidate(ctx, formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("imageInfo") + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("imageInfo") + } + return err + } + } + + return nil +} + +// MarshalBinary interface implementation +func (m *VersionMetadataV2Version) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *VersionMetadataV2Version) UnmarshalBinary(b []byte) error { + var res VersionMetadataV2Version + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} diff --git a/version/client/models/version_metadata_version.go b/version/client/models/version_metadata_version.go new file mode 100644 index 0000000000..a635c8473f --- /dev/null +++ b/version/client/models/version_metadata_version.go @@ -0,0 +1,56 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package models + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" +) + +// VersionMetadataVersion MetadataVersion represents metadata for a given version. +// +// swagger:model versionMetadataVersion +type VersionMetadataVersion struct { + + // Recommended is the recommended version for a given component. + Recommended map[string]string `json:"recommended,omitempty"` + + // Supported holds semver constraint per component, such as ">= 1.0, < 1.4". + Supported map[string]string `json:"supported,omitempty"` + + // version + Version string `json:"version,omitempty"` +} + +// Validate validates this version metadata version +func (m *VersionMetadataVersion) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this version metadata version based on context it is used +func (m *VersionMetadataVersion) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (m *VersionMetadataVersion) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *VersionMetadataVersion) UnmarshalBinary(b []byte) error { + var res VersionMetadataVersion + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} diff --git a/version/client/models/version_operator_response.go b/version/client/models/version_operator_response.go index 6ff2150269..22a92f7051 100644 --- a/version/client/models/version_operator_response.go +++ b/version/client/models/version_operator_response.go @@ -82,6 +82,11 @@ func (m *VersionOperatorResponse) contextValidateVersions(ctx context.Context, f for i := 0; i < len(m.Versions); i++ { if m.Versions[i] != nil { + + if swag.IsZero(m.Versions[i]) { // not required + return nil + } + if err := m.Versions[i].ContextValidate(ctx, formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("versions" + "." + strconv.Itoa(i)) diff --git a/version/client/models/version_operator_version.go b/version/client/models/version_operator_version.go index 7eedb8de94..b7fb267af8 100644 --- a/version/client/models/version_operator_version.go +++ b/version/client/models/version_operator_version.go @@ -78,6 +78,11 @@ func (m *VersionOperatorVersion) ContextValidate(ctx context.Context, formats st func (m *VersionOperatorVersion) contextValidateMatrix(ctx context.Context, formats strfmt.Registry) error { if m.Matrix != nil { + + if swag.IsZero(m.Matrix) { // not required + return nil + } + if err := m.Matrix.ContextValidate(ctx, formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("matrix") diff --git a/version/client/models/version_product_response.go b/version/client/models/version_product_response.go index 77ff32d0f4..ec7fc278cc 100644 --- a/version/client/models/version_product_response.go +++ b/version/client/models/version_product_response.go @@ -82,6 +82,11 @@ func (m *VersionProductResponse) contextValidateVersions(ctx context.Context, fo for i := 0; i < len(m.Versions); i++ { if m.Versions[i] != nil { + + if swag.IsZero(m.Versions[i]) { // not required + return nil + } + if err := m.Versions[i].ContextValidate(ctx, formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("versions" + "." + strconv.Itoa(i)) diff --git a/version/client/models/version_version.go b/version/client/models/version_version.go index f102929268..7d262b252e 100644 --- a/version/client/models/version_version.go +++ b/version/client/models/version_version.go @@ -24,6 +24,9 @@ type VersionVersion struct { // image hash ImageHash string `json:"imageHash,omitempty"` + // image hash arm64 + ImageHashArm64 string `json:"imageHashArm64,omitempty"` + // image path ImagePath string `json:"imagePath,omitempty"` @@ -81,6 +84,11 @@ func (m *VersionVersion) ContextValidate(ctx context.Context, formats strfmt.Reg func (m *VersionVersion) contextValidateStatus(ctx context.Context, formats strfmt.Registry) error { if m.Status != nil { + + if swag.IsZero(m.Status) { // not required + return nil + } + if err := m.Status.ContextValidate(ctx, formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("status") diff --git a/version/client/models/version_version_matrix.go b/version/client/models/version_version_matrix.go index 7f59def8ff..fba724e6e8 100644 --- a/version/client/models/version_version_matrix.go +++ b/version/client/models/version_version_matrix.go @@ -73,6 +73,9 @@ type VersionVersionMatrix struct { // pmm Pmm map[string]VersionVersion `json:"pmm,omitempty"` + // postgis + Postgis map[string]VersionVersion `json:"postgis,omitempty"` + // postgresql Postgresql map[string]VersionVersion `json:"postgresql,omitempty"` @@ -93,6 +96,9 @@ type VersionVersionMatrix struct { // router Router map[string]VersionVersion `json:"router,omitempty"` + + // toolkit + Toolkit map[string]VersionVersion `json:"toolkit,omitempty"` } // Validate validates this version version matrix @@ -171,6 +177,10 @@ func (m *VersionVersionMatrix) Validate(formats strfmt.Registry) error { res = append(res, err) } + if err := m.validatePostgis(formats); err != nil { + res = append(res, err) + } + if err := m.validatePostgresql(formats); err != nil { res = append(res, err) } @@ -199,6 +209,10 @@ func (m *VersionVersionMatrix) Validate(formats strfmt.Registry) error { res = append(res, err) } + if err := m.validateToolkit(formats); err != nil { + res = append(res, err) + } + if len(res) > 0 { return errors.CompositeValidationError(res...) } @@ -673,6 +687,32 @@ func (m *VersionVersionMatrix) validatePmm(formats strfmt.Registry) error { return nil } +func (m *VersionVersionMatrix) validatePostgis(formats strfmt.Registry) error { + if swag.IsZero(m.Postgis) { // not required + return nil + } + + for k := range m.Postgis { + + if err := validate.Required("postgis"+"."+k, "body", m.Postgis[k]); err != nil { + return err + } + if val, ok := m.Postgis[k]; ok { + if err := val.Validate(formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("postgis" + "." + k) + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("postgis" + "." + k) + } + return err + } + } + + } + + return nil +} + func (m *VersionVersionMatrix) validatePostgresql(formats strfmt.Registry) error { if swag.IsZero(m.Postgresql) { // not required return nil @@ -855,6 +895,32 @@ func (m *VersionVersionMatrix) validateRouter(formats strfmt.Registry) error { return nil } +func (m *VersionVersionMatrix) validateToolkit(formats strfmt.Registry) error { + if swag.IsZero(m.Toolkit) { // not required + return nil + } + + for k := range m.Toolkit { + + if err := validate.Required("toolkit"+"."+k, "body", m.Toolkit[k]); err != nil { + return err + } + if val, ok := m.Toolkit[k]; ok { + if err := val.Validate(formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("toolkit" + "." + k) + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("toolkit" + "." + k) + } + return err + } + } + + } + + return nil +} + // ContextValidate validate this version version matrix based on the context it is used func (m *VersionVersionMatrix) ContextValidate(ctx context.Context, formats strfmt.Registry) error { var res []error @@ -931,6 +997,10 @@ func (m *VersionVersionMatrix) ContextValidate(ctx context.Context, formats strf res = append(res, err) } + if err := m.contextValidatePostgis(ctx, formats); err != nil { + res = append(res, err) + } + if err := m.contextValidatePostgresql(ctx, formats); err != nil { res = append(res, err) } @@ -959,6 +1029,10 @@ func (m *VersionVersionMatrix) ContextValidate(ctx context.Context, formats strf res = append(res, err) } + if err := m.contextValidateToolkit(ctx, formats); err != nil { + res = append(res, err) + } + if len(res) > 0 { return errors.CompositeValidationError(res...) } @@ -1235,6 +1309,21 @@ func (m *VersionVersionMatrix) contextValidatePmm(ctx context.Context, formats s return nil } +func (m *VersionVersionMatrix) contextValidatePostgis(ctx context.Context, formats strfmt.Registry) error { + + for k := range m.Postgis { + + if val, ok := m.Postgis[k]; ok { + if err := val.ContextValidate(ctx, formats); err != nil { + return err + } + } + + } + + return nil +} + func (m *VersionVersionMatrix) contextValidatePostgresql(ctx context.Context, formats strfmt.Registry) error { for k := range m.Postgresql { @@ -1340,6 +1429,21 @@ func (m *VersionVersionMatrix) contextValidateRouter(ctx context.Context, format return nil } +func (m *VersionVersionMatrix) contextValidateToolkit(ctx context.Context, formats strfmt.Registry) error { + + for k := range m.Toolkit { + + if val, ok := m.Toolkit[k]; ok { + if err := val.ContextValidate(ctx, formats); err != nil { + return err + } + } + + } + + return nil +} + // MarshalBinary interface implementation func (m *VersionVersionMatrix) MarshalBinary() ([]byte, error) { if m == nil { diff --git a/version/client/models/version_version_response.go b/version/client/models/version_version_response.go index 34abed8e6a..906c342be2 100644 --- a/version/client/models/version_version_response.go +++ b/version/client/models/version_version_response.go @@ -82,6 +82,11 @@ func (m *VersionVersionResponse) contextValidateVersions(ctx context.Context, fo for i := 0; i < len(m.Versions); i++ { if m.Versions[i] != nil { + + if swag.IsZero(m.Versions[i]) { // not required + return nil + } + if err := m.Versions[i].ContextValidate(ctx, formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("versions" + "." + strconv.Itoa(i)) diff --git a/version/client/models/version_version_v2.go b/version/client/models/version_version_v2.go new file mode 100644 index 0000000000..68a5bef16b --- /dev/null +++ b/version/client/models/version_version_v2.go @@ -0,0 +1,142 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package models + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + + "github.com/go-openapi/errors" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" + "github.com/go-openapi/validate" +) + +// VersionVersionV2 Version represents product version information. +// +// swagger:model versionVersionV2 +type VersionVersionV2 struct { + + // critical + Critical bool `json:"critical,omitempty"` + + // image hash + ImageHash string `json:"imageHash,omitempty"` + + // image hash arm64 + ImageHashArm64 string `json:"imageHashArm64,omitempty"` + + // image path + ImagePath string `json:"imagePath,omitempty"` + + // release_timestamp is the release time of this image. + // Format: date-time + ImageReleaseTimestamp strfmt.DateTime `json:"imageReleaseTimestamp,omitempty"` + + // status + Status *VersionStatus `json:"status,omitempty"` +} + +// Validate validates this version version v2 +func (m *VersionVersionV2) Validate(formats strfmt.Registry) error { + var res []error + + if err := m.validateImageReleaseTimestamp(formats); err != nil { + res = append(res, err) + } + + if err := m.validateStatus(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *VersionVersionV2) validateImageReleaseTimestamp(formats strfmt.Registry) error { + if swag.IsZero(m.ImageReleaseTimestamp) { // not required + return nil + } + + if err := validate.FormatOf("imageReleaseTimestamp", "body", "date-time", m.ImageReleaseTimestamp.String(), formats); err != nil { + return err + } + + return nil +} + +func (m *VersionVersionV2) validateStatus(formats strfmt.Registry) error { + if swag.IsZero(m.Status) { // not required + return nil + } + + if m.Status != nil { + if err := m.Status.Validate(formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("status") + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("status") + } + return err + } + } + + return nil +} + +// ContextValidate validate this version version v2 based on the context it is used +func (m *VersionVersionV2) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + var res []error + + if err := m.contextValidateStatus(ctx, formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *VersionVersionV2) contextValidateStatus(ctx context.Context, formats strfmt.Registry) error { + + if m.Status != nil { + + if swag.IsZero(m.Status) { // not required + return nil + } + + if err := m.Status.ContextValidate(ctx, formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("status") + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("status") + } + return err + } + } + + return nil +} + +// MarshalBinary interface implementation +func (m *VersionVersionV2) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *VersionVersionV2) UnmarshalBinary(b []byte) error { + var res VersionVersionV2 + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} diff --git a/version/client/version_service/version_service_apply_parameters.go b/version/client/version_service/version_service_apply_parameters.go index 2d19601cb7..cb76bdb1d8 100644 --- a/version/client/version_service/version_service_apply_parameters.go +++ b/version/client/version_service/version_service_apply_parameters.go @@ -68,9 +68,15 @@ type VersionServiceApplyParams struct { // BackupVersion. BackupVersion *string - // ClusterWideEnabled. + // BackupsEnabled. + BackupsEnabled *bool + + // ClusterSize. // - // Format: boolean + // Format: int32 + ClusterSize *int32 + + // ClusterWideEnabled. ClusterWideEnabled *bool // CustomResourceUID. @@ -79,14 +85,21 @@ type VersionServiceApplyParams struct { // DatabaseVersion. DatabaseVersion *string + // Extensions. + Extensions *string + // HaproxyVersion. HaproxyVersion *string // HashicorpVaultEnabled. - // - // Format: boolean HashicorpVaultEnabled *bool + // HelmDeployCr. + HelmDeployCr *bool + + // HelmDeployOperator. + HelmDeployOperator *bool + // KubeVersion. KubeVersion *string @@ -99,9 +112,18 @@ type VersionServiceApplyParams struct { // OperatorVersion. OperatorVersion string + // PhysicalBackupScheduled. + PhysicalBackupScheduled *bool + + // PitrEnabled. + PitrEnabled *bool + // Platform. Platform *string + // PmmEnabled. + PmmEnabled *bool + // PmmVersion. PmmVersion *string @@ -112,10 +134,14 @@ type VersionServiceApplyParams struct { ProxysqlVersion *string // ShardingEnabled. - // - // Format: boolean ShardingEnabled *bool + // SidecarsUsed. + SidecarsUsed *bool + + // UserManagementEnabled. + UserManagementEnabled *bool + timeout time.Duration Context context.Context HTTPClient *http.Client @@ -191,6 +217,28 @@ func (o *VersionServiceApplyParams) SetBackupVersion(backupVersion *string) { o.BackupVersion = backupVersion } +// WithBackupsEnabled adds the backupsEnabled to the version service apply params +func (o *VersionServiceApplyParams) WithBackupsEnabled(backupsEnabled *bool) *VersionServiceApplyParams { + o.SetBackupsEnabled(backupsEnabled) + return o +} + +// SetBackupsEnabled adds the backupsEnabled to the version service apply params +func (o *VersionServiceApplyParams) SetBackupsEnabled(backupsEnabled *bool) { + o.BackupsEnabled = backupsEnabled +} + +// WithClusterSize adds the clusterSize to the version service apply params +func (o *VersionServiceApplyParams) WithClusterSize(clusterSize *int32) *VersionServiceApplyParams { + o.SetClusterSize(clusterSize) + return o +} + +// SetClusterSize adds the clusterSize to the version service apply params +func (o *VersionServiceApplyParams) SetClusterSize(clusterSize *int32) { + o.ClusterSize = clusterSize +} + // WithClusterWideEnabled adds the clusterWideEnabled to the version service apply params func (o *VersionServiceApplyParams) WithClusterWideEnabled(clusterWideEnabled *bool) *VersionServiceApplyParams { o.SetClusterWideEnabled(clusterWideEnabled) @@ -224,6 +272,17 @@ func (o *VersionServiceApplyParams) SetDatabaseVersion(databaseVersion *string) o.DatabaseVersion = databaseVersion } +// WithExtensions adds the extensions to the version service apply params +func (o *VersionServiceApplyParams) WithExtensions(extensions *string) *VersionServiceApplyParams { + o.SetExtensions(extensions) + return o +} + +// SetExtensions adds the extensions to the version service apply params +func (o *VersionServiceApplyParams) SetExtensions(extensions *string) { + o.Extensions = extensions +} + // WithHaproxyVersion adds the haproxyVersion to the version service apply params func (o *VersionServiceApplyParams) WithHaproxyVersion(haproxyVersion *string) *VersionServiceApplyParams { o.SetHaproxyVersion(haproxyVersion) @@ -246,6 +305,28 @@ func (o *VersionServiceApplyParams) SetHashicorpVaultEnabled(hashicorpVaultEnabl o.HashicorpVaultEnabled = hashicorpVaultEnabled } +// WithHelmDeployCr adds the helmDeployCr to the version service apply params +func (o *VersionServiceApplyParams) WithHelmDeployCr(helmDeployCr *bool) *VersionServiceApplyParams { + o.SetHelmDeployCr(helmDeployCr) + return o +} + +// SetHelmDeployCr adds the helmDeployCr to the version service apply params +func (o *VersionServiceApplyParams) SetHelmDeployCr(helmDeployCr *bool) { + o.HelmDeployCr = helmDeployCr +} + +// WithHelmDeployOperator adds the helmDeployOperator to the version service apply params +func (o *VersionServiceApplyParams) WithHelmDeployOperator(helmDeployOperator *bool) *VersionServiceApplyParams { + o.SetHelmDeployOperator(helmDeployOperator) + return o +} + +// SetHelmDeployOperator adds the helmDeployOperator to the version service apply params +func (o *VersionServiceApplyParams) SetHelmDeployOperator(helmDeployOperator *bool) { + o.HelmDeployOperator = helmDeployOperator +} + // WithKubeVersion adds the kubeVersion to the version service apply params func (o *VersionServiceApplyParams) WithKubeVersion(kubeVersion *string) *VersionServiceApplyParams { o.SetKubeVersion(kubeVersion) @@ -290,6 +371,28 @@ func (o *VersionServiceApplyParams) SetOperatorVersion(operatorVersion string) { o.OperatorVersion = operatorVersion } +// WithPhysicalBackupScheduled adds the physicalBackupScheduled to the version service apply params +func (o *VersionServiceApplyParams) WithPhysicalBackupScheduled(physicalBackupScheduled *bool) *VersionServiceApplyParams { + o.SetPhysicalBackupScheduled(physicalBackupScheduled) + return o +} + +// SetPhysicalBackupScheduled adds the physicalBackupScheduled to the version service apply params +func (o *VersionServiceApplyParams) SetPhysicalBackupScheduled(physicalBackupScheduled *bool) { + o.PhysicalBackupScheduled = physicalBackupScheduled +} + +// WithPitrEnabled adds the pitrEnabled to the version service apply params +func (o *VersionServiceApplyParams) WithPitrEnabled(pitrEnabled *bool) *VersionServiceApplyParams { + o.SetPitrEnabled(pitrEnabled) + return o +} + +// SetPitrEnabled adds the pitrEnabled to the version service apply params +func (o *VersionServiceApplyParams) SetPitrEnabled(pitrEnabled *bool) { + o.PitrEnabled = pitrEnabled +} + // WithPlatform adds the platform to the version service apply params func (o *VersionServiceApplyParams) WithPlatform(platform *string) *VersionServiceApplyParams { o.SetPlatform(platform) @@ -301,6 +404,17 @@ func (o *VersionServiceApplyParams) SetPlatform(platform *string) { o.Platform = platform } +// WithPmmEnabled adds the pmmEnabled to the version service apply params +func (o *VersionServiceApplyParams) WithPmmEnabled(pmmEnabled *bool) *VersionServiceApplyParams { + o.SetPmmEnabled(pmmEnabled) + return o +} + +// SetPmmEnabled adds the pmmEnabled to the version service apply params +func (o *VersionServiceApplyParams) SetPmmEnabled(pmmEnabled *bool) { + o.PmmEnabled = pmmEnabled +} + // WithPmmVersion adds the pmmVersion to the version service apply params func (o *VersionServiceApplyParams) WithPmmVersion(pmmVersion *string) *VersionServiceApplyParams { o.SetPmmVersion(pmmVersion) @@ -345,6 +459,28 @@ func (o *VersionServiceApplyParams) SetShardingEnabled(shardingEnabled *bool) { o.ShardingEnabled = shardingEnabled } +// WithSidecarsUsed adds the sidecarsUsed to the version service apply params +func (o *VersionServiceApplyParams) WithSidecarsUsed(sidecarsUsed *bool) *VersionServiceApplyParams { + o.SetSidecarsUsed(sidecarsUsed) + return o +} + +// SetSidecarsUsed adds the sidecarsUsed to the version service apply params +func (o *VersionServiceApplyParams) SetSidecarsUsed(sidecarsUsed *bool) { + o.SidecarsUsed = sidecarsUsed +} + +// WithUserManagementEnabled adds the userManagementEnabled to the version service apply params +func (o *VersionServiceApplyParams) WithUserManagementEnabled(userManagementEnabled *bool) *VersionServiceApplyParams { + o.SetUserManagementEnabled(userManagementEnabled) + return o +} + +// SetUserManagementEnabled adds the userManagementEnabled to the version service apply params +func (o *VersionServiceApplyParams) SetUserManagementEnabled(userManagementEnabled *bool) { + o.UserManagementEnabled = userManagementEnabled +} + // WriteToRequest writes these params to a swagger request func (o *VersionServiceApplyParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { @@ -375,6 +511,40 @@ func (o *VersionServiceApplyParams) WriteToRequest(r runtime.ClientRequest, reg } } + if o.BackupsEnabled != nil { + + // query param backupsEnabled + var qrBackupsEnabled bool + + if o.BackupsEnabled != nil { + qrBackupsEnabled = *o.BackupsEnabled + } + qBackupsEnabled := swag.FormatBool(qrBackupsEnabled) + if qBackupsEnabled != "" { + + if err := r.SetQueryParam("backupsEnabled", qBackupsEnabled); err != nil { + return err + } + } + } + + if o.ClusterSize != nil { + + // query param clusterSize + var qrClusterSize int32 + + if o.ClusterSize != nil { + qrClusterSize = *o.ClusterSize + } + qClusterSize := swag.FormatInt32(qrClusterSize) + if qClusterSize != "" { + + if err := r.SetQueryParam("clusterSize", qClusterSize); err != nil { + return err + } + } + } + if o.ClusterWideEnabled != nil { // query param clusterWideEnabled @@ -426,6 +596,23 @@ func (o *VersionServiceApplyParams) WriteToRequest(r runtime.ClientRequest, reg } } + if o.Extensions != nil { + + // query param extensions + var qrExtensions string + + if o.Extensions != nil { + qrExtensions = *o.Extensions + } + qExtensions := qrExtensions + if qExtensions != "" { + + if err := r.SetQueryParam("extensions", qExtensions); err != nil { + return err + } + } + } + if o.HaproxyVersion != nil { // query param haproxyVersion @@ -460,6 +647,40 @@ func (o *VersionServiceApplyParams) WriteToRequest(r runtime.ClientRequest, reg } } + if o.HelmDeployCr != nil { + + // query param helmDeployCr + var qrHelmDeployCr bool + + if o.HelmDeployCr != nil { + qrHelmDeployCr = *o.HelmDeployCr + } + qHelmDeployCr := swag.FormatBool(qrHelmDeployCr) + if qHelmDeployCr != "" { + + if err := r.SetQueryParam("helmDeployCr", qHelmDeployCr); err != nil { + return err + } + } + } + + if o.HelmDeployOperator != nil { + + // query param helmDeployOperator + var qrHelmDeployOperator bool + + if o.HelmDeployOperator != nil { + qrHelmDeployOperator = *o.HelmDeployOperator + } + qHelmDeployOperator := swag.FormatBool(qrHelmDeployOperator) + if qHelmDeployOperator != "" { + + if err := r.SetQueryParam("helmDeployOperator", qHelmDeployOperator); err != nil { + return err + } + } + } + if o.KubeVersion != nil { // query param kubeVersion @@ -516,6 +737,40 @@ func (o *VersionServiceApplyParams) WriteToRequest(r runtime.ClientRequest, reg return err } + if o.PhysicalBackupScheduled != nil { + + // query param physicalBackupScheduled + var qrPhysicalBackupScheduled bool + + if o.PhysicalBackupScheduled != nil { + qrPhysicalBackupScheduled = *o.PhysicalBackupScheduled + } + qPhysicalBackupScheduled := swag.FormatBool(qrPhysicalBackupScheduled) + if qPhysicalBackupScheduled != "" { + + if err := r.SetQueryParam("physicalBackupScheduled", qPhysicalBackupScheduled); err != nil { + return err + } + } + } + + if o.PitrEnabled != nil { + + // query param pitrEnabled + var qrPitrEnabled bool + + if o.PitrEnabled != nil { + qrPitrEnabled = *o.PitrEnabled + } + qPitrEnabled := swag.FormatBool(qrPitrEnabled) + if qPitrEnabled != "" { + + if err := r.SetQueryParam("pitrEnabled", qPitrEnabled); err != nil { + return err + } + } + } + if o.Platform != nil { // query param platform @@ -533,6 +788,23 @@ func (o *VersionServiceApplyParams) WriteToRequest(r runtime.ClientRequest, reg } } + if o.PmmEnabled != nil { + + // query param pmmEnabled + var qrPmmEnabled bool + + if o.PmmEnabled != nil { + qrPmmEnabled = *o.PmmEnabled + } + qPmmEnabled := swag.FormatBool(qrPmmEnabled) + if qPmmEnabled != "" { + + if err := r.SetQueryParam("pmmEnabled", qPmmEnabled); err != nil { + return err + } + } + } + if o.PmmVersion != nil { // query param pmmVersion @@ -589,6 +861,40 @@ func (o *VersionServiceApplyParams) WriteToRequest(r runtime.ClientRequest, reg } } + if o.SidecarsUsed != nil { + + // query param sidecarsUsed + var qrSidecarsUsed bool + + if o.SidecarsUsed != nil { + qrSidecarsUsed = *o.SidecarsUsed + } + qSidecarsUsed := swag.FormatBool(qrSidecarsUsed) + if qSidecarsUsed != "" { + + if err := r.SetQueryParam("sidecarsUsed", qSidecarsUsed); err != nil { + return err + } + } + } + + if o.UserManagementEnabled != nil { + + // query param userManagementEnabled + var qrUserManagementEnabled bool + + if o.UserManagementEnabled != nil { + qrUserManagementEnabled = *o.UserManagementEnabled + } + qUserManagementEnabled := swag.FormatBool(qrUserManagementEnabled) + if qUserManagementEnabled != "" { + + if err := r.SetQueryParam("userManagementEnabled", qUserManagementEnabled); err != nil { + return err + } + } + } + if len(res) > 0 { return errors.CompositeValidationError(res...) } diff --git a/version/client/version_service/version_service_apply_responses.go b/version/client/version_service/version_service_apply_responses.go index 677847438c..46884988b0 100644 --- a/version/client/version_service/version_service_apply_responses.go +++ b/version/client/version_service/version_service_apply_responses.go @@ -6,6 +6,7 @@ package version_service // Editing this file might prove futile when you re-run the swagger generate command import ( + "encoding/json" "fmt" "io" @@ -55,9 +56,46 @@ type VersionServiceApplyOK struct { Payload *models.VersionVersionResponse } +// IsSuccess returns true when this version service apply o k response has a 2xx status code +func (o *VersionServiceApplyOK) IsSuccess() bool { + return true +} + +// IsRedirect returns true when this version service apply o k response has a 3xx status code +func (o *VersionServiceApplyOK) IsRedirect() bool { + return false +} + +// IsClientError returns true when this version service apply o k response has a 4xx status code +func (o *VersionServiceApplyOK) IsClientError() bool { + return false +} + +// IsServerError returns true when this version service apply o k response has a 5xx status code +func (o *VersionServiceApplyOK) IsServerError() bool { + return false +} + +// IsCode returns true when this version service apply o k response a status code equal to that given +func (o *VersionServiceApplyOK) IsCode(code int) bool { + return code == 200 +} + +// Code gets the status code for the version service apply o k response +func (o *VersionServiceApplyOK) Code() int { + return 200 +} + func (o *VersionServiceApplyOK) Error() string { - return fmt.Sprintf("[GET /versions/v1/{product}/{operatorVersion}/{apply}][%d] versionServiceApplyOK %+v", 200, o.Payload) + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /versions/v1/{product}/{operatorVersion}/{apply}][%d] versionServiceApplyOK %s", 200, payload) +} + +func (o *VersionServiceApplyOK) String() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /versions/v1/{product}/{operatorVersion}/{apply}][%d] versionServiceApplyOK %s", 200, payload) } + func (o *VersionServiceApplyOK) GetPayload() *models.VersionVersionResponse { return o.Payload } @@ -84,7 +122,7 @@ func NewVersionServiceApplyDefault(code int) *VersionServiceApplyDefault { /* VersionServiceApplyDefault describes a response with status code -1, with default header values. -An unexpected error response +An unexpected error response. */ type VersionServiceApplyDefault struct { _statusCode int @@ -92,14 +130,46 @@ type VersionServiceApplyDefault struct { Payload *models.GooglerpcStatus } +// IsSuccess returns true when this version service apply default response has a 2xx status code +func (o *VersionServiceApplyDefault) IsSuccess() bool { + return o._statusCode/100 == 2 +} + +// IsRedirect returns true when this version service apply default response has a 3xx status code +func (o *VersionServiceApplyDefault) IsRedirect() bool { + return o._statusCode/100 == 3 +} + +// IsClientError returns true when this version service apply default response has a 4xx status code +func (o *VersionServiceApplyDefault) IsClientError() bool { + return o._statusCode/100 == 4 +} + +// IsServerError returns true when this version service apply default response has a 5xx status code +func (o *VersionServiceApplyDefault) IsServerError() bool { + return o._statusCode/100 == 5 +} + +// IsCode returns true when this version service apply default response a status code equal to that given +func (o *VersionServiceApplyDefault) IsCode(code int) bool { + return o._statusCode == code +} + // Code gets the status code for the version service apply default response func (o *VersionServiceApplyDefault) Code() int { return o._statusCode } func (o *VersionServiceApplyDefault) Error() string { - return fmt.Sprintf("[GET /versions/v1/{product}/{operatorVersion}/{apply}][%d] VersionService_Apply default %+v", o._statusCode, o.Payload) + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /versions/v1/{product}/{operatorVersion}/{apply}][%d] VersionService_Apply default %s", o._statusCode, payload) } + +func (o *VersionServiceApplyDefault) String() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /versions/v1/{product}/{operatorVersion}/{apply}][%d] VersionService_Apply default %s", o._statusCode, payload) +} + func (o *VersionServiceApplyDefault) GetPayload() *models.GooglerpcStatus { return o.Payload } diff --git a/version/client/version_service/version_service_client.go b/version/client/version_service/version_service_client.go index 398c120215..46e8ef9320 100644 --- a/version/client/version_service/version_service_client.go +++ b/version/client/version_service/version_service_client.go @@ -7,6 +7,7 @@ package version_service import ( "github.com/go-openapi/runtime" + httptransport "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" ) @@ -15,6 +16,31 @@ func New(transport runtime.ClientTransport, formats strfmt.Registry) ClientServi return &Client{transport: transport, formats: formats} } +// New creates a new version service API client with basic auth credentials. +// It takes the following parameters: +// - host: http host (github.com). +// - basePath: any base path for the API client ("/v1", "/v3"). +// - scheme: http scheme ("http", "https"). +// - user: user for basic authentication header. +// - password: password for basic authentication header. +func NewClientWithBasicAuth(host, basePath, scheme, user, password string) ClientService { + transport := httptransport.New(host, basePath, []string{scheme}) + transport.DefaultAuthentication = httptransport.BasicAuth(user, password) + return &Client{transport: transport, formats: strfmt.Default} +} + +// New creates a new version service API client with a bearer token for authentication. +// It takes the following parameters: +// - host: http host (github.com). +// - basePath: any base path for the API client ("/v1", "/v3"). +// - scheme: http scheme ("http", "https"). +// - bearerToken: bearer token for Bearer authentication header. +func NewClientWithBearerToken(host, basePath, scheme, bearerToken string) ClientService { + transport := httptransport.New(host, basePath, []string{scheme}) + transport.DefaultAuthentication = httptransport.BearerToken(bearerToken) + return &Client{transport: transport, formats: strfmt.Default} +} + /* Client for version service API */ @@ -23,13 +49,19 @@ type Client struct { formats strfmt.Registry } -// ClientOption is the option for Client methods +// ClientOption may be used to customize the behavior of Client methods. type ClientOption func(*runtime.ClientOperation) // ClientService is the interface for Client methods type ClientService interface { VersionServiceApply(params *VersionServiceApplyParams, opts ...ClientOption) (*VersionServiceApplyOK, error) + VersionServiceGetReleaseNotes(params *VersionServiceGetReleaseNotesParams, opts ...ClientOption) (*VersionServiceGetReleaseNotesOK, error) + + VersionServiceMetadata(params *VersionServiceMetadataParams, opts ...ClientOption) (*VersionServiceMetadataOK, error) + + VersionServiceMetadataV2(params *VersionServiceMetadataV2Params, opts ...ClientOption) (*VersionServiceMetadataV2OK, error) + VersionServiceOperator(params *VersionServiceOperatorParams, opts ...ClientOption) (*VersionServiceOperatorOK, error) VersionServiceProduct(params *VersionServiceProductParams, opts ...ClientOption) (*VersionServiceProductOK, error) @@ -76,6 +108,123 @@ func (a *Client) VersionServiceApply(params *VersionServiceApplyParams, opts ... return nil, runtime.NewAPIError("unexpected success response: content available as default response in error", unexpectedSuccess, unexpectedSuccess.Code()) } +/* +VersionServiceGetReleaseNotes gets the release notes for a product version + +Return release notes for a product version +*/ +func (a *Client) VersionServiceGetReleaseNotes(params *VersionServiceGetReleaseNotesParams, opts ...ClientOption) (*VersionServiceGetReleaseNotesOK, error) { + // TODO: Validate the params before sending + if params == nil { + params = NewVersionServiceGetReleaseNotesParams() + } + op := &runtime.ClientOperation{ + ID: "VersionService_GetReleaseNotes", + Method: "GET", + PathPattern: "/release-notes/v1/{product}/{version}", + ProducesMediaTypes: []string{"application/json"}, + ConsumesMediaTypes: []string{"application/json"}, + Schemes: []string{"http", "https"}, + Params: params, + Reader: &VersionServiceGetReleaseNotesReader{formats: a.formats}, + Context: params.Context, + Client: params.HTTPClient, + } + for _, opt := range opts { + opt(op) + } + + result, err := a.transport.Submit(op) + if err != nil { + return nil, err + } + success, ok := result.(*VersionServiceGetReleaseNotesOK) + if ok { + return success, nil + } + // unexpected success response + unexpectedSuccess := result.(*VersionServiceGetReleaseNotesDefault) + return nil, runtime.NewAPIError("unexpected success response: content available as default response in error", unexpectedSuccess, unexpectedSuccess.Code()) +} + +/* +VersionServiceMetadata metadata for a product + +Return metadata information for a product +*/ +func (a *Client) VersionServiceMetadata(params *VersionServiceMetadataParams, opts ...ClientOption) (*VersionServiceMetadataOK, error) { + // TODO: Validate the params before sending + if params == nil { + params = NewVersionServiceMetadataParams() + } + op := &runtime.ClientOperation{ + ID: "VersionService_Metadata", + Method: "GET", + PathPattern: "/metadata/v1/{product}", + ProducesMediaTypes: []string{"application/json"}, + ConsumesMediaTypes: []string{"application/json"}, + Schemes: []string{"http", "https"}, + Params: params, + Reader: &VersionServiceMetadataReader{formats: a.formats}, + Context: params.Context, + Client: params.HTTPClient, + } + for _, opt := range opts { + opt(op) + } + + result, err := a.transport.Submit(op) + if err != nil { + return nil, err + } + success, ok := result.(*VersionServiceMetadataOK) + if ok { + return success, nil + } + // unexpected success response + unexpectedSuccess := result.(*VersionServiceMetadataDefault) + return nil, runtime.NewAPIError("unexpected success response: content available as default response in error", unexpectedSuccess, unexpectedSuccess.Code()) +} + +/* +VersionServiceMetadataV2 v2s metadata for a product + +Return metadata information with additional image information for a product +*/ +func (a *Client) VersionServiceMetadataV2(params *VersionServiceMetadataV2Params, opts ...ClientOption) (*VersionServiceMetadataV2OK, error) { + // TODO: Validate the params before sending + if params == nil { + params = NewVersionServiceMetadataV2Params() + } + op := &runtime.ClientOperation{ + ID: "VersionService_MetadataV2", + Method: "GET", + PathPattern: "/metadata/v2/{product}", + ProducesMediaTypes: []string{"application/json"}, + ConsumesMediaTypes: []string{"application/json"}, + Schemes: []string{"http", "https"}, + Params: params, + Reader: &VersionServiceMetadataV2Reader{formats: a.formats}, + Context: params.Context, + Client: params.HTTPClient, + } + for _, opt := range opts { + opt(op) + } + + result, err := a.transport.Submit(op) + if err != nil { + return nil, err + } + success, ok := result.(*VersionServiceMetadataV2OK) + if ok { + return success, nil + } + // unexpected success response + unexpectedSuccess := result.(*VersionServiceMetadataV2Default) + return nil, runtime.NewAPIError("unexpected success response: content available as default response in error", unexpectedSuccess, unexpectedSuccess.Code()) +} + /* VersionServiceOperator products versions for specific operator version diff --git a/version/client/version_service/version_service_get_release_notes_parameters.go b/version/client/version_service/version_service_get_release_notes_parameters.go new file mode 100644 index 0000000000..c2c2402040 --- /dev/null +++ b/version/client/version_service/version_service_get_release_notes_parameters.go @@ -0,0 +1,173 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package version_service + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + "net/http" + "time" + + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + cr "github.com/go-openapi/runtime/client" + "github.com/go-openapi/strfmt" +) + +// NewVersionServiceGetReleaseNotesParams creates a new VersionServiceGetReleaseNotesParams object, +// with the default timeout for this client. +// +// Default values are not hydrated, since defaults are normally applied by the API server side. +// +// To enforce default values in parameter, use SetDefaults or WithDefaults. +func NewVersionServiceGetReleaseNotesParams() *VersionServiceGetReleaseNotesParams { + return &VersionServiceGetReleaseNotesParams{ + timeout: cr.DefaultTimeout, + } +} + +// NewVersionServiceGetReleaseNotesParamsWithTimeout creates a new VersionServiceGetReleaseNotesParams object +// with the ability to set a timeout on a request. +func NewVersionServiceGetReleaseNotesParamsWithTimeout(timeout time.Duration) *VersionServiceGetReleaseNotesParams { + return &VersionServiceGetReleaseNotesParams{ + timeout: timeout, + } +} + +// NewVersionServiceGetReleaseNotesParamsWithContext creates a new VersionServiceGetReleaseNotesParams object +// with the ability to set a context for a request. +func NewVersionServiceGetReleaseNotesParamsWithContext(ctx context.Context) *VersionServiceGetReleaseNotesParams { + return &VersionServiceGetReleaseNotesParams{ + Context: ctx, + } +} + +// NewVersionServiceGetReleaseNotesParamsWithHTTPClient creates a new VersionServiceGetReleaseNotesParams object +// with the ability to set a custom HTTPClient for a request. +func NewVersionServiceGetReleaseNotesParamsWithHTTPClient(client *http.Client) *VersionServiceGetReleaseNotesParams { + return &VersionServiceGetReleaseNotesParams{ + HTTPClient: client, + } +} + +/* +VersionServiceGetReleaseNotesParams contains all the parameters to send to the API endpoint + + for the version service get release notes operation. + + Typically these are written to a http.Request. +*/ +type VersionServiceGetReleaseNotesParams struct { + + /* Product. + + Product name. + */ + Product string + + /* Version. + + Product version. + */ + Version string + + timeout time.Duration + Context context.Context + HTTPClient *http.Client +} + +// WithDefaults hydrates default values in the version service get release notes params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *VersionServiceGetReleaseNotesParams) WithDefaults() *VersionServiceGetReleaseNotesParams { + o.SetDefaults() + return o +} + +// SetDefaults hydrates default values in the version service get release notes params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *VersionServiceGetReleaseNotesParams) SetDefaults() { + // no default values defined for this parameter +} + +// WithTimeout adds the timeout to the version service get release notes params +func (o *VersionServiceGetReleaseNotesParams) WithTimeout(timeout time.Duration) *VersionServiceGetReleaseNotesParams { + o.SetTimeout(timeout) + return o +} + +// SetTimeout adds the timeout to the version service get release notes params +func (o *VersionServiceGetReleaseNotesParams) SetTimeout(timeout time.Duration) { + o.timeout = timeout +} + +// WithContext adds the context to the version service get release notes params +func (o *VersionServiceGetReleaseNotesParams) WithContext(ctx context.Context) *VersionServiceGetReleaseNotesParams { + o.SetContext(ctx) + return o +} + +// SetContext adds the context to the version service get release notes params +func (o *VersionServiceGetReleaseNotesParams) SetContext(ctx context.Context) { + o.Context = ctx +} + +// WithHTTPClient adds the HTTPClient to the version service get release notes params +func (o *VersionServiceGetReleaseNotesParams) WithHTTPClient(client *http.Client) *VersionServiceGetReleaseNotesParams { + o.SetHTTPClient(client) + return o +} + +// SetHTTPClient adds the HTTPClient to the version service get release notes params +func (o *VersionServiceGetReleaseNotesParams) SetHTTPClient(client *http.Client) { + o.HTTPClient = client +} + +// WithProduct adds the product to the version service get release notes params +func (o *VersionServiceGetReleaseNotesParams) WithProduct(product string) *VersionServiceGetReleaseNotesParams { + o.SetProduct(product) + return o +} + +// SetProduct adds the product to the version service get release notes params +func (o *VersionServiceGetReleaseNotesParams) SetProduct(product string) { + o.Product = product +} + +// WithVersion adds the version to the version service get release notes params +func (o *VersionServiceGetReleaseNotesParams) WithVersion(version string) *VersionServiceGetReleaseNotesParams { + o.SetVersion(version) + return o +} + +// SetVersion adds the version to the version service get release notes params +func (o *VersionServiceGetReleaseNotesParams) SetVersion(version string) { + o.Version = version +} + +// WriteToRequest writes these params to a swagger request +func (o *VersionServiceGetReleaseNotesParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { + + if err := r.SetTimeout(o.timeout); err != nil { + return err + } + var res []error + + // path param product + if err := r.SetPathParam("product", o.Product); err != nil { + return err + } + + // path param version + if err := r.SetPathParam("version", o.Version); err != nil { + return err + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} diff --git a/version/client/version_service/version_service_get_release_notes_responses.go b/version/client/version_service/version_service_get_release_notes_responses.go new file mode 100644 index 0000000000..1e5664a272 --- /dev/null +++ b/version/client/version_service/version_service_get_release_notes_responses.go @@ -0,0 +1,187 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package version_service + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "encoding/json" + "fmt" + "io" + + "github.com/go-openapi/runtime" + "github.com/go-openapi/strfmt" + + "github.com/percona/percona-xtradb-cluster-operator/version/client/models" +) + +// VersionServiceGetReleaseNotesReader is a Reader for the VersionServiceGetReleaseNotes structure. +type VersionServiceGetReleaseNotesReader struct { + formats strfmt.Registry +} + +// ReadResponse reads a server response into the received o. +func (o *VersionServiceGetReleaseNotesReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { + switch response.Code() { + case 200: + result := NewVersionServiceGetReleaseNotesOK() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return result, nil + default: + result := NewVersionServiceGetReleaseNotesDefault(response.Code()) + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + if response.Code()/100 == 2 { + return result, nil + } + return nil, result + } +} + +// NewVersionServiceGetReleaseNotesOK creates a VersionServiceGetReleaseNotesOK with default headers values +func NewVersionServiceGetReleaseNotesOK() *VersionServiceGetReleaseNotesOK { + return &VersionServiceGetReleaseNotesOK{} +} + +/* +VersionServiceGetReleaseNotesOK describes a response with status code 200, with default header values. + +A successful response. +*/ +type VersionServiceGetReleaseNotesOK struct { + Payload *models.VersionGetReleaseNotesResponse +} + +// IsSuccess returns true when this version service get release notes o k response has a 2xx status code +func (o *VersionServiceGetReleaseNotesOK) IsSuccess() bool { + return true +} + +// IsRedirect returns true when this version service get release notes o k response has a 3xx status code +func (o *VersionServiceGetReleaseNotesOK) IsRedirect() bool { + return false +} + +// IsClientError returns true when this version service get release notes o k response has a 4xx status code +func (o *VersionServiceGetReleaseNotesOK) IsClientError() bool { + return false +} + +// IsServerError returns true when this version service get release notes o k response has a 5xx status code +func (o *VersionServiceGetReleaseNotesOK) IsServerError() bool { + return false +} + +// IsCode returns true when this version service get release notes o k response a status code equal to that given +func (o *VersionServiceGetReleaseNotesOK) IsCode(code int) bool { + return code == 200 +} + +// Code gets the status code for the version service get release notes o k response +func (o *VersionServiceGetReleaseNotesOK) Code() int { + return 200 +} + +func (o *VersionServiceGetReleaseNotesOK) Error() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /release-notes/v1/{product}/{version}][%d] versionServiceGetReleaseNotesOK %s", 200, payload) +} + +func (o *VersionServiceGetReleaseNotesOK) String() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /release-notes/v1/{product}/{version}][%d] versionServiceGetReleaseNotesOK %s", 200, payload) +} + +func (o *VersionServiceGetReleaseNotesOK) GetPayload() *models.VersionGetReleaseNotesResponse { + return o.Payload +} + +func (o *VersionServiceGetReleaseNotesOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + o.Payload = new(models.VersionGetReleaseNotesResponse) + + // response payload + if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} + +// NewVersionServiceGetReleaseNotesDefault creates a VersionServiceGetReleaseNotesDefault with default headers values +func NewVersionServiceGetReleaseNotesDefault(code int) *VersionServiceGetReleaseNotesDefault { + return &VersionServiceGetReleaseNotesDefault{ + _statusCode: code, + } +} + +/* +VersionServiceGetReleaseNotesDefault describes a response with status code -1, with default header values. + +An unexpected error response. +*/ +type VersionServiceGetReleaseNotesDefault struct { + _statusCode int + + Payload *models.GooglerpcStatus +} + +// IsSuccess returns true when this version service get release notes default response has a 2xx status code +func (o *VersionServiceGetReleaseNotesDefault) IsSuccess() bool { + return o._statusCode/100 == 2 +} + +// IsRedirect returns true when this version service get release notes default response has a 3xx status code +func (o *VersionServiceGetReleaseNotesDefault) IsRedirect() bool { + return o._statusCode/100 == 3 +} + +// IsClientError returns true when this version service get release notes default response has a 4xx status code +func (o *VersionServiceGetReleaseNotesDefault) IsClientError() bool { + return o._statusCode/100 == 4 +} + +// IsServerError returns true when this version service get release notes default response has a 5xx status code +func (o *VersionServiceGetReleaseNotesDefault) IsServerError() bool { + return o._statusCode/100 == 5 +} + +// IsCode returns true when this version service get release notes default response a status code equal to that given +func (o *VersionServiceGetReleaseNotesDefault) IsCode(code int) bool { + return o._statusCode == code +} + +// Code gets the status code for the version service get release notes default response +func (o *VersionServiceGetReleaseNotesDefault) Code() int { + return o._statusCode +} + +func (o *VersionServiceGetReleaseNotesDefault) Error() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /release-notes/v1/{product}/{version}][%d] VersionService_GetReleaseNotes default %s", o._statusCode, payload) +} + +func (o *VersionServiceGetReleaseNotesDefault) String() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /release-notes/v1/{product}/{version}][%d] VersionService_GetReleaseNotes default %s", o._statusCode, payload) +} + +func (o *VersionServiceGetReleaseNotesDefault) GetPayload() *models.GooglerpcStatus { + return o.Payload +} + +func (o *VersionServiceGetReleaseNotesDefault) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + o.Payload = new(models.GooglerpcStatus) + + // response payload + if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} diff --git a/version/client/version_service/version_service_metadata_parameters.go b/version/client/version_service/version_service_metadata_parameters.go new file mode 100644 index 0000000000..251f98e56c --- /dev/null +++ b/version/client/version_service/version_service_metadata_parameters.go @@ -0,0 +1,148 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package version_service + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + "net/http" + "time" + + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + cr "github.com/go-openapi/runtime/client" + "github.com/go-openapi/strfmt" +) + +// NewVersionServiceMetadataParams creates a new VersionServiceMetadataParams object, +// with the default timeout for this client. +// +// Default values are not hydrated, since defaults are normally applied by the API server side. +// +// To enforce default values in parameter, use SetDefaults or WithDefaults. +func NewVersionServiceMetadataParams() *VersionServiceMetadataParams { + return &VersionServiceMetadataParams{ + timeout: cr.DefaultTimeout, + } +} + +// NewVersionServiceMetadataParamsWithTimeout creates a new VersionServiceMetadataParams object +// with the ability to set a timeout on a request. +func NewVersionServiceMetadataParamsWithTimeout(timeout time.Duration) *VersionServiceMetadataParams { + return &VersionServiceMetadataParams{ + timeout: timeout, + } +} + +// NewVersionServiceMetadataParamsWithContext creates a new VersionServiceMetadataParams object +// with the ability to set a context for a request. +func NewVersionServiceMetadataParamsWithContext(ctx context.Context) *VersionServiceMetadataParams { + return &VersionServiceMetadataParams{ + Context: ctx, + } +} + +// NewVersionServiceMetadataParamsWithHTTPClient creates a new VersionServiceMetadataParams object +// with the ability to set a custom HTTPClient for a request. +func NewVersionServiceMetadataParamsWithHTTPClient(client *http.Client) *VersionServiceMetadataParams { + return &VersionServiceMetadataParams{ + HTTPClient: client, + } +} + +/* +VersionServiceMetadataParams contains all the parameters to send to the API endpoint + + for the version service metadata operation. + + Typically these are written to a http.Request. +*/ +type VersionServiceMetadataParams struct { + + // Product. + Product string + + timeout time.Duration + Context context.Context + HTTPClient *http.Client +} + +// WithDefaults hydrates default values in the version service metadata params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *VersionServiceMetadataParams) WithDefaults() *VersionServiceMetadataParams { + o.SetDefaults() + return o +} + +// SetDefaults hydrates default values in the version service metadata params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *VersionServiceMetadataParams) SetDefaults() { + // no default values defined for this parameter +} + +// WithTimeout adds the timeout to the version service metadata params +func (o *VersionServiceMetadataParams) WithTimeout(timeout time.Duration) *VersionServiceMetadataParams { + o.SetTimeout(timeout) + return o +} + +// SetTimeout adds the timeout to the version service metadata params +func (o *VersionServiceMetadataParams) SetTimeout(timeout time.Duration) { + o.timeout = timeout +} + +// WithContext adds the context to the version service metadata params +func (o *VersionServiceMetadataParams) WithContext(ctx context.Context) *VersionServiceMetadataParams { + o.SetContext(ctx) + return o +} + +// SetContext adds the context to the version service metadata params +func (o *VersionServiceMetadataParams) SetContext(ctx context.Context) { + o.Context = ctx +} + +// WithHTTPClient adds the HTTPClient to the version service metadata params +func (o *VersionServiceMetadataParams) WithHTTPClient(client *http.Client) *VersionServiceMetadataParams { + o.SetHTTPClient(client) + return o +} + +// SetHTTPClient adds the HTTPClient to the version service metadata params +func (o *VersionServiceMetadataParams) SetHTTPClient(client *http.Client) { + o.HTTPClient = client +} + +// WithProduct adds the product to the version service metadata params +func (o *VersionServiceMetadataParams) WithProduct(product string) *VersionServiceMetadataParams { + o.SetProduct(product) + return o +} + +// SetProduct adds the product to the version service metadata params +func (o *VersionServiceMetadataParams) SetProduct(product string) { + o.Product = product +} + +// WriteToRequest writes these params to a swagger request +func (o *VersionServiceMetadataParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { + + if err := r.SetTimeout(o.timeout); err != nil { + return err + } + var res []error + + // path param product + if err := r.SetPathParam("product", o.Product); err != nil { + return err + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} diff --git a/version/client/version_service/version_service_metadata_responses.go b/version/client/version_service/version_service_metadata_responses.go new file mode 100644 index 0000000000..07d69358e0 --- /dev/null +++ b/version/client/version_service/version_service_metadata_responses.go @@ -0,0 +1,187 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package version_service + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "encoding/json" + "fmt" + "io" + + "github.com/go-openapi/runtime" + "github.com/go-openapi/strfmt" + + "github.com/percona/percona-xtradb-cluster-operator/version/client/models" +) + +// VersionServiceMetadataReader is a Reader for the VersionServiceMetadata structure. +type VersionServiceMetadataReader struct { + formats strfmt.Registry +} + +// ReadResponse reads a server response into the received o. +func (o *VersionServiceMetadataReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { + switch response.Code() { + case 200: + result := NewVersionServiceMetadataOK() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return result, nil + default: + result := NewVersionServiceMetadataDefault(response.Code()) + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + if response.Code()/100 == 2 { + return result, nil + } + return nil, result + } +} + +// NewVersionServiceMetadataOK creates a VersionServiceMetadataOK with default headers values +func NewVersionServiceMetadataOK() *VersionServiceMetadataOK { + return &VersionServiceMetadataOK{} +} + +/* +VersionServiceMetadataOK describes a response with status code 200, with default header values. + +A successful response. +*/ +type VersionServiceMetadataOK struct { + Payload *models.VersionMetadataResponse +} + +// IsSuccess returns true when this version service metadata o k response has a 2xx status code +func (o *VersionServiceMetadataOK) IsSuccess() bool { + return true +} + +// IsRedirect returns true when this version service metadata o k response has a 3xx status code +func (o *VersionServiceMetadataOK) IsRedirect() bool { + return false +} + +// IsClientError returns true when this version service metadata o k response has a 4xx status code +func (o *VersionServiceMetadataOK) IsClientError() bool { + return false +} + +// IsServerError returns true when this version service metadata o k response has a 5xx status code +func (o *VersionServiceMetadataOK) IsServerError() bool { + return false +} + +// IsCode returns true when this version service metadata o k response a status code equal to that given +func (o *VersionServiceMetadataOK) IsCode(code int) bool { + return code == 200 +} + +// Code gets the status code for the version service metadata o k response +func (o *VersionServiceMetadataOK) Code() int { + return 200 +} + +func (o *VersionServiceMetadataOK) Error() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /metadata/v1/{product}][%d] versionServiceMetadataOK %s", 200, payload) +} + +func (o *VersionServiceMetadataOK) String() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /metadata/v1/{product}][%d] versionServiceMetadataOK %s", 200, payload) +} + +func (o *VersionServiceMetadataOK) GetPayload() *models.VersionMetadataResponse { + return o.Payload +} + +func (o *VersionServiceMetadataOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + o.Payload = new(models.VersionMetadataResponse) + + // response payload + if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} + +// NewVersionServiceMetadataDefault creates a VersionServiceMetadataDefault with default headers values +func NewVersionServiceMetadataDefault(code int) *VersionServiceMetadataDefault { + return &VersionServiceMetadataDefault{ + _statusCode: code, + } +} + +/* +VersionServiceMetadataDefault describes a response with status code -1, with default header values. + +An unexpected error response. +*/ +type VersionServiceMetadataDefault struct { + _statusCode int + + Payload *models.GooglerpcStatus +} + +// IsSuccess returns true when this version service metadata default response has a 2xx status code +func (o *VersionServiceMetadataDefault) IsSuccess() bool { + return o._statusCode/100 == 2 +} + +// IsRedirect returns true when this version service metadata default response has a 3xx status code +func (o *VersionServiceMetadataDefault) IsRedirect() bool { + return o._statusCode/100 == 3 +} + +// IsClientError returns true when this version service metadata default response has a 4xx status code +func (o *VersionServiceMetadataDefault) IsClientError() bool { + return o._statusCode/100 == 4 +} + +// IsServerError returns true when this version service metadata default response has a 5xx status code +func (o *VersionServiceMetadataDefault) IsServerError() bool { + return o._statusCode/100 == 5 +} + +// IsCode returns true when this version service metadata default response a status code equal to that given +func (o *VersionServiceMetadataDefault) IsCode(code int) bool { + return o._statusCode == code +} + +// Code gets the status code for the version service metadata default response +func (o *VersionServiceMetadataDefault) Code() int { + return o._statusCode +} + +func (o *VersionServiceMetadataDefault) Error() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /metadata/v1/{product}][%d] VersionService_Metadata default %s", o._statusCode, payload) +} + +func (o *VersionServiceMetadataDefault) String() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /metadata/v1/{product}][%d] VersionService_Metadata default %s", o._statusCode, payload) +} + +func (o *VersionServiceMetadataDefault) GetPayload() *models.GooglerpcStatus { + return o.Payload +} + +func (o *VersionServiceMetadataDefault) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + o.Payload = new(models.GooglerpcStatus) + + // response payload + if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} diff --git a/version/client/version_service/version_service_metadata_v2_parameters.go b/version/client/version_service/version_service_metadata_v2_parameters.go new file mode 100644 index 0000000000..2558879e7f --- /dev/null +++ b/version/client/version_service/version_service_metadata_v2_parameters.go @@ -0,0 +1,148 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package version_service + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + "net/http" + "time" + + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + cr "github.com/go-openapi/runtime/client" + "github.com/go-openapi/strfmt" +) + +// NewVersionServiceMetadataV2Params creates a new VersionServiceMetadataV2Params object, +// with the default timeout for this client. +// +// Default values are not hydrated, since defaults are normally applied by the API server side. +// +// To enforce default values in parameter, use SetDefaults or WithDefaults. +func NewVersionServiceMetadataV2Params() *VersionServiceMetadataV2Params { + return &VersionServiceMetadataV2Params{ + timeout: cr.DefaultTimeout, + } +} + +// NewVersionServiceMetadataV2ParamsWithTimeout creates a new VersionServiceMetadataV2Params object +// with the ability to set a timeout on a request. +func NewVersionServiceMetadataV2ParamsWithTimeout(timeout time.Duration) *VersionServiceMetadataV2Params { + return &VersionServiceMetadataV2Params{ + timeout: timeout, + } +} + +// NewVersionServiceMetadataV2ParamsWithContext creates a new VersionServiceMetadataV2Params object +// with the ability to set a context for a request. +func NewVersionServiceMetadataV2ParamsWithContext(ctx context.Context) *VersionServiceMetadataV2Params { + return &VersionServiceMetadataV2Params{ + Context: ctx, + } +} + +// NewVersionServiceMetadataV2ParamsWithHTTPClient creates a new VersionServiceMetadataV2Params object +// with the ability to set a custom HTTPClient for a request. +func NewVersionServiceMetadataV2ParamsWithHTTPClient(client *http.Client) *VersionServiceMetadataV2Params { + return &VersionServiceMetadataV2Params{ + HTTPClient: client, + } +} + +/* +VersionServiceMetadataV2Params contains all the parameters to send to the API endpoint + + for the version service metadata v2 operation. + + Typically these are written to a http.Request. +*/ +type VersionServiceMetadataV2Params struct { + + // Product. + Product string + + timeout time.Duration + Context context.Context + HTTPClient *http.Client +} + +// WithDefaults hydrates default values in the version service metadata v2 params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *VersionServiceMetadataV2Params) WithDefaults() *VersionServiceMetadataV2Params { + o.SetDefaults() + return o +} + +// SetDefaults hydrates default values in the version service metadata v2 params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *VersionServiceMetadataV2Params) SetDefaults() { + // no default values defined for this parameter +} + +// WithTimeout adds the timeout to the version service metadata v2 params +func (o *VersionServiceMetadataV2Params) WithTimeout(timeout time.Duration) *VersionServiceMetadataV2Params { + o.SetTimeout(timeout) + return o +} + +// SetTimeout adds the timeout to the version service metadata v2 params +func (o *VersionServiceMetadataV2Params) SetTimeout(timeout time.Duration) { + o.timeout = timeout +} + +// WithContext adds the context to the version service metadata v2 params +func (o *VersionServiceMetadataV2Params) WithContext(ctx context.Context) *VersionServiceMetadataV2Params { + o.SetContext(ctx) + return o +} + +// SetContext adds the context to the version service metadata v2 params +func (o *VersionServiceMetadataV2Params) SetContext(ctx context.Context) { + o.Context = ctx +} + +// WithHTTPClient adds the HTTPClient to the version service metadata v2 params +func (o *VersionServiceMetadataV2Params) WithHTTPClient(client *http.Client) *VersionServiceMetadataV2Params { + o.SetHTTPClient(client) + return o +} + +// SetHTTPClient adds the HTTPClient to the version service metadata v2 params +func (o *VersionServiceMetadataV2Params) SetHTTPClient(client *http.Client) { + o.HTTPClient = client +} + +// WithProduct adds the product to the version service metadata v2 params +func (o *VersionServiceMetadataV2Params) WithProduct(product string) *VersionServiceMetadataV2Params { + o.SetProduct(product) + return o +} + +// SetProduct adds the product to the version service metadata v2 params +func (o *VersionServiceMetadataV2Params) SetProduct(product string) { + o.Product = product +} + +// WriteToRequest writes these params to a swagger request +func (o *VersionServiceMetadataV2Params) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { + + if err := r.SetTimeout(o.timeout); err != nil { + return err + } + var res []error + + // path param product + if err := r.SetPathParam("product", o.Product); err != nil { + return err + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} diff --git a/version/client/version_service/version_service_metadata_v2_responses.go b/version/client/version_service/version_service_metadata_v2_responses.go new file mode 100644 index 0000000000..d3ffa50167 --- /dev/null +++ b/version/client/version_service/version_service_metadata_v2_responses.go @@ -0,0 +1,187 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package version_service + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "encoding/json" + "fmt" + "io" + + "github.com/go-openapi/runtime" + "github.com/go-openapi/strfmt" + + "github.com/percona/percona-xtradb-cluster-operator/version/client/models" +) + +// VersionServiceMetadataV2Reader is a Reader for the VersionServiceMetadataV2 structure. +type VersionServiceMetadataV2Reader struct { + formats strfmt.Registry +} + +// ReadResponse reads a server response into the received o. +func (o *VersionServiceMetadataV2Reader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { + switch response.Code() { + case 200: + result := NewVersionServiceMetadataV2OK() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return result, nil + default: + result := NewVersionServiceMetadataV2Default(response.Code()) + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + if response.Code()/100 == 2 { + return result, nil + } + return nil, result + } +} + +// NewVersionServiceMetadataV2OK creates a VersionServiceMetadataV2OK with default headers values +func NewVersionServiceMetadataV2OK() *VersionServiceMetadataV2OK { + return &VersionServiceMetadataV2OK{} +} + +/* +VersionServiceMetadataV2OK describes a response with status code 200, with default header values. + +A successful response. +*/ +type VersionServiceMetadataV2OK struct { + Payload *models.VersionMetadataV2Response +} + +// IsSuccess returns true when this version service metadata v2 o k response has a 2xx status code +func (o *VersionServiceMetadataV2OK) IsSuccess() bool { + return true +} + +// IsRedirect returns true when this version service metadata v2 o k response has a 3xx status code +func (o *VersionServiceMetadataV2OK) IsRedirect() bool { + return false +} + +// IsClientError returns true when this version service metadata v2 o k response has a 4xx status code +func (o *VersionServiceMetadataV2OK) IsClientError() bool { + return false +} + +// IsServerError returns true when this version service metadata v2 o k response has a 5xx status code +func (o *VersionServiceMetadataV2OK) IsServerError() bool { + return false +} + +// IsCode returns true when this version service metadata v2 o k response a status code equal to that given +func (o *VersionServiceMetadataV2OK) IsCode(code int) bool { + return code == 200 +} + +// Code gets the status code for the version service metadata v2 o k response +func (o *VersionServiceMetadataV2OK) Code() int { + return 200 +} + +func (o *VersionServiceMetadataV2OK) Error() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /metadata/v2/{product}][%d] versionServiceMetadataV2OK %s", 200, payload) +} + +func (o *VersionServiceMetadataV2OK) String() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /metadata/v2/{product}][%d] versionServiceMetadataV2OK %s", 200, payload) +} + +func (o *VersionServiceMetadataV2OK) GetPayload() *models.VersionMetadataV2Response { + return o.Payload +} + +func (o *VersionServiceMetadataV2OK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + o.Payload = new(models.VersionMetadataV2Response) + + // response payload + if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} + +// NewVersionServiceMetadataV2Default creates a VersionServiceMetadataV2Default with default headers values +func NewVersionServiceMetadataV2Default(code int) *VersionServiceMetadataV2Default { + return &VersionServiceMetadataV2Default{ + _statusCode: code, + } +} + +/* +VersionServiceMetadataV2Default describes a response with status code -1, with default header values. + +An unexpected error response. +*/ +type VersionServiceMetadataV2Default struct { + _statusCode int + + Payload *models.GooglerpcStatus +} + +// IsSuccess returns true when this version service metadata v2 default response has a 2xx status code +func (o *VersionServiceMetadataV2Default) IsSuccess() bool { + return o._statusCode/100 == 2 +} + +// IsRedirect returns true when this version service metadata v2 default response has a 3xx status code +func (o *VersionServiceMetadataV2Default) IsRedirect() bool { + return o._statusCode/100 == 3 +} + +// IsClientError returns true when this version service metadata v2 default response has a 4xx status code +func (o *VersionServiceMetadataV2Default) IsClientError() bool { + return o._statusCode/100 == 4 +} + +// IsServerError returns true when this version service metadata v2 default response has a 5xx status code +func (o *VersionServiceMetadataV2Default) IsServerError() bool { + return o._statusCode/100 == 5 +} + +// IsCode returns true when this version service metadata v2 default response a status code equal to that given +func (o *VersionServiceMetadataV2Default) IsCode(code int) bool { + return o._statusCode == code +} + +// Code gets the status code for the version service metadata v2 default response +func (o *VersionServiceMetadataV2Default) Code() int { + return o._statusCode +} + +func (o *VersionServiceMetadataV2Default) Error() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /metadata/v2/{product}][%d] VersionService_MetadataV2 default %s", o._statusCode, payload) +} + +func (o *VersionServiceMetadataV2Default) String() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /metadata/v2/{product}][%d] VersionService_MetadataV2 default %s", o._statusCode, payload) +} + +func (o *VersionServiceMetadataV2Default) GetPayload() *models.GooglerpcStatus { + return o.Payload +} + +func (o *VersionServiceMetadataV2Default) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + o.Payload = new(models.GooglerpcStatus) + + // response payload + if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} diff --git a/version/client/version_service/version_service_operator_parameters.go b/version/client/version_service/version_service_operator_parameters.go index 1da63ea38a..d8bb33a746 100644 --- a/version/client/version_service/version_service_operator_parameters.go +++ b/version/client/version_service/version_service_operator_parameters.go @@ -65,9 +65,15 @@ type VersionServiceOperatorParams struct { // BackupVersion. BackupVersion *string - // ClusterWideEnabled. + // BackupsEnabled. + BackupsEnabled *bool + + // ClusterSize. // - // Format: boolean + // Format: int32 + ClusterSize *int32 + + // ClusterWideEnabled. ClusterWideEnabled *bool // CustomResourceUID. @@ -76,14 +82,21 @@ type VersionServiceOperatorParams struct { // DatabaseVersion. DatabaseVersion *string + // Extensions. + Extensions *string + // HaproxyVersion. HaproxyVersion *string // HashicorpVaultEnabled. - // - // Format: boolean HashicorpVaultEnabled *bool + // HelmDeployCr. + HelmDeployCr *bool + + // HelmDeployOperator. + HelmDeployOperator *bool + // KubeVersion. KubeVersion *string @@ -96,9 +109,18 @@ type VersionServiceOperatorParams struct { // OperatorVersion. OperatorVersion string + // PhysicalBackupScheduled. + PhysicalBackupScheduled *bool + + // PitrEnabled. + PitrEnabled *bool + // Platform. Platform *string + // PmmEnabled. + PmmEnabled *bool + // PmmVersion. PmmVersion *string @@ -109,10 +131,14 @@ type VersionServiceOperatorParams struct { ProxysqlVersion *string // ShardingEnabled. - // - // Format: boolean ShardingEnabled *bool + // SidecarsUsed. + SidecarsUsed *bool + + // UserManagementEnabled. + UserManagementEnabled *bool + timeout time.Duration Context context.Context HTTPClient *http.Client @@ -177,6 +203,28 @@ func (o *VersionServiceOperatorParams) SetBackupVersion(backupVersion *string) { o.BackupVersion = backupVersion } +// WithBackupsEnabled adds the backupsEnabled to the version service operator params +func (o *VersionServiceOperatorParams) WithBackupsEnabled(backupsEnabled *bool) *VersionServiceOperatorParams { + o.SetBackupsEnabled(backupsEnabled) + return o +} + +// SetBackupsEnabled adds the backupsEnabled to the version service operator params +func (o *VersionServiceOperatorParams) SetBackupsEnabled(backupsEnabled *bool) { + o.BackupsEnabled = backupsEnabled +} + +// WithClusterSize adds the clusterSize to the version service operator params +func (o *VersionServiceOperatorParams) WithClusterSize(clusterSize *int32) *VersionServiceOperatorParams { + o.SetClusterSize(clusterSize) + return o +} + +// SetClusterSize adds the clusterSize to the version service operator params +func (o *VersionServiceOperatorParams) SetClusterSize(clusterSize *int32) { + o.ClusterSize = clusterSize +} + // WithClusterWideEnabled adds the clusterWideEnabled to the version service operator params func (o *VersionServiceOperatorParams) WithClusterWideEnabled(clusterWideEnabled *bool) *VersionServiceOperatorParams { o.SetClusterWideEnabled(clusterWideEnabled) @@ -210,6 +258,17 @@ func (o *VersionServiceOperatorParams) SetDatabaseVersion(databaseVersion *strin o.DatabaseVersion = databaseVersion } +// WithExtensions adds the extensions to the version service operator params +func (o *VersionServiceOperatorParams) WithExtensions(extensions *string) *VersionServiceOperatorParams { + o.SetExtensions(extensions) + return o +} + +// SetExtensions adds the extensions to the version service operator params +func (o *VersionServiceOperatorParams) SetExtensions(extensions *string) { + o.Extensions = extensions +} + // WithHaproxyVersion adds the haproxyVersion to the version service operator params func (o *VersionServiceOperatorParams) WithHaproxyVersion(haproxyVersion *string) *VersionServiceOperatorParams { o.SetHaproxyVersion(haproxyVersion) @@ -232,6 +291,28 @@ func (o *VersionServiceOperatorParams) SetHashicorpVaultEnabled(hashicorpVaultEn o.HashicorpVaultEnabled = hashicorpVaultEnabled } +// WithHelmDeployCr adds the helmDeployCr to the version service operator params +func (o *VersionServiceOperatorParams) WithHelmDeployCr(helmDeployCr *bool) *VersionServiceOperatorParams { + o.SetHelmDeployCr(helmDeployCr) + return o +} + +// SetHelmDeployCr adds the helmDeployCr to the version service operator params +func (o *VersionServiceOperatorParams) SetHelmDeployCr(helmDeployCr *bool) { + o.HelmDeployCr = helmDeployCr +} + +// WithHelmDeployOperator adds the helmDeployOperator to the version service operator params +func (o *VersionServiceOperatorParams) WithHelmDeployOperator(helmDeployOperator *bool) *VersionServiceOperatorParams { + o.SetHelmDeployOperator(helmDeployOperator) + return o +} + +// SetHelmDeployOperator adds the helmDeployOperator to the version service operator params +func (o *VersionServiceOperatorParams) SetHelmDeployOperator(helmDeployOperator *bool) { + o.HelmDeployOperator = helmDeployOperator +} + // WithKubeVersion adds the kubeVersion to the version service operator params func (o *VersionServiceOperatorParams) WithKubeVersion(kubeVersion *string) *VersionServiceOperatorParams { o.SetKubeVersion(kubeVersion) @@ -276,6 +357,28 @@ func (o *VersionServiceOperatorParams) SetOperatorVersion(operatorVersion string o.OperatorVersion = operatorVersion } +// WithPhysicalBackupScheduled adds the physicalBackupScheduled to the version service operator params +func (o *VersionServiceOperatorParams) WithPhysicalBackupScheduled(physicalBackupScheduled *bool) *VersionServiceOperatorParams { + o.SetPhysicalBackupScheduled(physicalBackupScheduled) + return o +} + +// SetPhysicalBackupScheduled adds the physicalBackupScheduled to the version service operator params +func (o *VersionServiceOperatorParams) SetPhysicalBackupScheduled(physicalBackupScheduled *bool) { + o.PhysicalBackupScheduled = physicalBackupScheduled +} + +// WithPitrEnabled adds the pitrEnabled to the version service operator params +func (o *VersionServiceOperatorParams) WithPitrEnabled(pitrEnabled *bool) *VersionServiceOperatorParams { + o.SetPitrEnabled(pitrEnabled) + return o +} + +// SetPitrEnabled adds the pitrEnabled to the version service operator params +func (o *VersionServiceOperatorParams) SetPitrEnabled(pitrEnabled *bool) { + o.PitrEnabled = pitrEnabled +} + // WithPlatform adds the platform to the version service operator params func (o *VersionServiceOperatorParams) WithPlatform(platform *string) *VersionServiceOperatorParams { o.SetPlatform(platform) @@ -287,6 +390,17 @@ func (o *VersionServiceOperatorParams) SetPlatform(platform *string) { o.Platform = platform } +// WithPmmEnabled adds the pmmEnabled to the version service operator params +func (o *VersionServiceOperatorParams) WithPmmEnabled(pmmEnabled *bool) *VersionServiceOperatorParams { + o.SetPmmEnabled(pmmEnabled) + return o +} + +// SetPmmEnabled adds the pmmEnabled to the version service operator params +func (o *VersionServiceOperatorParams) SetPmmEnabled(pmmEnabled *bool) { + o.PmmEnabled = pmmEnabled +} + // WithPmmVersion adds the pmmVersion to the version service operator params func (o *VersionServiceOperatorParams) WithPmmVersion(pmmVersion *string) *VersionServiceOperatorParams { o.SetPmmVersion(pmmVersion) @@ -331,6 +445,28 @@ func (o *VersionServiceOperatorParams) SetShardingEnabled(shardingEnabled *bool) o.ShardingEnabled = shardingEnabled } +// WithSidecarsUsed adds the sidecarsUsed to the version service operator params +func (o *VersionServiceOperatorParams) WithSidecarsUsed(sidecarsUsed *bool) *VersionServiceOperatorParams { + o.SetSidecarsUsed(sidecarsUsed) + return o +} + +// SetSidecarsUsed adds the sidecarsUsed to the version service operator params +func (o *VersionServiceOperatorParams) SetSidecarsUsed(sidecarsUsed *bool) { + o.SidecarsUsed = sidecarsUsed +} + +// WithUserManagementEnabled adds the userManagementEnabled to the version service operator params +func (o *VersionServiceOperatorParams) WithUserManagementEnabled(userManagementEnabled *bool) *VersionServiceOperatorParams { + o.SetUserManagementEnabled(userManagementEnabled) + return o +} + +// SetUserManagementEnabled adds the userManagementEnabled to the version service operator params +func (o *VersionServiceOperatorParams) SetUserManagementEnabled(userManagementEnabled *bool) { + o.UserManagementEnabled = userManagementEnabled +} + // WriteToRequest writes these params to a swagger request func (o *VersionServiceOperatorParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { @@ -356,6 +492,40 @@ func (o *VersionServiceOperatorParams) WriteToRequest(r runtime.ClientRequest, r } } + if o.BackupsEnabled != nil { + + // query param backupsEnabled + var qrBackupsEnabled bool + + if o.BackupsEnabled != nil { + qrBackupsEnabled = *o.BackupsEnabled + } + qBackupsEnabled := swag.FormatBool(qrBackupsEnabled) + if qBackupsEnabled != "" { + + if err := r.SetQueryParam("backupsEnabled", qBackupsEnabled); err != nil { + return err + } + } + } + + if o.ClusterSize != nil { + + // query param clusterSize + var qrClusterSize int32 + + if o.ClusterSize != nil { + qrClusterSize = *o.ClusterSize + } + qClusterSize := swag.FormatInt32(qrClusterSize) + if qClusterSize != "" { + + if err := r.SetQueryParam("clusterSize", qClusterSize); err != nil { + return err + } + } + } + if o.ClusterWideEnabled != nil { // query param clusterWideEnabled @@ -407,6 +577,23 @@ func (o *VersionServiceOperatorParams) WriteToRequest(r runtime.ClientRequest, r } } + if o.Extensions != nil { + + // query param extensions + var qrExtensions string + + if o.Extensions != nil { + qrExtensions = *o.Extensions + } + qExtensions := qrExtensions + if qExtensions != "" { + + if err := r.SetQueryParam("extensions", qExtensions); err != nil { + return err + } + } + } + if o.HaproxyVersion != nil { // query param haproxyVersion @@ -441,6 +628,40 @@ func (o *VersionServiceOperatorParams) WriteToRequest(r runtime.ClientRequest, r } } + if o.HelmDeployCr != nil { + + // query param helmDeployCr + var qrHelmDeployCr bool + + if o.HelmDeployCr != nil { + qrHelmDeployCr = *o.HelmDeployCr + } + qHelmDeployCr := swag.FormatBool(qrHelmDeployCr) + if qHelmDeployCr != "" { + + if err := r.SetQueryParam("helmDeployCr", qHelmDeployCr); err != nil { + return err + } + } + } + + if o.HelmDeployOperator != nil { + + // query param helmDeployOperator + var qrHelmDeployOperator bool + + if o.HelmDeployOperator != nil { + qrHelmDeployOperator = *o.HelmDeployOperator + } + qHelmDeployOperator := swag.FormatBool(qrHelmDeployOperator) + if qHelmDeployOperator != "" { + + if err := r.SetQueryParam("helmDeployOperator", qHelmDeployOperator); err != nil { + return err + } + } + } + if o.KubeVersion != nil { // query param kubeVersion @@ -497,6 +718,40 @@ func (o *VersionServiceOperatorParams) WriteToRequest(r runtime.ClientRequest, r return err } + if o.PhysicalBackupScheduled != nil { + + // query param physicalBackupScheduled + var qrPhysicalBackupScheduled bool + + if o.PhysicalBackupScheduled != nil { + qrPhysicalBackupScheduled = *o.PhysicalBackupScheduled + } + qPhysicalBackupScheduled := swag.FormatBool(qrPhysicalBackupScheduled) + if qPhysicalBackupScheduled != "" { + + if err := r.SetQueryParam("physicalBackupScheduled", qPhysicalBackupScheduled); err != nil { + return err + } + } + } + + if o.PitrEnabled != nil { + + // query param pitrEnabled + var qrPitrEnabled bool + + if o.PitrEnabled != nil { + qrPitrEnabled = *o.PitrEnabled + } + qPitrEnabled := swag.FormatBool(qrPitrEnabled) + if qPitrEnabled != "" { + + if err := r.SetQueryParam("pitrEnabled", qPitrEnabled); err != nil { + return err + } + } + } + if o.Platform != nil { // query param platform @@ -514,6 +769,23 @@ func (o *VersionServiceOperatorParams) WriteToRequest(r runtime.ClientRequest, r } } + if o.PmmEnabled != nil { + + // query param pmmEnabled + var qrPmmEnabled bool + + if o.PmmEnabled != nil { + qrPmmEnabled = *o.PmmEnabled + } + qPmmEnabled := swag.FormatBool(qrPmmEnabled) + if qPmmEnabled != "" { + + if err := r.SetQueryParam("pmmEnabled", qPmmEnabled); err != nil { + return err + } + } + } + if o.PmmVersion != nil { // query param pmmVersion @@ -570,6 +842,40 @@ func (o *VersionServiceOperatorParams) WriteToRequest(r runtime.ClientRequest, r } } + if o.SidecarsUsed != nil { + + // query param sidecarsUsed + var qrSidecarsUsed bool + + if o.SidecarsUsed != nil { + qrSidecarsUsed = *o.SidecarsUsed + } + qSidecarsUsed := swag.FormatBool(qrSidecarsUsed) + if qSidecarsUsed != "" { + + if err := r.SetQueryParam("sidecarsUsed", qSidecarsUsed); err != nil { + return err + } + } + } + + if o.UserManagementEnabled != nil { + + // query param userManagementEnabled + var qrUserManagementEnabled bool + + if o.UserManagementEnabled != nil { + qrUserManagementEnabled = *o.UserManagementEnabled + } + qUserManagementEnabled := swag.FormatBool(qrUserManagementEnabled) + if qUserManagementEnabled != "" { + + if err := r.SetQueryParam("userManagementEnabled", qUserManagementEnabled); err != nil { + return err + } + } + } + if len(res) > 0 { return errors.CompositeValidationError(res...) } diff --git a/version/client/version_service/version_service_operator_responses.go b/version/client/version_service/version_service_operator_responses.go index 88f2a8dfcc..a4af7f3ebc 100644 --- a/version/client/version_service/version_service_operator_responses.go +++ b/version/client/version_service/version_service_operator_responses.go @@ -6,6 +6,7 @@ package version_service // Editing this file might prove futile when you re-run the swagger generate command import ( + "encoding/json" "fmt" "io" @@ -55,9 +56,46 @@ type VersionServiceOperatorOK struct { Payload *models.VersionOperatorResponse } +// IsSuccess returns true when this version service operator o k response has a 2xx status code +func (o *VersionServiceOperatorOK) IsSuccess() bool { + return true +} + +// IsRedirect returns true when this version service operator o k response has a 3xx status code +func (o *VersionServiceOperatorOK) IsRedirect() bool { + return false +} + +// IsClientError returns true when this version service operator o k response has a 4xx status code +func (o *VersionServiceOperatorOK) IsClientError() bool { + return false +} + +// IsServerError returns true when this version service operator o k response has a 5xx status code +func (o *VersionServiceOperatorOK) IsServerError() bool { + return false +} + +// IsCode returns true when this version service operator o k response a status code equal to that given +func (o *VersionServiceOperatorOK) IsCode(code int) bool { + return code == 200 +} + +// Code gets the status code for the version service operator o k response +func (o *VersionServiceOperatorOK) Code() int { + return 200 +} + func (o *VersionServiceOperatorOK) Error() string { - return fmt.Sprintf("[GET /versions/v1/{product}/{operatorVersion}][%d] versionServiceOperatorOK %+v", 200, o.Payload) + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /versions/v1/{product}/{operatorVersion}][%d] versionServiceOperatorOK %s", 200, payload) +} + +func (o *VersionServiceOperatorOK) String() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /versions/v1/{product}/{operatorVersion}][%d] versionServiceOperatorOK %s", 200, payload) } + func (o *VersionServiceOperatorOK) GetPayload() *models.VersionOperatorResponse { return o.Payload } @@ -84,7 +122,7 @@ func NewVersionServiceOperatorDefault(code int) *VersionServiceOperatorDefault { /* VersionServiceOperatorDefault describes a response with status code -1, with default header values. -An unexpected error response +An unexpected error response. */ type VersionServiceOperatorDefault struct { _statusCode int @@ -92,14 +130,46 @@ type VersionServiceOperatorDefault struct { Payload *models.GooglerpcStatus } +// IsSuccess returns true when this version service operator default response has a 2xx status code +func (o *VersionServiceOperatorDefault) IsSuccess() bool { + return o._statusCode/100 == 2 +} + +// IsRedirect returns true when this version service operator default response has a 3xx status code +func (o *VersionServiceOperatorDefault) IsRedirect() bool { + return o._statusCode/100 == 3 +} + +// IsClientError returns true when this version service operator default response has a 4xx status code +func (o *VersionServiceOperatorDefault) IsClientError() bool { + return o._statusCode/100 == 4 +} + +// IsServerError returns true when this version service operator default response has a 5xx status code +func (o *VersionServiceOperatorDefault) IsServerError() bool { + return o._statusCode/100 == 5 +} + +// IsCode returns true when this version service operator default response a status code equal to that given +func (o *VersionServiceOperatorDefault) IsCode(code int) bool { + return o._statusCode == code +} + // Code gets the status code for the version service operator default response func (o *VersionServiceOperatorDefault) Code() int { return o._statusCode } func (o *VersionServiceOperatorDefault) Error() string { - return fmt.Sprintf("[GET /versions/v1/{product}/{operatorVersion}][%d] VersionService_Operator default %+v", o._statusCode, o.Payload) + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /versions/v1/{product}/{operatorVersion}][%d] VersionService_Operator default %s", o._statusCode, payload) } + +func (o *VersionServiceOperatorDefault) String() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /versions/v1/{product}/{operatorVersion}][%d] VersionService_Operator default %s", o._statusCode, payload) +} + func (o *VersionServiceOperatorDefault) GetPayload() *models.GooglerpcStatus { return o.Payload } diff --git a/version/client/version_service/version_service_product_parameters.go b/version/client/version_service/version_service_product_parameters.go index cb82db85d1..22a03d3adc 100644 --- a/version/client/version_service/version_service_product_parameters.go +++ b/version/client/version_service/version_service_product_parameters.go @@ -65,9 +65,15 @@ type VersionServiceProductParams struct { // BackupVersion. BackupVersion *string - // ClusterWideEnabled. + // BackupsEnabled. + BackupsEnabled *bool + + // ClusterSize. // - // Format: boolean + // Format: int32 + ClusterSize *int32 + + // ClusterWideEnabled. ClusterWideEnabled *bool // CustomResourceUID. @@ -76,14 +82,21 @@ type VersionServiceProductParams struct { // DatabaseVersion. DatabaseVersion *string + // Extensions. + Extensions *string + // HaproxyVersion. HaproxyVersion *string // HashicorpVaultEnabled. - // - // Format: boolean HashicorpVaultEnabled *bool + // HelmDeployCr. + HelmDeployCr *bool + + // HelmDeployOperator. + HelmDeployOperator *bool + // KubeVersion. KubeVersion *string @@ -93,9 +106,18 @@ type VersionServiceProductParams struct { // NamespaceUID. NamespaceUID *string + // PhysicalBackupScheduled. + PhysicalBackupScheduled *bool + + // PitrEnabled. + PitrEnabled *bool + // Platform. Platform *string + // PmmEnabled. + PmmEnabled *bool + // PmmVersion. PmmVersion *string @@ -106,10 +128,14 @@ type VersionServiceProductParams struct { ProxysqlVersion *string // ShardingEnabled. - // - // Format: boolean ShardingEnabled *bool + // SidecarsUsed. + SidecarsUsed *bool + + // UserManagementEnabled. + UserManagementEnabled *bool + timeout time.Duration Context context.Context HTTPClient *http.Client @@ -174,6 +200,28 @@ func (o *VersionServiceProductParams) SetBackupVersion(backupVersion *string) { o.BackupVersion = backupVersion } +// WithBackupsEnabled adds the backupsEnabled to the version service product params +func (o *VersionServiceProductParams) WithBackupsEnabled(backupsEnabled *bool) *VersionServiceProductParams { + o.SetBackupsEnabled(backupsEnabled) + return o +} + +// SetBackupsEnabled adds the backupsEnabled to the version service product params +func (o *VersionServiceProductParams) SetBackupsEnabled(backupsEnabled *bool) { + o.BackupsEnabled = backupsEnabled +} + +// WithClusterSize adds the clusterSize to the version service product params +func (o *VersionServiceProductParams) WithClusterSize(clusterSize *int32) *VersionServiceProductParams { + o.SetClusterSize(clusterSize) + return o +} + +// SetClusterSize adds the clusterSize to the version service product params +func (o *VersionServiceProductParams) SetClusterSize(clusterSize *int32) { + o.ClusterSize = clusterSize +} + // WithClusterWideEnabled adds the clusterWideEnabled to the version service product params func (o *VersionServiceProductParams) WithClusterWideEnabled(clusterWideEnabled *bool) *VersionServiceProductParams { o.SetClusterWideEnabled(clusterWideEnabled) @@ -207,6 +255,17 @@ func (o *VersionServiceProductParams) SetDatabaseVersion(databaseVersion *string o.DatabaseVersion = databaseVersion } +// WithExtensions adds the extensions to the version service product params +func (o *VersionServiceProductParams) WithExtensions(extensions *string) *VersionServiceProductParams { + o.SetExtensions(extensions) + return o +} + +// SetExtensions adds the extensions to the version service product params +func (o *VersionServiceProductParams) SetExtensions(extensions *string) { + o.Extensions = extensions +} + // WithHaproxyVersion adds the haproxyVersion to the version service product params func (o *VersionServiceProductParams) WithHaproxyVersion(haproxyVersion *string) *VersionServiceProductParams { o.SetHaproxyVersion(haproxyVersion) @@ -229,6 +288,28 @@ func (o *VersionServiceProductParams) SetHashicorpVaultEnabled(hashicorpVaultEna o.HashicorpVaultEnabled = hashicorpVaultEnabled } +// WithHelmDeployCr adds the helmDeployCr to the version service product params +func (o *VersionServiceProductParams) WithHelmDeployCr(helmDeployCr *bool) *VersionServiceProductParams { + o.SetHelmDeployCr(helmDeployCr) + return o +} + +// SetHelmDeployCr adds the helmDeployCr to the version service product params +func (o *VersionServiceProductParams) SetHelmDeployCr(helmDeployCr *bool) { + o.HelmDeployCr = helmDeployCr +} + +// WithHelmDeployOperator adds the helmDeployOperator to the version service product params +func (o *VersionServiceProductParams) WithHelmDeployOperator(helmDeployOperator *bool) *VersionServiceProductParams { + o.SetHelmDeployOperator(helmDeployOperator) + return o +} + +// SetHelmDeployOperator adds the helmDeployOperator to the version service product params +func (o *VersionServiceProductParams) SetHelmDeployOperator(helmDeployOperator *bool) { + o.HelmDeployOperator = helmDeployOperator +} + // WithKubeVersion adds the kubeVersion to the version service product params func (o *VersionServiceProductParams) WithKubeVersion(kubeVersion *string) *VersionServiceProductParams { o.SetKubeVersion(kubeVersion) @@ -262,6 +343,28 @@ func (o *VersionServiceProductParams) SetNamespaceUID(namespaceUID *string) { o.NamespaceUID = namespaceUID } +// WithPhysicalBackupScheduled adds the physicalBackupScheduled to the version service product params +func (o *VersionServiceProductParams) WithPhysicalBackupScheduled(physicalBackupScheduled *bool) *VersionServiceProductParams { + o.SetPhysicalBackupScheduled(physicalBackupScheduled) + return o +} + +// SetPhysicalBackupScheduled adds the physicalBackupScheduled to the version service product params +func (o *VersionServiceProductParams) SetPhysicalBackupScheduled(physicalBackupScheduled *bool) { + o.PhysicalBackupScheduled = physicalBackupScheduled +} + +// WithPitrEnabled adds the pitrEnabled to the version service product params +func (o *VersionServiceProductParams) WithPitrEnabled(pitrEnabled *bool) *VersionServiceProductParams { + o.SetPitrEnabled(pitrEnabled) + return o +} + +// SetPitrEnabled adds the pitrEnabled to the version service product params +func (o *VersionServiceProductParams) SetPitrEnabled(pitrEnabled *bool) { + o.PitrEnabled = pitrEnabled +} + // WithPlatform adds the platform to the version service product params func (o *VersionServiceProductParams) WithPlatform(platform *string) *VersionServiceProductParams { o.SetPlatform(platform) @@ -273,6 +376,17 @@ func (o *VersionServiceProductParams) SetPlatform(platform *string) { o.Platform = platform } +// WithPmmEnabled adds the pmmEnabled to the version service product params +func (o *VersionServiceProductParams) WithPmmEnabled(pmmEnabled *bool) *VersionServiceProductParams { + o.SetPmmEnabled(pmmEnabled) + return o +} + +// SetPmmEnabled adds the pmmEnabled to the version service product params +func (o *VersionServiceProductParams) SetPmmEnabled(pmmEnabled *bool) { + o.PmmEnabled = pmmEnabled +} + // WithPmmVersion adds the pmmVersion to the version service product params func (o *VersionServiceProductParams) WithPmmVersion(pmmVersion *string) *VersionServiceProductParams { o.SetPmmVersion(pmmVersion) @@ -317,6 +431,28 @@ func (o *VersionServiceProductParams) SetShardingEnabled(shardingEnabled *bool) o.ShardingEnabled = shardingEnabled } +// WithSidecarsUsed adds the sidecarsUsed to the version service product params +func (o *VersionServiceProductParams) WithSidecarsUsed(sidecarsUsed *bool) *VersionServiceProductParams { + o.SetSidecarsUsed(sidecarsUsed) + return o +} + +// SetSidecarsUsed adds the sidecarsUsed to the version service product params +func (o *VersionServiceProductParams) SetSidecarsUsed(sidecarsUsed *bool) { + o.SidecarsUsed = sidecarsUsed +} + +// WithUserManagementEnabled adds the userManagementEnabled to the version service product params +func (o *VersionServiceProductParams) WithUserManagementEnabled(userManagementEnabled *bool) *VersionServiceProductParams { + o.SetUserManagementEnabled(userManagementEnabled) + return o +} + +// SetUserManagementEnabled adds the userManagementEnabled to the version service product params +func (o *VersionServiceProductParams) SetUserManagementEnabled(userManagementEnabled *bool) { + o.UserManagementEnabled = userManagementEnabled +} + // WriteToRequest writes these params to a swagger request func (o *VersionServiceProductParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { @@ -342,6 +478,40 @@ func (o *VersionServiceProductParams) WriteToRequest(r runtime.ClientRequest, re } } + if o.BackupsEnabled != nil { + + // query param backupsEnabled + var qrBackupsEnabled bool + + if o.BackupsEnabled != nil { + qrBackupsEnabled = *o.BackupsEnabled + } + qBackupsEnabled := swag.FormatBool(qrBackupsEnabled) + if qBackupsEnabled != "" { + + if err := r.SetQueryParam("backupsEnabled", qBackupsEnabled); err != nil { + return err + } + } + } + + if o.ClusterSize != nil { + + // query param clusterSize + var qrClusterSize int32 + + if o.ClusterSize != nil { + qrClusterSize = *o.ClusterSize + } + qClusterSize := swag.FormatInt32(qrClusterSize) + if qClusterSize != "" { + + if err := r.SetQueryParam("clusterSize", qClusterSize); err != nil { + return err + } + } + } + if o.ClusterWideEnabled != nil { // query param clusterWideEnabled @@ -393,6 +563,23 @@ func (o *VersionServiceProductParams) WriteToRequest(r runtime.ClientRequest, re } } + if o.Extensions != nil { + + // query param extensions + var qrExtensions string + + if o.Extensions != nil { + qrExtensions = *o.Extensions + } + qExtensions := qrExtensions + if qExtensions != "" { + + if err := r.SetQueryParam("extensions", qExtensions); err != nil { + return err + } + } + } + if o.HaproxyVersion != nil { // query param haproxyVersion @@ -427,6 +614,40 @@ func (o *VersionServiceProductParams) WriteToRequest(r runtime.ClientRequest, re } } + if o.HelmDeployCr != nil { + + // query param helmDeployCr + var qrHelmDeployCr bool + + if o.HelmDeployCr != nil { + qrHelmDeployCr = *o.HelmDeployCr + } + qHelmDeployCr := swag.FormatBool(qrHelmDeployCr) + if qHelmDeployCr != "" { + + if err := r.SetQueryParam("helmDeployCr", qHelmDeployCr); err != nil { + return err + } + } + } + + if o.HelmDeployOperator != nil { + + // query param helmDeployOperator + var qrHelmDeployOperator bool + + if o.HelmDeployOperator != nil { + qrHelmDeployOperator = *o.HelmDeployOperator + } + qHelmDeployOperator := swag.FormatBool(qrHelmDeployOperator) + if qHelmDeployOperator != "" { + + if err := r.SetQueryParam("helmDeployOperator", qHelmDeployOperator); err != nil { + return err + } + } + } + if o.KubeVersion != nil { // query param kubeVersion @@ -478,6 +699,40 @@ func (o *VersionServiceProductParams) WriteToRequest(r runtime.ClientRequest, re } } + if o.PhysicalBackupScheduled != nil { + + // query param physicalBackupScheduled + var qrPhysicalBackupScheduled bool + + if o.PhysicalBackupScheduled != nil { + qrPhysicalBackupScheduled = *o.PhysicalBackupScheduled + } + qPhysicalBackupScheduled := swag.FormatBool(qrPhysicalBackupScheduled) + if qPhysicalBackupScheduled != "" { + + if err := r.SetQueryParam("physicalBackupScheduled", qPhysicalBackupScheduled); err != nil { + return err + } + } + } + + if o.PitrEnabled != nil { + + // query param pitrEnabled + var qrPitrEnabled bool + + if o.PitrEnabled != nil { + qrPitrEnabled = *o.PitrEnabled + } + qPitrEnabled := swag.FormatBool(qrPitrEnabled) + if qPitrEnabled != "" { + + if err := r.SetQueryParam("pitrEnabled", qPitrEnabled); err != nil { + return err + } + } + } + if o.Platform != nil { // query param platform @@ -495,6 +750,23 @@ func (o *VersionServiceProductParams) WriteToRequest(r runtime.ClientRequest, re } } + if o.PmmEnabled != nil { + + // query param pmmEnabled + var qrPmmEnabled bool + + if o.PmmEnabled != nil { + qrPmmEnabled = *o.PmmEnabled + } + qPmmEnabled := swag.FormatBool(qrPmmEnabled) + if qPmmEnabled != "" { + + if err := r.SetQueryParam("pmmEnabled", qPmmEnabled); err != nil { + return err + } + } + } + if o.PmmVersion != nil { // query param pmmVersion @@ -551,6 +823,40 @@ func (o *VersionServiceProductParams) WriteToRequest(r runtime.ClientRequest, re } } + if o.SidecarsUsed != nil { + + // query param sidecarsUsed + var qrSidecarsUsed bool + + if o.SidecarsUsed != nil { + qrSidecarsUsed = *o.SidecarsUsed + } + qSidecarsUsed := swag.FormatBool(qrSidecarsUsed) + if qSidecarsUsed != "" { + + if err := r.SetQueryParam("sidecarsUsed", qSidecarsUsed); err != nil { + return err + } + } + } + + if o.UserManagementEnabled != nil { + + // query param userManagementEnabled + var qrUserManagementEnabled bool + + if o.UserManagementEnabled != nil { + qrUserManagementEnabled = *o.UserManagementEnabled + } + qUserManagementEnabled := swag.FormatBool(qrUserManagementEnabled) + if qUserManagementEnabled != "" { + + if err := r.SetQueryParam("userManagementEnabled", qUserManagementEnabled); err != nil { + return err + } + } + } + if len(res) > 0 { return errors.CompositeValidationError(res...) } diff --git a/version/client/version_service/version_service_product_responses.go b/version/client/version_service/version_service_product_responses.go index 74b9e8e4f5..f1c031ae08 100644 --- a/version/client/version_service/version_service_product_responses.go +++ b/version/client/version_service/version_service_product_responses.go @@ -6,6 +6,7 @@ package version_service // Editing this file might prove futile when you re-run the swagger generate command import ( + "encoding/json" "fmt" "io" @@ -55,9 +56,46 @@ type VersionServiceProductOK struct { Payload *models.VersionProductResponse } +// IsSuccess returns true when this version service product o k response has a 2xx status code +func (o *VersionServiceProductOK) IsSuccess() bool { + return true +} + +// IsRedirect returns true when this version service product o k response has a 3xx status code +func (o *VersionServiceProductOK) IsRedirect() bool { + return false +} + +// IsClientError returns true when this version service product o k response has a 4xx status code +func (o *VersionServiceProductOK) IsClientError() bool { + return false +} + +// IsServerError returns true when this version service product o k response has a 5xx status code +func (o *VersionServiceProductOK) IsServerError() bool { + return false +} + +// IsCode returns true when this version service product o k response a status code equal to that given +func (o *VersionServiceProductOK) IsCode(code int) bool { + return code == 200 +} + +// Code gets the status code for the version service product o k response +func (o *VersionServiceProductOK) Code() int { + return 200 +} + func (o *VersionServiceProductOK) Error() string { - return fmt.Sprintf("[GET /versions/v1/{product}][%d] versionServiceProductOK %+v", 200, o.Payload) + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /versions/v1/{product}][%d] versionServiceProductOK %s", 200, payload) +} + +func (o *VersionServiceProductOK) String() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /versions/v1/{product}][%d] versionServiceProductOK %s", 200, payload) } + func (o *VersionServiceProductOK) GetPayload() *models.VersionProductResponse { return o.Payload } @@ -84,7 +122,7 @@ func NewVersionServiceProductDefault(code int) *VersionServiceProductDefault { /* VersionServiceProductDefault describes a response with status code -1, with default header values. -An unexpected error response +An unexpected error response. */ type VersionServiceProductDefault struct { _statusCode int @@ -92,14 +130,46 @@ type VersionServiceProductDefault struct { Payload *models.GooglerpcStatus } +// IsSuccess returns true when this version service product default response has a 2xx status code +func (o *VersionServiceProductDefault) IsSuccess() bool { + return o._statusCode/100 == 2 +} + +// IsRedirect returns true when this version service product default response has a 3xx status code +func (o *VersionServiceProductDefault) IsRedirect() bool { + return o._statusCode/100 == 3 +} + +// IsClientError returns true when this version service product default response has a 4xx status code +func (o *VersionServiceProductDefault) IsClientError() bool { + return o._statusCode/100 == 4 +} + +// IsServerError returns true when this version service product default response has a 5xx status code +func (o *VersionServiceProductDefault) IsServerError() bool { + return o._statusCode/100 == 5 +} + +// IsCode returns true when this version service product default response a status code equal to that given +func (o *VersionServiceProductDefault) IsCode(code int) bool { + return o._statusCode == code +} + // Code gets the status code for the version service product default response func (o *VersionServiceProductDefault) Code() int { return o._statusCode } func (o *VersionServiceProductDefault) Error() string { - return fmt.Sprintf("[GET /versions/v1/{product}][%d] VersionService_Product default %+v", o._statusCode, o.Payload) + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /versions/v1/{product}][%d] VersionService_Product default %s", o._statusCode, payload) } + +func (o *VersionServiceProductDefault) String() string { + payload, _ := json.Marshal(o.Payload) + return fmt.Sprintf("[GET /versions/v1/{product}][%d] VersionService_Product default %s", o._statusCode, payload) +} + func (o *VersionServiceProductDefault) GetPayload() *models.GooglerpcStatus { return o.Payload } diff --git a/version/version.go b/version/version.go index 3e5b1d8345..edc8424e7e 100644 --- a/version/version.go +++ b/version/version.go @@ -1,5 +1,5 @@ package version var ( - Version = "1.16.0" + Version = "1.17.0" )