From 7246261798083574fe6eacbb1796ad8b024ef986 Mon Sep 17 00:00:00 2001 From: transcaffeine Date: Sun, 20 Apr 2025 19:43:33 +0200 Subject: [PATCH] feat(docker): add ansible role (WIP) --- roles/docker/defaults/main.yml | 7 +++++++ roles/docker/defaults/systemd.yml | 5 +++++ roles/docker/handlers/main.yml | 6 ++++++ roles/docker/tasks/configure.yml | 18 ++++++++++++++++++ roles/docker/tasks/main.yml | 29 +++++++++++++++++++++++++++++ roles/docker/vars/main.yml | 3 +++ 6 files changed, 68 insertions(+) create mode 100644 roles/docker/defaults/main.yml create mode 100644 roles/docker/defaults/systemd.yml create mode 100644 roles/docker/handlers/main.yml create mode 100644 roles/docker/tasks/configure.yml create mode 100644 roles/docker/tasks/main.yml create mode 100644 roles/docker/vars/main.yml diff --git a/roles/docker/defaults/main.yml b/roles/docker/defaults/main.yml new file mode 100644 index 0000000..efec975 --- /dev/null +++ b/roles/docker/defaults/main.yml @@ -0,0 +1,7 @@ +--- +docker_state: "present" +docker_daemon_config: ~ +docker_daemon_config_file: "/etc/docker/daemon.json" +docker_daemon_config_file_mode: "0644" +docker_daemon_config_owner: root +docker_daemon_config_group: "{{ docker_daemon_config_owner }}" diff --git a/roles/docker/defaults/systemd.yml b/roles/docker/defaults/systemd.yml new file mode 100644 index 0000000..33ab4f7 --- /dev/null +++ b/roles/docker/defaults/systemd.yml @@ -0,0 +1,5 @@ +--- +docker_systemd_service_name: "docker.service" +docker_systemd_service_state: >-2 + {{ (docker_state == 'present') | ternary('started', 'stopped') }} +docker_systemd_service_enabled: "{{ (docker_state == 'present') }}" diff --git a/roles/docker/handlers/main.yml b/roles/docker/handlers/main.yml new file mode 100644 index 0000000..8896e14 --- /dev/null +++ b/roles/docker/handlers/main.yml @@ -0,0 +1,6 @@ +--- +- name: Restart docker daemon + ansible.builtin.systemd_service: + name: "{{ docker_systemd_service_name }}" + state: "restarted" + listen: "docker-restart" diff --git a/roles/docker/tasks/configure.yml b/roles/docker/tasks/configure.yml new file mode 100644 index 0000000..be897ab --- /dev/null +++ b/roles/docker/tasks/configure.yml @@ -0,0 +1,18 @@ +--- +- name: Ensure config directory '{{ docker_daemon_config_file | dirname }}' is present + ansible.builtin.file: + path: "{{ docker_daemon_config_file | dirname }}" + state: "directory" + mode: "0755" + owner: "{{ docker_daemon_config_owner }}" + group: "{{ docker_daemon_config_group }}" + +- name: Configure docker daemon using '{{ docker_daemon_config_file }}' + ansible.builtin.copy: + content: "{{ docker_daemon_config | to_json }}" + dest: "{{ docker_daemon_config_file }}" + mode: "{{ docker_daemon_config_file_mode }}" + owner: "{{ docker_daemon_config_owner }}" + group: "{{ docker_daemon_config_group }}" + when: docker_daemon_config | string | length > 0 + notify: docker-restart diff --git a/roles/docker/tasks/main.yml b/roles/docker/tasks/main.yml new file mode 100644 index 0000000..7b7bad7 --- /dev/null +++ b/roles/docker/tasks/main.yml @@ -0,0 +1,29 @@ +--- +- name: Check if target OS is supported + ansible.builtin.fail: + msg: >-2 + OS Family '{{ docker_os_family }}' is not supported! + when: docker_os_family not in docker_supported_os_families + vars: + docker_os_family: "{{ ansible_os_family | lower }}" + +- name: Ensure docker is {{ docker_state }} on {{ ansible_os_family }}-family + ansible.builtin.include_tasks: + file: "install-{{ ansible_os_family | lower }}.yml" + +- name: Configure docker daemon + ansible.builtin.include_tasks: + file: "configure.yml" + when: docker_state == 'present' + +- name: Ensure docker daemon is {{ docker_systemd_service_enabled | ternary('enabled', 'disabled') }} + ansible.builtin.systemd_service: + name: "{{ docker_systemd_service_name }}" + enabled: "{{ docker_systemd_service_enabled }}" + when: ansible_facts['service_mgr'] == 'systemd' + +- name: Ensure docker daemon is {{ docker_systemd_service_state }} + ansible.builtin.systemd_service: + name: "{{ docker_systemd_service_name }}" + state: "{{ docker_systemd_service_state }}" + when: ansible_facts['service_mgr'] == 'systemd' diff --git a/roles/docker/vars/main.yml b/roles/docker/vars/main.yml new file mode 100644 index 0000000..a1b0f0d --- /dev/null +++ b/roles/docker/vars/main.yml @@ -0,0 +1,3 @@ +--- +docker_supported_os_families: + - 'debian'