mirror of
https://github.com/roles-ansible/ansible_role_restic/
synced 2024-11-09 13:23:30 +01:00
using cronjob as fallback
This commit is contained in:
parent
0a3637f1d4
commit
b9406d0185
6 changed files with 166 additions and 124 deletions
|
@ -4,7 +4,7 @@ restic_url: '{{ restic_url_default }}'
|
|||
restic_version: '0.11.0'
|
||||
restic_download_path: '/opt/restic'
|
||||
restic_install_path: '/usr/bin'
|
||||
restic_script_dir: '~/restic'
|
||||
restic_script_dir: '/opt/restic'
|
||||
restic_log_dir: '{{ restic_script_dir }}/log'
|
||||
restic_repos: {}
|
||||
restic_backups: []
|
||||
|
|
36
tasks/backup.yml
Normal file
36
tasks/backup.yml
Normal file
|
@ -0,0 +1,36 @@
|
|||
---
|
||||
- name: reformat dict if necessary
|
||||
set_fact:
|
||||
restic_backups: "{{ restic_backups|dict2items|json_query('[*].value') }}"
|
||||
when:
|
||||
- restic_backups | type_debug == "dict"
|
||||
|
||||
- name: Create backup credentials
|
||||
template:
|
||||
src: restic_access_Linux.j2
|
||||
dest: "{{ restic_script_dir }}/access-{{ item.name | replace(' ', '') }}.sh"
|
||||
mode: '0700'
|
||||
owner: '{{ restic_dir_owner }}'
|
||||
group: '{{ restic_dir_group }}'
|
||||
no_log: true
|
||||
with_items: '{{ restic_backups }}'
|
||||
when:
|
||||
- item.name is defined
|
||||
- item.src is defined or item.stdin is defined
|
||||
- item.src is defined or item.stdin and item.stdin_cmd is defined
|
||||
- item.repo in restic_repos
|
||||
|
||||
- name: Create backup script
|
||||
template:
|
||||
src: restic_script_Linux.j2
|
||||
dest: "{{ restic_script_dir }}/backup-{{ item.name | replace(' ', '') }}.sh"
|
||||
mode: '0700'
|
||||
owner: '{{ restic_dir_owner }}'
|
||||
group: '{{ restic_dir_group }}'
|
||||
no_log: true
|
||||
with_items: '{{ restic_backups }}'
|
||||
when:
|
||||
- item.name is defined
|
||||
- item.src is defined or item.stdin is defined
|
||||
- item.src is defined or item.stdin and item.stdin_cmd is defined
|
||||
- item.repo in restic_repos
|
|
@ -1,108 +0,0 @@
|
|||
---
|
||||
- name: reformat dict if necessary
|
||||
set_fact:
|
||||
restic_backups: "{{ restic_backups|dict2items|json_query('[*].value') }}"
|
||||
when:
|
||||
- restic_backups | type_debug == "dict"
|
||||
|
||||
- name: Create backup credentials
|
||||
template:
|
||||
src: restic_access_Linux.j2
|
||||
dest: "{{ restic_script_dir }}/access-{{ item.name | replace(' ', '') }}.sh"
|
||||
mode: '0700'
|
||||
owner: '{{ restic_dir_owner }}'
|
||||
group: '{{ restic_dir_group }}'
|
||||
no_log: true
|
||||
with_items: '{{ restic_backups }}'
|
||||
when:
|
||||
- item.name is defined
|
||||
- item.src is defined or item.stdin is defined
|
||||
- item.src is defined or item.stdin and item.stdin_cmd is defined
|
||||
- item.repo in restic_repos
|
||||
|
||||
- name: Create backup script
|
||||
template:
|
||||
src: restic_script_Linux.j2
|
||||
dest: "{{ restic_script_dir }}/backup-{{ item.name | replace(' ', '') }}.sh"
|
||||
mode: '0700'
|
||||
owner: '{{ restic_dir_owner }}'
|
||||
group: '{{ restic_dir_group }}'
|
||||
no_log: true
|
||||
with_items: '{{ restic_backups }}'
|
||||
when:
|
||||
- item.name is defined
|
||||
- item.src is defined or item.stdin is defined
|
||||
- item.src is defined or item.stdin and item.stdin_cmd is defined
|
||||
- item.repo in restic_repos
|
||||
|
||||
- name: cleanup CRON jobs
|
||||
cron:
|
||||
name: 'arillso.restic backup {{ item.name }}'
|
||||
job: 'CRON=true {{ restic_script_dir }}/backup-{{ item.name }}.sh'
|
||||
minute: '{{ item.schedule_minute | default("*") }}'
|
||||
hour: '{{ item.schedule_hour | default("*") }}'
|
||||
weekday: '{{ item.schedule_weekday | default("*") }}'
|
||||
month: '{{ item.schedule_month | default("*") }}'
|
||||
state: absent
|
||||
become: true
|
||||
no_log: true
|
||||
with_items: '{{ restic_backups }}'
|
||||
when:
|
||||
- restic_create_cron
|
||||
- item.name is defined
|
||||
- item.scheduled | default(false)
|
||||
|
||||
- name: copy systemd timer
|
||||
become: true
|
||||
ansible.builtin.template:
|
||||
src: templates/restic.timer.j2
|
||||
dest: "/lib/systemd/system/restic-{{ item.name | replace(' ', '') }}.timer"
|
||||
owner: 'root'
|
||||
group: 'root'
|
||||
mode: '0644'
|
||||
no_log: true
|
||||
with_items: '{{ restic_backups }}'
|
||||
when:
|
||||
- restic_create_cron
|
||||
- item.name is defined
|
||||
- item.scheduled | default(false)
|
||||
|
||||
- name: copy systemd service
|
||||
become: true
|
||||
ansible.builtin.template:
|
||||
src: templates/restic.service.j2
|
||||
dest: "/lib/systemd/system/restic-{{ item.name | replace(' ', '') }}.service"
|
||||
owner: 'root'
|
||||
group: 'root'
|
||||
mode: '0644'
|
||||
no_log: true
|
||||
with_items: '{{ restic_backups }}'
|
||||
when:
|
||||
- restic_create_cron
|
||||
- item.name is defined
|
||||
- item.scheduled | default(false)
|
||||
|
||||
- name: Enable restic service
|
||||
become: true
|
||||
ansible.builtin.systemd:
|
||||
name: "restic-{{ item.name | replace(' ', '') | string }}.service"
|
||||
enabled: true
|
||||
daemon_reload: true
|
||||
with_items: '{{ restic_backups }}'
|
||||
when:
|
||||
- restic_create_cron
|
||||
- item.name is defined
|
||||
- item.scheduled | default(false)
|
||||
|
||||
- name: Enable and start restic timer
|
||||
become: true
|
||||
ansible.builtin.systemd:
|
||||
name: "restic-{{ item.name | replace(' ', '') | string }}.timer"
|
||||
enabled: true
|
||||
state: started
|
||||
daemon_reload: true
|
||||
with_items: '{{ restic_backups }}'
|
||||
when:
|
||||
- restic_create_cron
|
||||
- item.name is defined
|
||||
- item.scheduled | default(false)
|
|
@ -3,11 +3,11 @@
|
|||
ansible.builtin.include_vars: "{{ lookup('first_found', restic_os_variables) }}"
|
||||
|
||||
- name: perform versionscheck
|
||||
ansible.builtin.include_tasks: versioncheck.yml
|
||||
ansible.builtin.include_tasks: 'versioncheck.yml'
|
||||
when: submodules_versioncheck|bool
|
||||
|
||||
- name: make sure restic is available
|
||||
ansible.builtin.include_tasks: preperation.yml
|
||||
ansible.builtin.include_tasks: 'preperation.yml'
|
||||
|
||||
- name: Install restic
|
||||
ansible.builtin.include_tasks: 'install.yml'
|
||||
|
@ -16,18 +16,17 @@
|
|||
- name: Configure restic
|
||||
ansible.builtin.include_tasks: 'configure.yml'
|
||||
|
||||
- name: include distribution tasks
|
||||
ansible.builtin.include_tasks: '{{ loop_distribution }}'
|
||||
with_first_found:
|
||||
- files:
|
||||
- '{{ distribution }}-{{ distribution_version }}.yml'
|
||||
- '{{ distribution }}-{{ distribution_major_version }}.yml'
|
||||
- '{{ distribution }}.yml'
|
||||
- '{{ ansible_os_family }}.yml'
|
||||
- '{{ ansible_system }}.yml'
|
||||
- 'defaults.yml'
|
||||
paths:
|
||||
- 'distribution'
|
||||
- name: create backup script
|
||||
ansible.builtin.include_tasks: 'backup.yml'
|
||||
loop_control:
|
||||
loop_var: loop_distribution
|
||||
vars:
|
||||
distribution: '{{ ansible_distribution }}'
|
||||
distribution_version: '{{ ansible_distribution_version }}'
|
||||
distribution_major_version: '{{ ansible_distribution_major_version }}'
|
||||
|
||||
- name: create restic systemd timer
|
||||
ansible.builtin.include_tasks: 'timer.yml'
|
||||
loop_control:
|
||||
loop_var: loop_distribution
|
||||
vars:
|
||||
|
|
115
tasks/timer.yml
Normal file
115
tasks/timer.yml
Normal file
|
@ -0,0 +1,115 @@
|
|||
---
|
||||
- name: cleanup old CRON jobs from migration
|
||||
ansible.builtin.cron:
|
||||
name: 'arillso.restic backup {{ item.name }}'
|
||||
job: 'CRON=true {{ restic_script_dir }}/backup-{{ item.name }}.sh'
|
||||
minute: '{{ item.schedule_minute | default("*") }}'
|
||||
hour: '{{ item.schedule_hour | default("*") }}'
|
||||
weekday: '{{ item.schedule_weekday | default("*") }}'
|
||||
month: '{{ item.schedule_month | default("*") }}'
|
||||
state: absent
|
||||
become: true
|
||||
no_log: true
|
||||
with_items: '{{ restic_backups }}'
|
||||
when:
|
||||
- restic_create_cron
|
||||
- item.name is defined
|
||||
- item.scheduled | default(false)
|
||||
|
||||
- name: create systemd timer
|
||||
block:
|
||||
- name: copy systemd timer
|
||||
become: true
|
||||
ansible.builtin.template:
|
||||
src: templates/restic.timer.j2
|
||||
dest: "/lib/systemd/system/restic-{{ item.name | replace(' ', '') }}.timer"
|
||||
owner: 'root'
|
||||
group: 'root'
|
||||
mode: '0644'
|
||||
no_log: true
|
||||
with_items: '{{ restic_backups }}'
|
||||
when:
|
||||
- restic_create_cron
|
||||
- item.name is defined
|
||||
- item.scheduled | default(false)
|
||||
|
||||
- name: copy systemd service
|
||||
become: true
|
||||
ansible.builtin.template:
|
||||
src: templates/restic.service.j2
|
||||
dest: "/lib/systemd/system/restic-{{ item.name | replace(' ', '') }}.service"
|
||||
owner: 'root'
|
||||
group: 'root'
|
||||
mode: '0644'
|
||||
no_log: true
|
||||
with_items: '{{ restic_backups }}'
|
||||
when:
|
||||
- restic_create_cron
|
||||
- item.name is defined
|
||||
- item.scheduled | default(false)
|
||||
|
||||
- name: copy systemd service
|
||||
become: true
|
||||
ansible.builtin.template:
|
||||
src: templates/restic.service.j2
|
||||
dest: "/lib/systemd/system/restic-{{ item.name | replace(' ', '') }}.service"
|
||||
owner: 'root'
|
||||
group: 'root'
|
||||
mode: '0644'
|
||||
no_log: true
|
||||
with_items: '{{ restic_backups }}'
|
||||
when:
|
||||
- restic_create_cron
|
||||
- item.name is defined
|
||||
- item.scheduled | default(false)
|
||||
|
||||
- name: Enable restic service
|
||||
become: true
|
||||
ansible.builtin.systemd:
|
||||
name: "restic-{{ item.name | replace(' ', '') | string }}.service"
|
||||
enabled: true
|
||||
daemon_reload: true
|
||||
with_items: '{{ restic_backups }}'
|
||||
when:
|
||||
- restic_create_cron
|
||||
- item.name is defined
|
||||
- item.scheduled | default(false)
|
||||
|
||||
- name: Enable and start restic timer
|
||||
become: true
|
||||
ansible.builtin.systemd:
|
||||
name: "restic-{{ item.name | replace(' ', '') | string }}.timer"
|
||||
enabled: true
|
||||
state: started
|
||||
daemon_reload: true
|
||||
with_items: '{{ restic_backups }}'
|
||||
when:
|
||||
- restic_create_cron
|
||||
- item.name is defined
|
||||
- item.scheduled | default(false)
|
||||
when: ansible_service_mgr == 'systemd'
|
||||
rescue:
|
||||
- name: set ceonjo intead of systemd
|
||||
set_fact:
|
||||
restic_force_cron: true
|
||||
|
||||
|
||||
- name: install cronjob instead of systemd
|
||||
ansible.builtin.cron:
|
||||
name: "do1jlr.restic backup {{ item.name }}"
|
||||
job: "CRON=true {{ restic_script_dir }}/backup-{{ item.name | replace(' ', '') }}.sh"
|
||||
minute: '{{ item.schedule_minute | default("*") }}'
|
||||
hour: '{{ item.schedule_hour | default("*") }}'
|
||||
weekday: '{{ item.schedule_weekday | default("*") }}'
|
||||
month: '{{ item.schedule_month | default("*") }}'
|
||||
state: present
|
||||
cron_file: '/etc/crontab'
|
||||
user: 'root'
|
||||
become: true
|
||||
no_log: true
|
||||
with_items: '{{ restic_backups }}'
|
||||
when:
|
||||
- restic_create_cron
|
||||
- item.name is defined
|
||||
- item.scheduled | default(false)
|
||||
- ansible_service_mgr != 'systemd' or restic_force_cron | default(false)
|
|
@ -10,5 +10,5 @@ restic_os_variables:
|
|||
paths:
|
||||
- 'vars'
|
||||
|
||||
playbook_version_number: 4 # should be int
|
||||
playbook_version_number: 5 # should be int
|
||||
playbook_version_path: 'do1jlr.restic.version'
|
||||
|
|
Loading…
Reference in a new issue