Code Monkey home page Code Monkey logo

saltyorg / saltbox Goto Github PK

View Code? Open in Web Editor NEW
543.0 543.0 64.0 9.36 MB

Ansible-based solution for rapidly deploying a Docker containerized cloud media server.

Home Page: https://docs.saltbox.dev

License: GNU General Public License v3.0

Python 31.53% Jinja 50.16% Shell 18.31%
ansible authelia docker emby jellyfin lidarr nzbget organizr overseerr petio plex portainer prowlarr radarr rclone rutorrent self-hosted sonarr tautulli traefik

saltbox's People

Contributors

aethenn avatar andrewkhunn avatar arcanemagus avatar bandwith avatar beansisfat avatar chazlarson avatar dependabot[bot] avatar desimaniac avatar enormoz avatar fml128 avatar github-actions[bot] avatar horjulf avatar jigsawfr avatar jonathanfinley avatar keldian avatar l3uddz avatar ldub avatar lonix avatar maximuskowalski avatar migz93 avatar owine avatar patricksindelka avatar powerdude avatar rxwatcher avatar saltydk avatar table272 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

saltbox's Issues

Change nomenclature in backup config

  cron:
    cron_time: weekly
    cron_state: absent/present

That "absent/present" thing is really non-intuitive. I'd suggest changing it to something like:

  cron:
    cron_time: weekly
    schedule_with_cron: yes/no

Theme.park themes

Redo the edited theme.park implementation since hotio support was implemented upstream and then continue rolling it out onto the additional supported roles.

Backup Free Space Check

Implement a free space check when using the current backup implementation if we're not going to ditch it outright for duplicacy. Could make it a user definable size.

Migration via a cloudbox backup.

Explore the possibility of a specific role or flag to indicate a Cloudbox backup is being used and avoid bringing in stale settings.

Ideas could be as simple as setting a shortcut on the restore drive, or dragging the wanted tarred app files into the saltbox default.

I imagine this being required only for those that are quite new to X box or do not understand the backup restore process.

I would consider priority low as it would be a one shot use.

Similarly might be to consider the PG restorers if structure is close enough and I think it is.

Docker startup conditions improvements.

Consider making the service start conditions more tweakable now that vfs cache full is a feature. VFS cache full mounts can take a lot of time to start up if you ever upload through them directly so maybe we should have optional changes to which service starts after which.

My initial thoughts would be to have docker wait for mergerfs and mergerfs wait for rclone_vfs.service (but make service names configurable in case of custom setups.

Finish implementing dynamic port assignment

Ideal candidate for proper roleX support in roles that need port bindings. Requirements are that ports are assigned within a range and checked for availability and the application configuration can also be updated through the Ansible role itself.

Autorecover from errant git commands

Users may be accustomed to using native git commands to update repos.

A change point from Cloudbox is that Saltbox no longer runs a settings update with every tag run; the problem with this was seen in the discord when someone ran a manual git pull and the settings file wasn't updated, which caused an install to fail when the new setting wasn't found.

The preferred sb update command wouldn't fix it at that point, since it wouldn't see any changes that required action.

It would be friendly to auto-recover from this situation. There were some options discussed in the Discord. One of them is on the task/update-settings-on-manual-pull branch.

Ansible: Rework port variables.

Currently doesn't make a whole lot of sense

sonarr_docker_ports_defaults:
  - "{{ sonarr_web_port }}"
sonarr_docker_ports_custom: []
sonarr_docker_ports: "{{ sonarr_docker_ports_defaults
                         + sonarr_docker_ports_custom
                      if (not reverse_proxy_is_enabled)
                      else [] + sonarr_docker_ports_custom }}"

Where defaults is only active if running without reverse proxy and you need to add another variable to add "default" port bindings. Should make a webui specific port label so that defaults will contain the ports that need to be used in addition to the webui port.

Overseerx

Is there an Overseerx role? I am unable to install it on my server. Before migration, I was using cloudbox community role but I can't find this here.

How does this compare to CloudBox?

Hey there ๐Ÿ‘‹
Love the work that's been going on with Saltbox!

I'm currently toying around with CloudBox and happened upon your project. It is clearly inspired by the work done on Cloudbox, but I've noticed a few clear differences:

  • Addition of Traefik Proxy
  • Addition of Authelia
  • Replacement of Ombi with Overseer

Are there other big ones that users should be made aware of?

In addition to being more actively maintained, are there any high-level goals for the project that differ from that of Cloudbox, or should this project be viewed as a fork with the same goals as Cloudbox?

Traefik: Implement per router http(s) upgrade.


Describe the problem
Currently the setup is set to globally upgrade HTTP requests to HTTPS which may not be wanted in some circumstances.

Describe any solutions you think might work
Define the upgrade on the router used in each role so it can be toggled individually.

Use venv for deployed python tools.

Deploy all python scripts/tools in their own venv to avoid conflicts when installing or whenever user does something outside of what ansible manages.

plex_dupefinder : ModuleNotFoundError

Describe the bug
plex_dupefinder

Traceback (most recent call last):
  File "/usr/local/bin/plex_dupefinder", line 9, in <module>
    from tabulate import tabulate
ModuleNotFoundError: No module named 'tabulate'

To Reproduce
Steps to reproduce the behavior:
sb install plex_dupefinder and launch plex_dupefinder

Logs

Running Saltbox Tags: plex_dupefinder

ansible-playbook [core 2.12.1]
  config file = /srv/git/saltbox/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share                                                                                                                                                             /ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.8/dist-packages/ansibl                                                                                                                                                             e
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/co                                                                                                                                                             llections
  executable location = /usr/local/bin/ansible-playbook
  python version = 3.8.10 (default, Nov 26 2021, 20:14:08) [GCC 9.3.0]
  jinja version = 2.10.1
  libyaml = True
