From b22c86758eaaeb54128144e5aa7d6503a7af8d4f Mon Sep 17 00:00:00 2001
From: Alexander Dahl <alex@netz39.de>
Date: Sun, 21 Jan 2024 22:05:58 +0100
Subject: [PATCH 1/3] :truck: Migrate docker_host role to external project

We used a similar local role here, in the Freifunk Magdeburg project,
and in personal playbooks.  That was moved to an external project,
unified, and reworked, so the external role can act as replacement for
the distributed, redundant copies.

Link: https://github.com/netz39/ansible-role-host-docker
---
 group-docker_host.yml                       |  2 +-
 host-krypton.yml                            |  2 +-
 host-pottwal.yml                            |  2 +-
 host-radon.yml                              |  2 +-
 host-tau.yml                                |  2 +-
 host-unicorn.yml                            |  2 +-
 host-wittgenstein.yml                       |  2 +-
 requirements.yml                            |  3 +
 roles/docker_setup/defaults/main.yml        |  5 --
 roles/docker_setup/handlers/main.yml        |  6 --
 roles/docker_setup/tasks/main.yml           | 91 ---------------------
 roles/docker_setup/templates/daemon.json.j2 |  9 --
 roles/docker_setup/templates/docker.list.j2 |  2 -
 13 files changed, 10 insertions(+), 120 deletions(-)
 delete mode 100644 roles/docker_setup/defaults/main.yml
 delete mode 100644 roles/docker_setup/handlers/main.yml
 delete mode 100644 roles/docker_setup/tasks/main.yml
 delete mode 100644 roles/docker_setup/templates/daemon.json.j2
 delete mode 100644 roles/docker_setup/templates/docker.list.j2

diff --git a/group-docker_host.yml b/group-docker_host.yml
index 15c2ed9..08cfb2c 100644
--- a/group-docker_host.yml
+++ b/group-docker_host.yml
@@ -3,7 +3,7 @@
   become: true
 
   roles:
-    - role: docker_setup
+    - role: netz39.host_docker
 
 - hosts: docker_host:&location_space
   become: true
diff --git a/host-krypton.yml b/host-krypton.yml
index 2623afa..e9119ca 100644
--- a/host-krypton.yml
+++ b/host-krypton.yml
@@ -19,7 +19,7 @@
 
 
   roles:
-    # role 'docker_setup' applied through group 'docker_host'
+    # role 'netz39.host_docker' applied through group 'docker_host'
     - role: apache
     - role: apache_letsencrypt  # Uses configuration from dehydrated setup
     - role: 24367dfa.dehydrated
diff --git a/host-pottwal.yml b/host-pottwal.yml
index 9df71c4..ed32054 100644
--- a/host-pottwal.yml
+++ b/host-pottwal.yml
@@ -3,7 +3,7 @@
   become: true
 
   roles:
-    # role 'docker_setup' applied through group 'docker_host'
+    # role 'netz39.host_docker' applied through group 'docker_host'
     - role: apache
     - role: apache_letsencrypt  # Uses configuration from dehydrated setup
     - role: 24367dfa.dehydrated
diff --git a/host-radon.yml b/host-radon.yml
index f82edc9..93916ef 100644
--- a/host-radon.yml
+++ b/host-radon.yml
@@ -21,7 +21,7 @@
     brotherql_host_port: 9004
 
   roles:
-    # role 'docker_setup' applied through group 'docker_host'
+    # role 'netz39.host_docker' applied through group 'docker_host'
     - role: apache
     - role: apache_letsencrypt  # Uses configuration from dehydrated setup
     - role: 24367dfa.dehydrated
diff --git a/host-tau.yml b/host-tau.yml
index 665f926..ee5e2a4 100644
--- a/host-tau.yml
+++ b/host-tau.yml
@@ -19,7 +19,7 @@
     discord_invite_domain: discord.netz39.de
 
   roles:
-    # role 'docker_setup' applied through group 'docker_host'
+    # role 'netz39.host_docker' applied through group 'docker_host'
     - role: apache
     - role: penguineer.dehydrated_cron
 
diff --git a/host-unicorn.yml b/host-unicorn.yml
index 2ccca3a..a6fe8d5 100644
--- a/host-unicorn.yml
+++ b/host-unicorn.yml
@@ -7,7 +7,7 @@
     data_dir: "/srv/data"
 
   roles:
-    # role 'docker_setup' applied through group 'docker_host'
+    # role 'netz39.host_docker' applied through group 'docker_host'
 
   tasks:
     - name: Setup the docker container for unifi-controller
diff --git a/host-wittgenstein.yml b/host-wittgenstein.yml
index c7a6869..5557893 100644
--- a/host-wittgenstein.yml
+++ b/host-wittgenstein.yml
@@ -3,7 +3,7 @@
   become: true
 
   roles:
-    - role: docker_setup
+    - role: netz39.host_docker
       vars:
         docker_data_root: "/srv/docker"
     - role: apache
diff --git a/requirements.yml b/requirements.yml
index 975ae64..65bdec0 100644
--- a/requirements.yml
+++ b/requirements.yml
@@ -16,6 +16,9 @@ roles:
     version: v1.1.0
   - src: lespocky.telegraf_docker_in_docker
     version: v0.2.1
+  - name: netz39.host_docker
+    src: git+https://github.com/netz39/ansible-role-host-docker.git
+    version: v0.3.0
 
 collections:
   - name: community.grafana
diff --git a/roles/docker_setup/defaults/main.yml b/roles/docker_setup/defaults/main.yml
deleted file mode 100644
index f1d15e3..0000000
--- a/roles/docker_setup/defaults/main.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-docker_compose_version: "1.25.4"
-docker_compose_path: /usr/local/bin/docker-compose
-docker_data_root: "/var/lib/docker"
-docker_storage_driver: "overlay2"
diff --git a/roles/docker_setup/handlers/main.yml b/roles/docker_setup/handlers/main.yml
deleted file mode 100644
index 4e8c5a0..0000000
--- a/roles/docker_setup/handlers/main.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-- name: restart docker
-  service:
-    name: docker
-    state: restarted
-    enabled: yes
diff --git a/roles/docker_setup/tasks/main.yml b/roles/docker_setup/tasks/main.yml
deleted file mode 100644
index 5a42436..0000000
--- a/roles/docker_setup/tasks/main.yml
+++ /dev/null
@@ -1,91 +0,0 @@
-# This file is a mash-up of:
-#   https://github.com/geerlingguy/ansible-role-docker/blob/master/tasks/docker-compose.yml
-#   https://www.digitalocean.com/community/tutorials/how-to-install-docker-compose-on-debian-9
-#   and our own stuff …
----
-- name: Gather package facts
-  package_facts:
-    manager: "auto"
-
-- name: Exit if docker.io is installed
-  fail:
-    msg: "Please remove docker.io (Debian vanilla docker package) first!"
-  when: "'docker.io' in ansible_facts.packages"
-
-- name: Install Docker APT deps
-  package:
-    name: "{{ packages }}"
-    state: present
-  vars:
-    packages:
-      - apt-transport-https
-      - ca-certificates
-      - gnupg2
-      - software-properties-common
-
-- name: add Docker apt-key
-  apt_key:
-    url: https://download.docker.com/linux/debian/gpg
-    state: present
-
-- name: add Docker's APT repository
-  ansible.builtin.template:
-    src: templates/docker.list.j2
-    dest: /etc/apt/sources.list.d/docker.list
-  register: apt_repo
-
-- name: Update package cache  # noqa: no-handler
-  ansible.builtin.apt:
-    update_cache: true
-  when: apt_repo.changed
-
-- name: install Docker
-  package:
-    name: "{{ packages }}"
-    state: present
-  vars:
-    packages:
-      - docker-ce
-      - python3-docker
-
-- name: Set docker configuration
-  template:
-    src: templates/daemon.json.j2
-    dest: /etc/docker/daemon.json
-    mode: "0644"
-  notify: restart docker
-
-- name: Check current docker-compose version.
-  command: docker-compose --version
-  register: docker_compose_current_version
-  changed_when: false
-  failed_when: false
-
-- name: Delete existing docker-compose version if it's different.
-  file:
-    path: "{{ docker_compose_path }}"
-    state: absent
-  when: >
-    docker_compose_current_version.stdout is defined
-    and docker_compose_version not in docker_compose_current_version.stdout
-
-- name: Install Docker Compose (if configured).
-  get_url:
-    url: https://github.com/docker/compose/releases/download/{{ docker_compose_version }}/docker-compose-Linux-x86_64
-    dest: "{{ docker_compose_path }}"
-    mode: "0755"
-
-- name: Place admin users in docker group
-  user:
-    name: "{{ item.logname }}"
-    groups: [docker]
-    append: yes
-  when: item.docker
-  with_items: "{{ users }}"
-
-- name: Ensure that docker image prune cron job is present.
-  ansible.builtin.cron:
-    name: docker image prune
-    special_time: weekly
-    user: root
-    job: "docker image prune --all --force"
diff --git a/roles/docker_setup/templates/daemon.json.j2 b/roles/docker_setup/templates/daemon.json.j2
deleted file mode 100644
index ee43392..0000000
--- a/roles/docker_setup/templates/daemon.json.j2
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-    "exec-opts": ["native.cgroupdriver=systemd"],
-    "log-driver": "json-file",
-        "log-opts": {
-            "max-size": "100m"
-        },
-    "data-root": "{{ docker_data_root }}",
-    "storage-driver": "{{ docker_storage_driver }}"
-}
diff --git a/roles/docker_setup/templates/docker.list.j2 b/roles/docker_setup/templates/docker.list.j2
deleted file mode 100644
index 7795847..0000000
--- a/roles/docker_setup/templates/docker.list.j2
+++ /dev/null
@@ -1,2 +0,0 @@
-deb https://download.docker.com/linux/debian {{ ansible_distribution_release }} stable
-

