--- - name: Create Snikket base directory file: path: "{{ snikket_base_dir }}" state: directory mode: '0755' owner: root group: root - name: Create Snikket data directory file: path: "{{ snikket_data_dir }}" state: directory mode: '0755' owner: '65534' group: '65534' - name: Create nginx custom config directory file: path: "{{ snikket_nginx_custom_dir }}" state: directory mode: '0755' - name: Create backup directory file: path: "{{ snikket_backup_dir }}" state: directory mode: '0700' owner: root group: root when: snikket_backup_enabled - name: Generate snikket.conf from template template: src: snikket.conf.j2 dest: "{{ snikket_base_dir }}/snikket.conf" mode: '0644' owner: root group: root notify: Restart Snikket - name: Generate docker-compose.yml from template template: src: docker-compose.yml.j2 dest: "{{ snikket_base_dir }}/docker-compose.yml" mode: '0644' owner: root group: root notify: Restart Snikket - name: Generate nginx custom config from template template: src: nginx-custom.conf.j2 dest: "{{ snikket_nginx_custom_dir }}/snikket.conf" mode: '0644' owner: root group: root notify: Reload Snikket Proxy - name: Pull Snikket Docker images community.docker.docker_compose_v2: project_src: "{{ snikket_base_dir }}" state: present pull: always - name: Start Snikket services community.docker.docker_compose_v2: project_src: "{{ snikket_base_dir }}" state: present register: docker_start_result - name: Wait for Snikket to be ready wait_for: port: "{{ snikket_http_port }}" host: "127.0.0.1" timeout: 120 delay: 10 - name: Create backup script template: src: backup.sh.j2 dest: /usr/local/bin/snikket-backup.sh mode: '0755' owner: root group: root when: snikket_backup_enabled - name: Add backup to crontab cron: name: "Snikket backup" job: "/usr/local/bin/snikket-backup.sh" hour: "3" minute: "0" weekday: "0" user: root when: snikket_backup_enabled - name: Create initial admin invite (optional) community.docker.docker_container_exec: container: snikket command: "create-invite --group {{ snikket_initial_invite_group }} --expires {{ snikket_initial_invite_expires }}" register: invite_result when: snikket_create_initial_invite changed_when: "'invite' in invite_result.stdout.lower()" - name: Display invite link if created debug: msg: "🎉 Admin invite created: {{ invite_result.stdout | trim }}" when: snikket_create_initial_invite and invite_result.stdout is defined - name: Health check - verify Snikket is responding uri: url: "https://{{ snikket_domain }}/login" validate_certs: false status_code: [200, 302] register: health_check retries: 5 delay: 10 until: health_check.status in [200, 302] tags: skip_ansible_lint - name: Display deployment summary debug: msg: | 🎉 Snikket deployment complete! Domain: https://{{ snikket_domain }} XMPP: {{ snikket_domain }}:{{ snikket_xmpp_port }} TURN: {{ snikket_domain }}:{{ snikket_turn_tls_port }} {% if snikket_create_initial_invite %} Admin invite: {{ invite_result.stdout | trim }} {% else %} Create admin: docker exec snikket create-invite --admin --group default {% endif %} Backup script: /usr/local/bin/snikket-backup.sh