apiVersion: apps/v1
kind: StatefulSet
metadata:
  annotations:
    percona.com/last-config-hash: eyJyZXBsaWNhcyI6MSwic2VsZWN0b3IiOnsibWF0Y2hMYWJlbHMiOnsiYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50IjoiaGFwcm94eSIsImFwcC5rdWJlcm5ldGVzLmlvL2luc3RhbmNlIjoicGVyY29uYS14dHJhZGIiLCJhcHAua3ViZXJuZXRlcy5pby9tYW5hZ2VkLWJ5IjoicGVyY29uYS14dHJhZGItY2x1c3Rlci1vcGVyYXRvciIsImFwcC5rdWJlcm5ldGVzLmlvL25hbWUiOiJwZXJjb25hLXh0cmFkYi1jbHVzdGVyIiwiYXBwLmt1YmVybmV0ZXMuaW8vcGFydC1vZiI6InBlcmNvbmEteHRyYWRiLWNsdXN0ZXIifX0sInRlbXBsYXRlIjp7Im1ldGFkYXRhIjp7ImNyZWF0aW9uVGltZXN0YW1wIjpudWxsLCJsYWJlbHMiOnsiYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50IjoiaGFwcm94eSIsImFwcC5rdWJlcm5ldGVzLmlvL2luc3RhbmNlIjoicGVyY29uYS14dHJhZGIiLCJhcHAua3ViZXJuZXRlcy5pby9tYW5hZ2VkLWJ5IjoicGVyY29uYS14dHJhZGItY2x1c3Rlci1vcGVyYXRvciIsImFwcC5rdWJlcm5ldGVzLmlvL25hbWUiOiJwZXJjb25hLXh0cmFkYi1jbHVzdGVyIiwiYXBwLmt1YmVybmV0ZXMuaW8vcGFydC1vZiI6InBlcmNvbmEteHRyYWRiLWNsdXN0ZXIifSwiYW5ub3RhdGlvbnMiOnsicGVyY29uYS5jb20vY29uZmlndXJhdGlvbi1oYXNoIjoiN2NkODU0YWYwMTMxYTJkYzEyZTUzNTBmODU4ZWI4YjUifX0sInNwZWMiOnsidm9sdW1lcyI6W3sibmFtZSI6ImhhcHJveHktY3VzdG9tIiwiY29uZmlnTWFwIjp7Im5hbWUiOiJwZXJjb25hLXh0cmFkYi1oYXByb3h5Iiwib3B0aW9uYWwiOnRydWV9fSx7Im5hbWUiOiJoYXByb3h5LWF1dG8iLCJlbXB0eURpciI6e319LHsibmFtZSI6Im15c3FsLXVzZXJzLXNlY3JldC1maWxlIiwic2VjcmV0Ijp7InNlY3JldE5hbWUiOiJpbnRlcm5hbC1wZXJjb25hLXh0cmFkYiIsIm9wdGlvbmFsIjpmYWxzZX19LHsibmFtZSI6InBlcmNvbmEteHRyYWRiLWVudi12YXJzLWhhcHJveHkiLCJzZWNyZXQiOnsic2VjcmV0TmFtZSI6InBlcmNvbmEteHRyYWRiLWVudi12YXJzLWhhcHJveHkiLCJvcHRpb25hbCI6dHJ1ZX19LHsibmFtZSI6ImJpbiIsImVtcHR5RGlyIjp7fX1dLCJpbml0Q29udGFpbmVycyI6W3sibmFtZSI6InB4Yy1pbml0IiwiaW1hZ2UiOiJkb2NrZXIuaW8vcGVyY29uYS9wZXJjb25hLXh0cmFkYi1jbHVzdGVyLW9wZXJhdG9yOjEuMTMuMCIsImNvbW1hbmQiOlsiL3B4Yy1pbml0LWVudHJ5cG9pbnQuc2giXSwicmVzb3VyY2VzIjp7fSwidm9sdW1lTW91bnRzIjpbeyJuYW1lIjoiYmluIiwibW91bnRQYXRoIjoiL3Zhci9saWIvbXlzcWwifV0sImltYWdlUHVsbFBvbGljeSI6IkFsd2F5cyJ9XSwiY29udGFpbmVycyI6W3sibmFtZSI6ImhhcHJveHkiLCJpbWFnZSI6ImRvY2tlci5pby9wZXJjb25hL3BlcmNvbmEteHRyYWRiLWNsdXN0ZXItb3BlcmF0b3I6MS4xMy4wLWhhcHJveHkiLCJwb3J0cyI6W3sibmFtZSI6Im15c3FsIiwiY29udGFpbmVyUG9ydCI6MzMwNn0seyJuYW1lIjoibXlzcWwtcmVwbGljYXMiLCJjb250YWluZXJQb3J0IjozMzA3fSx7Im5hbWUiOiJwcm94eS1wcm90b2NvbCIsImNvbnRhaW5lclBvcnQiOjMzMDl9LHsibmFtZSI6Im15c3FsLWFkbWluIiwiY29udGFpbmVyUG9ydCI6MzMwNjJ9LHsibmFtZSI6Im15c3FseCIsImNvbnRhaW5lclBvcnQiOjMzMDYwfV0sImVudkZyb20iOlt7InNlY3JldFJlZiI6eyJuYW1lIjoicGVyY29uYS14dHJhZGItZW52LXZhcnMtaGFwcm94eSIsIm9wdGlvbmFsIjp0cnVlfX1dLCJlbnYiOlt7Im5hbWUiOiJQWENfU0VSVklDRSIsInZhbHVlIjoicGVyY29uYS14dHJhZGItcHhjIn0seyJuYW1lIjoiTElWRU5FU1NfQ0hFQ0tfVElNRU9VVCIsInZhbHVlIjoiNSJ9LHsibmFtZSI6IlJFQURJTkVTU19DSEVDS19USU1FT1VUIiwidmFsdWUiOiIxIn1dLCJyZXNvdXJjZXMiOnt9LCJ2b2x1bWVNb3VudHMiOlt7Im5hbWUiOiJoYXByb3h5LWN1c3RvbSIsIm1vdW50UGF0aCI6Ii9ldGMvaGFwcm94eS1jdXN0b20vIn0seyJuYW1lIjoiaGFwcm94eS1hdXRvIiwibW91bnRQYXRoIjoiL2V0Yy9oYXByb3h5L3B4YyJ9LHsibmFtZSI6Im15c3FsLXVzZXJzLXNlY3JldC1maWxlIiwibW91bnRQYXRoIjoiL2V0Yy9teXNxbC9teXNxbC11c2Vycy1zZWNyZXQifSx7Im5hbWUiOiJwZXJjb25hLXh0cmFkYi1lbnYtdmFycy1oYXByb3h5IiwibW91bnRQYXRoIjoiL2V0Yy9teXNxbC9oYXByb3h5LWVudi1zZWNyZXQifV0sImxpdmVuZXNzUHJvYmUiOnsiZXhlYyI6eyJjb21tYW5kIjpbIi91c3IvbG9jYWwvYmluL2xpdmVuZXNzLWNoZWNrLnNoIl19LCJpbml0aWFsRGVsYXlTZWNvbmRzIjo2MCwidGltZW91dFNlY29uZHMiOjUsInBlcmlvZFNlY29uZHMiOjMwLCJzdWNjZXNzVGhyZXNob2xkIjoxLCJmYWlsdXJlVGhyZXNob2xkIjo0fSwicmVhZGluZXNzUHJvYmUiOnsiZXhlYyI6eyJjb21tYW5kIjpbIi91c3IvbG9jYWwvYmluL3JlYWRpbmVzcy1jaGVjay5zaCJdfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTUsInRpbWVvdXRTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwiaW1hZ2VQdWxsUG9saWN5IjoiQWx3YXlzIn0seyJuYW1lIjoicHhjLW1vbml0IiwiaW1hZ2UiOiJkb2NrZXIuaW8vcGVyY29uYS9wZXJjb25hLXh0cmFkYi1jbHVzdGVyLW9wZXJhdG9yOjEuMTMuMC1oYXByb3h5IiwiYXJncyI6WyIvdXNyL2Jpbi9wZWVyLWxpc3QiLCItb24tY2hhbmdlPS91c3IvYmluL2FkZF9weGNfbm9kZXMuc2giLCItc2VydmljZT0kKFBYQ19TRVJWSUNFKSJdLCJlbnZGcm9tIjpbeyJzZWNyZXRSZWYiOnsibmFtZSI6InBlcmNvbmEteHRyYWRiLWVudi12YXJzLWhhcHJveHkiLCJvcHRpb25hbCI6dHJ1ZX19XSwiZW52IjpbeyJuYW1lIjoiUFhDX1NFUlZJQ0UiLCJ2YWx1ZSI6InBlcmNvbmEteHRyYWRiLXB4YyJ9XSwicmVzb3VyY2VzIjp7fSwidm9sdW1lTW91bnRzIjpbeyJuYW1lIjoiaGFwcm94eS1jdXN0b20iLCJtb3VudFBhdGgiOiIvZXRjL2hhcHJveHktY3VzdG9tLyJ9LHsibmFtZSI6ImhhcHJveHktYXV0byIsIm1vdW50UGF0aCI6Ii9ldGMvaGFwcm94eS9weGMifSx7Im5hbWUiOiJteXNxbC11c2Vycy1zZWNyZXQtZmlsZSIsIm1vdW50UGF0aCI6Ii9ldGMvbXlzcWwvbXlzcWwtdXNlcnMtc2VjcmV0In0seyJuYW1lIjoicGVyY29uYS14dHJhZGItZW52LXZhcnMtaGFwcm94eSIsIm1vdW50UGF0aCI6Ii9ldGMvbXlzcWwvaGFwcm94eS1lbnYtc2VjcmV0In1dLCJpbWFnZVB1bGxQb2xpY3kiOiJBbHdheXMifV0sInJlc3RhcnRQb2xpY3kiOiJBbHdheXMiLCJ0ZXJtaW5hdGlvbkdyYWNlUGVyaW9kU2Vjb25kcyI6MzAsImRuc1BvbGljeSI6IkNsdXN0ZXJGaXJzdCIsIm5vZGVTZWxlY3RvciI6eyJvcGVuc3RhY2stY29udHJvbC1wbGFuZSI6ImVuYWJsZWQifSwic2VydmljZUFjY291bnROYW1lIjoiZGVmYXVsdCIsInNlcnZpY2VBY2NvdW50IjoiZGVmYXVsdCIsImFmZmluaXR5Ijp7InBvZEFudGlBZmZpbml0eSI6eyJyZXF1aXJlZER1cmluZ1NjaGVkdWxpbmdJZ25vcmVkRHVyaW5nRXhlY3V0aW9uIjpbeyJsYWJlbFNlbGVjdG9yIjp7Im1hdGNoTGFiZWxzIjp7ImFwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudCI6ImhhcHJveHkiLCJhcHAua3ViZXJuZXRlcy5pby9pbnN0YW5jZSI6InBlcmNvbmEteHRyYWRiIiwiYXBwLmt1YmVybmV0ZXMuaW8vbWFuYWdlZC1ieSI6InBlcmNvbmEteHRyYWRiLWNsdXN0ZXItb3BlcmF0b3IiLCJhcHAua3ViZXJuZXRlcy5pby9uYW1lIjoicGVyY29uYS14dHJhZGItY2x1c3RlciIsImFwcC5rdWJlcm5ldGVzLmlvL3BhcnQtb2YiOiJwZXJjb25hLXh0cmFkYi1jbHVzdGVyIn19LCJ0b3BvbG9neUtleSI6Imt1YmVybmV0ZXMuaW8vaG9zdG5hbWUifV19fSwic2NoZWR1bGVyTmFtZSI6ImRlZmF1bHQtc2NoZWR1bGVyIn19LCJzZXJ2aWNlTmFtZSI6InBlcmNvbmEteHRyYWRiLWhhcHJveHkiLCJwb2RNYW5hZ2VtZW50UG9saWN5IjoiT3JkZXJlZFJlYWR5IiwidXBkYXRlU3RyYXRlZ3kiOnsidHlwZSI6IlJvbGxpbmdVcGRhdGUiLCJyb2xsaW5nVXBkYXRlIjp7InBhcnRpdGlvbiI6MH19LCJyZXZpc2lvbkhpc3RvcnlMaW1pdCI6MTAsInBlcnNpc3RlbnRWb2x1bWVDbGFpbVJldGVudGlvblBvbGljeSI6eyJ3aGVuRGVsZXRlZCI6IlJldGFpbiIsIndoZW5TY2FsZWQiOiJSZXRhaW4ifX0=
  creationTimestamp: "2026-02-25T02:23:07Z"
  generation: 1
  name: percona-xtradb-haproxy
  namespace: openstack
  ownerReferences:
  - apiVersion: pxc.percona.com/v1
    controller: true
    kind: PerconaXtraDBCluster
    name: percona-xtradb
    uid: aa6e9a80-8cfd-45c5-87d4-9ad15d4c3ec5
  resourceVersion: "1540"
  uid: ffeead83-e68e-4c7e-b786-ca4282124e64
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: 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: 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: 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: 0
  collisionCount: 0
  currentReplicas: 1
  currentRevision: percona-xtradb-haproxy-78b9d6c4ff
  observedGeneration: 1
  replicas: 1
  updateRevision: percona-xtradb-haproxy-78b9d6c4ff
  updatedReplicas: 1