From e946fe37b41f0be912e78d1d3b2108a2ecf8a937 Mon Sep 17 00:00:00 2001
From: Alexander Dahl <alex@netz39.de>
Date: Wed, 19 Feb 2025 18:47:10 +0100
Subject: [PATCH 2/3] :wrench: renovate: Remove docker_compose match

The role matched by this was removed, and is handled through
requirements.yml now.  That should already be covered by renovate
without additional configuration.
---
 renovate.json | 14 +-------------
 1 file changed, 1 insertion(+), 13 deletions(-)

diff --git a/renovate.json b/renovate.json
index 560af2a..b70eae7 100644
--- a/renovate.json
+++ b/renovate.json
@@ -11,17 +11,6 @@
       "matchStrings": [
         "image: (?<depName>.*?):(?<currentValue>.*?)(@(?<currentDigest>sha256:.*?))?\\s"
       ]
-    },
-    {
-      "fileMatch": [
-        "^roles/docker_setup/defaults/main.yml$"
-      ],
-      "datasourceTemplate": "github-release",
-      "versioningTemplate": "semver",
-      "depNameTemplate": "docker-compose",
-      "matchStrings": [
-        "docker_compose_version: (?<currentValue>.*?)\\s"
-      ]
     }
   ],
   "packageRules": [
@@ -30,5 +19,4 @@
       "schedule": [ "on friday" ]
     }
   ]
-
-}
\ No newline at end of file
+}

From cc41217ad888c67fc3e2afeb1e8f07e73f989f91 Mon Sep 17 00:00:00 2001
From: Alexander Dahl <alex@netz39.de>
Date: Sat, 22 Feb 2025 12:58:20 +0100
Subject: [PATCH 3/3] :wrench: Enable automatic docker image prune again

The feature was part of the old role but unconditionally.  When porting
to external role we made it optional with variable
`docker_cron_image_prune` but default to false.  Restore the previous
behaviour in this playbook.
---
 group_vars/docker_host/vars.yml | 1 +
 host-wittgenstein.yml           | 1 +
 2 files changed, 2 insertions(+)

diff --git a/group_vars/docker_host/vars.yml b/group_vars/docker_host/vars.yml
index 2978231..5be6933 100644
--- a/group_vars/docker_host/vars.yml
+++ b/group_vars/docker_host/vars.yml
@@ -1,2 +1,3 @@
 ---
 docker_data_root: "/srv/docker"
+docker_cron_image_prune: true
diff --git a/host-wittgenstein.yml b/host-wittgenstein.yml
index 5557893..1676da0 100644
--- a/host-wittgenstein.yml
+++ b/host-wittgenstein.yml
@@ -6,6 +6,7 @@
     - role: netz39.host_docker
       vars:
         docker_data_root: "/srv/docker"
+        docker_cron_image_prune: true
     - role: apache
     - role: apache_letsencrypt  # Uses configuration from dehydrated setup
     - role: 24367dfa.dehydrated