Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🦄 Add backup roles #33

Draft
wants to merge 4 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions backup.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# file: backup.yml

- name: Backup OpenNMS
hosts: core
user: root
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Depends if the Ansible user has enough permissions. For the copy jobs of the files it could work with ubuntu. But maybe not for the PSQL dump.
Right now it is set to root since I also don't have an ubuntu user.

become: true
roles:
- opennms_backup
vars:
timestamp: "{{ ansible_date_time.date }}_{{ ansible_date_time.hour }}{{ ansible_date_time.minute }}"

# - name: Backup PostgreSQL
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

commented because the PG dump is not working yet. But you can see the structure I am following here.

# hosts: database
# user: root
# become: true
# roles:
# - postgresql_backup
# vars:
# timestamp: "{{ ansible_date_time.date }}_{{ ansible_date_time.hour }}{{ ansible_date_time.minute }}"
4 changes: 4 additions & 0 deletions roles/opennms_backup/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In best case we could define them globally instead of in each role.

onms_backup_folder: /mnt/backup/opennms
onms_backup_retention: 3
15 changes: 15 additions & 0 deletions roles/opennms_backup/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
- name: "Create a backup directory"
file:
path: "{{ onms_backup_folder }}"
mode: 0777
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess not the final permissions. But for now sufficient.

owner: root
state: directory

- name: Run backups scripts for Ubuntu / Debian
ansible.builtin.include_tasks: ubuntu_debian.yml
when: ansible_distribution == "Debian" or ansible_distribution == "Ubuntu"

- name: Run backups scripts for RedHat / CentOs
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CentOS / Redhat is not tested yet.