Using /srv/git/saltbox/ansible.cfg as config file
statically imported: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/01_syste                                                                                                                                                             m.yml
statically imported: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/02_ansib                                                                                                                                                             le_version.yml
statically imported: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/03_pytho                                                                                                                                                             n_version.yml
statically imported: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/04_ansib                                                                                                                                                             le_tags.yml
statically imported: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/05_backu                                                                                                                                                             p.yml
statically imported: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/06_logs.                                                                                                                                                             yml
statically imported: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/07_tmp.y                                                                                                                                                             ml
statically imported: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/08_setti                                                                                                                                                             ngs.yml
statically imported: /srv/git/saltbox/roles/pre_tasks/tasks/subtasks/apt.yml
statically imported: /srv/git/saltbox/roles/backup/tasks/sanity_check.yml
statically imported: /srv/git/saltbox/roles/backup/tasks/variables.yml
statically imported: /srv/git/saltbox/roles/backup/tasks/cron.yml
statically imported: /srv/git/saltbox/roles/backup/tasks/snapshot.yml
statically imported: /srv/git/saltbox/roles/backup/tasks/restore_service.yml
redirecting (type: action) ansible.builtin.synchronize to ansible.posix.synchron                                                                                                                                                             ize
statically imported: /srv/git/saltbox/roles/restore/tasks/variables.yml
statically imported: /srv/git/saltbox/roles/restore/tasks/restore_remote.yml
statically imported: /srv/git/saltbox/roles/restore/tasks/permissions.yml
statically imported: /srv/git/saltbox/roles/hetzner/tasks/subtasks/hetzner.yml
statically imported: /srv/git/saltbox/roles/user/tasks/subtasks/user_account.yml
statically imported: /srv/git/saltbox/roles/rclone/tasks/subtasks/01_build_url.y                                                                                                                                                             ml
statically imported: /srv/git/saltbox/roles/rclone/tasks/subtasks/02_install_bin                                                                                                                                                             ary.yml
statically imported: /srv/git/saltbox/roles/rclone/tasks/subtasks/03_import_conf                                                                                                                                                             ig.yml
statically imported: /srv/git/saltbox/roles/system/tasks/subtasks/logrotate.yml
statically imported: /srv/git/saltbox/roles/system/tasks/subtasks/network.yml
statically imported: /srv/git/saltbox/roles/system/tasks/subtasks/mounts.yml
redirecting (type: modules) ansible.builtin.mount to ansible.posix.mount
statically imported: /srv/git/saltbox/roles/system/tasks/subtasks/timezone.yml
statically imported: /srv/git/saltbox/roles/system/tasks/subtasks/locale.yml
redirecting (type: modules) ansible.builtin.locale_gen to community.general.loca                                                                                                                                                             le_gen
redirecting (type: modules) ansible.builtin.locale_gen to community.general.loca                                                                                                                                                             le_gen
redirecting (type: modules) ansible.builtin.ini_file to community.general.ini_fi                                                                                                                                                             le
redirecting (type: modules) ansible.builtin.docker_container to community.docker                                                                                                                                                             .docker_container
redirecting (type: modules) ansible.builtin.docker_container to community.docker                                                                                                                                                             .docker_container
statically imported: /srv/git/saltbox/roles/docker/tasks/subtasks/daemon.yml
redirecting (type: modules) ansible.builtin.ini_file to community.general.ini_fi                                                                                                                                                             le
statically imported: /srv/git/saltbox/roles/docker/tasks/subtasks/network.yml
redirecting (type: modules) ansible.builtin.docker_network to community.docker.d                                                                                                                                                             ocker_network
redirecting (type: modules) ansible.builtin.docker_network to community.docker.d                                                                                                                                                             ocker_network
redirecting (type: modules) ansible.builtin.docker_network to community.docker.d                                                                                                                                                             ocker_network
redirecting (type: modules) ansible.builtin.docker_network to community.docker.d                                                                                                                                                             ocker_network
statically imported: /srv/git/saltbox/roles/docker/tasks/subtasks/housekeeping.y                                                                                                                                                             ml
statically imported: /srv/git/saltbox/roles/docker/tasks/subtasks/dockerhub.yml
statically imported: /srv/git/saltbox/roles/docker/tasks/subtasks/dns.yml
statically imported: /srv/git/saltbox/roles/remote/tasks/subtasks/variables.yml
statically imported: /srv/git/saltbox/roles/remote/tasks/subtasks/containers.yml
statically imported: /srv/git/saltbox/roles/remote/tasks/subtasks/basics.yml
statically imported: /srv/git/saltbox/roles/unionfs/tasks/subtasks/variables.yml
statically imported: /srv/git/saltbox/roles/unionfs/tasks/subtasks/docker/contai                                                                                                                                                             ners_stop.yml
statically imported: /srv/git/saltbox/roles/unionfs/tasks/subtasks/mount_path.ym                                                                                                                                                             l
statically imported: /srv/git/saltbox/roles/unionfs/tasks/subtasks/basics.yml
statically imported: /srv/git/saltbox/roles/unionfs/tasks/subtasks/docker/daemon                                                                                                                                                             .yml
redirecting (type: modules) ansible.builtin.ini_file to community.general.ini_fi                                                                                                                                                             le
statically imported: /srv/git/saltbox/roles/unionfs/tasks/subtasks/docker/contai                                                                                                                                                             ners_start.yml
statically imported: /srv/git/saltbox/roles/authelia/tasks/subtasks/settings.yml
statically imported: /srv/git/saltbox/roles/traefik/tasks/subtasks/zerossl.yml
statically imported: /srv/git/saltbox/roles/traefik/tasks/subtasks/config.yml
statically imported: /srv/git/saltbox/roles/cloudflare/tasks/subtasks/variables.                                                                                                                                                             yml
statically imported: /srv/git/saltbox/roles/cloudflare/tasks/subtasks/subdomains                                                                                                                                                             .yml
statically imported: /srv/git/saltbox/roles/cloudflare/tasks/subtasks/subdomains                                                                                                                                                             /add_subdomain.yml
redirecting (type: modules) ansible.builtin.cloudflare_dns to community.general.                                                                                                                                                             cloudflare_dns
statically imported: /srv/git/saltbox/roles/cloudflare/tasks/subtasks/subdomains                                                                                                                                                             /remove_subdomain.yml
redirecting (type: modules) ansible.builtin.cloudflare_dns to community.general.                                                                                                                                                             cloudflare_dns
statically imported: /srv/git/saltbox/roles/cloudflare/tasks/subtasks/purge_cach                                                                                                                                                             e.yml
statically imported: /srv/git/saltbox/roles/cloudflare/tasks/subtasks/page_rules                                                                                                                                                             .yml
statically imported: /srv/git/saltbox/roles/cloudflare/tasks/subtasks/page_rules                                                                                                                                                             /remove_page_rule.yml
statically imported: /srv/git/saltbox/roles/cloudflare/tasks/subtasks/page_rules                                                                                                                                                             /add_page_rule.yml
statically imported: /srv/git/saltbox/roles/plex/tasks/subtasks/pre-install/main                                                                                                                                                             .yml
statically imported: /srv/git/saltbox/roles/plex/tasks/subtasks/preferences/pref                                                                                                                                                             erences.yml
redirecting (type: modules) ansible.builtin.xml to community.general.xml
redirecting (type: modules) ansible.builtin.xml to community.general.xml
statically imported: /srv/git/saltbox/roles/plex/tasks/subtasks/preferences/clai                                                                                                                                                             m_server.yml
redirecting (type: modules) ansible.builtin.ini_file to community.general.ini_fi                                                                                                                                                             le
redirecting (type: modules) ansible.builtin.ini_file to community.general.ini_fi                                                                                                                                                             le
statically imported: /srv/git/saltbox/roles/plex/tasks/subtasks/post-install/mai                                                                                                                                                             n.yml
statically imported: /srv/git/saltbox/roles/plex/tasks/subtasks/post-install/upd                                                                                                                                                             ate_ports.yml
redirecting (type: modules) ansible.builtin.xml to community.general.xml
statically imported: /srv/git/saltbox/roles/plex_extra_tasks/tasks/main2.yml
statically imported: /srv/git/saltbox/roles/plex_extra_tasks/tasks/subtasks/post                                                                                                                                                             _install_checks.yml
redirecting (type: modules) ansible.builtin.docker_container to community.docker                                                                                                                                                             .docker_container
statically imported: /srv/git/saltbox/roles/plex_extra_tasks/tasks/subtasks/sett                                                                                                                                                             ings/db_cache_size.yml
redirecting (type: modules) ansible.builtin.docker_container to community.docker                                                                                                                                                             .docker_container
redirecting (type: modules) ansible.builtin.docker_container to community.docker                                                                                                                                                             .docker_container
redirecting (type: modules) ansible.builtin.xml to community.general.xml
redirecting (type: modules) ansible.builtin.docker_container to community.docker                                                                                                                                                             .docker_container
redirecting (type: modules) ansible.builtin.xml to community.general.xml
redirecting (type: modules) ansible.builtin.docker_container to community.docker                                                                                                                                                             .docker_container
redirecting (type: modules) ansible.builtin.docker_container to community.docker                                                                                                                                                             .docker_container
redirecting (type: modules) ansible.builtin.docker_container to community.docker                                                                                                                                                             .docker_container
redirecting (type: modules) ansible.builtin.docker_container to community.docker                                                                                                                                                             .docker_container
statically imported: /srv/git/saltbox/roles/plex_autoscan/tasks/subtasks/service                                                                                                                                                             s.yml
statically imported: /srv/git/saltbox/roles/plex_autoscan/tasks/subtasks/setting                                                                                                                                                             s.yml
statically imported: /srv/git/saltbox/roles/cloudplow/tasks/subtasks/settings.ym                                                                                                                                                             l
statically imported: /srv/git/saltbox/roles/nzbget/tasks/subtasks/post-install/m                                                                                                                                                             ain.yml
redirecting (type: modules) ansible.builtin.docker_container to community.docker                                                                                                                                                             .docker_container
statically imported: /srv/git/saltbox/roles/nzbget/tasks/subtasks/post-install/s                                                                                                                                                             cripts/main.yml
statically imported: /srv/git/saltbox/roles/nzbget/tasks/subtasks/post-install/s                                                                                                                                                             ettings/main.yml
redirecting (type: modules) ansible.builtin.docker_container to community.docker                                                                                                                                                             .docker_container
statically imported: /srv/git/saltbox/roles/rutorrent/tasks/subtasks/pre-install/main.yml
statically imported: /srv/git/saltbox/roles/rutorrent/tasks/subtasks/post-install/main.yml
redirecting (type: modules) ansible.builtin.docker_container to community.docker.docker_container
statically imported: /srv/git/saltbox/roles/rutorrent/tasks/subtasks/post-install/settings/main.yml
statically imported: /srv/git/saltbox/roles/rutorrent/tasks/subtasks/post-install/settings/new_installs.yml
redirecting (type: modules) ansible.builtin.ini_file to community.general.ini_file
redirecting (type: modules) ansible.builtin.ini_file to community.general.ini_file
statically imported: /srv/git/saltbox/roles/rutorrent/tasks/subtasks/post-install/settings/existing_installs.yml
redirecting (type: modules) ansible.builtin.ini_file to community.general.ini_file
redirecting (type: modules) ansible.builtin.docker_container to community.docker.docker_container
statically imported: /srv/git/saltbox/roles/nzbhydra2/tasks/subtasks/post-install/main.yml
statically imported: /srv/git/saltbox/roles/nzbhydra2/tasks/subtasks/post-install/settings.yml
redirecting (type: modules) ansible.builtin.docker_container to community.docker.docker_container
redirecting (type: modules) ansible.builtin.docker_container to community.docker.docker_container
statically imported: /srv/git/saltbox/roles/sonarr/tasks/subtasks/post-install/main.yml
statically imported: /srv/git/saltbox/roles/sonarr/tasks/subtasks/post-install/update_ports.yml
redirecting (type: modules) ansible.builtin.xml to community.general.xml
statically imported: /srv/git/saltbox/roles/radarr/tasks/subtasks/post-install/main.yml
statically imported: /srv/git/saltbox/roles/radarr/tasks/subtasks/post-install/update_ports.yml
redirecting (type: modules) ansible.builtin.xml to community.general.xml
statically imported: /srv/git/saltbox/roles/authelia/tasks/subtasks/settings.yml
redirecting (type: modules) ansible.builtin.ini_file to community.general.ini_file
redirecting (type: modules) ansible.builtin.ini_file to community.general.ini_file
redirecting (type: modules) ansible.builtin.xml to community.general.xml
redirecting (type: modules) ansible.builtin.docker_container to community.docker.docker_container
redirecting (type: modules) ansible.builtin.xml to community.general.xml
redirecting (type: modules) ansible.builtin.docker_container to community.docker.docker_container
redirecting (type: modules) ansible.builtin.docker_container to community.docker.docker_container
redirecting (type: modules) ansible.builtin.docker_container to community.docker.docker_container
statically imported: /srv/git/saltbox/roles/emby/tasks/subtasks/post-install.yml
statically imported: /srv/git/saltbox/roles/emby/tasks/subtasks/settings.yml
redirecting (type: modules) ansible.builtin.docker_container to community.docker.docker_container
redirecting (type: modules) ansible.builtin.xml to community.general.xml
redirecting (type: modules) ansible.builtin.docker_container to community.docker.docker_container
redirecting (type: modules) ansible.builtin.xml to community.general.xml
redirecting (type: modules) ansible.builtin.xml to community.general.xml
statically imported: /srv/git/saltbox/roles/netdata/tasks/subtasks/settings.yml
redirecting (type: modules) ansible.builtin.docker_container to community.docker.docker_container
redirecting (type: modules) ansible.builtin.docker_container to community.docker.docker_container
statically imported: /srv/git/saltbox/roles/sabnzbd/tasks/subtasks/post-install/main.yml
statically imported: /srv/git/saltbox/roles/sabnzbd/tasks/subtasks/post-install/settings.yml
redirecting (type: modules) ansible.builtin.docker_container to community.docker.docker_container
redirecting (type: modules) ansible.builtin.ini_file to community.general.ini_file
redirecting (type: modules) ansible.builtin.docker_container to community.docker.docker_container
redirecting (type: modules) ansible.builtin.docker_container to community.docker.docker_container
redirecting (type: modules) ansible.builtin.docker_container to community.docker.docker_container
redirecting (type: modules) ansible.builtin.docker_container to community.docker.docker_container
redirecting (type: modules) ansible.builtin.docker_container to community.docker.docker_container
statically imported: /srv/git/saltbox/roles/autoscan/tasks/subtasks/settings.yml
redirecting (type: modules) ansible.builtin.xml to community.general.xml
statically imported: /srv/git/saltbox/roles/jellyfin/tasks/subtasks/preinstall.yml
statically imported: /srv/git/saltbox/roles/jellyfin/tasks/subtasks/postinstall.yml
statically imported: /srv/git/saltbox/roles/jellyfin/tasks/subtasks/settings.yml
redirecting (type: modules) ansible.builtin.docker_container to community.docker.docker_container
redirecting (type: modules) ansible.builtin.xml to community.general.xml
redirecting (type: modules) ansible.builtin.xml to community.general.xml
redirecting (type: modules) ansible.builtin.docker_container to community.docker.docker_container
redirecting (type: modules) ansible.builtin.docker_container to community.docker.docker_container
redirecting (type: modules) ansible.builtin.docker_container to community.docker.docker_container
redirecting (type: callback) ansible.builtin.profile_tasks to ansible.posix.profile_tasks
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.

