apiVersion: apps/v1
kind: StatefulSet
metadata:
  annotations:
    percona.com/last-config-hash: eyJyZXBsaWNhcyI6MSwic2VsZWN0b3IiOnsibWF0Y2hMYWJlbHMiOnsiYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50IjoiaGFwcm94eSIsImFwcC5rdWJlcm5ldGVzLmlvL2luc3RhbmNlIjoicGVyY29uYS14dHJhZGIiLCJhcHAua3ViZXJuZXRlcy5pby9tYW5hZ2VkLWJ5IjoicGVyY29uYS14dHJhZGItY2x1c3Rlci1vcGVyYXRvciIsImFwcC5rdWJlcm5ldGVzLmlvL25hbWUiOiJwZXJjb25hLXh0cmFkYi1jbHVzdGVyIiwiYXBwLmt1YmVybmV0ZXMuaW8vcGFydC1vZiI6InBlcmNvbmEteHRyYWRiLWNsdXN0ZXIifX0sInRlbXBsYXRlIjp7Im1ldGFkYXRhIjp7ImNyZWF0aW9uVGltZXN0YW1wIjpudWxsLCJsYWJlbHMiOnsiYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50IjoiaGFwcm94eSIsImFwcC5rdWJlcm5ldGVzLmlvL2luc3RhbmNlIjoicGVyY29uYS14dHJhZGIiLCJhcHAua3ViZXJuZXRlcy5pby9tYW5hZ2VkLWJ5IjoicGVyY29uYS14dHJhZGItY2x1c3Rlci1vcGVyYXRvciIsImFwcC5rdWJlcm5ldGVzLmlvL25hbWUiOiJwZXJjb25hLXh0cmFkYi1jbHVzdGVyIiwiYXBwLmt1YmVybmV0ZXMuaW8vcGFydC1vZiI6InBlcmNvbmEteHRyYWRiLWNsdXN0ZXIifSwiYW5ub3RhdGlvbnMiOnsicGVyY29uYS5jb20vY29uZmlndXJhdGlvbi1oYXNoIjoiN2NkODU0YWYwMTMxYTJkYzEyZTUzNTBmODU4ZWI4YjUifX0sInNwZWMiOnsidm9sdW1lcyI6W3sibmFtZSI6ImhhcHJveHktY3VzdG9tIiwiY29uZmlnTWFwIjp7Im5hbWUiOiJwZXJjb25hLXh0cmFkYi1oYXByb3h5Iiwib3B0aW9uYWwiOnRydWV9fSx7Im5hbWUiOiJoYXByb3h5LWF1dG8iLCJlbXB0eURpciI6e319LHsibmFtZSI6Im15c3FsLXVzZXJzLXNlY3JldC1maWxlIiwic2VjcmV0Ijp7InNlY3JldE5hbWUiOiJpbnRlcm5hbC1wZXJjb25hLXh0cmFkYiIsIm9wdGlvbmFsIjpmYWxzZX19LHsibmFtZSI6InBlcmNvbmEteHRyYWRiLWVudi12YXJzLWhhcHJveHkiLCJzZWNyZXQiOnsic2VjcmV0TmFtZSI6InBlcmNvbmEteHRyYWRiLWVudi12YXJzLWhhcHJveHkiLCJvcHRpb25hbCI6dHJ1ZX19LHsibmFtZSI6ImJpbiIsImVtcHR5RGlyIjp7fX1dLCJpbml0Q29udGFpbmVycyI6W3sibmFtZSI6InB4Yy1pbml0IiwiaW1hZ2UiOiJoYXJib3IuYXRtb3NwaGVyZS5kZXYvZG9ja2VyLmlvL3BlcmNvbmEvcGVyY29uYS14dHJhZGItY2x1c3Rlci1vcGVyYXRvcjoxLjEzLjAiLCJjb21tYW5kIjpbIi9weGMtaW5pdC1lbnRyeXBvaW50LnNoIl0sInJlc291cmNlcyI6e30sInZvbHVtZU1vdW50cyI6W3sibmFtZSI6ImJpbiIsIm1vdW50UGF0aCI6Ii92YXIvbGliL215c3FsIn1dLCJpbWFnZVB1bGxQb2xpY3kiOiJBbHdheXMifV0sImNvbnRhaW5lcnMiOlt7Im5hbWUiOiJoYXByb3h5IiwiaW1hZ2UiOiJoYXJib3IuYXRtb3NwaGVyZS5kZXYvZG9ja2VyLmlvL3BlcmNvbmEvcGVyY29uYS14dHJhZGItY2x1c3Rlci1vcGVyYXRvcjoxLjEzLjAtaGFwcm94eSIsInBvcnRzIjpbeyJuYW1lIjoibXlzcWwiLCJjb250YWluZXJQb3J0IjozMzA2fSx7Im5hbWUiOiJteXNxbC1yZXBsaWNhcyIsImNvbnRhaW5lclBvcnQiOjMzMDd9LHsibmFtZSI6InByb3h5LXByb3RvY29sIiwiY29udGFpbmVyUG9ydCI6MzMwOX0seyJuYW1lIjoibXlzcWwtYWRtaW4iLCJjb250YWluZXJQb3J0IjozMzA2Mn0seyJuYW1lIjoibXlzcWx4IiwiY29udGFpbmVyUG9ydCI6MzMwNjB9XSwiZW52RnJvbSI6W3sic2VjcmV0UmVmIjp7Im5hbWUiOiJwZXJjb25hLXh0cmFkYi1lbnYtdmFycy1oYXByb3h5Iiwib3B0aW9uYWwiOnRydWV9fV0sImVudiI6W3sibmFtZSI6IlBYQ19TRVJWSUNFIiwidmFsdWUiOiJwZXJjb25hLXh0cmFkYi1weGMifSx7Im5hbWUiOiJMSVZFTkVTU19DSEVDS19USU1FT1VUIiwidmFsdWUiOiI1In0seyJuYW1lIjoiUkVBRElORVNTX0NIRUNLX1RJTUVPVVQiLCJ2YWx1ZSI6IjEifV0sInJlc291cmNlcyI6e30sInZvbHVtZU1vdW50cyI6W3sibmFtZSI6ImhhcHJveHktY3VzdG9tIiwibW91bnRQYXRoIjoiL2V0Yy9oYXByb3h5LWN1c3RvbS8ifSx7Im5hbWUiOiJoYXByb3h5LWF1dG8iLCJtb3VudFBhdGgiOiIvZXRjL2hhcHJveHkvcHhjIn0seyJuYW1lIjoibXlzcWwtdXNlcnMtc2VjcmV0LWZpbGUiLCJtb3VudFBhdGgiOiIvZXRjL215c3FsL215c3FsLXVzZXJzLXNlY3JldCJ9LHsibmFtZSI6InBlcmNvbmEteHRyYWRiLWVudi12YXJzLWhhcHJveHkiLCJtb3VudFBhdGgiOiIvZXRjL215c3FsL2hhcHJveHktZW52LXNlY3JldCJ9XSwibGl2ZW5lc3NQcm9iZSI6eyJleGVjIjp7ImNvbW1hbmQiOlsiL3Vzci9sb2NhbC9iaW4vbGl2ZW5lc3MtY2hlY2suc2giXX0sImluaXRpYWxEZWxheVNlY29uZHMiOjYwLCJ0aW1lb3V0U2Vjb25kcyI6NSwicGVyaW9kU2Vjb25kcyI6MzAsInN1Y2Nlc3NUaHJlc2hvbGQiOjEsImZhaWx1cmVUaHJlc2hvbGQiOjR9LCJyZWFkaW5lc3NQcm9iZSI6eyJleGVjIjp7ImNvbW1hbmQiOlsiL3Vzci9sb2NhbC9iaW4vcmVhZGluZXNzLWNoZWNrLnNoIl19LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxNSwidGltZW91dFNlY29uZHMiOjEsInBlcmlvZFNlY29uZHMiOjV9LCJpbWFnZVB1bGxQb2xpY3kiOiJBbHdheXMifSx7Im5hbWUiOiJweGMtbW9uaXQiLCJpbWFnZSI6ImhhcmJvci5hdG1vc3BoZXJlLmRldi9kb2NrZXIuaW8vcGVyY29uYS9wZXJjb25hLXh0cmFkYi1jbHVzdGVyLW9wZXJhdG9yOjEuMTMuMC1oYXByb3h5IiwiYXJncyI6WyIvdXNyL2Jpbi9wZWVyLWxpc3QiLCItb24tY2hhbmdlPS91c3IvYmluL2FkZF9weGNfbm9kZXMuc2giLCItc2VydmljZT0kKFBYQ19TRVJWSUNFKSJdLCJlbnZGcm9tIjpbeyJzZWNyZXRSZWYiOnsibmFtZSI6InBlcmNvbmEteHRyYWRiLWVudi12YXJzLWhhcHJveHkiLCJvcHRpb25hbCI6dHJ1ZX19XSwiZW52IjpbeyJuYW1lIjoiUFhDX1NFUlZJQ0UiLCJ2YWx1ZSI6InBlcmNvbmEteHRyYWRiLXB4YyJ9XSwicmVzb3VyY2VzIjp7fSwidm9sdW1lTW91bnRzIjpbeyJuYW1lIjoiaGFwcm94eS1jdXN0b20iLCJtb3VudFBhdGgiOiIvZXRjL2hhcHJveHktY3VzdG9tLyJ9LHsibmFtZSI6ImhhcHJveHktYXV0byIsIm1vdW50UGF0aCI6Ii9ldGMvaGFwcm94eS9weGMifSx7Im5hbWUiOiJteXNxbC11c2Vycy1zZWNyZXQtZmlsZSIsIm1vdW50UGF0aCI6Ii9ldGMvbXlzcWwvbXlzcWwtdXNlcnMtc2VjcmV0In0seyJuYW1lIjoicGVyY29uYS14dHJhZGItZW52LXZhcnMtaGFwcm94eSIsIm1vdW50UGF0aCI6Ii9ldGMvbXlzcWwvaGFwcm94eS1lbnYtc2VjcmV0In1dLCJpbWFnZVB1bGxQb2xpY3kiOiJBbHdheXMifV0sInJlc3RhcnRQb2xpY3kiOiJBbHdheXMiLCJ0ZXJtaW5hdGlvbkdyYWNlUGVyaW9kU2Vjb25kcyI6MzAsImRuc1BvbGljeSI6IkNsdXN0ZXJGaXJzdCIsIm5vZGVTZWxlY3RvciI6eyJvcGVuc3RhY2stY29udHJvbC1wbGFuZSI6ImVuYWJsZWQifSwic2VydmljZUFjY291bnROYW1lIjoiZGVmYXVsdCIsInNlcnZpY2VBY2NvdW50IjoiZGVmYXVsdCIsImFmZmluaXR5Ijp7InBvZEFudGlBZmZpbml0eSI6eyJyZXF1aXJlZER1cmluZ1NjaGVkdWxpbmdJZ25vcmVkRHVyaW5nRXhlY3V0aW9uIjpbeyJsYWJlbFNlbGVjdG9yIjp7Im1hdGNoTGFiZWxzIjp7ImFwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudCI6ImhhcHJveHkiLCJhcHAua3ViZXJuZXRlcy5pby9pbnN0YW5jZSI6InBlcmNvbmEteHRyYWRiIiwiYXBwLmt1YmVybmV0ZXMuaW8vbWFuYWdlZC1ieSI6InBlcmNvbmEteHRyYWRiLWNsdXN0ZXItb3BlcmF0b3IiLCJhcHAua3ViZXJuZXRlcy5pby9uYW1lIjoicGVyY29uYS14dHJhZGItY2x1c3RlciIsImFwcC5rdWJlcm5ldGVzLmlvL3BhcnQtb2YiOiJwZXJjb25hLXh0cmFkYi1jbHVzdGVyIn19LCJ0b3BvbG9neUtleSI6Imt1YmVybmV0ZXMuaW8vaG9zdG5hbWUifV19fSwic2NoZWR1bGVyTmFtZSI6ImRlZmF1bHQtc2NoZWR1bGVyIn19LCJzZXJ2aWNlTmFtZSI6InBlcmNvbmEteHRyYWRiLWhhcHJveHkiLCJwb2RNYW5hZ2VtZW50UG9saWN5IjoiT3JkZXJlZFJlYWR5IiwidXBkYXRlU3RyYXRlZ3kiOnsidHlwZSI6IlJvbGxpbmdVcGRhdGUiLCJyb2xsaW5nVXBkYXRlIjp7InBhcnRpdGlvbiI6MH19LCJyZXZpc2lvbkhpc3RvcnlMaW1pdCI6MTAsInBlcnNpc3RlbnRWb2x1bWVDbGFpbVJldGVudGlvblBvbGljeSI6eyJ3aGVuRGVsZXRlZCI6IlJldGFpbiIsIndoZW5TY2FsZWQiOiJSZXRhaW4ifX0=
  creationTimestamp: "2026-04-09T06:02:49Z"
  generation: 1
  name: percona-xtradb-haproxy
  namespace: openstack
  ownerReferences:
  - apiVersion: pxc.percona.com/v1
    controller: true
    kind: PerconaXtraDBCluster
    name: percona-xtradb
    uid: 1452f47f-1bf4-4dd2-ae91-fe6abe393162
  resourceVersion: "2386"
  uid: a089cf2f-2cc5-40d8-a589-4effd178f6ae
