|
| 1 | +--- |
| 2 | +- name: "Dolibarr backup" |
| 3 | + hosts: "localhost" |
| 4 | + gather_facts: yes |
| 5 | + |
| 6 | + pre_tasks: |
| 7 | + - name: "Fetch BACKUP_ROOT_FOLDER variable" |
| 8 | + ansible.builtin.set_fact: |
| 9 | + backup_root_folder: "{{ lookup('ansible.builtin.env', 'BACKUP_ROOT_FOLDER') }}" |
| 10 | + when: backup_root_folder is undefined |
| 11 | + |
| 12 | + - name: "Check variables" |
| 13 | + ansible.builtin.assert: |
| 14 | + that: |
| 15 | + - "app_namespace is defined" |
| 16 | + - "backup_root_folder is defined and backup_root_folder | length > 0" |
| 17 | + |
| 18 | + - name: "Set variables" |
| 19 | + ansible.builtin.set_fact: |
| 20 | + backup_file_prefix: "{{ ansible_date_time.iso8601_basic_short }}.dolibarr.backup" |
| 21 | + db_bk_user: "{{ db_user | default('root') }}" |
| 22 | + |
| 23 | + - name: "Print pod card list" |
| 24 | + ansible.builtin.debug: |
| 25 | + var: backup_file_prefix |
| 26 | + |
| 27 | + - name: "Collect backup folder stats" |
| 28 | + ansible.builtin.stat: |
| 29 | + path: "{{ backup_root_folder }}/{{ app_namespace }}" |
| 30 | + register: backup_folder_stats |
| 31 | + |
| 32 | + - name: "Check backup folder exists" |
| 33 | + ansible.builtin.assert: |
| 34 | + that: |
| 35 | + - "backup_folder_stats.stat.exists" |
| 36 | + fail_msg: |
| 37 | + - "Folder {{ backup_root_folder }}/{{ app_namespace }} must exist." |
| 38 | + |
| 39 | + tasks: |
| 40 | + - name: "Get PostgreSQL pod" |
| 41 | + kubernetes.core.k8s_info: |
| 42 | + kind: "Pod" |
| 43 | + namespace: "{{ app_namespace }}" |
| 44 | + validate_certs: false |
| 45 | + label_selectors: |
| 46 | + - app.kubernetes.io/name = postgresql |
| 47 | + register: postgresql_pod_list |
| 48 | + |
| 49 | + - name: "Get Dolibarr Pod" |
| 50 | + kubernetes.core.k8s_info: |
| 51 | + kind: "Pod" |
| 52 | + namespace: "{{ app_namespace }}" |
| 53 | + validate_certs: false |
| 54 | + label_selectors: |
| 55 | + - app.kubernetes.io/name = dolibarr |
| 56 | + register: dolibarr_pod_list |
| 57 | + |
| 58 | + - name: "Print pod list" |
| 59 | + ansible.builtin.debug: |
| 60 | + msg: |
| 61 | + - "postgresql_pod_list: {{ postgresql_pod_list.resources }}" |
| 62 | + - "postgresql_pod_list: {{ postgresql_pod_list.resources[0].metadata.name }}" |
| 63 | + - "postgresql_pod_list: {{ postgresql_pod_list.resources }}" |
| 64 | + - "postgresql_pod_list: {{ postgresql_pod_list.resources[0].metadata.name }}" |
| 65 | + verbosity: 2 |
| 66 | + |
| 67 | + - name: "Set Pod names" |
| 68 | + ansible.builtin.set_fact: |
| 69 | + postgresql_pod_name: "{{ postgresql_pod_list.resources[0].metadata.name }}" |
| 70 | + dolibarr_pod_name: "{{ dolibarr_pod_list.resources[0].metadata.name }}" |
| 71 | + |
| 72 | + - name: "Print pod names" |
| 73 | + ansible.builtin.debug: |
| 74 | + msg: |
| 75 | + - "postgresql_pod_name: {{ postgresql_pod_name }}" |
| 76 | + - "dolibarr_pod_name: {{ dolibarr_pod_name }}" |
| 77 | + |
| 78 | + - name: "Get ConfigMap" |
| 79 | + kubernetes.core.k8s_info: |
| 80 | + api_version: v1 |
| 81 | + kind: ConfigMap |
| 82 | + name: postgresql |
| 83 | + namespace: "{{ app_namespace }}" |
| 84 | + register: postgresql_cm_info |
| 85 | + |
| 86 | + - name: "Print CM list" |
| 87 | + ansible.builtin.debug: |
| 88 | + var: postgresql_cm_info.resources[0] |
| 89 | + verbosity: 2 |
| 90 | + |
| 91 | + - name: "Get Secrets" |
| 92 | + kubernetes.core.k8s_info: |
| 93 | + api_version: v1 |
| 94 | + kind: Secret |
| 95 | + name: postgresql |
| 96 | + namespace: "{{ app_namespace }}" |
| 97 | + register: postgresql_secret_info |
| 98 | + |
| 99 | + - name: "Extract DB password" |
| 100 | + ansible.builtin.set_fact: |
| 101 | + postgresql_user_pw: "{{ postgresql_secret_info.resources[0].data.POSTGRES_PASSWORD | b64decode }}" |
| 102 | + |
| 103 | + - name: "Generate tar for Documents folder" |
| 104 | + kubernetes.core.k8s_exec: |
| 105 | + command: "tar --warning=no-file-changed -czvf /tmp/{{ backup_file_prefix }}.document.tgz /var/www/html/custom" |
| 106 | + namespace: "{{ app_namespace }}" |
| 107 | + pod: "{{ dolibarr_pod_name }}" |
| 108 | + register: dolibarr_file_bk_res |
| 109 | + failed_when: false |
| 110 | + |
| 111 | + - name: "Print test result" |
| 112 | + ansible.builtin.debug: |
| 113 | + var: file_backup_test_res |
| 114 | + |
| 115 | + |
| 116 | +# # kubectl -n glpi cp ${GLPI_POD}:/tmp/${GLPI_MYSQL_DUMP_FILENAME_PREFIX}.files.tgz ${BACKUP_ROOT_FOLDER}/glpi/${GLPI_MYSQL_DUMP_FILENAME_PREFIX}.files.tgz |
| 117 | + - name: "Download document backup" |
| 118 | + kubernetes.core.k8s_cp: |
| 119 | + namespace: "{{ app_namespace }}" |
| 120 | + pod: "{{ dolibarr_pod_name }}" |
| 121 | + state: from_pod |
| 122 | + remote_path: "/tmp/{{ backup_file_prefix }}.document.tgz" |
| 123 | + local_path: "{{ backup_root_folder }}/{{ app_namespace }}/{{ backup_file_prefix }}.document.tgz" |
| 124 | + |
| 125 | + - name: "Test file backup" |
| 126 | + ansible.builtin.shell: | |
| 127 | + tar -tzvf {{ backup_root_folder }}/{{ app_namespace }}/{{ backup_file_prefix }}.document.tgz |
| 128 | + register: file_backup_test_res |
| 129 | + |
| 130 | + - name: "Download configuration file " |
| 131 | + kubernetes.core.k8s_cp: |
| 132 | + namespace: "{{ app_namespace }}" |
| 133 | + pod: "{{ dolibarr_pod_name }}" |
| 134 | + state: from_pod |
| 135 | + remote_path: "/var/www/html/conf/conf.php" |
| 136 | + local_path: "{{ backup_root_folder }}/{{ app_namespace }}/{{ backup_file_prefix }}.conf.php" |
| 137 | + |
| 138 | + - name: "Change config.php file permissions" |
| 139 | + ansible.builtin.file: |
| 140 | + path: "{{ backup_root_folder }}/{{ app_namespace }}/{{ backup_file_prefix }}.conf.php" |
| 141 | + mode: '0600' |
| 142 | + |
| 143 | +- name: Backup PostgreSQL database |
| 144 | + ansible.builtin.import_playbook: ../../../pgsql/k8s/kubectl/ansible/pgsql-backup-playbook.yaml |
| 145 | + vars: |
| 146 | + backup_file_prefix: "{{ backup_file_prefix }}" |
| 147 | + db_pod_name: "{{ postgresql_pod_name }}" |
| 148 | + k8s_ns: "{{ app_namespace }}" |
| 149 | + db_name: "{{ postgresql_cm_info.resources[0].data.POSTGRES_DB }}" |
| 150 | + db_user: "{{ postgresql_cm_info.resources[0].data.POSTGRES_USER }}" |
| 151 | + db_password: "{{ postgresql_user_pw }}" |
| 152 | +... |
0 commit comments