PLAYBOOK: saltbox.yml **********************************************************
1 plays in /srv/git/saltbox/saltbox.yml

PLAY [localhost] ***************************************************************

TASK [Gathering Facts] *********************************************************
task path: /srv/git/saltbox/saltbox.yml:2
Thursday 13 January 2022  18:45:09 +0100 (0:00:00.714)       0:00:00.714 ******
ok: [localhost]
META: ran handlers
META:

TASK [sanity_check : System | Ensure Ansible is running on Ubuntu 20.04] *******
task path: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/01_system.yml:10
Thursday 13 January 2022  18:45:17 +0100 (0:00:07.756)       0:00:08.471 ******
ok: [localhost] => {
    "changed": false,
    "msg": "System is running Ubuntu 20.04.3 LTS."
}

TASK [sanity_check : Find Ansible version] *************************************
task path: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/02_ansible_version.yml:10
Thursday 13 January 2022  18:45:17 +0100 (0:00:00.081)       0:00:08.552 ******
changed: [localhost] => {"changed": true, "cmd": "python3 -c 'from ansible_collections.ansible_release import ansible_version; print(ansible_version)'", "delta": "0:00:00.036154", "end": "2022-01-13 18:45:17.797318", "msg": "", "rc": 0, "start": "2022-01-13 18:45:17.761164", "stderr": "", "stderr_lines": [], "stdout": "5.1.0", "stdout_lines": ["5.1.0"]}