ansible.builtin.include_tasks: redhat_centos.yml
when: ansible_distribution == "RedHat" or ansible_distribution == "CentOS"
66 changes: 66 additions & 0 deletions roles/opennms_backup/tasks/redhat_centos.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
---
- name: Back up OpenNMS Horizon opt folder
community.general.archive:
path:
- /opt/opennms/*
dest: "{{ onms_backup_folder }}/{{ timestamp }}_opennms-opt.tar.gz"
exclude_path:
- /opt/opennms/data/cache/*
format: gz
mode: 0644
owner: opennms
group: opennms

- name: Back up OpenNMS Horizon var folder
community.general.archive:
path:
- /var/opennms/*
dest: "{{ onms_backup_folder }}/{{ timestamp }}_opennms-var.tar.gz"
format: gz
mode: 0644
owner: opennms
group: opennms

- name: Create latest opt folder tar
ansible.builtin.copy:
remote_src: true
src: "{{ onms_backup_folder }}/{{ timestamp }}_opennms-opt.tar.gz"
dest: "{{ onms_backup_folder }}/latest_opennms-opt.tar.gz"
mode: 0644
owner: opennms
group: opennms

- name: Create latest var folder tar
ansible.builtin.copy:
remote_src: true
src: "{{ onms_backup_folder }}/{{ timestamp }}_opennms-var.tar.gz"
dest: "{{ onms_backup_folder }}/latest_opennms-var.tar.gz"
mode: 0644
owner: opennms
group: opennms

- name: Grep OpenNMS user ID
shell:
cmd: "grep opennms /etc/passwd > {{ onms_backup_folder }}/{{ timestamp }}_opennms-passwd.txt"

- name: Grep OpenNMS group ID
shell:
cmd: "grep opennms /etc/group > {{ onms_backup_folder }}/{{ timestamp }}_opennms-group.txt"

- name: Create latest passwd file
ansible.builtin.copy:
remote_src: true
src: "{{ onms_backup_folder }}/{{ timestamp }}_opennms-passwd.txt"
dest: "{{ onms_backup_folder }}/latest_opennms-passwd.txt"
mode: 0644
owner: opennms
group: opennms

- name: Create latest group file
ansible.builtin.copy:
remote_src: true
src: "{{ onms_backup_folder }}/{{ timestamp }}_opennms-group.txt"
dest: "{{ onms_backup_folder }}/latest_opennms-group.txt"
mode: 0644
owner: opennms
group: opennms
104 changes: 104 additions & 0 deletions roles/opennms_backup/tasks/ubuntu_debian.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
---
- name: Back up OpenNMS Horizon opt folder
community.general.archive:
path:
- /usr/share/opennms/*
dest: "{{ onms_backup_folder }}/{{ timestamp }}_opennms-opt.tar.gz"
exclude_path:
- /usr/share/opennms/data/cache/*
mode: 0644
owner: opennms
group: opennms
format: gz

- name: Back up OpenNMS Horizon etc folder
community.general.archive:
path:
- /etc/opennms/*
dest: "{{ onms_backup_folder }}/{{ timestamp }}_opennms-etc.tar.gz"
mode: 0644
owner: opennms
group: opennms
format: gz

- name: Back up OpenNMS Horizon lib folder
community.general.archive:
path:
- /var/lib/opennms/*
dest: "{{ onms_backup_folder }}/{{ timestamp }}_opennms-var-lib.tar.gz"
mode: 0644
owner: opennms
group: opennms
format: gz

- name: Back up OpenNMS Horizon usr/share/java folder
community.general.archive:
path:
- /usr/share/java/opennms/*
dest: "{{ onms_backup_folder }}/{{ timestamp }}_opennms-usr-share-java.tar.gz"
mode: 0644
owner: opennms
group: opennms
format: gz

- name: Create latest opt folder tar
ansible.builtin.copy:
remote_src: true
src: "{{ onms_backup_folder }}/{{ timestamp }}_opennms-opt.tar.gz"
dest: "{{ onms_backup_folder }}/latest_opennms-opt.tar.gz"
mode: 0644
owner: opennms
group: opennms

- name: Create latest etc folder tar
ansible.builtin.copy:
remote_src: true
src: "{{ onms_backup_folder }}/{{ timestamp }}_opennms-etc.tar.gz"
dest: "{{ onms_backup_folder }}/latest_opennms-etc.tar.gz"
mode: 0644
owner: opennms
group: opennms

- name: Create latest var-lib folder tar
ansible.builtin.copy:
remote_src: true
src: "{{ onms_backup_folder }}/{{ timestamp }}_opennms-var-lib.tar.gz"
dest: "{{ onms_backup_folder }}/latest_opennms-var-lib.tar.gz"
mode: 0644
owner: opennms
group: opennms

- name: Create latest usr-share-java folder tar
ansible.builtin.copy:
remote_src: true
src: "{{ onms_backup_folder }}/{{ timestamp }}_opennms-usr-share-java.tar.gz"
dest: "{{ onms_backup_folder }}/latest_opennms-usr-share-java.tar.gz"
mode: 0644
owner: opennms
group: opennms

- name: Grep OpenNMS user ID
shell:
cmd: "grep opennms /etc/passwd > {{ onms_backup_folder }}/{{ timestamp }}_opennms-passwd.txt"

- name: Grep OpenNMS group ID
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The grep commands are redundant in CentOS and Ubuntu. Maybe we should move them to main.yaml.

shell:
cmd: "grep opennms /etc/group > {{ onms_backup_folder }}/{{ timestamp }}_opennms-group.txt"

- name: Create latest passwd file
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be cool to have an handler that always does this latest copy process. But I didn't find a solution for this right now. Also, we have those tasks in CentOS and Ubuntu tasks.

ansible.builtin.copy:
remote_src: true
src: "{{ onms_backup_folder }}/{{ timestamp }}_opennms-passwd.txt"
dest: "{{ onms_backup_folder }}/latest_opennms-passwd.txt"
mode: 0644
owner: opennms
group: opennms

- name: Create latest group file
ansible.builtin.copy:
remote_src: true
src: "{{ onms_backup_folder }}/{{ timestamp }}_opennms-group.txt"
dest: "{{ onms_backup_folder }}/latest_opennms-group.txt"
mode: 0644
owner: opennms
group: opennms
4 changes: 4 additions & 0 deletions roles/postgresql_backup/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---

onms_backup_folder: /mnt/backup/opennms
onms_backup_retention: 3
22 changes: 22 additions & 0 deletions roles/postgresql_backup/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
- name: "Create a backup directory"
file:
path: "{{ onms_backup_folder }}"
mode: 0777
owner: root
state: directory

- name: "Back up the database"
postgresql_db:
state: dump
name: opennms
target: "{{ onms_backup_folder }}/{{ timestamp }}_opennms-postgres.dmp"
become: true
become_user: postgres

- name: "Delete backups older than {{ onms_backup_retention }} days"
shell:
cmd: "find {{ onms_backup_folder }} -type f ! -name 'latest*' -mtime +{{ onms_backup_retention }} -delete"
ignore_errors: true
no_log: false
changed_when: false