diff --git a/.vscode/settings.json b/.vscode/settings.json index ac11ff0..de48b3b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,7 @@ { "prettier.bracketSpacing": false, - "ansible.python.interpreterPath": "/usr/local/bin/python3" + "ansible.python.interpreterPath": "/usr/local/bin/python3", + "files.associations": { + "*.yaml": "home-assistant" + } } diff --git a/inventory/my-cluster/host_vars/jellyfin b/inventory/my-cluster/host_vars/jellyfin new file mode 100644 index 0000000..5ddbc69 --- /dev/null +++ b/inventory/my-cluster/host_vars/jellyfin @@ -0,0 +1,6 @@ +--- + +ansible_user: root +ansible_host: 10.0.2.42 +ansible_ssh_pass: "{{ proxmox_api_password }}" +vmid: 642 diff --git a/playbook-42-jellyfin.yml b/playbook-42-jellyfin.yml new file mode 100644 index 0000000..92322ad --- /dev/null +++ b/playbook-42-jellyfin.yml @@ -0,0 +1,27 @@ +--- +- hosts: localhost + become: yes + roles: + - role: 42-jellyfin/provision/delete + vars: + vmid: 642 + - role: 42-jellyfin/provision/create + vars: + vmid: 642 + - role: 42-jellyfin/provision/start + vars: + vmid: 642 + +- hosts: purah + become: yes + roles: + - role: 42-jellyfin/enable-ssh + vars: + vmid: 642 + +- hosts: jellyfin + become: yes + roles: + - role: 42-jellyfin/update + - role: 42-jellyfin/install-docker + - role: 42-jellyfin/install-app diff --git a/playbook-folding.yml b/playbook-folding.yml deleted file mode 100644 index a6821c9..0000000 --- a/playbook-folding.yml +++ /dev/null @@ -1,22 +0,0 @@ ---- -- hosts: localhost - become: yes - roles: - - role: folding/provision/delete - - role: folding/provision/create - - role: folding/provision/start - vars: - vmid: 610 - -- hosts: hyrule - become: yes - roles: - - role: folding/enable-ssh - vars: - vmid: 610 - -- hosts: folding - become: yes - roles: - - role: folding/update - - role: folding/install-app diff --git a/roles/folding/enable-ssh/tasks/main.yml b/roles/42-jellyfin/enable-ssh/tasks/main.yml similarity index 54% rename from roles/folding/enable-ssh/tasks/main.yml rename to roles/42-jellyfin/enable-ssh/tasks/main.yml index b2740e1..8c7e795 100644 --- a/roles/folding/enable-ssh/tasks/main.yml +++ b/roles/42-jellyfin/enable-ssh/tasks/main.yml @@ -1,8 +1,12 @@ --- # Unable to use ansible.builtin.lineinfile, because we need to run this through the proxmox host (because SSH is not enabled duh) +- name: Pause for 10 seconds to wait for SSH server + ansible.builtin.pause: + seconds: 10 + - name: Allow SSH into LXC - ansible.builtin.command: lxc-attach -n 610 -- sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/g" /etc/ssh/sshd_config + ansible.builtin.command: lxc-attach -n 642 -- sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/g" /etc/ssh/sshd_config - name: Restart SSH Service - ansible.builtin.command: lxc-attach -n 610 service ssh restart + ansible.builtin.command: lxc-attach -n 642 service ssh restart diff --git a/roles/42-jellyfin/install-app/tasks/main.yml b/roles/42-jellyfin/install-app/tasks/main.yml new file mode 100644 index 0000000..3aa3110 --- /dev/null +++ b/roles/42-jellyfin/install-app/tasks/main.yml @@ -0,0 +1,20 @@ +--- +- name: Create directory for docker-compose + ansible.builtin.file: + path: /root/docker/ + state: directory + mode: "0755" + +- name: Copy docker-compose file + template: + src: "docker-compose.yml" + dest: /root/docker/docker-compose.yml + owner: root + group: root + mode: 0755 + +- name: Run docker-compose + ansible.builtin.shell: + args: + cmd: docker compose up -d + chdir: /root/docker/ diff --git a/roles/42-jellyfin/install-app/templates/docker-compose.yml b/roles/42-jellyfin/install-app/templates/docker-compose.yml new file mode 100644 index 0000000..cca6e10 --- /dev/null +++ b/roles/42-jellyfin/install-app/templates/docker-compose.yml @@ -0,0 +1,19 @@ +services: + jellyfin: + image: lscr.io/linuxserver/jellyfin:latest + container_name: jellyfin + environment: + - PUID=1000 + - PGID=1000 + - TZ=Europe/Lisbon + - JELLYFIN_PublishedServerUrl=https://media.lino.cooking #optional + volumes: + - /data:/config + - /media/tv:/data/tvshows + - /media/movies:/data/movies + ports: + - 8096:8096 + - 8920:8920 #optional + - 7359:7359/udp #optional + - 1900:1900/udp #optional + restart: unless-stopped diff --git a/roles/42-jellyfin/install-docker/tasks/main.yml b/roles/42-jellyfin/install-docker/tasks/main.yml new file mode 100644 index 0000000..d5baba9 --- /dev/null +++ b/roles/42-jellyfin/install-docker/tasks/main.yml @@ -0,0 +1,27 @@ +--- +- name: Get convenience script + uri: + url: "https://get.docker.com" + method: GET + dest: /tmp/get-docker.sh + mode: a+x + creates: /tmp/get-docker.sh + +- name: Execute script + ansible.builtin.shell: /tmp/get-docker.sh + +- name: Ensure group "docker" exists + ansible.builtin.group: + name: docker + state: present + +- name: Add root user to docker group + ansible.builtin.user: + name: root + groups: docker + append: yes + +- name: Enable docker on startup + ansible.builtin.shell: | + systemctl enable docker.service + systemctl enable containerd.service diff --git a/roles/42-jellyfin/provision/create/tasks/main.yml b/roles/42-jellyfin/provision/create/tasks/main.yml new file mode 100644 index 0000000..4882a6a --- /dev/null +++ b/roles/42-jellyfin/provision/create/tasks/main.yml @@ -0,0 +1,30 @@ +--- +- name: Create container + community.general.proxmox: + vmid: 642 + node: purah + api_user: root@pam + api_password: "{{ proxmox_api_password }}" + api_host: 10.0.2.2 + password: "{{ lxc_password }}" + hostname: jellyfin + ostemplate: "local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst" + netif: "{'net0':'name=eth0,\ + gw=10.0.0.1,\ + ip=10.0.2.42/21,\ + hwaddr=cc:c6:cf:de:20:42,\ + bridge=vmbr0'}" + cores: 4 + memory: 4196 + unprivileged: no + swap: 0 + searchdomain: "home" + onboot: 1 + features: + - nesting=1 + - keyctl=1 + mounts: '{ + "mp0":"purah-mirror-860gb:40,mp=/data,backup=1" + }' + disk: purah-mirror-860gb:10 + force: yes diff --git a/roles/folding/provision/delete/tasks/main.yml b/roles/42-jellyfin/provision/delete/tasks/main.yml similarity index 95% rename from roles/folding/provision/delete/tasks/main.yml rename to roles/42-jellyfin/provision/delete/tasks/main.yml index 6f53ea3..5fb4615 100644 --- a/roles/folding/provision/delete/tasks/main.yml +++ b/roles/42-jellyfin/provision/delete/tasks/main.yml @@ -23,4 +23,5 @@ ansible.builtin.lineinfile: path: /Users/lino.silva/.ssh/known_hosts state: absent - regexp: "^10.0.2.19" + regexp: "^10.0.2.42" + diff --git a/roles/folding/provision/start/tasks/main.yml b/roles/42-jellyfin/provision/start/tasks/main.yml similarity index 100% rename from roles/folding/provision/start/tasks/main.yml rename to roles/42-jellyfin/provision/start/tasks/main.yml diff --git a/roles/folding/update/tasks/main.yml b/roles/42-jellyfin/update/tasks/main.yml similarity index 100% rename from roles/folding/update/tasks/main.yml rename to roles/42-jellyfin/update/tasks/main.yml diff --git a/roles/folding/install-app/tasks/main.yml b/roles/folding/install-app/tasks/main.yml deleted file mode 100644 index 81f5117..0000000 --- a/roles/folding/install-app/tasks/main.yml +++ /dev/null @@ -1,12 +0,0 @@ ---- -- name: Download binary - ansible.builtin.shell: - args: - cmd: wget https://download.foldingathome.org/releases/public/release/fahclient/debian-stable-64bit/v7.6/fahclient_7.6.21_amd64.deb - chdir: /root/ - -- name: Install folding - ansible.builtin.shell: - args: - cmd: dpkg -i --force-depends fahclient_7.6.21_amd64.deb - chdir: /root/ diff --git a/roles/folding/provision/create/tasks/main.yml b/roles/folding/provision/create/tasks/main.yml deleted file mode 100644 index d132459..0000000 --- a/roles/folding/provision/create/tasks/main.yml +++ /dev/null @@ -1,24 +0,0 @@ ---- -- name: Create container - community.general.proxmox: - vmid: 610 - node: hyrule - api_user: root@pam - api_password: "{{ proxmox_api_password }}" - api_host: 10.0.2.2 - password: "{{ lxc_password }}" - hostname: folding - ostemplate: "hyrule-8tb-nfs:vztmpl/debian-11-standard_11.3-1_amd64.tar.zst" - netif: "{'net0':'name=eth0,\ - gw=10.0.0.1,\ - ip=10.0.2.19/21,\ - hwaddr=cc:c6:cf:de:17:79,\ - bridge=vmbr0'}" - cores: 12 - memory: 30720 - unprivileged: no - swap: 0 - searchdomain: "home" - onboot: 1 - disk: ssd250:20 - force: yes