TASK [sanity_check : Print Ansible version] ************************************
task path: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/02_ansible_version.yml:14
Thursday 13 January 2022  18:45:17 +0100 (0:00:00.548)       0:00:09.101 ******
ok: [localhost] => {
    "msg": [
        "Installed Ansible version: 5.1.0.",
        "Installed Ansible Core version: 2.12.1."
    ]
}

TASK [sanity_check : Check if Ansible needs upgrading] *************************
task path: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/02_ansible_version.yml:20
Thursday 13 January 2022  18:45:17 +0100 (0:00:00.062)       0:00:09.164 ******
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [sanity_check : Upgrade Ansible] ******************************************
task path: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/02_ansible_version.yml:25
Thursday 13 January 2022  18:45:17 +0100 (0:00:00.063)       0:00:09.228 ******
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [sanity_check : Upgrade Ansible | Print Instructions] *********************
task path: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/02_ansible_version.yml:34
Thursday 13 January 2022  18:45:18 +0100 (0:00:00.062)       0:00:09.291 ******
skipping: [localhost] => {}

TASK [sanity_check : Upgrade Ansible | Exit] ***********************************
task path: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/02_ansible_version.yml:40
Thursday 13 January 2022  18:45:18 +0100 (0:00:00.068)       0:00:09.359 ******
META:
skipping: [localhost] => {"msg": "", "skip_reason": "end_play conditional evaluated to False, continuing play"}

TASK [sanity_check : Python Version | Ensure Ansible is running on Python 3.8+] ***
task path: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/03_python_version.yml:10
Thursday 13 January 2022  18:45:18 +0100 (0:00:00.071)       0:00:09.431 ******
ok: [localhost] => {
    "changed": false,
    "msg": "Ansible running on Python version: 3.8.10"
}

TASK [sanity_check : Ansible Tags | Get all available Ansible tags] ************
task path: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/04_ansible_tags.yml:10
Thursday 13 January 2022  18:45:18 +0100 (0:00:00.066)       0:00:09.497 ******
ok: [localhost] => {"changed": false, "cmd": "ansible-playbook saltbox.yml --list-tags 2>&1 | grep \"TASK TAGS\" \\\n  | cut -d\":\" -f2 | awk '{sub(/\\[/, \"\")sub(/\\]/, \"\")}1' | sed -e 's/,//g' | xargs -n 1 | sort -u\n", "delta": "0:00:04.036822", "end": "2022-01-13 18:45:22.522446", "msg": "", "rc": 0, "start": "2022-01-13 18:45:18.485624", "stderr": "", "stderr_lines": [], "stdout": "always\nasshama\nauthelia\nautoscan\nbackup\nbpytop\nbtrfsmaintenance\ncloudflare\ncloudplow\ncommon\ncommunity\ncore\nctop\ncustom\nddclient\ndocker\ndocker-housekeeping\nemby\nfeederbox\nglances\nhetzner\niperf3\njackett\njellyfin\nkernel\nlidarr\nmariadb\nmediabox\nmongodb\nmotd\nmounts\nmounts_override\nnetdata\nnethogs\nnginx\nnvidia\nnzbget\nnzbhydra2\nnzbthrottle\nopt-permissions-reset\norganizr\noverseerr\npetio\nplex\nplex_auth_token\nplex_autoscan\nplex-db-cache-size\nplex_dupefinder\nplex-extra-tasks\nplex_patrol\nplex-plugins-sub-zero\nplex-plugins-sub-zero-reinstall\nplex-plugins-webtools\nplex-plugins-webtools-reinstall\nportainer\npreinstall\npre_tasks\nprowlarr\npython-plexlibrary\nradarr\nrclone\nredis\nrestore\nrestore-service\nrutorrent\nsabnzbd\nsaltbox\nsaltbox-restore-service\nsandbox\nsanity_check\nscripts\nset-backup\nset-locale\nset-timezone\nsettings\nshell\nsonarr\nsstv\nsubliminal\nsystem\ntautulli\ntrackarr\ntraefik\ntraefik_reset_certs\ntraktarr\ntransfer\nuser\nyyq", "stdout_lines": ["always", "asshama", "authelia", "autoscan", "backup", "bpytop", "btrfsmaintenance", "cloudflare", "cloudplow", "common", "community", "core", "ctop", "custom", "ddclient", "docker", "docker-housekeeping", "emby", "feederbox", "glances", "hetzner", "iperf3", "jackett", "jellyfin", "kernel", "lidarr", "mariadb", "mediabox", "mongodb", "motd", "mounts", "mounts_override", "netdata", "nethogs", "nginx", "nvidia", "nzbget", "nzbhydra2", "nzbthrottle", "opt-permissions-reset", "organizr", "overseerr", "petio", "plex", "plex_auth_token", "plex_autoscan", "plex-db-cache-size", "plex_dupefinder", "plex-extra-tasks", "plex_patrol", "plex-plugins-sub-zero", "plex-plugins-sub-zero-reinstall", "plex-plugins-webtools", "plex-plugins-webtools-reinstall", "portainer", "preinstall", "pre_tasks", "prowlarr", "python-plexlibrary", "radarr", "rclone", "redis", "restore", "restore-service", "rutorrent", "sabnzbd", "saltbox", "saltbox-restore-service", "sandbox", "sanity_check", "scripts", "set-backup", "set-locale", "set-timezone", "settings", "shell", "sonarr", "sstv", "subliminal", "system", "tautulli", "trackarr", "traefik", "traefik_reset_certs", "traktarr", "transfer", "user", "yyq"]}

