diff --git a/playbooks/jellyfin.yml b/playbooks/jellyfin.yml new file mode 100644 index 0000000..88e38ab --- /dev/null +++ b/playbooks/jellyfin.yml @@ -0,0 +1,6 @@ +--- +- name: Install and configure jellyfin + hosts: "{{ jellyfin_hosts | default('jellyfin') }}" + become: "{{ jellyfin_become | default(true, false) }}" + roles: + - role: finallycoffee.services.jellyfin diff --git a/roles/jellyfin/defaults/main.yml b/roles/jellyfin/defaults/main.yml index f39ef37..9ba9c97 100644 --- a/roles/jellyfin/defaults/main.yml +++ b/roles/jellyfin/defaults/main.yml @@ -1,7 +1,7 @@ --- - jellyfin_user: jellyfin jellyfin_version: 10.9.11 +jellyfin_state: present jellyfin_base_path: /opt/jellyfin jellyfin_config_path: "{{ jellyfin_base_path }}/config" @@ -12,7 +12,11 @@ jellyfin_media_volumes: [] jellyfin_container_name: jellyfin jellyfin_container_image_name: "docker.io/jellyfin/jellyfin" jellyfin_container_image_tag: ~ -jellyfin_container_image_ref: "{{ jellyfin_container_image_name }}:{{ jellyfin_container_image_tag | default(jellyfin_version, true) }}" +jellyfin_container_image_ref: >-2 + {{ jellyfin_container_image_name }}:{{ jellyfin_container_image_tag | default(jellyfin_version, true) }} +jellyfin_container_image_source: pull +jellyfin_container_state: >-2 + {{ (jellyfin_state == 'present') | ternary('started', 'absent') }} jellyfin_container_network_mode: host jellyfin_container_networks: ~ jellyfin_container_volumes: "{{ jellyfin_container_base_volumes + jellyfin_media_volumes }}" diff --git a/roles/jellyfin/tasks/main.yml b/roles/jellyfin/tasks/main.yml index 23bf263..1fb859e 100644 --- a/roles/jellyfin/tasks/main.yml +++ b/roles/jellyfin/tasks/main.yml @@ -1,33 +1,40 @@ --- +- name: Check if state is valid + ansible.builtin.fail: + msg: >-2 + Unsupported state '{{ jellyfin_state }}'. Supported + states are {{ jellyfin_states | join(', ') }}. + when: jellyfin_state not in jellyfin_states -- name: Ensure user '{{ jellyfin_user }}' for jellyfin is created +- name: Ensure jellyfin user '{{ jellyfin_user }}' is {{ jellyfin_state }} ansible.builtin.user: name: "{{ jellyfin_user }}" - state: present - system: yes + state: "{{ jellyfin_state }}" + system: "{{ jellyfin_user_system | default(true, true) }}" register: jellyfin_user_info -- name: Ensure host directories for jellyfin exist - ansible.builtinfile: +- name: Ensure host directories for jellyfin are {{ jellyfin_state }} + ansible.builtin.file: path: "{{ item.path }}" - state: directory + state: >-2 + {{ (jellyfin_state == 'present') | ternary('directory', 'absent') }} owner: "{{ item.owner | default(jellyfin_uid) }}" group: "{{ item.group | default(jellyfin_gid) }}" mode: "{{ item.mode }}" loop: "{{ jellyfin_host_directories }}" -- name: Ensure container image for jellyfin is available +- name: Ensure container image '{{ jellyfin_container_image_ref }}' is {{ jellyfin_state }} community.docker.docker_image: name: "{{ jellyfin_container_image_ref }}" - state: present - source: pull + 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 running +- name: Ensure container '{{ jellyfin_container_name }}' is {{ jellyfin_container_state }} community.docker.docker_container: name: "{{ jellyfin_container_name }}" image: "{{ jellyfin_container_image_ref }}" @@ -37,4 +44,4 @@ networks: "{{ jellyfin_container_networks | default(omit, True) }}" network_mode: "{{ jellyfin_container_network_mode }}" restart_policy: "{{ jellyfin_container_restart_policy }}" - state: started + state: "{{ jellyfin_container_state }}" diff --git a/roles/jellyfin/vars/main.yml b/roles/jellyfin/vars/main.yml index a084685..88a43ea 100644 --- a/roles/jellyfin/vars/main.yml +++ b/roles/jellyfin/vars/main.yml @@ -1,4 +1,7 @@ --- +jellyfin_states: + - present + - absent jellyfin_container_base_volumes: - "{{ jellyfin_config_path }}:/config:z"