olimp/roles/docker/tasks/main.yml
2025-11-24 11:09:12 +00:00

157 lines
4.3 KiB
YAML

---
- name: Install Docker dependencies
apt:
name:
- apt-transport-https
- ca-certificates
- curl
- gnupg
- lsb-release
state: present
update_cache: yes
- name: Add Docker GPG key
apt_key:
url: https://download.docker.com/linux/ubuntu/gpg
state: present
- name: Add Docker repository
apt_repository:
repo: "deb [arch=amd64] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable"
state: present
- name: Install Docker
apt:
name:
- docker-ce
- docker-ce-cli
- containerd.io
state: present
update_cache: yes
- name: Install Docker Compose
apt:
name: docker-compose-plugin
state: present
- name: Start and enable Docker service
systemd:
name: docker
state: started
enabled: yes
- name: Wait for Docker to start
pause:
seconds: 5
- name: Verify Docker installation
command: docker --version
register: docker_version
changed_when: false
- name: Show Docker version
debug:
msg: "Docker version: {{ docker_version.stdout }}"
- name: Verify Docker Compose installation
command: docker compose version
register: docker_compose_version
changed_when: false
- name: Show Docker Compose version
debug:
msg: "Docker Compose version: {{ docker_compose_version.stdout }}"
- name: Setup Docker monitoring
block:
- name: Create scripts directory
file:
path: /opt/scripts
state: directory
mode: '0755'
become: yes
- name: Deploy Docker metrics script
copy:
content: |
#!/bin/bash
# Docker metrics script for Node Exporter textfile collector
OUTFILE="/var/lib/node_exporter/textfile_collector/docker_metrics.prom"
# Get container counts
TOTAL_CONTAINERS=$(docker ps -a -q 2>/dev/null | wc -l)
RUNNING_CONTAINERS=$(docker ps -q 2>/dev/null | wc -l)
EXITED_CONTAINERS=$((TOTAL_CONTAINERS - RUNNING_CONTAINERS))
# Write metrics in Prometheus format
cat << EOF > $OUTFILE
# HELP docker_containers_total Total number of Docker containers
# TYPE docker_containers_total gauge
docker_containers_total{metric_type="total"} $TOTAL_CONTAINERS
# HELP docker_containers_running Number of running Docker containers
# TYPE docker_containers_running gauge
docker_containers_running{metric_type="running"} $RUNNING_CONTAINERS
# HELP docker_containers_exited Number of exited Docker containers
# TYPE docker_containers_exited gauge
docker_containers_exited{metric_type="exited"} $EXITED_CONTAINERS
EOF
dest: /opt/scripts/docker_metrics.sh
mode: '0755'
become: yes
- name: Create systemd service for Docker metrics
copy:
content: |
[Unit]
Description=Docker metrics script
After=docker.service
[Service]
User=root
ExecStart=/opt/scripts/docker_metrics.sh
dest: /etc/systemd/system/docker-metrics.service
mode: '0644'
become: yes
- name: Create systemd timer for Docker metrics
copy:
content: |
[Unit]
Description=Run Docker metrics every 30 seconds
[Timer]
OnBootSec=1min
OnUnitActiveSec=30s
[Install]
WantedBy=timers.target
dest: /etc/systemd/system/docker-metrics.timer
mode: '0644'
become: yes
- name: Ensure Node Exporter textfile directory exists
file:
path: /var/lib/node_exporter/textfile_collector
state: directory
owner: node_exporter
group: node_exporter
mode: '0755'
become: yes
- name: Enable and start Docker metrics timer
systemd:
name: docker-metrics.timer
enabled: yes
state: started
daemon_reload: yes
become: yes
- name: Test Docker metrics script
command: /opt/scripts/docker_metrics.sh
register: metrics_test
changed_when: false
- name: Show Docker metrics test result
debug:
var: metrics_test.stdout