TASK [sanity_check : Ansible Tags | Ensure valid Ansible tag(s) were provided] ***
task path: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/04_ansible_tags.yml:18
Thursday 13 January 2022  18:45:22 +0100 (0:00:04.326)       0:00:13.823 ******
ok: [localhost] => (item=plex_dupefinder) => {"ansible_loop_var": "item", "changed": false, "item": "plex_dupefinder", "msg": "All assertions passed"}

TASK [sanity_check : Backup | Check if 'backup.lock' is present] ***************
task path: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/05_backup.yml:10
Thursday 13 January 2022  18:45:22 +0100 (0:00:00.093)       0:00:13.917 ******
ok: [localhost] => {"changed": false, "stat": {"exists": false}}

TASK [sanity_check : Backup | Get age of 'backup.lock' file] *******************
task path: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/05_backup.yml:16
Thursday 13 January 2022  18:45:23 +0100 (0:00:00.505)       0:00:14.422 ******
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [sanity_check : Backup | Delete stale 'backup.lock'] **********************
task path: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/05_backup.yml:22
Thursday 13 January 2022  18:45:23 +0100 (0:00:00.059)       0:00:14.481 ******
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [sanity_check : Backup | Fail when 'backup.lock' exists] ******************
task path: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/05_backup.yml:28
Thursday 13 January 2022  18:45:23 +0100 (0:00:00.061)       0:00:14.542 ******
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [sanity_check : Logs | Get 'saltbox.yml' info] ****************************
task path: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/06_logs.yml:10
Thursday 13 January 2022  18:45:23 +0100 (0:00:00.056)       0:00:14.599 ******
ok: [localhost] => {"changed": false, "stat": {"atime": 1641838429.4430397, "attr_flags": "e", "attributes": ["extents"], "block_size": 4096, "blocks": 16, "charset": "us-ascii", "checksum": "f2b887f03856609feb87d808b666b8fd24ca6471", "ctime": 1641838429.523039, "dev": 64773, "device_type": 0, "executable": false, "exists": true, "gid": 1000, "gr_name": "skullknight", "inode": 165937728, "isblk": false, "ischr": false, "isdir": false, "isfifo": false, "isgid": false, "islnk": false, "isreg": true, "issock": false, "isuid": false, "mimetype": "text/plain", "mode": "0644", "mtime": 1641838429.4430397, "nlink": 1, "path": "/srv/git/saltbox/saltbox.yml", "pw_name": "skullknight", "readable": true, "rgrp": true, "roth": true, "rusr": true, "size": 5117, "uid": 1000, "version": "3835694510", "wgrp": false, "woth": false, "writeable": true, "wusr": true, "xgrp": false, "xoth": false, "xusr": false}}

TASK [sanity_check : Logs | Touch 'saltbox.log'] *******************************
task path: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/06_logs.yml:15
Thursday 13 January 2022  18:45:23 +0100 (0:00:00.308)       0:00:14.908 ******
changed: [localhost] => {"changed": true, "dest": "/srv/git/saltbox/saltbox.log", "gid": 1000, "group": "skullknight", "mode": "0664", "owner": "skullknight", "size": 35000, "state": "file", "uid": 1000}

TASK [sanity_check : Tmp | Create Ansible Temp directories] ********************
task path: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/07_tmp.yml:10
Thursday 13 January 2022  18:45:24 +0100 (0:00:00.466)       0:00:15.375 ******
ok: [localhost] => (item=/tmp/ansible) => {"ansible_loop_var": "item", "changed": false, "gid": 0, "group": "root", "item": "/tmp/ansible", "mode": "0777", "owner": "root", "path": "/tmp/ansible", "size": 4096, "state": "directory", "uid": 0}

