diff --git a/collections/ansible_collections/chatton/portainer/FILES.json b/collections/ansible_collections/chatton/portainer/FILES.json index a217c2e..5b49a54 100644 --- a/collections/ansible_collections/chatton/portainer/FILES.json +++ b/collections/ansible_collections/chatton/portainer/FILES.json @@ -60,7 +60,7 @@ "name": "plugins/modules/portainer_stack.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8f8c5a3fcefa02becec7dad10442e92db1b40dccdd43e297baa273a03f260105", + "chksum_sha256": "15a5f2d3f4f641e5ffe92a52ec5ee8e39770d19c88426acb69e4f2fc7ea109d6", "format": 1 }, { diff --git a/collections/ansible_collections/chatton/portainer/MANIFEST.json b/collections/ansible_collections/chatton/portainer/MANIFEST.json index ba313e7..117559c 100644 --- a/collections/ansible_collections/chatton/portainer/MANIFEST.json +++ b/collections/ansible_collections/chatton/portainer/MANIFEST.json @@ -23,7 +23,7 @@ "name": "FILES.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "df6db8314d203f2365d1ff4253d6d793197067dced93c835a6b88074c18d4921", + "chksum_sha256": "1e0743f5c4caf0acd28dfbb7ca30d59971f3548a4a5da3d880cf327b497780dc", "format": 1 }, "format": 1 diff --git a/collections/ansible_collections/chatton/portainer/plugins/modules/portainer_stack.py b/collections/ansible_collections/chatton/portainer/plugins/modules/portainer_stack.py index 582737c..ea50f6b 100644 --- a/collections/ansible_collections/chatton/portainer/plugins/modules/portainer_stack.py +++ b/collections/ansible_collections/chatton/portainer/plugins/modules/portainer_stack.py @@ -196,7 +196,7 @@ def _get_stack_contents(params): return f.read() if params.get("definition"): - return yaml.dump(params["definition"], indent=4) + return yaml.dump(params["definition"], indent=2) raise ValueError("No docker_compose_file_path or definition provided.") diff --git a/group_vars/servers.yml b/group_vars/servers.yml index 68d9ba2..fcf8eea 100644 --- a/group_vars/servers.yml +++ b/group_vars/servers.yml @@ -37,3 +37,16 @@ portainer_endpoint: -1 portainer_base_url: "http://qnap:9000" external_docker_networks: [] portainer_required_files: [] +restart_policy: unless-stopped +backup_labels: + ie.cianhatton.backup.enabled: true + ie.cianhatton.backup.schedule: nightly + +docker_backup_aws_s3_encrypt: false +docker_backup_host_backup_directory: "/tmp" +docker_backup_retain_count: 3 +docker_backup_restore_latest_s3_key: true +docker_backup_fail_on_no_s3_backups: false +docker_backup_restore_force: false + +portainer_user: admin diff --git a/host_vars/qnap.yml b/host_vars/qnap.yml index 0dd9ad0..6b3f0ca 100644 --- a/host_vars/qnap.yml +++ b/host_vars/qnap.yml @@ -23,10 +23,6 @@ backup_directories: cron_hour: "5" -docker_backup_aws_s3_encrypt: false -docker_backup_host_backup_directory: "/tmp" -docker_backup_retain_count: 3 - devices: - uuid: a54c1bde-1400-4975-bf24-08c603ca3a11 # /dev/sdc1 path: /mnt/data/device0 diff --git a/playbooks/setup-homelab.yml b/playbooks/setup-homelab.yml index 69b942f..78121fe 100644 --- a/playbooks/setup-homelab.yml +++ b/playbooks/setup-homelab.yml @@ -78,13 +78,13 @@ with_items: "{{ portainer_roles }}" -- name: Setup and deploy templated portainer services. - hosts: servers - become: true - pre_tasks: - - name: Include vault variables. - ansible.builtin.include_vars: '../{{ vault_file }}' - tags: [always] - roles: - - role: setup_hosted_services - tags: [services] +#- name: Setup and deploy templated portainer services. +# hosts: servers +# become: true +# pre_tasks: +# - name: Include vault variables. +# ansible.builtin.include_vars: '../{{ vault_file }}' +# tags: [always] +# roles: +# - role: setup_hosted_services +# tags: [services] diff --git a/requirements.yml b/requirements.yml index cd6a07b..e805a97 100644 --- a/requirements.yml +++ b/requirements.yml @@ -8,7 +8,7 @@ roles: collections: - name: https://github.com/chatton/ansible-portainer.git type: git - version: support_definition + version: master - name: https://github.com/chatton/ansible-docker-backup.git type: git version: master diff --git a/roles/portainer_arr/defaults/main.yml b/roles/portainer_arr/defaults/main.yml index a7c9bc2..82296fc 100644 --- a/roles/portainer_arr/defaults/main.yml +++ b/roles/portainer_arr/defaults/main.yml @@ -2,13 +2,6 @@ arr_portainer_stack_name: vpn-stack arr_vpn_image: "ghcr.io/tprasadtp/protonwire" arr_vpn_tag: "7.2.0" -arr_backup_enabled: true -arr_backup_schedule: nightly - -# backup -arr_docker_backup_restore_force: false -arr_docker_backup_fail_on_no_s3_backups: false -arr_docker_backup_restore_latest_s3_key: true # Qbittorrent qbittorrent_image: lscr.io/linuxserver/qbittorrent diff --git a/roles/portainer_arr/tasks/main.yml b/roles/portainer_arr/tasks/main.yml index 0ce53ea..1c9e9cf 100644 --- a/roles/portainer_arr/tasks/main.yml +++ b/roles/portainer_arr/tasks/main.yml @@ -3,9 +3,6 @@ ansible.builtin.include_role: name: chatton.docker_backup.docker_s3_volume_restore vars: - docker_backup_restore_force: "{{ arr_docker_backup_restore_force }}" - docker_backup_restore_latest_s3_key: "{{ arr_docker_backup_restore_latest_s3_key }}" - docker_backup_fail_on_no_s3_backups: "{{ arr_docker_backup_fail_on_no_s3_backups }}" docker_backup_s3_volume: "{{ item }}" with_items: - name: "{{ arr_portainer_stack_name }}_qbittorrent_config" @@ -15,7 +12,7 @@ - name: "Arr | Update Portainer." chatton.portainer.portainer_stack: - username: admin + username: '{{ portainer_user }}' password: '{{ portainer.password }}' base_url: '{{ portainer_base_url }}' stack_name: '{{ arr_portainer_stack_name }}' @@ -67,9 +64,7 @@ - 8.8.8.8 qbittorrent: - labels: - ie.cianhatton.backup.enabled: "{{ arr_backup_enabled }}" - ie.cianhatton.backup.schedule: "{{ arr_backup_schedule }}" + labels: "{{ backup_labels}}" depends_on: - protonwire image: "{{ qbittorrent_image }}:{{ qbittorrent_tag }}" @@ -86,9 +81,7 @@ restart: unless-stopped radarr: - labels: - ie.cianhatton.backup.enabled: "{{ arr_backup_enabled }}" - ie.cianhatton.backup.schedule: "{{ arr_backup_schedule }}" + labels: "{{ backup_labels}}" depends_on: - protonwire image: "{{ radarr_image }}:{{ radarr_tag }}" @@ -108,9 +101,7 @@ depends_on: - protonwire image: "{{ sonarr_image }}:{{ sonarr_tag }}" - labels: - ie.cianhatton.backup.enabled: "{{ arr_backup_enabled }}" - ie.cianhatton.backup.schedule: "{{ arr_backup_schedule }}" + labels: "{{ backup_labels}}" container_name: "{{ sonarr_container_name }}" network_mode: "service:protonwire" environment: @@ -124,9 +115,7 @@ restart: unless-stopped jackett: - labels: - ie.cianhatton.backup.enabled: "{{ arr_backup_enabled }}" - ie.cianhatton.backup.schedule: "{{ arr_backup_schedule }}" + labels: "{{ backup_labels}}" depends_on: - protonwire image: "{{ jackett_image }}:{{ jackett_tag }}" diff --git a/roles/portainer_bookstack/defaults/main.yml b/roles/portainer_bookstack/defaults/main.yml index d2141cf..fe0bc8b 100644 --- a/roles/portainer_bookstack/defaults/main.yml +++ b/roles/portainer_bookstack/defaults/main.yml @@ -2,8 +2,6 @@ bookstack_state: present bookstack_image: linuxserver/bookstack bookstack_tag: 23.06.1 -bookstack_backup_enabled: true -bookstack_backup_schedule: "nightly" bookstack_puid: 1000 bookstack_pgid: 1000 bookstack_db_host: qnap @@ -11,9 +9,5 @@ bookstack_database: bookstackapp bookstack_db_user: bookstack bookstack_app_url: https://bookstack.cianhatton.ie bookstack_expose_port: 6875 -bookstack_restart_policy: unless-stopped bookstack_container_name: bookstack bookstack_portainer_stack_name: bookstack -bookstack_docker_backup_restore_force: false -bookstack_docker_backup_restore_latest_s3_key: true -bookstack_docker_backup_fail_on_no_s3_backups: false diff --git a/roles/portainer_bookstack/tasks/main.yml b/roles/portainer_bookstack/tasks/main.yml index aae732f..1ec8185 100644 --- a/roles/portainer_bookstack/tasks/main.yml +++ b/roles/portainer_bookstack/tasks/main.yml @@ -3,15 +3,12 @@ ansible.builtin.include_role: name: chatton.docker_backup.docker_s3_volume_restore vars: - docker_backup_restore_force: "{{ bookstack_docker_backup_restore_force }}" - docker_backup_restore_latest_s3_key: "{{ bookstack_docker_backup_restore_latest_s3_key }}" - docker_backup_fail_on_no_s3_backups: "{{ bookstack_docker_backup_fail_on_no_s3_backups }}" docker_backup_s3_volume: name: "{{ bookstack_portainer_stack_name }}_config" - name: "Bookstack | Update Portainer." chatton.portainer.portainer_stack: - username: admin + username: '{{ portainer_user }}' password: '{{ portainer.password }}' base_url: '{{ portainer_base_url }}' stack_name: '{{ bookstack_portainer_stack_name }}' @@ -21,9 +18,7 @@ version: "3.1" services: bookstack: - labels: - ie.cianhatton.backup.enabled: "{{ bookstack_backup_enabled }}" - ie.cianhatton.backup.schedule: "{{ bookstack_backup_schedule }}" + labels: "{{ backup_labels }}" image: "{{ bookstack_image }}:{{ bookstack_tag }}" container_name: "{{ bookstack_container_name }}" environment: @@ -38,6 +33,6 @@ - config:/config ports: - "{{ bookstack_expose_port }}:80" - restart: "{{ bookstack_restart_policy }}" + restart: "{{ restart_policy }}" volumes: config: {} diff --git a/roles/portainer_dashdot/defaults/main.yml b/roles/portainer_dashdot/defaults/main.yml index a74134a..7a08f9e 100644 --- a/roles/portainer_dashdot/defaults/main.yml +++ b/roles/portainer_dashdot/defaults/main.yml @@ -5,4 +5,3 @@ dashdot_tag: latest dashdot_expose_port: 3010 dashdot_portainer_stack_name: dashdot dashdot_container_name: dashdot -dashdot_restart_policy: unless-stopped diff --git a/roles/portainer_dashdot/tasks/main.yml b/roles/portainer_dashdot/tasks/main.yml index 1cb406f..1841f6b 100644 --- a/roles/portainer_dashdot/tasks/main.yml +++ b/roles/portainer_dashdot/tasks/main.yml @@ -1,7 +1,7 @@ --- - name: "Dashy | Update Portainer." chatton.portainer.portainer_stack: - username: admin + username: '{{ portainer_user }}' password: '{{ portainer.password }}' base_url: '{{ portainer_base_url }}' stack_name: '{{ dashdot_portainer_stack_name }}' @@ -12,7 +12,7 @@ dashdot: container_name: "{{ dashdot_container_name}}" image: "{{ dashdot_image }}:{{ dashdot_tag }}" - restart: "{{ dashdot_restart_policy }}" + restart: "{{ restart_policy }}" privileged: true ports: - '{{ dashdot_expose_port }}:3001' diff --git a/roles/portainer_dashy/defaults/main.yml b/roles/portainer_dashy/defaults/main.yml index 0e53e6a..b3fbd0d 100644 --- a/roles/portainer_dashy/defaults/main.yml +++ b/roles/portainer_dashy/defaults/main.yml @@ -5,7 +5,6 @@ dashy_tag: 2.1.1 dashy_expose_port: 4000 dashy_portainer_stack_name: dashy dashy_container_name: dashy -dashy_restart_policy: unless-stopped dashy_config_dir: /etc/config/dashy dashy_config_file: dashy-config.yml diff --git a/roles/portainer_dashy/tasks/main.yml b/roles/portainer_dashy/tasks/main.yml index 48dda86..06f24db 100644 --- a/roles/portainer_dashy/tasks/main.yml +++ b/roles/portainer_dashy/tasks/main.yml @@ -16,7 +16,7 @@ - name: "Dashy | Update Portainer." chatton.portainer.portainer_stack: - username: admin + username: '{{ portainer_user }}' password: '{{ portainer.password }}' base_url: '{{ portainer_base_url }}' stack_name: '{{ dashy_portainer_stack_name }}' @@ -36,7 +36,7 @@ - "NODE_ENV={{ dashy_node_env }}" - "UID={{ dashy_uid }}" - "GID={{ dashy_gid }}" - restart: "{{ dashy_restart_policy}}" + restart: "{{ restart_policy}}" # Configure healthchecks healthcheck: test: ['CMD', 'node', '/app/services/healthcheck'] diff --git a/roles/portainer_glances/defaults/main.yml b/roles/portainer_glances/defaults/main.yml index a5221c0..20ac873 100644 --- a/roles/portainer_glances/defaults/main.yml +++ b/roles/portainer_glances/defaults/main.yml @@ -5,5 +5,4 @@ glances_tag: latest-alpine glances_expose_port: 8083 glances_portainer_stack_name: glances glances_container_name: glances -glances_restart_policy: unless-stopped glances_pid: host diff --git a/roles/portainer_glances/tasks/main.yml b/roles/portainer_glances/tasks/main.yml index 01efa21..bbb3a8f 100644 --- a/roles/portainer_glances/tasks/main.yml +++ b/roles/portainer_glances/tasks/main.yml @@ -1,7 +1,7 @@ --- - name: "Glances | Update Portainer." chatton.portainer.portainer_stack: - username: admin + username: '{{ portainer_user }}' password: '{{ portainer.password }}' base_url: '{{ portainer_base_url }}' stack_name: '{{ glances_portainer_stack_name }}' @@ -11,7 +11,7 @@ services: glances: image: "{{ glances_image }}:{{ glances_tag }}" - restart: "{{ glances_restart_policy }}" + restart: "{{ restart_policy }}" pid: "{{ glances_pid }}" ports: - "{{ glances_expose_port}}:61208" diff --git a/roles/portainer_gotify/defaults/main.yml b/roles/portainer_gotify/defaults/main.yml index d05c688..c310001 100644 --- a/roles/portainer_gotify/defaults/main.yml +++ b/roles/portainer_gotify/defaults/main.yml @@ -5,9 +5,3 @@ gotify_tag: 2.2.5 gotify_expose_port: 7875 gotify_portainer_stack_name: gotify gotify_container_name: gotify -gotify_restart_policy: unless-stopped -gotify_backup_enabled: true -gotify_backup_schedule: "nightly" -gotify_docker_backup_restore_force: false -gotify_docker_backup_restore_latest_s3_key: true -gotify_docker_backup_fail_on_no_s3_backups: false diff --git a/roles/portainer_gotify/tasks/main.yml b/roles/portainer_gotify/tasks/main.yml index b2fc505..ef8f535 100644 --- a/roles/portainer_gotify/tasks/main.yml +++ b/roles/portainer_gotify/tasks/main.yml @@ -3,15 +3,12 @@ ansible.builtin.include_role: name: chatton.docker_backup.docker_s3_volume_restore vars: - docker_backup_restore_force: "{{ gotify_docker_backup_restore_force }}" - docker_backup_restore_latest_s3_key: "{{ gotify_docker_backup_restore_latest_s3_key }}" - docker_backup_fail_on_no_s3_backups: "{{ gotify_docker_backup_fail_on_no_s3_backups }}" docker_backup_s3_volume: name: "{{ gotify_portainer_stack_name }}_data" - name: "Gotify | Update Portainer." chatton.portainer.portainer_stack: - username: admin + username: '{{ portainer_user }}' password: '{{ portainer.password }}' base_url: '{{ portainer_base_url }}' stack_name: '{{ gotify_portainer_stack_name }}' @@ -21,15 +18,13 @@ version: "3.1" services: gotify: - labels: - ie.cianhatton.backup.enabled: "{{ gotify_backup_enabled }}" - ie.cianhatton.backup.schedule: "{{ gotify_backup_schedule }}" + labels: "{{ backup_labels }}" image: "{{ gotify_image}}:{{ gotify_tag }}" container_name: "{{ gotify_container_name }}" volumes: - data:/app/data ports: - "{{ gotify_expose_port }}:80" - restart: "{{ gotify_restart_policy }}" + restart: "{{ restart_policy }}" volumes: data: {} diff --git a/roles/portainer_linkding/defaults/main.yml b/roles/portainer_linkding/defaults/main.yml index c6bbb85..eb65053 100644 --- a/roles/portainer_linkding/defaults/main.yml +++ b/roles/portainer_linkding/defaults/main.yml @@ -2,22 +2,6 @@ linkding_state: present linkding_image: sissbruecker/linkding linkding_tag: latest -linkding_backup_enabled: true -linkding_backup_schedule: "nightly" linkding_expose_port: 9090 linkding_portainer_stack_name: linkding linkding_container_name: linkding -linkding_restart_policy: unless-stopped - -# Environment variables -linkding_websocket_enabled: true -linkding_sends_allowed: true -linkding_emergency_access_allowed: true -linkding_domain: "https://vault.cianhatton.ie" -linkding_signups_allowed: false -linkding_webvault_enabled: true - -# Backup variables -linkding_docker_backup_restore_force: false -linkding_docker_backup_restore_latest_s3_key: true -linkding_docker_backup_fail_on_no_s3_backups: false diff --git a/roles/portainer_linkding/tasks/main.yml b/roles/portainer_linkding/tasks/main.yml index d02fcfe..e695e3d 100644 --- a/roles/portainer_linkding/tasks/main.yml +++ b/roles/portainer_linkding/tasks/main.yml @@ -3,15 +3,12 @@ ansible.builtin.include_role: name: chatton.docker_backup.docker_s3_volume_restore vars: - docker_backup_restore_force: "{{ linkding_docker_backup_restore_force }}" - docker_backup_restore_latest_s3_key: "{{ linkding_docker_backup_restore_latest_s3_key }}" - docker_backup_fail_on_no_s3_backups: "{{ linkding_docker_backup_fail_on_no_s3_backups }}" docker_backup_s3_volume: name: "{{ linkding_portainer_stack_name }}_data" - name: "Linkding | Update Portainer." chatton.portainer.portainer_stack: - username: admin + username: '{{ portainer_user }}' password: '{{ portainer.password }}' base_url: '{{ portainer_base_url }}' stack_name: '{{ linkding_portainer_stack_name }}' @@ -21,15 +18,13 @@ version: '3' services: linkding: - labels: - ie.cianhatton.backup.enabled: "{{ linkding_backup_enabled }}" - ie.cianhatton.backup.schedule: "{{ linkding_backup_schedule }}" + labels: "{{ backup_labels }}" container_name: "{{ linkding_container_name }}" image: "{{ linkding_image }}:{{ linkding_tag }}" ports: - "{{ linkding_expose_port }}:9090" volumes: - "data:/etc/linkding/data" - restart: "{{ linkding_restart_policy }}" + restart: "{{ restart_policy }}" volumes: data: {} diff --git a/roles/portainer_vaultwarden/defaults/main.yml b/roles/portainer_vaultwarden/defaults/main.yml index 684e80a..ad9c270 100644 --- a/roles/portainer_vaultwarden/defaults/main.yml +++ b/roles/portainer_vaultwarden/defaults/main.yml @@ -2,12 +2,9 @@ vaultwarden_state: present vaultwarden_image: vaultwarden/server vaultwarden_tag: 1.28.1 -vaultwarden_backup_enabled: true -vaultwarden_backup_schedule: "nightly" vaultwarden_expose_port: 80 vaultwarden_portainer_stack_name: vaultwarden vaultwarden_container_name: vaultwarden -vaultwarden_restart_policy: unless-stopped # Environment variables vaultwarden_websocket_enabled: true @@ -16,8 +13,3 @@ vaultwarden_emergency_access_allowed: true vaultwarden_domain: "https://vault.cianhatton.ie" vaultwarden_signups_allowed: false vaultwarden_webvault_enabled: true - -# Backup variables -vaultwarden_docker_backup_restore_force: false -vaultwarden_docker_backup_restore_latest_s3_key: true -vaultwarden_docker_backup_fail_on_no_s3_backups: false diff --git a/roles/portainer_vaultwarden/tasks/main.yml b/roles/portainer_vaultwarden/tasks/main.yml index 664d6ed..82ad61e 100644 --- a/roles/portainer_vaultwarden/tasks/main.yml +++ b/roles/portainer_vaultwarden/tasks/main.yml @@ -3,15 +3,12 @@ ansible.builtin.include_role: name: chatton.docker_backup.docker_s3_volume_restore vars: - docker_backup_restore_force: "{{ vaultwarden_docker_backup_restore_force }}" - docker_backup_restore_latest_s3_key: "{{ vaultwarden_docker_backup_restore_latest_s3_key }}" - docker_backup_fail_on_no_s3_backups: "{{ vaultwarden_docker_backup_fail_on_no_s3_backups }}" docker_backup_s3_volume: name: "{{ vaultwarden_portainer_stack_name }}_data" - name: "Vaultwarden | Update Portainer." chatton.portainer.portainer_stack: - username: admin + username: '{{ portainer_user }}' password: '{{ portainer.password }}' base_url: '{{ portainer_base_url }}' stack_name: '{{ vaultwarden_portainer_stack_name }}' @@ -21,9 +18,7 @@ version: '3.3' services: vaultwarden: - labels: - ie.cianhatton.backup.enabled: "{{ vaultwarden_backup_enabled }}" - ie.cianhatton.backup.schedule: "{{ vaultwarden_backup_schedule }}" + labels: "{{ backup_labels }}" image: "{{ vaultwarden_image }}:{{ vaultwarden_tag }}" container_name: "{{ vaultwarden_container_name }}" environment: @@ -34,7 +29,7 @@ DOMAIN: "{{ vaultwarden_domain }}" ADMIN_TOKEN: "{{ vaultwarden_admin_token }}" SIGNUPS_ALLOWED: "{{ vaultwarden_signups_allowed }}" - restart: "{{ vaultwarden_restart_policy }}" + restart: "{{ restart_policy }}" ports: - "{{ vaultwarden_expose_port }}:80" volumes: diff --git a/roles/setup_portainer/tasks/main.yml b/roles/setup_portainer/tasks/main.yml index a52ae6b..9d8e66c 100644 --- a/roles/setup_portainer/tasks/main.yml +++ b/roles/setup_portainer/tasks/main.yml @@ -8,9 +8,6 @@ ansible.builtin.include_role: name: chatton.docker_backup.docker_s3_volume_restore vars: - docker_backup_restore_force: false - docker_backup_restore_latest_s3_key: true - docker_backup_fail_on_no_s3_backups: false docker_backup_s3_volume: name: portainer_portainer_data @@ -21,12 +18,10 @@ version: '3.2' services: portainer: - labels: - ie.cianhatton.backup.enabled: 'true' - ie.cianhatton.backup.schedule: nightly + labels: "{{ backup_labels}}" image: "portainer/portainer-ce:{{ portainer_version }}" container_name: portainer - restart: unless-stopped + restart: "{{ restart_policy }}" ports: - 9000:9000 volumes: