feat(deluge): added role to install deluge and deluge web

This commit is contained in:
NaeiKinDus 2025-03-24 00:00:00 +00:00
parent bef258cfec
commit 1c625d2d84
Signed by: WoodSmellParticle
GPG key ID: 8E52ADFF7CA8AE56
19 changed files with 553 additions and 1 deletions

View file

@ -0,0 +1,28 @@
---
- name: find systemd unit directory
become: true
ansible.builtin.command: pkg-config systemd --variable=systemdsystemunitdir
changed_when: false
register: systemd_unit_directory_cmd
- name: find systemd version
become: true
ansible.builtin.shell: >
systemctl --version | awk '{if($1=="systemd" && $2~"^[0-9]+$"){print $2}}'
changed_when: false
register: systemd_version_cmd
- name: set facts
ansible.builtin.set_fact:
systemd_unit_directory: "{{ systemd_unit_directory_cmd.stdout }}"
systemd_version: "{{ systemd_version_cmd.stdout | int }}"
deluge_web_password_salt: "{{ deluge_web_password_salt | default(lookup('ansible.builtin.password', '/dev/null', chars=['ascii_letters', 'digits'], length=40), true) }}"
- name: compute sha1 digest
ansible.builtin.shell: >
echo -n "${DELUGED_PASSWD_SALT}${DELUGED_PASSWD}" | openssl dgst -sha1 -r | cut -d ' ' -f 1
register: deluge_pwd_sha1
changed_when: false
environment:
DELUGED_PASSWD: '{{ deluge_web_password }}'
DELUGED_PASSWD_SALT: '{{ deluge_web_password_salt }}'
- name: set facts
ansible.builtin.set_fact:
deluge_web_password_hash: "{{ deluge_pwd_sha1.stdout }}"

View file

@ -0,0 +1,160 @@
---
- name: install dependencies
become: true
ansible.builtin.apt:
update_cache: yes
force_apt_get: true
state: present
cache_valid_time: 3600
pkg:
- closure-compiler
- git
- intltool
- openssl
- pkg-config
- python3-dbus
- python3-geoip
- python3-libtorrent
- python3-pip
- python3-virtualenv
- name: gather facts
ansible.builtin.include_tasks: gather_facts.yml
- name: create service group
become: true
ansible.builtin.group:
name: '{{ deluge_group }}'
system: true
state: present
- name: create service user
become: true
ansible.builtin.user:
name: '{{ deluge_user }}'
group: '{{ deluge_group }}'
shell: '/usr/sbin/nologin'
home: '{{ deluge_install_dir }}'
create_home: true
system: true
state: present
- name: mark repository as safe
become: true
ansible.builtin.shell: >
git config --global --get safe.directory {{ deluge_git_dir }} ||
git config --global --add safe.directory {{ deluge_git_dir }}
- name: clone repository
become: true
ansible.builtin.git:
repo: '{{ deluge_git_repository }}'
dest: '{{ deluge_git_dir }}'
single_branch: true
version: '{{ deluge_git_version }}'
- name: setup virtualenv
become: true
ansible.builtin.pip:
requirements: '{{ deluge_git_dir }}/requirements.txt'
virtualenv: '{{ deluge_git_dir }}/.venv'
virtualenv_site_packages: true
- name: build project
become: true
command: >-
.venv/bin/python setup.py bdist_wheel
args:
chdir: '{{ deluge_git_dir }}'
- name: install generated wheel
become: true
ansible.builtin.shell: >-
.venv/bin/pip install dist/*.whl --no-index --find-links=.
args:
chdir: '{{ deluge_git_dir }}'
- name: set ownership
become: true
ansible.builtin.file:
path: '{{ deluge_git_dir }}'
owner: '{{ deluge_user }}'
group: '{{ deluge_group }}'
mode: 'u=rwX,g=rX,o='
recurse: yes
follow: false
- name: install man page
become: true
ansible.builtin.copy:
src: '{{ deluge_git_dir }}/docs/man/deluged.1'
remote_src: true
dest: '/usr/local/share/man/man1/'
owner: root
group: root
mode: 'u=rwX,g=rX,o='
- name: install deluged unit files
become: true
ansible.builtin.template:
src: ../templates/systemd/deluged.service.j2
dest: '{{ systemd_unit_directory }}/deluged.service'
owner: root
group: root
mode: 'u=rwX,g=rX,o='
notify:
- 'deluge : restart deluged service'
- name: install systemd unit files
become: true
ansible.builtin.template:
src: ../templates/systemd/deluge-web.service.j2
dest: '{{ systemd_unit_directory }}/deluge-web.service'
owner: root
group: root
mode: 'u=rwX,g=rX,o='
notify:
- 'deluge : restart deluge-web service'
- name: create directories
become: true
ansible.builtin.file:
path: '{{ item }}'
owner: '{{ deluge_user }}'
group: '{{ deluge_group }}'
mode: 'u=rwX,g=rX,o='
state: directory
loop:
- '{{ deluge_download_dir }}'
- '{{ deluge_install_dir }}/.config/deluge'
- '{{ deluge_completed_dir }}'
- '{{ deluge_plugins_dir }}'
- '{{ deluge_torrentfiles_dir }}'
- name: 'install firewall ruleset'
become: true
ansible.builtin.template:
src: ../templates/nftables.d/deluge.nft.j2
dest: '/etc/nftables.d/deluge.nft'
owner: root
group: root
mode: 'u=rw,g=r,o='
notify:
- 'deluge : restart firewall'
- name: stop services
become: true
ansible.builtin.systemd:
name: '{{ item }}.service'
enabled: true
state: stopped
daemon_reload: true
loop:
- deluged
- deluge-web
- name: create basic configuration
become: true
ansible.builtin.template:
src: '../templates/{{ item }}.j2'
dest: '{{ deluge_install_dir }}/.config/deluge/{{ item }}'
owner: '{{ deluge_user }}'
group: '{{ deluge_group }}'
mode: 'u=rw,g=r,o='
loop:
- core.conf
- web.conf
- name: start services
become: true
ansible.builtin.systemd:
name: '{{ item }}.service'
enabled: true
state: started
daemon_reload: true
loop:
- deluged
- deluge-web