Refactor Ansible tasks and templates for improved consistency and clarity

This commit is contained in:
2026-07-31 02:24:42 +02:00
parent 81ef678904
commit 46327da2ac
52 changed files with 1679 additions and 1461 deletions
+16 -16
View File
@@ -5,16 +5,16 @@
# ---
- name: (pure-ftpd-install.yml) Get current authentications.
command: ls -1 {{ pureftpd_config_auth_dir }}
register: pureftpd_current_auth
ansible.builtin.command: ls -1 {{ pureftpd_config_auth_dir }}
register: common_pureftpd_current_auth
changed_when: false
- name: (pure-ftpd-install.yml) Define empty pureftpd_authentications variable.
set_fact:
pureftpd_authentications: []
ansible.builtin.set_fact:
common_pureftpd_authentications: []
- name: (pure-ftpd-install.yml) Enable PureDB authentication.
file:
ansible.builtin.file:
src: "{{ pureftpd_config_conf_dir }}/PureDB"
dest: "{{ pureftpd_config_auth_dir }}/{{ pureftpd_auth_puredb }}pure"
state: link
@@ -22,18 +22,18 @@
notify: restart Pure-FTPd
- name: (pure-ftpd-install.yml) Add PureDB to Pure-FTPd authentications.
set_fact:
pureftpd_authentications: "{{ pureftpd_authentications }} + ['{{ pureftpd_auth_puredb }}pure']"
ansible.builtin.set_fact:
common_pureftpd_authentications: "{{ common_pureftpd_authentications }} + ['{{ pureftpd_auth_puredb }}pure']"
when: pureftpd_auth_puredb > 0 and pureftpd_config['PureDB'] is defined
- name: (pure-ftpd-install.yml) Add PAM to Pure-FTPd authentications.
set_fact:
pureftpd_authentications: "{{ pureftpd_authentications }} + ['{{ pureftpd_auth_pam }}pam']"
ansible.builtin.set_fact:
common_pureftpd_authentications: "{{ common_pureftpd_authentications }} + ['{{ pureftpd_auth_pam }}pam']"
when: pureftpd_auth_pam > 0 and pureftpd_config['PAMAuthentication'] is defined
- name: (pure-ftpd-install.yml) Enable UNIX authentication.
file:
ansible.builtin.file:
src: "{{ pureftpd_config_conf_dir }}/UnixAuthentication"
dest: "{{ pureftpd_config_auth_dir }}/{{ pureftpd_auth_unix }}unix"
state: link
@@ -41,13 +41,13 @@
notify: restart Pure-FTPd
- name: (pure-ftpd-install.yml) Add UnixAuthentication to Pure-FTPd authentications.
set_fact:
pureftpd_authentications: "{{ pureftpd_authentications }} + ['{{ pureftpd_auth_unix }}unix']"
ansible.builtin.set_fact:
common_pureftpd_authentications: "{{ common_pureftpd_authentications }} + ['{{ pureftpd_auth_unix }}unix']"
when: pureftpd_auth_unix > 0 and pureftpd_config['UnixAuthentication'] is defined
- name: (pure-ftpd-install.yml) Enable PAM authentication.
file:
ansible.builtin.file:
src: "{{ pureftpd_config_conf_dir }}/PAMAuthentication"
dest: "{{ pureftpd_config_auth_dir }}/{{ pureftpd_auth_pam }}pam"
state: link
@@ -58,9 +58,9 @@
# Delete unused authentification if exists
- name: (pure-ftpd-install.yml) Delete old authentications.
file:
ansible.builtin.file:
path: "{{ pureftpd_config_auth_dir }}/{{ item }}"
state: absent
when: item not in pureftpd_authentications
with_items: "{{ pureftpd_current_auth.stdout_lines }}"
when: item not in common_pureftpd_authentications
with_items: "{{ common_pureftpd_current_auth.stdout_lines }}"
notify: restart Pure-FTPd
+8 -8
View File
@@ -16,20 +16,20 @@
notify: restart Pure-FTPd
- name: (pure-ftpd-install.yml) Compile Pure-FTPd configurations (set fact..).
set_fact:
pureftpd_config_compiled: "{{ pureftpd_config }}"
ansible.builtin.set_fact:
common_pureftpd_config_compiled: "{{ pureftpd_config }}"
- name: (pure-ftpd-install.yml) Get current configuration.
command: ls -1 {{ pureftpd_config_conf_dir }}
register: pureftpd_current_config
ansible.builtin.command: ls -1 {{ pureftpd_config_conf_dir }}
register: common_pureftpd_current_config
changed_when: false
- name: (pure-ftpd-install.yml) Delete old configuration.
file:
ansible.builtin.file:
path: "{{ pureftpd_config_conf_dir }}/{{ item }}"
state: absent
when: pureftpd_config_compiled[item] is not defined
with_items: "{{ pureftpd_current_config.stdout_lines }}"
when: common_pureftpd_config_compiled[item] is not defined
with_items: "{{ common_pureftpd_current_config.stdout_lines }}"
notify: restart Pure-FTPd
# write new configuration
@@ -41,5 +41,5 @@
owner: root
group: root
mode: '0644'
with_dict: '{{ pureftpd_config_compiled }}'
with_dict: '{{ common_pureftpd_config_compiled }}'
notify: restart Pure-FTPd
@@ -1,34 +1,62 @@
---
# ---
# Add virtual ftp users
# Add virtual ftp users
# ---
- name: "(create-virtual-ftp-user.yml) Verify if virtual ftp user {{ user.name }} exists"
command: pure-pw show {{ user.name }}
register: pureftpd_virtual_user_exists
changed_when: "pureftpd_virtual_user_exists.rc != 0"
failed_when:
- "pureftpd_virtual_user_exists.rc != 0"
- "pureftpd_virtual_user_exists.rc != 16"
ignore_errors: true
- name: (create-virtual-ftp-user.yml) Verify if virtual ftp user exists for {{ user.name }}
ansible.builtin.command: pure-pw show {{ user.name }}
register: common_pureftpd_virtual_user_exists
changed_when: false
failed_when:
- common_pureftpd_virtual_user_exists.rc != 0
- common_pureftpd_virtual_user_exists.rc != 16
loop_control:
label: '{{ user.name }}'
- name: "(create-virtual-ftp-user.yml) Create virtual ftp user {{ user.name }} ."
shell: "(echo {{ user.password }}; echo {{ user.password }}) | pure-pw useradd {{ user.name }} -u {{ user.uid | default(pureftpd_virtual_users_user) }} -g {{ user.gid | default(pureftpd_virtual_users_group) }} -d {{ user.homedir }} -n {{ user.quota_files | default('\"\"') }} -N {{ user.quota_size | default('\"\"') }} -t {{ user.bandwidth_dl | default('\"\"') }} -T {{ user.bandwidth_ul | default('\"\"') }} -q {{ user.ratio_ul | default('\"\"') }} -Q {{ user.ratio_dl | default('\"\"') }}"
#when: pureftpd_virtual_user_exists.failed is defined and pureftpd_virtual_user_exists.failed
when: pureftpd_virtual_user_exists.changed
- name: (create-virtual-ftp-user.yml) Create virtual ftp user for {{ user.name }}
ansible.builtin.shell:
cmd: >-
set -o pipefail &&
(echo {{ user.password }}; echo {{ user.password }}) |
pure-pw useradd {{ user.name }}
-u {{ user.uid | default(pureftpd_virtual_users_user) }}
-g {{ user.gid | default(pureftpd_virtual_users_group) }}
-d {{ user.homedir }}
-n {{ user.quota_files | default('""') }}
-N {{ user.quota_size | default('""') }}
-t {{ user.bandwidth_dl | default('""') }}
-T {{ user.bandwidth_ul | default('""') }}
-q {{ user.ratio_ul | default('""') }}
-Q {{ user.ratio_dl | default('""') }}
executable: /bin/bash
when: common_pureftpd_virtual_user_exists.rc == 16
changed_when: true
notify: reload Pure-FTPd users
- name: "User {{ user.name }}: Update virtual user"
command: "pure-pw usermod {{ user.name }} -u {{ user.uid | default(pureftpd_virtual_users_user) }} -g {{ user.gid | default(pureftpd_virtual_users_group) }} -d {{ user.homedir }} -n {{ user.quota_files | default('\"\"') }} -N {{ user.quota_size | default('\"\"') }} -t {{ user.bandwidth_dl | default('\"\"') }} -T {{ user.bandwidth_ul | default('\"\"') }} -q {{ user.ratio_ul | default('\"\"') }} -Q {{ user.ratio_dl | default('\"\"') }}"
#when: pureftpd_virtual_user_exists.failed is defined and not pureftpd_virtual_user_exists.failed
when: not pureftpd_virtual_user_exists.changed
- name: (create-virtual-ftp-user.yml) Update virtual ftp user for {{ user.name }}
ansible.builtin.command: >-
pure-pw usermod {{ user.name }}
-u {{ user.uid | default(pureftpd_virtual_users_user) }}
-g {{ user.gid | default(pureftpd_virtual_users_group) }}
-d {{ user.homedir }}
-n {{ user.quota_files | default('""') }}
-N {{ user.quota_size | default('""') }}
-t {{ user.bandwidth_dl | default('""') }}
-T {{ user.bandwidth_ul | default('""') }}
-q {{ user.ratio_ul | default('""') }}
-Q {{ user.ratio_dl | default('""') }}
when: common_pureftpd_virtual_user_exists.rc == 0
changed_when: true
notify: reload Pure-FTPd users
- name: "User {{ user.name }}: Update virtual user password"
shell: "(echo {{ user.password }}; echo {{ user.password }}) | pure-pw passwd {{ user.name }}"
when: not pureftpd_virtual_user_exists.changed
- name: (create-virtual-ftp-user.yml) Update virtual ftp user password for {{ user.name }}
ansible.builtin.shell:
cmd: >-
set -o pipefail &&
(echo {{ user.password }}; echo {{ user.password }}) |
pure-pw passwd {{ user.name }}
executable: /bin/bash
when: common_pureftpd_virtual_user_exists.rc == 0
changed_when: true
notify: reload Pure-FTPd users
@@ -1,19 +1,19 @@
---
# ---
# Remove virtual ftp users
# Remove virtual ftp users
# ---
- name: "User {{ user.name }}: Verify if it exists"
command: pure-pw show {{ user.name }}
register: pureftpd_virtual_user_exists
changed_when: "pureftpd_virtual_user_exists.rc == 0"
failed_when:
- "pureftpd_virtual_user_exists.rc != 0"
- "pureftpd_virtual_user_exists.rc != 16"
ignore_errors: true
- name: (remove-virtual-user.yml) Verify virtual ftp user exists for {{ user.name }}
ansible.builtin.command: pure-pw show {{ user.name }}
register: common_pureftpd_virtual_user_exists
changed_when: false
failed_when:
- common_pureftpd_virtual_user_exists.rc != 0
- common_pureftpd_virtual_user_exists.rc != 16
- name: "User {{ user.name }}: Remove virtual user"
shell: "pure-pw userdel {{ user.name }}"
when: pureftpd_virtual_user_exists.changed
- name: (remove-virtual-user.yml) Remove virtual ftp user for {{ user.name }}
ansible.builtin.command: pure-pw userdel {{ user.name }}
when: common_pureftpd_virtual_user_exists.rc == 0
changed_when: true
notify: reload Pure-FTPd users
+3 -3
View File
@@ -1,15 +1,15 @@
---
# ---
# Install PureFTP Daemon
# ---
- name: (pure-ftpd-install.yml) Ensure Pure-FTPd is installed.
apt:
ansible.builtin.apt:
name: "{{ pureftpd_packages }}"
state: present
cache_valid_time: 3600
update_cache: yes
update_cache: true
- name: (pure-ftpd-install.yml) Upload Pure-FTPd global configuration file.
ansible.builtin.template:
@@ -1,40 +1,69 @@
---
# ---
# TLS Certificate
# ---
# - method 'generate'
- name: Build Pure-FTPd TLS subject.
ansible.builtin.set_fact:
common_pureftpd_tls_subject: >-
/C={{ pureftpd_tls_certificate_openssl.country | default('') }}
/ST={{ pureftpd_tls_certificate_openssl.state | default('') }}
/L={{ pureftpd_tls_certificate_openssl.locality | default('') }}
/O={{ pureftpd_tls_certificate_openssl.organization | default('') }}
/OU={{ pureftpd_tls_certificate_openssl.unit | default('') }}
/CN={{ pureftpd_tls_certificate_openssl.fqdn }}
when:
- pureftpd_tls_certificate_method == 'generate'
- pureftpd_tls_certificate_openssl | length > 0
- name: Generate Pure-FTPd TLS certificate.
command: openssl req -x509 -nodes -newkey rsa:{{ pureftpd_tls_certificate_openssl.size | default(4096) }} -sha256 -days {{ pureftpd_tls_certificate_openssl.days | default(365) }} -keyout {{ pureftpd_tls_certificate_pem }} -out {{ pureftpd_tls_certificate_pem }} -subj "/C={{ pureftpd_tls_certificate_openssl.country | default('') }}/ST={{ pureftpd_tls_certificate_openssl.state | default('') }}/L={{ pureftpd_tls_certificate_openssl.locality | default('') }}/O={{ pureftpd_tls_certificate_openssl.organization | default('') }}/OU={{ pureftpd_tls_certificate_openssl.unit | default('') }}/CN={{ pureftpd_tls_certificate_openssl.fqdn }}"
ansible.builtin.command:
argv:
- openssl
- req
- -x509
- -nodes
- -newkey
- rsa:{{ pureftpd_tls_certificate_openssl.size | default(4096) }}
- -sha256
- -days
- '{{ pureftpd_tls_certificate_openssl.days | default(365) }}'
- -keyout
- '{{ pureftpd_tls_certificate_pem }}'
- -out
- '{{ pureftpd_tls_certificate_pem }}'
- -subj
- '{{ common_pureftpd_tls_subject }}'
args:
creates: "{{ pureftpd_tls_certificate_pem }}"
when:
when:
- pureftpd_tls_certificate_method == 'generate'
- pureftpd_tls_certificate_openssl | length > 0
notify: restart Pure-FTPd
- name: Ensure Pure-FTPd TLS certificate permissions.
file:
ansible.builtin.file:
path: "{{ pureftpd_tls_certificate_pem }}"
owner: root
group: root
mode: '0600'
state: file
when:
when:
- pureftpd_tls_certificate_method == 'generate'
- pureftpd_tls_certificate_openssl | length > 0
# - final checks
- name: (pure-ftpd-install.yml) Verify TLS certificate exists.
stat:
ansible.builtin.stat:
path: "{{ pureftpd_tls_certificate_pem }}"
register: pureftpd_tls_certificate
register: common_pureftpd_tls_certificate
- name: (pure-ftpd-install.yml) Fail when no certificate is found.
fail:
ansible.builtin.fail:
msg: |
The certificate file was not found at {{ pureftpd_tls_certificate_pem }}
when: not pureftpd_tls_certificate.stat.exists | default(False)
when: not common_pureftpd_tls_certificate.stat.exists | default(false)
+12 -10
View File
@@ -3,44 +3,45 @@
# Default virtual users/group
- name: (pure-ftpd-install.yml) Ensure Pure-FTPd group exists.
group:
ansible.builtin.group:
name: "{{ pureftpd_virtual_users_group }}"
gid: "{{ pureftpd_virtual_users_gid | default(omit) }}"
system: no
system: false
state: present
when: pureftpd_virtual_users | length > 0
- name: (pure-ftpd-install.yml) Ensure Pure-FTPd user exists.
user:
ansible.builtin.user:
name: "{{ pureftpd_virtual_users_user }}"
uid: "{{ pureftpd_virtual_users_uid | default(omit) }}"
group: "{{ pureftpd_virtual_users_group }}"
home: /dev/null
shell: /usr/sbin/nologin
system: no
system: false
state: present
when: pureftpd_virtual_users | length > 0
# user databas
- name: (pure-ftpd-install.yml) Verify virtual users database existence.
stat:
ansible.builtin.stat:
path: "{{ pureftpd_config_dir }}/pureftpd.passwd"
register: pureftpd_virtual_users_database
register: common_pureftpd_virtual_users_database
- name: (pure-ftpd-install.yml) Ensure virtual users database exists.
file:
ansible.builtin.file:
path: "{{ pureftpd_config_dir }}/pureftpd.passwd"
owner: root
group: root
mode: '0600'
state: touch
when: (pureftpd_virtual_users | length > 0) and not pureftpd_virtual_users_database.stat.exists | default(False)
when: (pureftpd_virtual_users | length > 0) and not common_pureftpd_virtual_users_database.stat.exists | default(false)
# - Cretate virtual user
- include_tasks: create-virtual-ftp-user.yml
- name: (pure-ftpd-install.yml) Include create virtual ftp user task.
ansible.builtin.include_tasks: create-virtual-ftp-user.yml
vars:
user: "{{ item }}"
with_items: "{{ pureftpd_virtual_users }}"
@@ -50,7 +51,8 @@
# Remove virtual user
# -
- include_tasks: remove-virtual-user.yml
- name: (pure-ftpd-install.yml) Include remove virtual ftp user task.
ansible.builtin.include_tasks: remove-virtual-user.yml
vars:
user: "{{ item }}"
with_items: "{{ pureftpd_virtual_deleted_users }}"