TASK [sanity_check : Settings | Ensure TLS validation isn't used with ZeroSSL] ***
task path: /srv/git/saltbox/roles/sanity_check/tasks/subtasks/08_settings.yml:10
Thursday 13 January 2022  18:45:24 +0100 (0:00:00.299)       0:00:15.674 ******
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False"}
META: role_complete for localhost

TASK [pre_tasks : APT | Remove APT locks] **************************************
task path: /srv/git/saltbox/roles/pre_tasks/tasks/subtasks/apt.yml:10
Thursday 13 January 2022  18:45:24 +0100 (0:00:00.087)       0:00:15.762 ******
ok: [localhost] => (item=/var/lib/apt/lists/lock) => {"ansible_loop_var": "item", "changed": false, "item": "/var/lib/apt/lists/lock", "path": "/var/lib/apt/lists/lock", "state": "absent"}
ok: [localhost] => (item=/var/cache/apt/archives/lock) => {"ansible_loop_var": "item", "changed": false, "item": "/var/cache/apt/archives/lock", "path": "/var/cache/apt/archives/lock", "state": "absent"}
ok: [localhost] => (item=/var/lib/dpkg/lock) => {"ansible_loop_var": "item", "changed": false, "item": "/var/lib/dpkg/lock", "path": "/var/lib/dpkg/lock", "state": "absent"}
META: role_complete for localhost
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:

TASK [plex_dupefinder : Create plex_dupefinder directories] ********************
task path: /srv/git/saltbox/roles/plex_dupefinder/tasks/main.yml:10
Thursday 13 January 2022  18:45:27 +0100 (0:00:03.197)       0:00:18.960 ******
changed: [localhost] => (item=/opt/plex_dupefinder) => {"ansible_loop_var": "item", "changed": true, "gid": 1000, "group": "skullknight", "item": "/opt/plex_dupefinder", "mode": "0775", "owner": "skullknight", "path": "/opt/plex_dupefinder", "size": 302, "state": "directory", "uid": 1000}

TASK [plex_dupefinder : Clone plex_dupefinder] *********************************
task path: /srv/git/saltbox/roles/plex_dupefinder/tasks/main.yml:21
Thursday 13 January 2022  18:45:28 +0100 (0:00:00.432)       0:00:19.393 ******
changed: [localhost] => {"after": "393569b8f0e38937eab055b827ad9dbf6610d783", "before": "393569b8f0e38937eab055b827ad9dbf6610d783", "changed": true, "msg": "Local modifications exist.", "remote_url_changed": false}

TASK [plex_dupefinder : Install pip requirements] ******************************
task path: /srv/git/saltbox/roles/plex_dupefinder/tasks/main.yml:31
Thursday 13 January 2022  18:45:29 +0100 (0:00:01.021)       0:00:20.414 ******
ok: [localhost] => {"changed": false, "cmd": ["/opt/plex_dupefinder/venv/bin/pip3", "install", "-r", "/opt/plex_dupefinder/requirements.txt"], "name": null, "requirements": "/opt/plex_dupefinder/requirements.txt", "state": "present", "stderr": "", "stderr_lines": [], "stdout": "Requirement already satisfied: tabulate~=0.8.2 in /opt/plex_dupefinder/venv/lib/python3.8/site-packages (from -r /opt/plex_dupefinder/requirements.txt (line 1)) (0.8.9)\nRequirement already satisfied: requests~=2.18.4 in /opt/plex_dupefinder/venv/lib/python3.8/site-packages (from -r /opt/plex_dupefinder/requirements.txt (line 2)) (2.18.4)\nRequirement already satisfied: attrdict~=2.0.0 in /opt/plex_dupefinder/venv/lib/python3.8/site-packages (from -r /opt/plex_dupefinder/requirements.txt (line 3)) (2.0.1)\nRequirement already satisfied: PlexAPI~=3.0.6 in /opt/plex_dupefinder/venv/lib/python3.8/site-packages (from -r /opt/plex_dupefinder/requirements.txt (line 4)) (3.0.6)\nRequirement already satisfied: certifi>=2017.4.17 in /opt/plex_dupefinder/venv/lib/python3.8/site-packages (from requests~=2.18.4->-r /opt/plex_dupefinder/requirements.txt (line 2)) (2021.10.8)\nRequirement already satisfied: idna<2.7,>=2.5 in /opt/plex_dupefinder/venv/lib/python3.8/site-packages (from requests~=2.18.4->-r /opt/plex_dupefinder/requirements.txt (line 2)) (2.6)\nRequirement already satisfied: urllib3<1.23,>=1.21.1 in /opt/plex_dupefinder/venv/lib/python3.8/site-packages (from requests~=2.18.4->-r /opt/plex_dupefinder/requirements.txt (line 2)) (1.22)\nRequirement already satisfied: chardet<3.1.0,>=3.0.2 in /opt/plex_dupefinder/venv/lib/python3.8/site-packages (from requests~=2.18.4->-r /opt/plex_dupefinder/requirements.txt (line 2)) (3.0.4)\nRequirement already satisfied: six in /opt/plex_dupefinder/venv/lib/python3.8/site-packages (from attrdict~=2.0.0->-r /opt/plex_dupefinder/requirements.txt (line 3)) (1.16.0)\nRequirement already satisfied: tqdm in /opt/plex_dupefinder/venv/lib/python3.8/site-packages (from PlexAPI~=3.0.6->-r /opt/plex_dupefinder/requirements.txt (line 4)) (4.62.3)\nRequirement already satisfied: websocket-client in /opt/plex_dupefinder/venv/lib/python3.8/site-packages (from PlexAPI~=3.0.6->-r /opt/plex_dupefinder/requirements.txt (line 4)) (1.2.3)\n", "stdout_lines": ["Requirement already satisfied: tabulate~=0.8.2 in /opt/plex_dupefinder/venv/lib/python3.8/site-packages (from -r /opt/plex_dupefinder/requirements.txt (line 1)) (0.8.9)", "Requirement already satisfied: requests~=2.18.4 in /opt/plex_dupefinder/venv/lib/python3.8/site-packages (from -r /opt/plex_dupefinder/requirements.txt (line 2)) (2.18.4)", "Requirement already satisfied: attrdict~=2.0.0 in /opt/plex_dupefinder/venv/lib/python3.8/site-packages (from -r /opt/plex_dupefinder/requirements.txt (line 3)) (2.0.1)", "Requirement already satisfied: PlexAPI~=3.0.6 in /opt/plex_dupefinder/venv/lib/python3.8/site-packages (from -r /opt/plex_dupefinder/requirements.txt (line 4)) (3.0.6)", "Requirement already satisfied: certifi>=2017.4.17 in /opt/plex_dupefinder/venv/lib/python3.8/site-packages (from requests~=2.18.4->-r /opt/plex_dupefinder/requirements.txt (line 2)) (2021.10.8)", "Requirement already satisfied: idna<2.7,>=2.5 in /opt/plex_dupefinder/venv/lib/python3.8/site-packages (from requests~=2.18.4->-r /opt/plex_dupefinder/requirements.txt (line 2)) (2.6)", "Requirement already satisfied: urllib3<1.23,>=1.21.1 in /opt/plex_dupefinder/venv/lib/python3.8/site-packages (from requests~=2.18.4->-r /opt/plex_dupefinder/requirements.txt (line 2)) (1.22)", "Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /opt/plex_dupefinder/venv/lib/python3.8/site-packages (from requests~=2.18.4->-r /opt/plex_dupefinder/requirements.txt (line 2)) (3.0.4)", "Requirement already satisfied: six in /opt/plex_dupefinder/venv/lib/python3.8/site-packages (from attrdict~=2.0.0->-r /opt/plex_dupefinder/requirements.txt (line 3)) (1.16.0)", "Requirement already satisfied: tqdm in /opt/plex_dupefinder/venv/lib/python3.8/site-packages (from PlexAPI~=3.0.6->-r /opt/plex_dupefinder/requirements.txt (line 4)) (4.62.3)", "Requirement already satisfied: websocket-client in /opt/plex_dupefinder/venv/lib/python3.8/site-packages (from PlexAPI~=3.0.6->-r /opt/plex_dupefinder/requirements.txt (line 4)) (1.2.3)"], "version": null, "virtualenv": "/opt/plex_dupefinder/venv"}

TASK [plex_dupefinder : Check config exists] ***********************************
task path: /srv/git/saltbox/roles/plex_dupefinder/tasks/main.yml:39
Thursday 13 January 2022  18:45:34 +0100 (0:00:05.259)       0:00:25.674 ******
ok: [localhost] => {"changed": false, "stat": {"atime": 1642095225.4535952, "attr_flags": "", "attributes": [], "block_size": 4096, "blocks": 8, "charset": "us-ascii", "checksum": "8edfda27352343e7648d5458b4655b1791d6ab0a", "ctime": 1642095085.5904522, "dev": 48, "device_type": 0, "executable": true, "exists": true, "gid": 1000, "gr_name": "skullknight", "inode": 442528, "isblk": false, "ischr": false, "isdir": false, "isfifo": false, "isgid": false, "islnk": false, "isreg": true, "issock": false, "isuid": false, "mimetype": "application/json", "mode": "0775", "mtime": 1642095085.110455, "nlink": 1, "path": "/opt/plex_dupefinder/config.json", "pw_name": "skullknight", "readable": true, "rgrp": true, "roth": true, "rusr": true, "size": 1420, "uid": 1000, "version": "28224", "wgrp": true, "woth": false, "writeable": true, "wusr": true, "xgrp": true, "xoth": true, "xusr": true}}

TASK [plex_auth_token : Auth Token | Create directories] ***********************
task path: /srv/git/saltbox/roles/plex_auth_token/tasks/main.yml:10
Thursday 13 January 2022  18:45:34 +0100 (0:00:00.298)       0:00:25.972 ******
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [plex_auth_token : Auth Token | Check if PIN exists] **********************
task path: /srv/git/saltbox/roles/plex_auth_token/tasks/main.yml:18
Thursday 13 January 2022  18:45:34 +0100 (0:00:00.073)       0:00:26.046 ******
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [plex_auth_token : Auth Token | Set plex_auth_client_identifier] **********
task path: /srv/git/saltbox/roles/plex_auth_token/tasks/main.yml:23
Thursday 13 January 2022  18:45:34 +0100 (0:00:00.071)       0:00:26.117 ******
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [plex_auth_token : Auth Token | Set plex_auth_client_identifier] **********
task path: /srv/git/saltbox/roles/plex_auth_token/tasks/main.yml:28
Thursday 13 January 2022  18:45:34 +0100 (0:00:00.071)       0:00:26.188 ******
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [plex_auth_token : Auth Token | Set plex_auth_token variable if previously saved] ***
task path: /srv/git/saltbox/roles/plex_auth_token/tasks/main.yml:33
Thursday 13 January 2022  18:45:35 +0100 (0:00:00.071)       0:00:26.260 ******
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [plex_auth_token : Auth Token | Set plex_no_token status] *****************
task path: /srv/git/saltbox/roles/plex_auth_token/tasks/main.yml:38
Thursday 13 January 2022  18:45:35 +0100 (0:00:00.080)       0:00:26.340 ******
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [plex_auth_token : Auth Token | Check if Token is valid] ******************
task path: /srv/git/saltbox/roles/plex_auth_token/tasks/main.yml:42
Thursday 13 January 2022  18:45:35 +0100 (0:00:00.077)       0:00:26.417 ******
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [plex_auth_token : Auth Token | Generate PIN] *****************************
task path: /srv/git/saltbox/roles/plex_auth_token/tasks/main.yml:64
Thursday 13 January 2022  18:45:35 +0100 (0:00:00.078)       0:00:26.496 ******
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [plex_auth_token : Auth Token | Prompt user to login] *********************
task path: /srv/git/saltbox/roles/plex_auth_token/tasks/main.yml:80
Thursday 13 January 2022  18:45:35 +0100 (0:00:00.076)       0:00:26.573 ******
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [plex_auth_token : Auth Token | Check PIN] ********************************
task path: /srv/git/saltbox/roles/plex_auth_token/tasks/main.yml:84
Thursday 13 January 2022  18:45:35 +0100 (0:00:00.144)       0:00:26.717 ******
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [plex_auth_token : Auth Token | Add Client Identifier to '/opt/saltbox/plex.ini'] ***
task path: /srv/git/saltbox/roles/plex_auth_token/tasks/main.yml:97
Thursday 13 January 2022  18:45:35 +0100 (0:00:00.072)       0:00:26.789 ******
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [plex_auth_token : Auth Token | Add Plex Token to '/opt/saltbox/plex.ini'] ***
task path: /srv/git/saltbox/roles/plex_auth_token/tasks/main.yml:104
Thursday 13 January 2022  18:45:35 +0100 (0:00:00.081)       0:00:26.871 ******
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [plex_auth_token : Auth Token | Set plex_auth_token variable] *************
task path: /srv/git/saltbox/roles/plex_auth_token/tasks/main.yml:111
Thursday 13 January 2022  18:45:35 +0100 (0:00:00.079)       0:00:26.950 ******
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [plex_auth_token : Auth Token | Get X-Plex-Token] *************************
task path: /srv/git/saltbox/roles/plex_auth_token/tasks/main.yml:120
Thursday 13 January 2022  18:45:35 +0100 (0:00:00.069)       0:00:27.020 ******
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [plex_auth_token : Auth Token | Set plex_auth_token variable] *************
task path: /srv/git/saltbox/roles/plex_auth_token/tasks/main.yml:134
Thursday 13 January 2022  18:45:35 +0100 (0:00:00.075)       0:00:27.095 ******
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [plex_auth_token : Auth Token | Display Plex Auth Token] ******************
task path: /srv/git/saltbox/roles/plex_auth_token/tasks/main.yml:140
Thursday 13 January 2022  18:45:35 +0100 (0:00:00.068)       0:00:27.164 ******
skipping: [localhost] => {}

TASK [plex_auth_token : Change permissions] ************************************
task path: /srv/git/saltbox/roles/plex_auth_token/tasks/main.yml:144
Thursday 13 January 2022  18:45:35 +0100 (0:00:00.072)       0:00:27.237 ******
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False"}
META:

TASK [plex_dupefinder : Import default config] *********************************
task path: /srv/git/saltbox/roles/plex_dupefinder/tasks/main.yml:49
Thursday 13 January 2022  18:45:36 +0100 (0:00:00.107)       0:00:27.344 ******
ok: [localhost] => {"changed": false, "dest": "/opt/plex_dupefinder/config.json", "src": "/root/.ansible/tmp/ansible-local-45852e254vzzm/tmpb7i_18tr/config.json.j2"}

TASK [plex_dupefinder : Set plex_dupefinder.py as executable] ******************
task path: /srv/git/saltbox/roles/plex_dupefinder/tasks/main.yml:58
Thursday 13 January 2022  18:45:36 +0100 (0:00:00.465)       0:00:27.809 ******
ok: [localhost] => {"changed": false, "gid": 1000, "group": "skullknight", "mode": "0775", "owner": "skullknight", "path": "/opt/plex_dupefinder/plex_dupefinder.py", "size": 18161, "state": "file", "uid": 1000}

TASK [plex_dupefinder : Create /usr/local/bin symlink] *************************
task path: /srv/git/saltbox/roles/plex_dupefinder/tasks/main.yml:65
Thursday 13 January 2022  18:45:36 +0100 (0:00:00.286)       0:00:28.095 ******
ok: [localhost] => {"changed": false, "dest": "/usr/local/bin/plex_dupefinder", "gid": 0, "group": "root", "mode": "0777", "owner": "root", "size": 39, "src": "/opt/plex_dupefinder/plex_dupefinder.py", "state": "link", "uid": 0}
META: role_complete for localhost
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META:
META: ran handlers
META: ran handlers

PLAY RECAP *********************************************************************
localhost                  : ok=19   changed=4    unreachable=0    failed=0    skipped=24   rescued=0    ignored=0

Thursday 13 January 2022  18:45:37 +0100 (0:00:01.103)       0:00:29.199 ******
===============================================================================
Gathering Facts --------------------------------------------------------- 7.76s
/srv/git/saltbox/saltbox.yml:2 ------------------------------------------------
plex_dupefinder : Install pip requirements ------------------------------ 5.26s
/srv/git/saltbox/roles/plex_dupefinder/tasks/main.yml:31 ----------------------
sanity_check : Ansible Tags | Get all available Ansible tags ------------ 4.33s
/srv/git/saltbox/roles/sanity_check/tasks/subtasks/04_ansible_tags.yml:10 -----
pre_tasks : APT | Remove APT locks -------------------------------------- 3.20s
/srv/git/saltbox/roles/pre_tasks/tasks/subtasks/apt.yml:10 --------------------
plex_dupefinder : Create /usr/local/bin symlink ------------------------- 1.10s
/srv/git/saltbox/roles/plex_dupefinder/tasks/main.yml:65 ----------------------
plex_dupefinder : Clone plex_dupefinder --------------------------------- 1.02s
/srv/git/saltbox/roles/plex_dupefinder/tasks/main.yml:21 ----------------------
sanity_check : Find Ansible version ------------------------------------- 0.55s
/srv/git/saltbox/roles/sanity_check/tasks/subtasks/02_ansible_version.yml:10 --
sanity_check : Backup | Check if 'backup.lock' is present --------------- 0.51s
/srv/git/saltbox/roles/sanity_check/tasks/subtasks/05_backup.yml:10 -----------
sanity_check : Logs | Touch 'saltbox.log' ------------------------------- 0.47s
/srv/git/saltbox/roles/sanity_check/tasks/subtasks/06_logs.yml:15 -------------
plex_dupefinder : Import default config --------------------------------- 0.47s
/srv/git/saltbox/roles/plex_dupefinder/tasks/main.yml:49 ----------------------
plex_dupefinder : Create plex_dupefinder directories -------------------- 0.43s
/srv/git/saltbox/roles/plex_dupefinder/tasks/main.yml:10 ----------------------
sanity_check : Logs | Get 'saltbox.yml' info ---------------------------- 0.31s
/srv/git/saltbox/roles/sanity_check/tasks/subtasks/06_logs.yml:10 -------------
sanity_check : Tmp | Create Ansible Temp directories -------------------- 0.30s
/srv/git/saltbox/roles/sanity_check/tasks/subtasks/07_tmp.yml:10 --------------
plex_dupefinder : Check config exists ----------------------------------- 0.30s
/srv/git/saltbox/roles/plex_dupefinder/tasks/main.yml:39 ----------------------
plex_dupefinder : Set plex_dupefinder.py as executable ------------------ 0.29s
/srv/git/saltbox/roles/plex_dupefinder/tasks/main.yml:58 ----------------------
plex_auth_token : Auth Token | Prompt user to login --------------------- 0.14s
/srv/git/saltbox/roles/plex_auth_token/tasks/main.yml:80 ----------------------
plex_auth_token : Change permissions ------------------------------------ 0.11s
/srv/git/saltbox/roles/plex_auth_token/tasks/main.yml:144 ---------------------
sanity_check : Ansible Tags | Ensure valid Ansible tag(s) were provided --- 0.09s
/srv/git/saltbox/roles/sanity_check/tasks/subtasks/04_ansible_tags.yml:18 -----
sanity_check : Settings | Ensure TLS validation isn't used with ZeroSSL --- 0.09s
/srv/git/saltbox/roles/sanity_check/tasks/subtasks/08_settings.yml:10 ---------
plex_auth_token : Auth Token | Add Client Identifier to '/opt/saltbox/plex.ini' --- 0.08s
/srv/git/saltbox/roles/plex_auth_token/tasks/main.yml:97 ----------------------

Duplicacy


Describe the problem
Current backup implementation is slow and uploads redundant data since it is not incremental.

Describe any solutions you think might work
Duplicacy.

Emby/Plex toggle

Add a settings.yml option that chooses which media client to install when running saltbox/mediabox tags. Instead of the whole skip tags ordeal.

Authelia

Implement Authelia as an SSO option.

Arrx / Multiple Sonarr / Radarr instances

Hi, is there support for multiple sonarr and radarr instances? I have been using cloudbox on my server and was wondering if arrx or other community roles are possible, or can be installed from cloudbox community branch.

Add support for Plex two-factor authentication


Saltbox should handle Plex TFA cleanly.

Implementation ideas are discussed here:
https://forums.plex.tv/t/authenticating-with-plex/609370

This comes into play when running the initial tag when the server is claimed and in the plex_token.sh script. Seems like this interactive bit could be added up front in the install, though perhaps we can't tell if we'll actually need it until later.

In any case, wanted to get this into the backlog so it isn't forgotten. Personally, I'd like to turn on TFA and leave it on.

Sonarr var in Readarr Role

Describe the bug
Error when deploying readarr without sonarr.
sonarr_paths_location var used as destination when deploying readarr.

To Reproduce
Steps to reproduce the behavior:
sb install core
sb install readarr

Expected behavior
readarr install
in this file

Prometheus

Add Prometheus and node_exporter.

Deploy node_exporter on host.
node_exporter configuration: --collector.systemd --collector.processes --web.listen-address=172.19.0.1:9100

Deploy Prometheus in container behind basic auth. Access node_exporter through saltbox network bridge.

Traefik: Change HTTPS redirect.

Currently we redirect to HTTPS on every HTTP request. There may be use cases (Plex) where it could be useful to allow HTTP traffic on a specific container.

Revert back to redirection middleware that is applied on a per container basis to solve this particular headache.

Rclone Crypt support

Relevant tasks needing work:

  • Update cloudplow and/or crop to support rotation of service accounts when using rclone crypt backend. Possibly look into running rclone as a daemon so that we can use rclone remote control more easily.
  • Update Plex Autoscan to use the Plex API instead of command line as it already contains crypt mapping support for drive monitoring.
  • Add crypt as an option to the automated rclone remote setup (when it actually exists).

DNS Proxied-exclusion Setting

In adv_settings the "proxied" setting is nice, however, would it be worthwhile to have a "proxied-exclusion" setting so that a user can define a single or multiple containers that get excluded from proxy, even if the setting for "proxied" is "yes".

I looked to see if I could find a default ansible variable for this in the plex role but didn't notice one.

Docker: Define project wide default volumes in a variable.


Describe the problem
Users will have to edit all relevant containers if they want custom volume mounts.

Describe any solutions you think might work
If roles inherit a global variable in their configuration the user can do wholesale changes in one place if needed or change it on a container basis instead.

Download location settings.

We should rework the current download path setup currently used as it interferes with roles that want a generic download folder not related to nzb or torrents.

Current suggestion is to change settings.yml option to:

downloads: /mnt/local/downloads

And build the remaining nzb/torrent sub-paths through the inventory system to allow for override capability should the user still need it.

Alternately we could do the following:

downloads:
  generic: /mnt/local/downloads
  nzbs: /mnt/local/downloads/nzbs
  torrents: /mnt/local/downloads/torrents

Multiple remotes

Tweak settings.yml remote variable to either be a list or provide some other way of mounting multiple mounts. Either defaulting to a union or creating a dictionary so you select the mount profiles per remote.

Persistent *arrX


Describe the problem
If utilizing multiple *arr roles, you must run them as individual tags setting the variables at runtime. The ability to align all instances of an app for version updates would be a good thing.

Describe any solutions you think might work
Ability to set an inventory variable that takes an array of instance names which would be looped through when the particular tag is run. For example, every time the radarr tag is run, loop through radarr_name instances for radarr, radarr4k, radarrremux, etc.

Additional context

Additional control over Saltbox apprise alerts

Having a "logging-level" setting for the built in Saltbox apprise alerts. This could include "debug, info, warn, error" for example. It's self explanatory but for example "error" logging would only send alerts when task fail, such as back ups, rather than reporting all the successful runs like it does with todays behavior.

Configuration rework

After dictionary merging was marked as deprecated in Ansible the current format makes less sense. Look for solutions to simplify the config files, maybe even go away from separate files and move more settings to the inventory system.

Authelia - FreeIPA

Contemplate adding FreeIPA for Authelia user management instead of the config file.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.