Skip to content

Commit a01737b

Browse files
jacobdotcostaAC
andauthored
Backup improvements (#19)
* deploy dolibarr on podman * deploy dolibarr * Deploy Apache Superset requirements * wip * apache nifi * wip * wip * docs * registry * nifi registry * fixes * docs * fix: glpi backup * . * wip * wip * wip * wip: improvements to the bootstrap deployment * wip: improvements to the bootstrap deployment * wip: improvements to the LB deployment * add manila client to implement OVH Cloud File Storage Service * overhaul * wip * cleanup * overhaul * worker nodes * changes for bastion and loadbalancer naming * dolibarr and postgresql backup --------- Co-authored-by: AC <ac@trikorasolutions.com>
1 parent 4cda812 commit a01737b

File tree

73 files changed

+3140
-1269
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+3140
-1269
lines changed

dolibarr/k8s/README.adoc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,7 @@ PostgreSQL
8787
ansible-playbook pgsql/k8s/helm/ansible/pgsql-uninstall-playbook.yaml \
8888
-e @dolibarr/k8s/helm/ansible/defaults/main.yaml
8989
----
90+
91+
== Backup and Restore
92+
93+
Check the link:backupNRestore.adoc[Dolibarr Backup and Restore] document.
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
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+
...

dolibarr/k8s/backupNrestore.adoc

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
= Dolibarr Backup and Restore
2+
:author: Antonio C.
3+
:email: <ac (at) trikorasolutions (dot) com>
4+
:revdate: {docdate}
5+
:toc: left
6+
:toc-title: Table of Contents
7+
:icons: font
8+
:description: GLPI backup and restore
9+
ifdef::env-github[]
10+
:tip-caption: :bulb:
11+
:note-caption: :information_source:
12+
:important-caption: :heavy_exclamation_mark:
13+
:caution-caption: :fire:
14+
:warning-caption: :warning:
15+
endif::[]
16+
17+
== Preparation
18+
19+
Define backup environment variables.
20+
21+
Set the root location of the backup folder.
22+
23+
[source,bash]
24+
----
25+
export BACKUP_ROOT_FOLDER=/z/_backup/apps
26+
----
27+
28+
Set the kube config file.
29+
30+
[source,bash]
31+
----
32+
export KUBECONFIG=~/.kube/config
33+
----
34+
35+
== Backup
36+
37+
=== With Ansible
38+
39+
[source,bash]
40+
----
41+
ansible-playbook dolibarr/k8s/ansible/dolibarr-backup-playbook.yaml \
42+
-e @dolibarr/k8s/ansible/defaults/main.yaml
43+
----
44+
45+
=== References
46+
47+
References:
48+
49+
* https://wiki.dolibarr.org/index.php/Backups
50+
51+
== Restore
52+
53+
For now, check the docs at https://wiki.dolibarr.org/index.php/Restores.

ocp/4.15/upi_rhosp/ansible/20-rhosp-prepare.yaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@
134134

135135
# - name: "Create private Load Balancer"
136136
# openstack.cloud.loadbalancer:
137-
# name: "{{ rhosp_loadbalancer_prefix }}-private"
137+
# name: "{{ rhosp_loadbalancer_prefix }}-internal"
138138
# vip_network: "{{ rhosp_network }}"
139139
# state: present
140140
# register: rhosp_lb_private_res
@@ -167,7 +167,7 @@
167167
# - name: "Create load-balancer listeners"
168168
# openstack.cloud.lb_listener:
169169
# name: "{{ item.name }}"
170-
# load_balancer: "{{ rhosp_loadbalancer_prefix }}-private"
170+
# load_balancer: "{{ rhosp_loadbalancer_prefix }}-internal"
171171
# protocol: "{{ item.protocol }}"
172172
# protocol_port: "{{ item.port }}"
173173
# state: present
@@ -184,9 +184,9 @@
184184

185185
# - name: "Create private load-balancer pool"
186186
# openstack.cloud.lb_pool:
187-
# name: "{{ rhosp_loadbalancer_pool_name }}-private"
187+
# name: "{{ rhosp_loadbalancer_pool_name }}-internal"
188188
# lb_algorithm: "ROUND_ROBIN"
189-
# loadbalancer: "{{ rhosp_loadbalancer_prefix }}-private"
189+
# loadbalancer: "{{ rhosp_loadbalancer_prefix }}-internal"
190190
# protocol: "TCP"
191191
# state: present
192192

@@ -511,7 +511,7 @@
511511
# - name: "Add members to the private load-balancer pool"
512512
# openstack.cloud.lb_member:
513513
# name: "{{ rhosp_control_plane_server_prefix }}-{{ item }}"
514-
# pool: "{{ rhosp_loadbalancer_pool_name }}-private"
514+
# pool: "{{ rhosp_loadbalancer_pool_name }}-internal"
515515
# state: present
516516
# loop: "{{ [1 ,3] | flatten(1) }}"
517517

ocp/4.15/upi_rhosp/ansible/20.14-rhosp-load-balancer.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
# - name: "Create private Load Balancer"
2424
# openstack.cloud.loadbalancer:
25-
# name: "{{ rhosp_loadbalancer_prefix }}-private"
25+
# name: "{{ rhosp_loadbalancer_prefix }}-internal"
2626
# vip_network: "{{ rhosp_network }}"
2727
# state: present
2828
# register: rhosp_lb_private_res
@@ -41,7 +41,7 @@
4141
openstack.cloud.lb_pool:
4242
name: "{{ item.name }}"
4343
lb_algorithm: "ROUND_ROBIN"
44-
loadbalancer: "{{ rhosp_loadbalancer_prefix }}-private"
44+
loadbalancer: "{{ rhosp_loadbalancer_prefix }}-internal"
4545
protocol: "{{ item.protocol }}"
4646
state: present
4747
loop: "{{ rhosp_lb_private_ports }}"
@@ -59,7 +59,7 @@
5959
- name: "Create private load-balancer listener"
6060
openstack.cloud.lb_listener:
6161
name: "{{ item.name }}"
62-
load_balancer: "{{ rhosp_loadbalancer_prefix }}-private"
62+
load_balancer: "{{ rhosp_loadbalancer_prefix }}-internal"
6363
protocol: "{{ item.protocol }}"
6464
protocol_port: "{{ item.port }}"
6565
state: present
@@ -184,7 +184,7 @@
184184
vars:
185185
rhosp_lb_member_address: "{{ rhosp_private_lb_pool_members_item.addr }}"
186186
rhosp_lb_member_name: "{{ rhosp_private_lb_pool_members_item.name }}"
187-
rhosp_lb_member_pool: "{{ rhosp_loadbalancer_pool_name }}-private"
187+
rhosp_lb_member_pool: "{{ rhosp_loadbalancer_pool_name }}-internal"
188188
rhosp_lb_member_ports: "{{ rhosp_lb_private_ports }}"
189189
loop: "{{ rhosp_instance_cp_array + rhosp_instance_bootstrap_array }}"
190190
loop_control:

ocp/4.15/upi_rhosp/ansible/20.19-rhosp-compute-node-instance.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
# - name: "Add members to the private load-balancer pool"
5050
# openstack.cloud.lb_member:
5151
# name: "{{ rhosp_compute_node_server_prefix }}-{{ item }}"
52-
# pool: "{{ rhosp_loadbalancer_pool_name }}-private"
52+
# pool: "{{ rhosp_loadbalancer_pool_name }}-internal"
5353
# state: present
5454
# loop: "{{ range(1,4) }}"
5555

ocp/4.15/upi_rhosp/ansible/20.25-rhosp-remove-bootstrap.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
state: absent
2727
rhosp_lb_member_address: "{{ rhosp_private_lb_pool_members_item.addr }}"
2828
rhosp_lb_member_name: "{{ rhosp_private_lb_pool_members_item.name }}"
29-
rhosp_lb_member_pool: "{{ rhosp_loadbalancer_pool_name }}-private"
29+
rhosp_lb_member_pool: "{{ rhosp_loadbalancer_pool_name }}-internal"
3030
rhosp_lb_member_ports: "{{ rhosp_lb_private_ports }}"
3131
loop: "{{ rhosp_instance_bootstrap_array }}"
3232
loop_control:

ocp/4.15/upi_rhosp/ansible/20.3-rhosp-prepare-network.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@
9797
- name: "Create private Load Balancer"
9898
openstack.cloud.loadbalancer:
9999
assign_floating_ip: false
100-
name: "{{ rhosp_loadbalancer_prefix }}-private"
100+
name: "{{ rhosp_loadbalancer_prefix }}-internal"
101101
vip_network: "{{ rhosp_network }}"
102102
state: present
103103
register: rhosp_lb_private_res

ocp/4.15/upi_rhosp/ansible/20.7-rhosp-control-plane-instance.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
# - name: "Add members to the private load-balancer pool"
4747
# openstack.cloud.lb_member:
4848
# name: "{{ rhosp_control_plane_server_prefix }}-{{ item }}"
49-
# pool: "{{ rhosp_loadbalancer_pool_name }}-private"
49+
# pool: "{{ rhosp_loadbalancer_pool_name }}-internal"
5050
# state: present
5151
# loop: "{{ range(1,4) }}"
5252

ocp/4.15/upi_rhosp/ansible/29-rhosp-print-dns-info.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
# Unfortunatelly there seems to be no other way of fetching the LB information.
1616
- name: "Fetch private Load Balancer info"
1717
openstack.cloud.loadbalancer:
18-
name: "{{ rhosp_loadbalancer_prefix }}-private"
18+
name: "{{ rhosp_loadbalancer_prefix }}-internal"
1919
vip_network: "{{ rhosp_network }}"
2020
register: rhosp_lb_private_res
2121

0 commit comments

Comments
 (0)