diff --git a/README.md b/README.md new file mode 100644 index 0000000..93e5d11 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# jellyfin diff --git a/compose.yml b/compose.yml deleted file mode 100644 index a742801..0000000 --- a/compose.yml +++ /dev/null @@ -1,34 +0,0 @@ -version: '3.5' -services: - jellyfin: - image: jellyfin/jellyfin:10.11.6 - user: 0:0 - networks: - - proxy - volumes: - - config:/config - - cache:/cache - - media:/media - restart: 'unless-stopped' - environment: - - JELLYFIN_PublishedServerUrl=https://jellyfin.urmel.de - labels: - traefik.enable: true - traefik.http.routers.jellyfin.rule: "Host(`jellyfin.urmel.de`)" - traefik.http.routers.jellyfin.tls: true - traefik.http.routers.jellyfin.tls.certResolver: hetzner - traefik.http.services.jellyfin-https.loadbalancer.server.port: 8096 - -volumes: - config: - cache: - media: - driver_opts: - type: nfs4 - o: addr=217.100.0.2,rw,noatime,tcp - device: ":/mnt/Main/jellyfinData" - -networks: - proxy: - name: traefik_exposed - external: true \ No newline at end of file diff --git a/defaults/main.yml b/defaults/main.yml new file mode 100644 index 0000000..0ce6ea1 --- /dev/null +++ b/defaults/main.yml @@ -0,0 +1,11 @@ +path: /srv/{{ role_name }} + +jellyfin_override: {} +jellyfin_defaults: + version: "10.11.6" + url: "" + data_path: "" + networkmount: + host: "" + host_path: "" + args: "" diff --git a/handlers/main.yml b/handlers/main.yml new file mode 100644 index 0000000..9c94697 --- /dev/null +++ b/handlers/main.yml @@ -0,0 +1,9 @@ +- name: restart container +community.docker.docker_compose_v2: + project_src: "{{ path }}" + project_name: "{{ role_name }}" + recreate: "always" + services: ["jellyfin"] + state: "restarted" +when: not _jellyfin_already_restarted + diff --git a/meta/main.yml b/meta/main.yml new file mode 100644 index 0000000..fdfd25d --- /dev/null +++ b/meta/main.yml @@ -0,0 +1,20 @@ +--- +galaxy_info: + author: "Niklas Freese " + description: jellyfin + company: "Urmel Services" + license: AGPL-3.0-or-later + min_ansible_version: 2.1 + # If this a Container Enabled role, provide the minimum Ansible Container version. + # min_ansible_container_version: + + 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: +# - role: base diff --git a/tasks/main.yml b/tasks/main.yml new file mode 100644 index 0000000..39098fa --- /dev/null +++ b/tasks/main.yml @@ -0,0 +1,35 @@ +--- +- name: "set local variables from overrides and defaults" + set_fact: + jellyfin: "{{ (jellyfin_defaults | combine(jellyfin_override, recursive=True)) if jellyfin_override else jellyfin_defaults }}" + +- name: ensure that path exists + file: + path: "{{ path }}/config/jellyfin" + state: directory + +- name: template compose + template: + src: compose.yml.j2 + dest: "{{ path }}/compose.yml" + +- import_role: + name: storage_mount + vars: + storagebox_override: + host: "{{ jellyfin.networkmount.host }}" + host_path: "{{ jellyfin.networkmount.host_path }}" + args: "{{ jellyfin.networkmount.args }}" + dest_path: "{{ jellyfin.data_path }}" + when: jellyfin.networkmount.host | length > 1 + + +- name: ensure containers are running + community.docker.docker_compose_v2: + project_src: "{{ path }}" + project_name: "{{ role_name }}" + state: "present" + pull: "always" + wait: true + services: [ 'jellyfin' ] + register: _compose_result diff --git a/templates/compose.yml.j2 b/templates/compose.yml.j2 new file mode 100644 index 0000000..780c423 --- /dev/null +++ b/templates/compose.yml.j2 @@ -0,0 +1,25 @@ + +services: + jellyfin: + image: jellyfin/jellyfin:{{ jellyfin.version }} + user: 0:0 + networks: + - proxy + volumes: + - ./config/jellyfin:/config + - ./cache:/cache + - {{ jellyfin.data_path }}:/media + restart: 'unless-stopped' + environment: + - JELLYFIN_PublishedServerUrl=https://{{ jellyfin.urmel }} + labels: + traefik.enable: true + traefik.http.routers.jellyfin.rule: "Host(`{{ jellyfin.urmel }}`)" + traefik.http.routers.jellyfin.tls: true + traefik.http.routers.jellyfin.tls.certResolver: hetzner + traefik.http.services.jellyfin-https.loadbalancer.server.port: 8096 + +networks: + proxy: + name: traefik_exposed + external: true