spec:
  persistentVolumeClaimRetentionPolicy:
    whenDeleted: Retain
    whenScaled: Retain
  podManagementPolicy: OrderedReady
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app.kubernetes.io/component: haproxy
      app.kubernetes.io/instance: percona-xtradb
      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: percona-xtradb-haproxy
  template:
    metadata:
      annotations:
        percona.com/configuration-hash: 7cd854af0131a2dc12e5350f858eb8b5
      creationTimestamp: null
      labels:
        app.kubernetes.io/component: haproxy
        app.kubernetes.io/instance: percona-xtradb
        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: percona-xtradb
                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: PXC_SERVICE
          value: percona-xtradb-pxc
        - name: LIVENESS_CHECK_TIMEOUT
          value: "5"
        - name: READINESS_CHECK_TIMEOUT
          value: "1"
        envFrom:
        - secretRef:
            name: percona-xtradb-env-vars-haproxy
            optional: true
        image: harbor.atmosphere.dev/docker.io/percona/percona-xtradb-cluster-operator:1.13.0-haproxy
        imagePullPolicy: Always
        livenessProbe:
          exec:
            command:
            - /usr/local/bin/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:
            - /usr/local/bin/readiness-check.sh
          failureThreshold: 3
          initialDelaySeconds: 15
          periodSeconds: 5
          successThreshold: 1
          timeoutSeconds: 1
        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: percona-xtradb-env-vars-haproxy
      - args:
        - /usr/bin/peer-list
        - -on-change=/usr/bin/add_pxc_nodes.sh
        - -service=$(PXC_SERVICE)
        env:
        - name: PXC_SERVICE
          value: percona-xtradb-pxc
        envFrom:
        - secretRef:
            name: percona-xtradb-env-vars-haproxy
            optional: true
        image: harbor.atmosphere.dev/docker.io/percona/percona-xtradb-cluster-operator:1.13.0-haproxy
        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: percona-xtradb-env-vars-haproxy
      dnsPolicy: ClusterFirst
      initContainers:
      - command:
        - /pxc-init-entrypoint.sh
        image: harbor.atmosphere.dev/docker.io/percona/percona-xtradb-cluster-operator:1.13.0
        imagePullPolicy: Always
        name: pxc-init
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /var/lib/mysql
          name: bin
      nodeSelector:
        openstack-control-plane: enabled
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      serviceAccount: default
      serviceAccountName: default
      terminationGracePeriodSeconds: 30
      volumes:
      - configMap:
          defaultMode: 420
          name: percona-xtradb-haproxy
          optional: true
        name: haproxy-custom
      - emptyDir: {}
        name: haproxy-auto
      - name: mysql-users-secret-file
        secret:
          defaultMode: 420
          optional: false
          secretName: internal-percona-xtradb
      - name: percona-xtradb-env-vars-haproxy
        secret:
          defaultMode: 420
          optional: true
          secretName: percona-xtradb-env-vars-haproxy
      - emptyDir: {}
        name: bin
  updateStrategy:
    rollingUpdate:
      partition: 0
    type: RollingUpdate
status:
  availableReplicas: 1
  collisionCount: 0
  currentReplicas: 1
  currentRevision: percona-xtradb-haproxy-57848bf4d5
  observedGeneration: 1
  readyReplicas: 1
  replicas: 1
  updateRevision: percona-xtradb-haproxy-57848bf4d5
  updatedReplicas: 1
