From 9dd5d48920bc5defbbcf3f6260e85e46f56cb406 Mon Sep 17 00:00:00 2001 From: Cian Hatton Date: Tue, 30 Aug 2022 14:47:40 +0100 Subject: [PATCH] move directories into servers.yml --- group_vars/{linode.yml => linodes.yml} | 0 group_vars/servers.yml | 18 ++++++- {group_vars => host_vars}/qnap.yml | 0 hosts.ini | 8 +-- roles/bootstrap/meta/main.yml | 53 +++++++++++++++++++ roles/setup_docker/meta/main.yml | 45 +--------------- roles/setup_hosted_services/defaults/main.yml | 15 ------ roles/setup_hosted_services/tasks/main.yml | 13 ++--- .../templates/docker-volume-backup.j2 | 2 +- .../templates/docker-volume-backup/config.j2 | 8 +-- .../templates/photoprism.j2 | 6 +-- roles/setup_hosted_services/templates/plex.j2 | 6 +-- .../templates/vpn-stack.j2 | 12 ++--- roles/setup_portainer/tasks/main.yml | 6 +-- setup-homelab.yml | 2 +- verify-homelab.yml | 2 +- 16 files changed, 103 insertions(+), 93 deletions(-) rename group_vars/{linode.yml => linodes.yml} (100%) rename {group_vars => host_vars}/qnap.yml (100%) create mode 100644 roles/bootstrap/meta/main.yml diff --git a/group_vars/linode.yml b/group_vars/linodes.yml similarity index 100% rename from group_vars/linode.yml rename to group_vars/linodes.yml diff --git a/group_vars/servers.yml b/group_vars/servers.yml index 38f9a90..f288fc2 100644 --- a/group_vars/servers.yml +++ b/group_vars/servers.yml @@ -4,8 +4,6 @@ backups: monthly: "monthly" nightly: "nightly" -docker_compose_directory: /etc/docker-compose - # TODO: docker_volume_backup exists in vault. Clean this up. dockervolumebackup: image: ghcr.io/chatton/docker-volume-backup @@ -39,3 +37,19 @@ shares: - /share/public_files - /share/private_files - /share/cian_files + +directories: + # path on qnap where downloads go + downloads_dir: /mnt/ssd0/downloads + # path on qnap where plex transcoding happens + transcoding_dir: /mnt/ssd0/transcoding + # path on qnap where movies are stored + movies_dir: /mnt/mergerfs/media/movies + # path on qnap where tv shows are stored + tv_dir: /mnt/mergerfs/media/tv + # path on qnap where docker compose files are stored + docker_compose_directory: /etc/docker-compose + # path on qnap where backups are stored + backups_dir: /mnt/mergerfs/backups + # path where photoprism photos are stored + photoprism_dir: /mnt/mergerfs/photoprism diff --git a/group_vars/qnap.yml b/host_vars/qnap.yml similarity index 100% rename from group_vars/qnap.yml rename to host_vars/qnap.yml diff --git a/hosts.ini b/hosts.ini index ad087ed..0f53672 100644 --- a/hosts.ini +++ b/hosts.ini @@ -1,12 +1,12 @@ # group qnap and linode to run operations on. # this ensures we don't run everything on localhost as well. [servers:children] -qnap -linode +qnaps +linodes -[qnap] +[qnaps] qnap # BEGIN ANSIBLE MANAGED BLOCK -[linode] +[linodes] # END ANSIBLE MANAGED BLOCK diff --git a/roles/bootstrap/meta/main.yml b/roles/bootstrap/meta/main.yml new file mode 100644 index 0000000..6bfa85e --- /dev/null +++ b/roles/bootstrap/meta/main.yml @@ -0,0 +1,53 @@ +galaxy_info: + author: Cian Hatton + namespace: chatton + description: your role description + company: your company (optional) + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + + # Choose a valid license ID from https://spdx.org - some suggested licenses: + # - BSD-3-Clause (default) + # - MIT + # - GPL-2.0-or-later + # - GPL-3.0-only + # - Apache-2.0 + # - CC-BY-4.0 + license: MIT + + min_ansible_version: 2.1 + + # If this a Container Enabled role, provide the minimum Ansible Container version. + # min_ansible_container_version: + + # + # Provide a list of supported platforms, and for each platform a list of versions. + # If you don't wish to enumerate all versions for a particular platform, use 'all'. + # To view available platforms and versions (or releases), visit: + # https://galaxy.ansible.com/api/v1/platforms/ + # + # platforms: + # - name: Fedora + # versions: + # - all + # - 25 + # - name: SomePlatform + # versions: + # - all + # - 1.0 + # - 7 + # - 99.99 + + galaxy_tags: [] + # List tags for your role here, one per line. A tag is a keyword that describes + # and categorizes the role. Users find roles by searching for tags. Be sure to + # remove the '[]' above, if you add tags to this list. + # + # NOTE: A tag is limited to a single word comprised of alphanumeric characters. + # Maximum 20 tags per role. + +dependencies: [] + # List your role dependencies here, one per line. Be sure to remove the '[]' above, + # if you add dependencies to this list. diff --git a/roles/setup_docker/meta/main.yml b/roles/setup_docker/meta/main.yml index 6bfa85e..0d40d0d 100644 --- a/roles/setup_docker/meta/main.yml +++ b/roles/setup_docker/meta/main.yml @@ -1,53 +1,10 @@ galaxy_info: author: Cian Hatton namespace: chatton - description: your role description + description: Bootstrap ansible company: your company (optional) - - # If the issue tracker for your role is not on github, uncomment the - # next line and provide a value - # issue_tracker_url: http://example.com/issue/tracker - - # Choose a valid license ID from https://spdx.org - some suggested licenses: - # - BSD-3-Clause (default) - # - MIT - # - GPL-2.0-or-later - # - GPL-3.0-only - # - Apache-2.0 - # - CC-BY-4.0 license: MIT - min_ansible_version: 2.1 - - # If this a Container Enabled role, provide the minimum Ansible Container version. - # min_ansible_container_version: - - # - # Provide a list of supported platforms, and for each platform a list of versions. - # If you don't wish to enumerate all versions for a particular platform, use 'all'. - # To view available platforms and versions (or releases), visit: - # https://galaxy.ansible.com/api/v1/platforms/ - # - # platforms: - # - name: Fedora - # versions: - # - all - # - 25 - # - name: SomePlatform - # versions: - # - all - # - 1.0 - # - 7 - # - 99.99 - galaxy_tags: [] - # List tags for your role here, one per line. A tag is a keyword that describes - # and categorizes the role. Users find roles by searching for tags. Be sure to - # remove the '[]' above, if you add tags to this list. - # - # NOTE: A tag is limited to a single word comprised of alphanumeric characters. - # Maximum 20 tags per role. dependencies: [] - # List your role dependencies here, one per line. Be sure to remove the '[]' above, - # if you add dependencies to this list. diff --git a/roles/setup_hosted_services/defaults/main.yml b/roles/setup_hosted_services/defaults/main.yml index 8c347f3..ed97d53 100644 --- a/roles/setup_hosted_services/defaults/main.yml +++ b/roles/setup_hosted_services/defaults/main.yml @@ -1,16 +1 @@ --- -qnap: - # path on qnap where downloads go - downloads_dir: /mnt/ssd0/downloads - # path on qnap where plex transcoding happens - transcoding_dir: /mnt/ssd0/transcoding - # path on qnap where movies are stored - movies_dir: /mnt/mergerfs/media/movies - # path on qnap where tv shows are stored - tv_dir: /mnt/mergerfs/media/tv - # path on qnap where docker compose files are stored - docker_compose_directory: /etc/docker-compose - # path on qnap where backups are stored - backups_dir: /mnt/mergerfs/backups - # path where photoprism photos are stored - photoprism_dir: /mnt/mergerfs/photoprism diff --git a/roles/setup_hosted_services/tasks/main.yml b/roles/setup_hosted_services/tasks/main.yml index 2fbd699..d4c0d9d 100644 --- a/roles/setup_hosted_services/tasks/main.yml +++ b/roles/setup_hosted_services/tasks/main.yml @@ -9,7 +9,7 @@ - name: Docker Compose | Create a directory if it does not exist file: - path: "{{qnap.docker_compose_directory}}/{{item.name}}" + path: "{{directories.docker_compose_directory}}/{{item.name}}" state: directory mode: '0755' with_items: "{{services}}" @@ -17,11 +17,11 @@ - name: Docker Compose | Template Docker Compose Files template: src: "{{item.name}}.j2" - dest: "{{qnap.docker_compose_directory}}/{{item.name}}/docker-compose.yml" + dest: "{{directories.docker_compose_directory}}/{{item.name}}/docker-compose.yml" with_items: "{{services}}" -- name: Config Files | Create a directory if it does not exist +- name: Directories | Ensure required directories file: path: "{{item}}" state: directory @@ -30,6 +30,7 @@ - "{{dashy.config_directory}}" - "{{olivetin.config_directory}}" - "{{dockervolumebackup.config_directory}}" + - "{{directories.backups_dir}}/.s3tmp" - name: Dashy | Config Files copy: @@ -69,7 +70,7 @@ environment: EXISTING_VOLUMES: "{{ find_volumes.results | map(attribute='stdout_lines') | list | flatten }}" SERVICES: "{{ services }}" - DOCKER_COMPOSE_DIR: "{{qnap.docker_compose_directory}}" + DOCKER_COMPOSE_DIR: "{{directories.docker_compose_directory}}" args: executable: python3 register: python_output @@ -107,7 +108,7 @@ chatton.portainer.portainer_stack: username: admin password: "{{portainer.password}}" - docker_compose_file_path: "{{qnap.docker_compose_directory}}/{{ item.name }}/docker-compose.yml" + docker_compose_file_path: "{{directories.docker_compose_directory}}/{{ item.name }}/docker-compose.yml" stack_name: "{{ item.name }}" endpoint_id: "{{ item.endpoint_id }}" state: present @@ -116,6 +117,6 @@ - name: Docker compose | Update Stack when: container_deployment_mode == "compose" docker_compose: - project_src: "{{qnap.docker_compose_directory}}/{{ item.name }}" + project_src: "{{directories.docker_compose_directory}}/{{ item.name }}" state: present with_items: "{{services}}" diff --git a/roles/setup_hosted_services/templates/docker-volume-backup.j2 b/roles/setup_hosted_services/templates/docker-volume-backup.j2 index f1a86a0..2a98e48 100644 --- a/roles/setup_hosted_services/templates/docker-volume-backup.j2 +++ b/roles/setup_hosted_services/templates/docker-volume-backup.j2 @@ -16,6 +16,6 @@ services: volumes: - /var/run/docker.sock:/var/run/docker.sock - - {{qnap.backups_dir}}:/backups + - {{directories.backups_dir}}:/backups - /tmp:/tmp - {{dockervolumebackup.config_directory}}/config.yml:{{dockervolumebackup.config_directory}}/config.yml diff --git a/roles/setup_hosted_services/templates/docker-volume-backup/config.j2 b/roles/setup_hosted_services/templates/docker-volume-backup/config.j2 index f02784e..b765c91 100644 --- a/roles/setup_hosted_services/templates/docker-volume-backup/config.j2 +++ b/roles/setup_hosted_services/templates/docker-volume-backup/config.j2 @@ -7,11 +7,11 @@ periodic_backups: - name: "Nightly backup to local filesystem" type: "filesystem" filesystem_options: - host_path: {{ qnap.backups_dir }} + host_path: {{ directories.backups_dir }} - name: "Backup to iDrive E2" type: "s3" s3_options: - host_path: {{ qnap.backups_dir }} + host_path: {{ directories.backups_dir }} aws_access_key_id: {{ docker_volume_backup.aws_access_key_id }} aws_secret_access_key: {{ docker_volume_backup.aws_secret_access_key }} aws_default_region: {{ docker_volume_backup.aws_default_region }} @@ -24,11 +24,11 @@ periodic_backups: - name: "Monthly backup to local filesystem" type: "filesystem" filesystem_options: - host_path: {{ qnap.backups_dir }} + host_path: {{ directories.backups_dir }} - name: "Backup to iDrive E2" type: "s3" s3_options: - host_path: {{ qnap.backups_dir }} + host_path: {{ directories.backups_dir }} aws_access_key_id: {{ docker_volume_backup.aws_access_key_id }} aws_secret_access_key: {{ docker_volume_backup.aws_secret_access_key }} aws_default_region: {{ docker_volume_backup.aws_default_region }} diff --git a/roles/setup_hosted_services/templates/photoprism.j2 b/roles/setup_hosted_services/templates/photoprism.j2 index 17f947b..4f405ae 100644 --- a/roles/setup_hosted_services/templates/photoprism.j2 +++ b/roles/setup_hosted_services/templates/photoprism.j2 @@ -43,9 +43,9 @@ services: - "/dev/dri:/dev/dri" # Intel QSV working_dir: "/photoprism" # do not change or remove volumes: - - {{ qnap.photoprism_dir}}/originals:/photoprism/originals # Original media files (DO NOT REMOVE) - - {{ qnap.photoprism_dir}}/import:/photoprism/import # *Optional* base folder from which files can be imported to originals - - {{ qnap.photoprism_dir}}/storage:/photoprism/storage # *Writable* storage folder for cache, database, and sidecar files (DO NOT REMOVE) + - {{ directories.photoprism_dir}}/originals:/photoprism/originals # Original media files (DO NOT REMOVE) + - {{ directories.photoprism_dir}}/import:/photoprism/import # *Optional* base folder from which files can be imported to originals + - {{ directories.photoprism_dir}}/storage:/photoprism/storage # *Writable* storage folder for cache, database, and sidecar files (DO NOT REMOVE) networks: diff --git a/roles/setup_hosted_services/templates/plex.j2 b/roles/setup_hosted_services/templates/plex.j2 index 60bcb1f..61f790c 100644 --- a/roles/setup_hosted_services/templates/plex.j2 +++ b/roles/setup_hosted_services/templates/plex.j2 @@ -16,9 +16,9 @@ services: - VERSION=docker volumes: - config:/config - - {{ qnap.tv_dir }}:/tv - - {{ qnap.movies_dir }}:/movies - - {{ qnap.transcoding_dir }}:/transcoding + - {{ directories.tv_dir }}:/tv + - {{ directories.movies_dir }}:/movies + - {{ directories.transcoding_dir }}:/transcoding restart: unless-stopped devices: - /dev/dri:/dev/dri diff --git a/roles/setup_hosted_services/templates/vpn-stack.j2 b/roles/setup_hosted_services/templates/vpn-stack.j2 index addb373..7f3c74b 100644 --- a/roles/setup_hosted_services/templates/vpn-stack.j2 +++ b/roles/setup_hosted_services/templates/vpn-stack.j2 @@ -48,7 +48,7 @@ services: - WEBUI_PORT=15000 volumes: - qbittorrent_config:/config - - {{ qnap.downloads_dir }}:/downloads + - {{ directories.downloads_dir }}:/downloads restart: unless-stopped radarr: @@ -66,8 +66,8 @@ services: - TZ=Europe/London volumes: - radarr_config:/config - - {{ qnap.movies_dir }}:/movies - - {{ qnap.downloads_dir }}:/downloads + - {{ directories.movies_dir }}:/movies + - {{ directories.downloads_dir }}:/downloads restart: unless-stopped sonarr: @@ -85,8 +85,8 @@ services: - TZ=Europe/London volumes: - sonarr_config:/config - - {{ qnap.tv_dir }}:/tv - - {{ qnap.downloads_dir }}:/downloads + - {{ directories.tv_dir }}:/tv + - {{ directories.downloads_dir }}:/downloads restart: unless-stopped jackett: @@ -105,7 +105,7 @@ services: - AUTO_UPDATE=true volumes: - jackett_config:/config - - {{ qnap.downloads_dir }}:/downloads + - {{ directories.downloads_dir }}:/downloads restart: unless-stopped volumes: diff --git a/roles/setup_portainer/tasks/main.yml b/roles/setup_portainer/tasks/main.yml index 2aecbf5..5036adc 100644 --- a/roles/setup_portainer/tasks/main.yml +++ b/roles/setup_portainer/tasks/main.yml @@ -9,14 +9,14 @@ --- - name: Portainer | Create directory if it does not exist ansible.builtin.file: - path: "{{docker_compose_directory}}" + path: "{{directories.docker_compose_directory}}" state: directory mode: '0755' - name: Portainer | Copy docker compose file copy: src: docker-compose.yml - dest: "{{docker_compose_directory}}/docker-compose.yml" + dest: "{{directories.docker_compose_directory}}/docker-compose.yml" - name: Portainer | Check if volume exists shell: docker volume ls -f name=portainer_portainer_data --format '{{ '{{' }} .Name {{ '}}' }}' @@ -53,7 +53,7 @@ - name: Portainer | Docker compose up community.docker.docker_compose: - project_src: "{{docker_compose_directory}}/portainer" + project_src: "{{directories.docker_compose_directory}}/portainer" # Don't really need this as long as there is an S3 backup. #- name: Portainer | Register Admin User diff --git a/setup-homelab.yml b/setup-homelab.yml index e8e6b6c..840c056 100644 --- a/setup-homelab.yml +++ b/setup-homelab.yml @@ -26,7 +26,7 @@ - role: 'roles/setup_hosted_services' tags: ["services"] -- hosts: linode +- hosts: linodes become: true pre_tasks: diff --git a/verify-homelab.yml b/verify-homelab.yml index a42eede..fba1c3e 100644 --- a/verify-homelab.yml +++ b/verify-homelab.yml @@ -1,5 +1,5 @@ --- -- hosts: linode +- hosts: linodes tasks: # TODO # Verify sudoers