okozachenko1203 | d883bc3 | 2023-07-31 19:25:46 +1000 | [diff] [blame] | 1 | - name: Create a secret for Percona XtraDB cluster passwords |
| 2 | run_once: true |
okozachenko1203 | 23f7aaf | 2023-07-31 22:14:23 +1000 | [diff] [blame] | 3 | block: |
| 4 | - name: Check if the Percona XtraDB cluster secret exists |
| 5 | kubernetes.core.k8s_info: |
| 6 | api_version: v1 |
| 7 | kind: Secret |
okozachenko1203 | d883bc3 | 2023-07-31 19:25:46 +1000 | [diff] [blame] | 8 | name: percona-xtradb |
| 9 | namespace: openstack |
okozachenko1203 | 23f7aaf | 2023-07-31 22:14:23 +1000 | [diff] [blame] | 10 | register: _pxc_secret |
| 11 | ignore_errors: true |
| 12 | |
| 13 | - name: Create a secret |
| 14 | when: ( _pxc_secret.resources | length==0 ) |
| 15 | kubernetes.core.k8s: |
| 16 | state: present |
| 17 | definition: |
| 18 | apiVersion: v1 |
| 19 | stringData: |
| 20 | clustercheck: "{{ lookup('password', '/dev/null chars=ascii_lowercase,ascii_uppercase,digits length=32') }}" |
| 21 | monitor: "{{ lookup('password', '/dev/null chars=ascii_lowercase,ascii_uppercase,digits length=32') }}" |
| 22 | operator: "{{ lookup('password', '/dev/null chars=ascii_lowercase,ascii_uppercase,digits length=32') }}" |
| 23 | proxyadmin: "{{ lookup('password', '/dev/null chars=ascii_lowercase,ascii_uppercase,digits length=32') }}" |
| 24 | replication: "{{ lookup('password', '/dev/null chars=ascii_lowercase,ascii_uppercase,digits length=32') }}" |
| 25 | root: "{{ lookup('password', '/dev/null chars=ascii_lowercase,ascii_uppercase,digits length=32') }}" |
| 26 | xtrabackup: "{{ lookup('password', '/dev/null chars=ascii_lowercase,ascii_uppercase,digits length=32') }}" |
| 27 | kind: Secret |
| 28 | metadata: |
| 29 | name: percona-xtradb |
| 30 | namespace: openstack |
| 31 | type: Opaque |
okozachenko1203 | d883bc3 | 2023-07-31 19:25:46 +1000 | [diff] [blame] | 32 | |
Oleksandr K | 249d3db | 2023-12-06 16:35:23 +0100 | [diff] [blame] | 33 | - name: Check if the Percona XtraDB cluster exists |
| 34 | run_once: true |
| 35 | block: |
| 36 | - name: Check if the Percona XtraDB cluster exists |
| 37 | kubernetes.core.k8s_info: |
| 38 | api_version: pxc.percona.com/v1 |
| 39 | kind: PerconaXtraDBCluster |
| 40 | name: percona-xtradb |
| 41 | namespace: openstack |
| 42 | register: _pxc_cluster |
| 43 | ignore_errors: true |
| 44 | |
| 45 | - name: Get current status of the cluster |
| 46 | ansible.builtin.set_fact: |
| 47 | _pxc_version: "{{ _pxc_cluster.resources[0].status.pxc.version }}" |
| 48 | _pxc_status: "{{ _pxc_cluster.resources[0].status.state }}" |
| 49 | when: ( _pxc_cluster.resources | length==1 ) |
| 50 | |
| 51 | - name: Do version upgrade |
| 52 | run_once: true |
| 53 | when: |
| 54 | - _pxc_version is defined |
| 55 | - _pxc_status is defined |
| 56 | - _pxc_version.startswith('5.7') |
| 57 | - (atmosphere_images['percona_xtradb_cluster'] | vexxhost.kubernetes.docker_image('tag')).startswith('8.') |
| 58 | block: |
| 59 | - name: Assert that the cluster is healthy before upgrade |
| 60 | run_once: true |
| 61 | ansible.builtin.assert: |
| 62 | that: |
| 63 | - _pxc_status == 'ready' |
| 64 | fail_msg: >- |
| 65 | The Percona XtraDB Cluster is not healthy. Please fix the cluster manually first before upgrade. |
| 66 | |
| 67 | - name: Stop PXC-operator |
| 68 | kubernetes.core.k8s_scale: |
| 69 | api_version: v1 |
| 70 | kind: Deployment |
| 71 | name: pxc-operator |
| 72 | namespace: openstack |
| 73 | replicas: 0 |
| 74 | wait_timeout: 60 |
| 75 | |
| 76 | - name: Change the cluster Statefulset image to 8.0 |
| 77 | kubernetes.core.k8s_json_patch: |
| 78 | api_version: apps/v1 |
| 79 | kind: StatefulSet |
| 80 | namespace: openstack |
| 81 | name: percona-xtradb-pxc |
| 82 | patch: |
| 83 | - op: replace |
| 84 | path: /spec/template/spec/containers/0/image |
| 85 | value: "{{ atmosphere_images['percona_xtradb_cluster'] | vexxhost.kubernetes.docker_image('ref') }}" |
| 86 | |
| 87 | - name: Wait until the cluster Statefulset rollout |
| 88 | kubernetes.core.k8s_info: |
| 89 | api_version: apps/v1 |
| 90 | kind: StatefulSet |
| 91 | name: percona-xtradb-pxc |
| 92 | namespace: openstack |
| 93 | register: _pxc_cluster_sts |
| 94 | retries: 120 |
| 95 | delay: 5 |
| 96 | until: |
| 97 | - _pxc_cluster_sts.resources[0].status.replicas == _pxc_cluster_sts.resources[0].status.readyReplicas |
| 98 | |
| 99 | - name: Update pxc cluster spec |
| 100 | kubernetes.core.k8s: |
| 101 | definition: |
| 102 | apiVersion: pxc.percona.com/v1 |
| 103 | kind: PerconaXtraDBCluster |
| 104 | metadata: |
| 105 | name: percona-xtradb |
| 106 | namespace: openstack |
| 107 | spec: |
| 108 | pxc: |
| 109 | image: "{{ atmosphere_images['percona_xtradb_cluster'] | vexxhost.kubernetes.docker_image('ref') }}" |
| 110 | wait_sleep: 1 |
| 111 | wait_timeout: 600 |
| 112 | wait: true |
| 113 | wait_condition: |
| 114 | type: ready |
| 115 | status: true |
| 116 | |
| 117 | - name: Start PXC-operator |
| 118 | kubernetes.core.k8s_scale: |
| 119 | api_version: v1 |
| 120 | kind: Deployment |
| 121 | name: pxc-operator |
| 122 | namespace: openstack |
| 123 | replicas: 1 |
| 124 | wait_timeout: 60 |
| 125 | |
| 126 | - name: Apply Percona XtraDB cluster |
Mohammed Naser | 6aa0b91 | 2023-01-12 21:54:14 -0500 | [diff] [blame] | 127 | run_once: true |
| 128 | kubernetes.core.k8s: |
| 129 | state: present |
| 130 | definition: |
okozachenko1203 | 398e0b5 | 2023-07-06 19:59:24 +1000 | [diff] [blame] | 131 | apiVersion: pxc.percona.com/v1 |
Mohammed Naser | 6aa0b91 | 2023-01-12 21:54:14 -0500 | [diff] [blame] | 132 | kind: PerconaXtraDBCluster |
| 133 | metadata: |
| 134 | name: percona-xtradb |
| 135 | namespace: openstack |
| 136 | spec: "{{ _percona_xtradb_cluster_spec | combine(percona_xtradb_cluster_spec, recursive=True) }}" |
| 137 | wait_sleep: 1 |
Michiel Piscaer | a4b05aa | 2024-10-23 22:12:00 +0200 | [diff] [blame] | 138 | wait_timeout: 900 |
Mohammed Naser | 6aa0b91 | 2023-01-12 21:54:14 -0500 | [diff] [blame] | 139 | wait: true |
| 140 | wait_condition: |
| 141 | type: ready |
| 142 | status: true |