Skip to content

Commit

Permalink
mounts: refactor rclone toggle
Browse files Browse the repository at this point in the history
  • Loading branch information
saltydk committed Jul 23, 2023
1 parent 0c73cdc commit 319d1f5
Show file tree
Hide file tree
Showing 11 changed files with 53 additions and 23 deletions.
1 change: 1 addition & 0 deletions defaults/settings.yml.default
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ authelia:
subdomain: login
downloads: /mnt/unionfs/downloads
rclone:
enabled: true
remotes:
- remote: google
template: google
Expand Down
4 changes: 3 additions & 1 deletion inventories/group_vars/all.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,9 @@ rclone_remote_is_defined: "{{ (rclone is defined) and
(rclone.remotes is not none) and
(rclone.remotes | length > 0) }}"

use_remote: true
use_cloudplow: "{{ rclone_remote_is_defined and use_remote }}"

use_remote: "{{ rclone.enabled }}"

use_nvidia: "{{ gpu.nvidia | bool }}"

Expand Down
2 changes: 1 addition & 1 deletion roles/docker/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
ansible.builtin.set_fact:
_remotes_services_list: "{{ _remotes_services_list | default('') + (rclone_service_template + item.remote + '.service ') }}"
with_items: "{{ rclone.remotes }}"
when: rclone_remote_is_defined
when: rclone_remote_is_defined and use_remote

- name: Tasks for when Docker exists and is running
when: docker_binary.stat.exists and docker_service_running
Expand Down
6 changes: 3 additions & 3 deletions roles/docker/templates/override.conf.j2
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@
#########################################################################

[Unit]
{% if rclone_remote_is_defined and not continuous_integration %}
After={{ _remotes_services_list if rclone_remote_is_defined else '' }}{{ docker_service_after }}
Requires={{ _remotes_services_list if rclone_remote_is_defined else '' }}{{ docker_service_after }}
{% if rclone_remote_is_defined and use_remote and not continuous_integration %}
After={{ _remotes_services_list }}{{ docker_service_after }}
Requires={{ _remotes_services_list }}{{ docker_service_after }}
{% else %}
After={{ docker_service_after }}
Requires={{ docker_service_after }}
Expand Down
2 changes: 1 addition & 1 deletion roles/remote/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -102,4 +102,4 @@
- name: Remote Tasks
ansible.builtin.include_tasks: "remote.yml"
with_items: "{{ rclone.remotes }}"
when: rclone_remote_is_defined
when: rclone_remote_is_defined and use_remote
4 changes: 2 additions & 2 deletions roles/scripts/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@
group: "{{ user.name }}"
mode: "0775"
force: true
when: rclone_remote_is_defined
when: rclone_remote_is_defined and use_remote

- name: Import 'download_torrents_from_rclone_remote.sh'
ansible.builtin.template:
Expand All @@ -145,7 +145,7 @@
group: "{{ user.name }}"
mode: "0775"
force: true
when: rclone_remote_is_defined
when: rclone_remote_is_defined and use_remote

- name: Import 'StickyDownloadQueue.py'
ansible.builtin.get_url:
Expand Down
42 changes: 31 additions & 11 deletions roles/settings/files/settings-updater.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,12 @@ def is_remote_entry(thing):
return ret_val

def _inner_upgrade(settings1, settings2, key=None, overwrite=False):
if isinstance(settings2, (dict, list)):
merged = settings2.copy()
else:
merged = settings2

sub_upgraded = False
merged = settings2.copy()

if isinstance(settings1, dict):
for k, v in settings1.items():
Expand All @@ -109,22 +113,38 @@ def _inner_upgrade(settings1, settings2, key=None, overwrite=False):
continue

