feat(jellyfin): add playbook to collection, add state=absent support to role

This commit is contained in:
transcaffeine 2024-10-07 19:42:11 +02:00
parent 912c32cb3e
commit b24ea1e925
Signed by: transcaffeine
GPG Key ID: 03624C433676E465
4 changed files with 33 additions and 13 deletions

6
playbooks/jellyfin.yml Normal file
View File

@ -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

View File

@ -1,7 +1,7 @@
--- ---
jellyfin_user: jellyfin jellyfin_user: jellyfin
jellyfin_version: 10.9.11 jellyfin_version: 10.9.11
jellyfin_state: present
jellyfin_base_path: /opt/jellyfin jellyfin_base_path: /opt/jellyfin
jellyfin_config_path: "{{ jellyfin_base_path }}/config" jellyfin_config_path: "{{ jellyfin_base_path }}/config"
@ -12,7 +12,11 @@ jellyfin_media_volumes: []
jellyfin_container_name: jellyfin jellyfin_container_name: jellyfin
jellyfin_container_image_name: "docker.io/jellyfin/jellyfin" jellyfin_container_image_name: "docker.io/jellyfin/jellyfin"
jellyfin_container_image_tag: ~ 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_network_mode: host
jellyfin_container_networks: ~ jellyfin_container_networks: ~
jellyfin_container_volumes: "{{ jellyfin_container_base_volumes + jellyfin_media_volumes }}" jellyfin_container_volumes: "{{ jellyfin_container_base_volumes + jellyfin_media_volumes }}"

View File

@ -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: ansible.builtin.user:
name: "{{ jellyfin_user }}" name: "{{ jellyfin_user }}"
state: present state: "{{ jellyfin_state }}"
system: yes system: "{{ jellyfin_user_system | default(true, true) }}"
register: jellyfin_user_info register: jellyfin_user_info
- name: Ensure host directories for jellyfin exist - name: Ensure host directories for jellyfin are {{ jellyfin_state }}
ansible.builtinfile: ansible.builtin.file:
path: "{{ item.path }}" path: "{{ item.path }}"
state: directory state: >-2
{{ (jellyfin_state == 'present') | ternary('directory', 'absent') }}
owner: "{{ item.owner | default(jellyfin_uid) }}" owner: "{{ item.owner | default(jellyfin_uid) }}"
group: "{{ item.group | default(jellyfin_gid) }}" group: "{{ item.group | default(jellyfin_gid) }}"
mode: "{{ item.mode }}" mode: "{{ item.mode }}"
loop: "{{ jellyfin_host_directories }}" 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: community.docker.docker_image:
name: "{{ jellyfin_container_image_ref }}" name: "{{ jellyfin_container_image_ref }}"
state: present state: "{{ jellyfin_state }}"
source: pull source: "{{ jellyfin_container_image_source }}"
force_source: "{{ jellyfin_container_image_tag | default(false, true) }}" force_source: "{{ jellyfin_container_image_tag | default(false, true) }}"
register: jellyfin_container_image_pull_result register: jellyfin_container_image_pull_result
until: jellyfin_container_image_pull_result is succeeded until: jellyfin_container_image_pull_result is succeeded
retries: 5 retries: 5
delay: 3 delay: 3
- name: Ensure container '{{ jellyfin_container_name }}' is running - name: Ensure container '{{ jellyfin_container_name }}' is {{ jellyfin_container_state }}
community.docker.docker_container: community.docker.docker_container:
name: "{{ jellyfin_container_name }}" name: "{{ jellyfin_container_name }}"
image: "{{ jellyfin_container_image_ref }}" image: "{{ jellyfin_container_image_ref }}"
@ -37,4 +44,4 @@
networks: "{{ jellyfin_container_networks | default(omit, True) }}" networks: "{{ jellyfin_container_networks | default(omit, True) }}"
network_mode: "{{ jellyfin_container_network_mode }}" network_mode: "{{ jellyfin_container_network_mode }}"
restart_policy: "{{ jellyfin_container_restart_policy }}" restart_policy: "{{ jellyfin_container_restart_policy }}"
state: started state: "{{ jellyfin_container_state }}"

View File

@ -1,4 +1,7 @@
--- ---
jellyfin_states:
- present
- absent
jellyfin_container_base_volumes: jellyfin_container_base_volumes:
- "{{ jellyfin_config_path }}:/config:z" - "{{ jellyfin_config_path }}:/config:z"