--- - name: Ensure community.docker collection is installed ansible.builtin.package: name: python3-docker state: present become: yes - name: Create Loki directories file: path: "{{ item }}" state: directory mode: '0755' loop: - "{{ loki_base_dir }}" - "{{ loki_config_dir }}" - "{{ loki_data_dir }}" - "{{ promtail_config_dir }}" - "{{ promtail_data_dir }}" become: yes - name: Create Loki internal directories with correct permissions file: path: "{{ item }}" state: directory mode: '0755' owner: "10001" group: "10001" loop: - "{{ loki_data_dir }}/chunks" - "{{ loki_data_dir }}/rules" - "{{ loki_data_dir }}/boltdb-shipper-compactor" - "{{ loki_data_dir }}/boltdb-shipper-cache" - "{{ loki_data_dir }}/cache" - "{{ loki_data_dir }}/index" - "{{ loki_data_dir }}/wal" - "{{ loki_data_dir }}/tmp" become: yes - name: Set recursive ownership for Loki data directory file: path: "{{ loki_data_dir }}" state: directory owner: "10001" group: "10001" recurse: yes become: yes - name: Deploy Loki configuration template: src: loki-config.yml.j2 dest: "{{ loki_config_dir }}/loki-config.yml" mode: '0644' notify: restart loki stack become: yes - name: Deploy Promtail configuration template: src: promtail-config.yml.j2 dest: "{{ promtail_config_dir }}/promtail-config.yml" mode: '0644' notify: restart loki stack become: yes - name: Deploy Loki stack docker-compose template: src: docker-compose.yml.j2 dest: "{{ loki_base_dir }}/docker-compose.yml" mode: '0644' notify: restart loki stack become: yes - name: Check if monitoring network exists community.docker.docker_network_info: name: monitoring register: monitoring_network become: yes - name: Create monitoring network if it doesn't exist community.docker.docker_network: name: monitoring driver: bridge state: present when: not monitoring_network.exists become: yes - name: Start Loki stack community.docker.docker_compose_v2: project_src: "{{ loki_base_dir }}" state: present become: yes - name: Wait for Loki port to be available wait_for: host: "{{ ansible_default_ipv4.address }}" port: "{{ monitoring_ports.loki }}" timeout: 120 state: started delay: 10 become: no - name: Check Loki container status community.docker.docker_container_info: name: loki register: loki_container_info become: yes - name: Show Loki status debug: msg: "✅ Loki is running and available on port {{ monitoring_ports.loki }}. Container status: {{ loki_container_info.container.State.Status }}" - name: Check Promtail container status community.docker.docker_container_info: name: promtail register: promtail_container_info become: yes - name: Show Promtail status debug: msg: "✅ Promtail is running. Container status: {{ promtail_container_info.container.State.Status }}"