# iterate children
if isinstance(v, dict) or isinstance(v, list):
if isinstance(v, dict):
merged[k], did_upgrade = _inner_upgrade(settings1[k], settings2[k], key=k,
overwrite=overwrite)
overwrite=overwrite)
sub_upgraded = did_upgrade if did_upgrade else sub_upgraded
elif isinstance(v, list):
# check if the corresponding value in settings2 is also a list
if isinstance(settings2[k], list):
merged[k], did_upgrade = _inner_upgrade(settings1[k], settings2[k], key=k,
overwrite=overwrite)
sub_upgraded = did_upgrade if did_upgrade else sub_upgraded
else:
# if it's not a list, use the default list from settings1
merged[k] = v
sub_upgraded = True
log.info("Mismatched type for %r. Used default value: %s", str(k), str(v))
elif settings1[k] != settings2[k] and overwrite:
merged = settings1
sub_upgraded = True
elif isinstance(settings1, list) and key:
for v in settings1:
is_remote = is_remote_entry(v)
might_not_want_it = len(settings2) > 0
if v not in settings2 and not is_remote and not might_not_want_it:
merged.append(v)
sub_upgraded = True
log.info("Added to setting %r: %s", str(key), str(v))
continue
# check if settings2 is also a list
if isinstance(settings2, list):
for v in settings1:
if v not in settings2:
merged.append(v)
sub_upgraded = True
log.info("Added to setting %r: %s", str(key), str(v))
continue
else:
# if settings2 is not a list, use the default list from settings1
merged = settings1
sub_upgraded = True
log.info("Mismatched type for %r. Used default value: %s", str(key), str(settings1))

return merged, sub_upgraded

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,18 @@

- name: Migrator | 'settings.yml' | Migration 01 | Create 'rclone.remotes' dict
ansible.builtin.shell: |
yyq e -i '.rclone.remotes = ""' {{ playbook_dir }}/{{ file }}
yyq e -i '.rclone.remotes += [{"remote": "google", "template": "google", "cache": {"enabled": false, "size": "50G", "max_age": "504h"}, "port": 5572}]' {{ playbook_dir }}/{{ file }}
become: true
become_user: "{{ saltbox_yml.stat.pw_name }}"
when: (rclone.remotes is undefined) and not rclone_remote_is_defined

- name: Migrator | 'settings.yml' | Migration 01 | Create 'rclone.enabled' dict
ansible.builtin.shell: |
yyq e -i '.rclone.enabled = {{ "true" if rclone_remote_is_defined else "false" }}' {{ playbook_dir }}/{{ file }}
become: true
become_user: "{{ saltbox_yml.stat.pw_name }}"
when: (rclone.enabled is undefined)

- name: Migrator | 'adv_settings.yml' | Migration 01 | Remove 'null' values
ansible.builtin.replace:
path: "{{ playbook_dir }}/{{ file }}"
Expand Down
2 changes: 1 addition & 1 deletion roles/unionfs/tasks/subtasks/docker/daemon.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
ansible.builtin.set_fact:
_remotes_services_list: "{{ _remotes_services_list | default('') + (rclone_service_template + item.remote + '.service ') }}"
with_items: "{{ rclone.remotes }}"
when: rclone_remote_is_defined
when: rclone_remote_is_defined and use_remote

- name: "Docker | Daemon | Create override directory"
ansible.builtin.file:
Expand Down
2 changes: 1 addition & 1 deletion roles/unionfs/tasks/subtasks/variables.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
ansible.builtin.set_fact:
_remotes_list: "{{ _remotes_list | default('') + '/mnt/remote/' + item.remote + '=NC:' }}"
with_items: "{{ rclone.remotes }}"
when: rclone_remote_is_defined and (item.remote != "feeder")
when: rclone_remote_is_defined and use_remote and (item.remote != "feeder")

- name: Variables | Append 'custom_mount_branch' to '_remotes_list' variable
ansible.builtin.set_fact:
Expand Down
2 changes: 1 addition & 1 deletion saltbox.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
- { role: overseerr, tags: ['saltbox', 'mediabox', 'overseerr'] }
- { role: portainer, tags: ['saltbox', 'feederbox', 'portainer'] }
- { role: organizr, tags: ['saltbox', 'feederbox', 'organizr'] }
- { role: cloudplow, tags: ['saltbox', 'feederbox', 'cloudplow'], when: ['rclone_remote_is_defined'] }
- { role: cloudplow, tags: ['saltbox', 'feederbox', 'cloudplow'], when: ['use_cloudplow'] }
- { role: sonarr, tags: ['saltbox', 'feederbox', 'sonarr'] }
- { role: radarr, tags: ['saltbox', 'feederbox', 'radarr'] }
- { role: lidarr, tags: ['saltbox', 'feederbox', 'lidarr'] }
Expand Down

0 comments on commit 319d1f5

Please sign in to comment.