From 05145b3b216f6496d4c9edd3dd20dbe19da66c8b Mon Sep 17 00:00:00 2001 From: transcaffeine Date: Fri, 14 Feb 2025 22:26:48 +0100 Subject: [PATCH] feat(jellyfin): add podman as deployment method --- roles/jellyfin/defaults/main.yml | 1 + roles/jellyfin/tasks/deploy-docker.yml | 23 ++++++++++++++++++ roles/jellyfin/tasks/deploy-podman.yml | 22 ++++++++++++++++++ roles/jellyfin/tasks/main.yml | 32 ++++++++------------------ roles/jellyfin/vars/main.yml | 3 +++ 5 files changed, 59 insertions(+), 22 deletions(-) create mode 100644 roles/jellyfin/tasks/deploy-docker.yml create mode 100644 roles/jellyfin/tasks/deploy-podman.yml diff --git a/roles/jellyfin/defaults/main.yml b/roles/jellyfin/defaults/main.yml index acca478..c51c222 100644 --- a/roles/jellyfin/defaults/main.yml +++ b/roles/jellyfin/defaults/main.yml @@ -2,6 +2,7 @@ jellyfin_user: jellyfin jellyfin_version: "10.10.5" jellyfin_state: present +jellyfin_deployment_method: docker jellyfin_base_path: /opt/jellyfin jellyfin_config_path: "{{ jellyfin_base_path }}/config" diff --git a/roles/jellyfin/tasks/deploy-docker.yml b/roles/jellyfin/tasks/deploy-docker.yml new file mode 100644 index 0000000..c8c43fb --- /dev/null +++ b/roles/jellyfin/tasks/deploy-docker.yml @@ -0,0 +1,23 @@ +--- +- name: Ensure container image '{{ jellyfin_container_image_ref }}' is {{ jellyfin_state }} + community.docker.docker_image: + name: "{{ jellyfin_container_image_ref }}" + state: "{{ jellyfin_state }}" + source: "{{ jellyfin_container_image_source }}" + force_source: "{{ jellyfin_container_image_tag | default(false, true) }}" + register: jellyfin_container_image_pull_result + until: jellyfin_container_image_pull_result is succeeded + retries: 5 + delay: 3 + +- name: Ensure container '{{ jellyfin_container_name }}' is {{ jellyfin_container_state }} + community.docker.docker_container: + name: "{{ jellyfin_container_name }}" + image: "{{ jellyfin_container_image_ref }}" + user: "{{ jellyfin_uid }}:{{ jellyfin_gid }}" + labels: "{{ jellyfin_container_labels }}" + volumes: "{{ jellyfin_container_volumes }}" + networks: "{{ jellyfin_container_networks | default(omit, True) }}" + network_mode: "{{ jellyfin_container_network_mode }}" + restart_policy: "{{ jellyfin_container_restart_policy }}" + state: "{{ jellyfin_container_state }}" diff --git a/roles/jellyfin/tasks/deploy-podman.yml b/roles/jellyfin/tasks/deploy-podman.yml new file mode 100644 index 0000000..6aa1dc6 --- /dev/null +++ b/roles/jellyfin/tasks/deploy-podman.yml @@ -0,0 +1,22 @@ +--- +- name: Ensure container image '{{ jellyfin_container_image_ref }}' is {{ jellyfin_state }} + containers.podman.podman_image: + name: "{{ jellyfin_container_image_ref }}" + state: "{{ jellyfin_state }}" + pull: "{{ (jellyfin_container_image_source == 'pull') | bool }}" + force: "{{ jellyfin_container_image_tag | default(false, true) }}" + register: jellyfin_container_image_pull_result + until: jellyfin_container_image_pull_result is succeeded + retries: 5 + delay: 3 + +- name: Ensure container '{{ jellyfin_container_name }}' is {{ jellyfin_container_state }} + containers.podman.podman_container: + name: "{{ jellyfin_container_name }}" + image: "{{ jellyfin_container_image_ref }}" + user: "{{ jellyfin_uid }}:{{ jellyfin_gid }}" + labels: "{{ jellyfin_container_labels }}" + volumes: "{{ jellyfin_container_volumes }}" + network: "{{ jellyfin_container_networks | default(omit, True) }}" + restart_policy: "{{ jellyfin_container_restart_policy }}" + state: "{{ jellyfin_container_state }}" diff --git a/roles/jellyfin/tasks/main.yml b/roles/jellyfin/tasks/main.yml index 1fb859e..34d1866 100644 --- a/roles/jellyfin/tasks/main.yml +++ b/roles/jellyfin/tasks/main.yml @@ -6,6 +6,13 @@ states are {{ jellyfin_states | join(', ') }}. when: jellyfin_state not in jellyfin_states +- name: Check if deployment method is valid + ansible.builtin.fail: + msg: >-2 + Unsupported state '{{ jellyfin_deployment_method }}'. Supported + states are {{ jellyfin_deployment_methods | join(', ') }}. + when: jellyfin_deployment_method not in jellyfin_deployment_methods + - name: Ensure jellyfin user '{{ jellyfin_user }}' is {{ jellyfin_state }} ansible.builtin.user: name: "{{ jellyfin_user }}" @@ -23,25 +30,6 @@ mode: "{{ item.mode }}" loop: "{{ jellyfin_host_directories }}" -- name: Ensure container image '{{ jellyfin_container_image_ref }}' is {{ jellyfin_state }} - community.docker.docker_image: - name: "{{ jellyfin_container_image_ref }}" - state: "{{ jellyfin_state }}" - source: "{{ jellyfin_container_image_source }}" - force_source: "{{ jellyfin_container_image_tag | default(false, true) }}" - register: jellyfin_container_image_pull_result - until: jellyfin_container_image_pull_result is succeeded - retries: 5 - delay: 3 - -- name: Ensure container '{{ jellyfin_container_name }}' is {{ jellyfin_container_state }} - community.docker.docker_container: - name: "{{ jellyfin_container_name }}" - image: "{{ jellyfin_container_image_ref }}" - user: "{{ jellyfin_uid }}:{{ jellyfin_gid }}" - labels: "{{ jellyfin_container_labels }}" - volumes: "{{ jellyfin_container_volumes }}" - networks: "{{ jellyfin_container_networks | default(omit, True) }}" - network_mode: "{{ jellyfin_container_network_mode }}" - restart_policy: "{{ jellyfin_container_restart_policy }}" - state: "{{ jellyfin_container_state }}" +- name: Ensure jellyfin is deployed using {{ jellyfin_deployment_method }} + ansible.builtin.include_tasks: + file: "deploy-{{ jellyfin_deployment_method }}.yml" diff --git a/roles/jellyfin/vars/main.yml b/roles/jellyfin/vars/main.yml index 88a43ea..9ca54ed 100644 --- a/roles/jellyfin/vars/main.yml +++ b/roles/jellyfin/vars/main.yml @@ -2,6 +2,9 @@ jellyfin_states: - present - absent +jellyfin_deployment_methods: + - docker + - podman jellyfin_container_base_volumes: - "{{ jellyfin_config_path }}:/config:z"