From 5d458284f3bc9918d6ae1005118a0135e36d85c7 Mon Sep 17 00:00:00 2001
From: fejao <mail@fejao.de>
Date: Sat, 25 Jan 2025 11:48:15 +0000
Subject: [PATCH] Adding role dependencies

---
 README.md                                     |  18 +++
 inventories/host_vars/example_server.yml      |   6 +
 ...ple-01.yml => playbook_example_01_test.yml |   0
 playbook_example_02_dependencies.yml          |   7 ++
 roles/dependencies/README.md                  | 111 ++++++++++++++++++
 roles/dependencies/defaults/main.yml          |  88 ++++++++++++++
 roles/dependencies/handlers/main.yml          |  14 +++
 roles/dependencies/meta/main.yml              |  10 ++
 .../tasks/docker/install_compose.yml          |  31 +++++
 .../tasks/docker/install_docker_users.yml     |  11 ++
 .../tasks/docker/setup-Debian.yml             |  69 +++++++++++
 .../tasks/docker/setup-RedHat.yml             |  61 ++++++++++
 roles/dependencies/tasks/install_docker.yml   | 103 ++++++++++++++++
 roles/dependencies/tasks/install_packages.yml |   8 ++
 roles/dependencies/tasks/main.yml             |   5 +
 roles/dependencies/vars/Alpine.yml            |   2 +
 roles/dependencies/vars/Archlinux.yml         |   3 +
 roles/dependencies/vars/main.yml              |   2 +
 18 files changed, 549 insertions(+)
 rename playbook-example-01.yml => playbook_example_01_test.yml (100%)
 create mode 100644 playbook_example_02_dependencies.yml
 create mode 100644 roles/dependencies/README.md
 create mode 100644 roles/dependencies/defaults/main.yml
 create mode 100644 roles/dependencies/handlers/main.yml
 create mode 100644 roles/dependencies/meta/main.yml
 create mode 100644 roles/dependencies/tasks/docker/install_compose.yml
 create mode 100644 roles/dependencies/tasks/docker/install_docker_users.yml
 create mode 100644 roles/dependencies/tasks/docker/setup-Debian.yml
 create mode 100644 roles/dependencies/tasks/docker/setup-RedHat.yml
 create mode 100644 roles/dependencies/tasks/install_docker.yml
 create mode 100644 roles/dependencies/tasks/install_packages.yml
 create mode 100644 roles/dependencies/tasks/main.yml
 create mode 100755 roles/dependencies/vars/Alpine.yml
 create mode 100644 roles/dependencies/vars/Archlinux.yml
 create mode 100755 roles/dependencies/vars/main.yml

diff --git a/README.md b/README.md
index f8cc7ca..097bd1b 100644
--- a/README.md
+++ b/README.md
@@ -4,6 +4,10 @@
 
 ## WIP
 - [ ] finish the roles for deploying the **c3InfoDesk Printer**
+    - [x] dependencies
+    - [ ] clone_repositories
+    - [ ] docker_images
+    - [ ] docker_containers
 - [ ] set ansible-lint
 
 ---
@@ -13,6 +17,20 @@ This is a repo for deploying the the printer system used at the c3infodesk for p
 
 ---
 
+## Roles
+Here are the used roles:
+
+- [dependencies](roles/dependencies/README.md)
+
+
+## License
+
+MIT / BSD
+
+## Author Information
+
+![fejao logo](files/from_authors/fejao_logo_circle.png "fejao") [https://chaos.social/@fejao](https://chaos.social/@fejao)
+
 
 
 
diff --git a/inventories/host_vars/example_server.yml b/inventories/host_vars/example_server.yml
index 394a989..8a601fb 100644
--- a/inventories/host_vars/example_server.yml
+++ b/inventories/host_vars/example_server.yml
@@ -1,6 +1,7 @@
 ---
 # defaults file for test
 
+### ---> PLEASE CHANGE THIS, yes, I setted at my home-lab a VM with a user with this passwd, please don't do that on the real world.
 ansible_become_pass: "1234"
 
 ###
@@ -8,3 +9,8 @@ ansible_become_pass: "1234"
 ###
 var_setted_everywhere: "answer from inventory/host_vars/example_server.yml"
 var_setted_only_host_vars: "MESSAGE FROM HOST_VARS ONLY"
+
+###
+### roles/dependencies -> !!! One of the users should be at least the one setted at ansible.cfg
+###
+docker_users: [test-user]
diff --git a/playbook-example-01.yml b/playbook_example_01_test.yml
similarity index 100%
rename from playbook-example-01.yml
rename to playbook_example_01_test.yml
diff --git a/playbook_example_02_dependencies.yml b/playbook_example_02_dependencies.yml
new file mode 100644
index 0000000..3e456c1
--- /dev/null
+++ b/playbook_example_02_dependencies.yml
@@ -0,0 +1,7 @@
+---
+# Runs example for
+
+- hosts:
+  - example_servers_group
+  roles:
+    - dependencies
diff --git a/roles/dependencies/README.md b/roles/dependencies/README.md
new file mode 100644
index 0000000..9c2ad0d
--- /dev/null
+++ b/roles/dependencies/README.md
@@ -0,0 +1,111 @@
+# dependencies (role)
+
+
+This ansible-role for dealing with installing the dependencies for deploying the system used from **c3infodesk**.
+
+## Mentions
+This role uses great part of it from [geerlingguy](https://github.com/geerlingguy) for installing **docker** at the target host.
+
+The original code used can be found at: [https://github.com/geerlingguy/ansible-role-docker](https://github.com/geerlingguy/ansible-role-docker)
+
+## Requirements
+To have [ansible](https://docs.ansible.com/ansible/latest/installation_guide/installation_distros.html) installed at your system.
+
+## Role Variables
+Here are the variables setted:
+
+### From: inventories/host_vars/<TARGET_NAME>
+Here are the variables that you should be changing for your own deployment
+- **docker_users**: DEFAULT="test-user"
+  - The users to be added to the docker group.
+  - These users should should contain at least the same user setted on **ansible.cfg** at the **remote_user**
+- **ansible_become_pass**: DEFAULT="Please change this"
+  - The password used from the user setted on **ansible.cfg** at the **remote_user**
+
+
+### From: inventories/group_vars/<TARGET_GROUP>
+This role needs no variable setted on **group_vars**
+
+### From: roles/clone-repositories/defaults/main.yml
+Here are the variables used for this role. Please don't change then here but instead in **inventories/host_vars/<TARGET_NAME>**
+
+- **docker_users**
+- **ansible_become_pass**
+- **os_dependencies_packages**
+- **docker_edition**
+- **docker_packages**
+- **docker_packages_state**
+- **docker_obsolete_packages**
+- **docker_obsolete_packages**
+- **docker_service_manage**
+- **docker_service_state**
+- **docker_service_enabled**
+- **docker_restart_handler_state**
+- **docker_install_compose_plugin**
+- **docker_compose_package**
+- **docker_compose_package_state**
+- **docker_install_compose**
+- **docker_compose_version**
+- **docker_compose_arch**
+- **docker_compose_url**
+- **docker_compose_path**
+- **docker_add_repo**
+- **docker_apt_release_channel**
+- **docker_apt_ansible_distribution**
+- **docker_apt_arch**
+- **docker_apt_repository**
+- **docker_apt_ignore_key_error**
+- **docker_apt_gpg_key**
+- **docker_apt_gpg_key_checksum**
+- **docker_apt_filename**
+- **docker_yum_repo_url**
+- **docker_yum_repo_enable_nightly**
+- **docker_yum_repo_enable_test**
+- **docker_yum_gpg_key**
+- **docker_daemon_options**
+
+### From: roles/dependencies/vars/main.yml
+- **docker_packages**
+- **docker_compose_package**
+
+## Dependencies
+This role have no dependency from any another role.
+
+# Example Playbook
+
+### Using the provided example
+For using the playbook **playbook_example_02_dependencies.yml** file you only nned to:
+- Change the user at the **ansible.cfg** file at the field **remote_user** for acessing your target.
+- Update the file **inventories/host_vars/example_server.yml** and change the value for **ansible_become_pass** from the **remote_user**
+- Update the **inventories/hosts** file and change the **example_server** with the IP address from your target.
+
+And run the command:
+```bash
+ansible-playbook -i inventories/hosts playbook_example_02_dependencies.yml
+```
+
+### Setting your own example
+After setting your variables at **inventories/host_vars/<HOST_NAME>**, you can add this role to your playbook as a regular role.
+
+Here is an example using the **<HOST_NAME>** as **test_servers**
+
+```yaml
+- hosts:
+    - test_servers
+  roles:
+    - dependencies
+```
+
+And call the playbook as:
+
+```bash
+ansible-playbook -i <INVENTORY> <PLAYBOOK_NAME>.yml
+```
+
+## License
+
+MIT / BSD
+
+## Author Information
+
+![fejao logo](../../files/from_authors/fejao_logo_circle.png "fejao") [https://chaos.social/@fejao](https://chaos.social/@fejao)
diff --git a/roles/dependencies/defaults/main.yml b/roles/dependencies/defaults/main.yml
new file mode 100644
index 0000000..5616e16
--- /dev/null
+++ b/roles/dependencies/defaults/main.yml
@@ -0,0 +1,88 @@
+---
+# defaults file for dependencies
+
+
+###
+### DEPLOYMENT USER
+###
+# This should be the password from the deployment user setted on ansible.cfg
+ansible_become_pass: "UPDATE THIS FOR THE HOSTS"
+
+###
+### install_packages.yml
+###
+os_dependencies_packages:
+  - bash-completion
+  - git
+  - htop
+  - vim
+  - tree
+
+###
+### install_docker.yml
+###
+# Edition can be one of: 'ce' (Community Edition) or 'ee' (Enterprise Edition).
+docker_edition: 'ce'
+docker_packages:
+  - "docker-{{ docker_edition }}"
+  - "docker-{{ docker_edition }}-cli"
+  - "docker-{{ docker_edition }}-rootless-extras"
+  - "containerd.io"
+  - docker-buildx-plugin
+docker_packages_state: present
+docker_obsolete_packages:
+  - docker
+  - docker.io
+  - docker-engine
+  - docker-doc
+  - podman-docker
+  - containerd
+  - runc
+
+# Service options.
+docker_service_manage: true
+docker_service_state: started
+docker_service_enabled: true
+docker_restart_handler_state: restarted
+
+# Docker Compose Plugin options.
+docker_install_compose_plugin: true
+docker_compose_package: docker-compose-plugin
+docker_compose_package_state: present
+
+# Docker Compose options.
+docker_install_compose: false
+docker_compose_version: "v2.32.1"
+docker_compose_arch: "{{ ansible_architecture }}"
+docker_compose_url: "https://github.com/docker/compose/releases/download/{{ docker_compose_version }}/docker-compose-linux-{{ docker_compose_arch }}"
+docker_compose_path: /usr/local/bin/docker-compose
+
+# Enable repo setup
+docker_add_repo: true
+
+# Docker repo URL.
+docker_repo_url: https://download.docker.com/linux
+
+# Used only for Debian/Ubuntu/Pop!_OS/Linux Mint. Switch 'stable' to 'nightly' if needed.
+docker_apt_release_channel: stable
+# docker_apt_ansible_distribution is a workaround for Ubuntu variants which can't be identified as such by Ansible,
+# and is only necessary until Docker officially supports them.
+docker_apt_ansible_distribution: "{{ 'ubuntu' if ansible_distribution in ['Pop!_OS', 'Linux Mint'] else ansible_distribution }}"
+docker_apt_arch: "{{ 'arm64' if ansible_architecture == 'aarch64' else 'armhf' if ansible_architecture == 'armv7l' else 'amd64' }}"
+docker_apt_repository: "deb [arch={{ docker_apt_arch }} signed-by=/etc/apt/keyrings/docker.asc] {{ docker_repo_url }}/{{ docker_apt_ansible_distribution | lower }} {{ ansible_distribution_release }} {{ docker_apt_release_channel }}"
+docker_apt_ignore_key_error: true
+docker_apt_gpg_key: "{{ docker_repo_url }}/{{ docker_apt_ansible_distribution | lower }}/gpg"
+docker_apt_gpg_key_checksum: "sha256:1500c1f56fa9e26b9b8f42452a553675796ade0807cdce11975eb98170b3a570"
+docker_apt_filename: "docker"
+
+# Used only for RedHat/CentOS/Fedora.
+docker_yum_repo_url: "{{ docker_repo_url }}/{{ (ansible_distribution == 'Fedora') | ternary('fedora','centos') }}/docker-{{ docker_edition }}.repo"
+docker_yum_repo_enable_nightly: '0'
+docker_yum_repo_enable_test: '0'
+docker_yum_gpg_key: "{{ docker_repo_url }}/centos/gpg"
+
+# A list of users who will be added to the docker group.
+docker_users: []
+
+# Docker daemon options as a dict
+docker_daemon_options: {}
diff --git a/roles/dependencies/handlers/main.yml b/roles/dependencies/handlers/main.yml
new file mode 100644
index 0000000..7eee98a
--- /dev/null
+++ b/roles/dependencies/handlers/main.yml
@@ -0,0 +1,14 @@
+---
+# handlers file for dependencies
+
+- name: handler_restart_docker
+  ansible.builtin.systemd_service:
+    name: docker
+    state: restarted
+    # daemon_reload: true
+  ###
+  ### THIS IS GETTING TIMEOUT
+  ###
+  # ignore_errors: "{{ ansible_check_mode }}"
+  ignore_errors: true
+  when: docker_service_manage | bool
diff --git a/roles/dependencies/meta/main.yml b/roles/dependencies/meta/main.yml
new file mode 100644
index 0000000..1860186
--- /dev/null
+++ b/roles/dependencies/meta/main.yml
@@ -0,0 +1,10 @@
+galaxy_info:
+  role_name: dependencies
+  description: Role to install the dependencies from the c3InfoDesk sytems
+  author: fejao
+  company: cccv.de
+  license: license (GPL-2.0-or-later, MIT, etc)
+  min_ansible_version: 2.1
+  galaxy_tags: []
+
+dependencies: []
diff --git a/roles/dependencies/tasks/docker/install_compose.yml b/roles/dependencies/tasks/docker/install_compose.yml
new file mode 100644
index 0000000..38705d0
--- /dev/null
+++ b/roles/dependencies/tasks/docker/install_compose.yml
@@ -0,0 +1,31 @@
+---
+- name: DOCKER | COMPOSE | Check current docker-compose version.
+  command: "{{ docker_compose_path }} --version"
+  register: docker_compose_vsn
+  check_mode: false
+  changed_when: false
+  failed_when: false
+
+- set_fact:
+    docker_compose_current_version: "{{ docker_compose_vsn.stdout | regex_search('(\\d+(\\.\\d+)+)') }}"
+  when: >
+    docker_compose_vsn.stdout is defined
+    and (docker_compose_vsn.stdout | length > 0)
+
+- name: DOCKER | COMPOSE | Delete existing docker-compose version if it's different.
+  file:
+    path: "{{ docker_compose_path }}"
+    state: absent
+  when: >
+    docker_compose_current_version is defined
+    and (docker_compose_version | regex_replace('v', '')) not in docker_compose_current_version
+
+- name: DOCKER | COMPOSE | Install Docker Compose (if configured).
+  get_url:
+    url: "{{ docker_compose_url }}"
+    dest: "{{ docker_compose_path }}"
+    mode: 0755
+  when: >
+    (docker_compose_current_version is not defined)
+    or (docker_compose_current_version | length == 0)
+    or (docker_compose_current_version is version((docker_compose_version | regex_replace('v', '')), '<'))
diff --git a/roles/dependencies/tasks/docker/install_docker_users.yml b/roles/dependencies/tasks/docker/install_docker_users.yml
new file mode 100644
index 0000000..6304a0a
--- /dev/null
+++ b/roles/dependencies/tasks/docker/install_docker_users.yml
@@ -0,0 +1,11 @@
+---
+- name: DOCKER | USERS | Ensure docker users are added to the docker group.
+  user:
+    name: "{{ item }}"
+    groups: docker
+    append: true
+  with_items: "{{ docker_users }}"
+  become: true
+
+- name: DOCKER | USERS | Reset ssh connection to apply user changes.
+  meta: reset_connection
diff --git a/roles/dependencies/tasks/docker/setup-Debian.yml b/roles/dependencies/tasks/docker/setup-Debian.yml
new file mode 100644
index 0000000..afdc406
--- /dev/null
+++ b/roles/dependencies/tasks/docker/setup-Debian.yml
@@ -0,0 +1,69 @@
+---
+- name: DOCKER | DEBIAN | Ensure apt key is not present in trusted.gpg.d
+  ansible.builtin.file:
+    path: /etc/apt/trusted.gpg.d/docker.asc
+    state: absent
+
+- name: DOCKER | DEBIAN | Ensure old apt source list is not present in /etc/apt/sources.list.d
+  ansible.builtin.file:
+    path: /etc/apt/sources.list.d/download_docker_com_linux_ubuntu.list
+    state: absent
+
+- name: DOCKER | DEBIAN | Ensure the repo referencing the previous trusted.gpg.d key is not present
+  apt_repository:
+    repo: "deb [arch={{ docker_apt_arch }} signed-by=/etc/apt/trusted.gpg.d/docker.asc] {{ docker_repo_url }}/{{ docker_apt_ansible_distribution | lower }} {{ ansible_distribution_release }} {{ docker_apt_release_channel }}"
+    state: absent
+    filename: "{{ docker_apt_filename }}"
+    update_cache: true
+  when: docker_add_repo | bool
+
+# See https://docs.docker.com/engine/install/debian/#uninstall-old-versions
+- name: DOCKER | DEBIAN | Ensure old versions of Docker are not installed.
+  package:
+    name: "{{ docker_obsolete_packages }}"
+    state: absent
+
+- name: DOCKER | DEBIAN | Ensure dependencies are installed.
+  become: true
+  apt:
+    name:
+      - apt-transport-https
+      - ca-certificates
+    state: present
+  when: docker_add_repo | bool
+
+- name: DOCKER | DEBIAN | Ensure directory exists for /etc/apt/keyrings
+  file:
+    path: /etc/apt/keyrings
+    state: directory
+    mode: "0755"
+
+- name: DOCKER | DEBIAN | Add Docker apt key.
+  ansible.builtin.get_url:
+    url: "{{ docker_apt_gpg_key }}"
+    dest: /etc/apt/keyrings/docker.asc
+    mode: "0644"
+    force: false
+    checksum: "{{ docker_apt_gpg_key_checksum | default(omit) }}"
+  register: add_repository_key
+  ignore_errors: "{{ docker_apt_ignore_key_error }}"
+  when: docker_add_repo | bool
+  become: true
+
+- name: DOCKER | DEBIAN | Ensure curl is present (on older systems without SNI).
+  package: name=curl state=present
+  when: add_repository_key is failed and docker_add_repo | bool
+
+- name: DOCKER | DEBIAN | Add Docker apt key (alternative for older systems without SNI).
+  shell: >
+    curl -sSL {{ docker_apt_gpg_key }} | apt-key add -
+  when: add_repository_key is failed and docker_add_repo | bool
+
+- name: DOCKER | DEBIAN | Add Docker repository.
+  apt_repository:
+    repo: "{{ docker_apt_repository }}"
+    state: present
+    filename: "{{ docker_apt_filename }}"
+    update_cache: true
+  when: docker_add_repo | bool
+  become: true
diff --git a/roles/dependencies/tasks/docker/setup-RedHat.yml b/roles/dependencies/tasks/docker/setup-RedHat.yml
new file mode 100644
index 0000000..6a74fed
--- /dev/null
+++ b/roles/dependencies/tasks/docker/setup-RedHat.yml
@@ -0,0 +1,61 @@
+---
+- name: DOCKER | RED-HAT | Ensure old versions of Docker are not installed.
+  package:
+    name:
+      - docker
+      - docker-common
+      - docker-engine
+    state: absent
+
+# - name: DOCKER | RED-HAT | Add Docker GPG key.
+#   rpm_key:
+#     key: "{{ docker_yum_gpg_key }}"
+#     state: present
+#   when: docker_add_repo | bool
+
+# - name: DOCKER | RED-HAT | Add Docker repository.
+#   get_url:
+#     url: "{{ docker_yum_repo_url }}"
+#     dest: '/etc/yum.repos.d/docker-{{ docker_edition }}.repo'
+#     owner: root
+#     group: root
+#     mode: 0644
+#   when: docker_add_repo | bool
+
+# - name: DOCKER | RED-HAT | Configure Docker Nightly repo.
+#   ini_file:
+#     dest: '/etc/yum.repos.d/docker-{{ docker_edition }}.repo'
+#     section: 'docker-{{ docker_edition }}-nightly'
+#     option: enabled
+#     value: '{{ docker_yum_repo_enable_nightly }}'
+#     mode: 0644
+#     no_extra_spaces: true
+#   when: docker_add_repo | bool
+
+# - name: DOCKER | RED-HAT | Configure Docker Test repo.
+#   ini_file:
+#     dest: '/etc/yum.repos.d/docker-{{ docker_edition }}.repo'
+#     section: 'docker-{{ docker_edition }}-test'
+#     option: enabled
+#     value: '{{ docker_yum_repo_enable_test }}'
+#     mode: 0644
+#     no_extra_spaces: true
+#   when: docker_add_repo | bool
+
+# - name: DOCKER | RED-HAT | Configure containerd on RHEL 8.
+#   block:
+#     - name: Ensure runc is not installed.
+#       package:
+#         name: runc
+#         state: absent
+
+#     - name: Ensure container-selinux is installed.
+#       package:
+#         name: container-selinux
+#         state: present
+
+#     - name: Ensure containerd.io is installed.
+#       package:
+#         name: containerd.io
+#         state: present
+#   when: ansible_distribution_major_version | int == 8
diff --git a/roles/dependencies/tasks/install_docker.yml b/roles/dependencies/tasks/install_docker.yml
new file mode 100644
index 0000000..12526a5
--- /dev/null
+++ b/roles/dependencies/tasks/install_docker.yml
@@ -0,0 +1,103 @@
+---
+- name: DOCKER | Load OS-specific vars.
+  include_vars: "{{ lookup('first_found', params) }}"
+  vars:
+    params:
+      files:
+        - '{{ansible_distribution}}.yml'
+        - '{{ansible_os_family}}.yml'
+        - main.yml
+      paths:
+        - 'vars'
+
+- include_tasks: docker/setup-RedHat.yml
+  when: ansible_os_family == 'RedHat'
+
+- include_tasks: docker/setup-Debian.yml
+  when: ansible_os_family == 'Debian'
+
+- name: DOCKER | Install Docker packages.
+  package:
+    name: "{{ docker_packages }}"
+    state: "{{ docker_packages_state }}"
+  notify: handler_restart_docker
+  ignore_errors: "{{ ansible_check_mode }}"
+  when: "ansible_version.full is version_compare('2.12', '<') or ansible_os_family not in ['RedHat', 'Debian']"
+  become: true
+
+- name: DOCKER | Install Docker packages (with downgrade option).
+  package:
+    name: "{{ docker_packages }}"
+    state: "{{ docker_packages_state }}"
+    allow_downgrade: true
+  notify: handler_restart_docker
+  ignore_errors: "{{ ansible_check_mode }}"
+  when: "ansible_version.full is version_compare('2.12', '>=') and ansible_os_family in ['RedHat', 'Debian']"
+  become: true
+
+- name: DOCKER | Install docker-compose plugin.
+  package:
+    name: "{{ docker_compose_package }}"
+    state: "{{ docker_compose_package_state }}"
+  notify: handler_restart_docker
+  ignore_errors: "{{ ansible_check_mode }}"
+  when: "docker_install_compose_plugin | bool == true and (ansible_version.full is version_compare('2.12', '<') or ansible_os_family not in ['RedHat', 'Debian'])"
+  become: true
+
+- name: DOCKER | Install docker-compose-plugin (with downgrade option).
+  package:
+    name: "{{ docker_compose_package }}"
+    state: "{{ docker_compose_package_state }}"
+    allow_downgrade: true
+  notify: handler_restart_docker
+  ignore_errors: "{{ ansible_check_mode }}"
+  when: "docker_install_compose_plugin | bool == true and ansible_version.full is version_compare('2.12', '>=') and ansible_os_family in ['RedHat', 'Debian']"
+  become: true
+
+- name: DOCKER | Ensure /etc/docker/ directory exists.
+  file:
+    path: /etc/docker
+    state: directory
+    mode: 0755
+  when: docker_daemon_options.keys() | length > 0
+
+- name: DOCKER | Configure Docker daemon options.
+  copy:
+    content: "{{ docker_daemon_options | to_nice_json }}"
+    dest: /etc/docker/daemon.json
+    mode: 0644
+  when: docker_daemon_options.keys() | length > 0
+  notify: handler_restart_docker
+
+- name: DOCKER | Ensure Docker is started and enabled at boot.
+  service:
+    name: docker
+    state: "{{ docker_service_state }}"
+    enabled: "{{ docker_service_enabled }}"
+  ignore_errors: "{{ ansible_check_mode }}"
+  when: docker_service_manage | bool
+
+- name: DOCKER | Ensure handlers are notified now to avoid firewall conflicts.
+  meta: flush_handlers
+
+- include_tasks: docker/install_compose.yml
+  when: docker_install_compose | bool
+
+- name: DOCKER | Get docker group info using getent.
+  getent:
+    database: group
+    key: docker
+    split: ':'
+  when: docker_users | length > 0
+
+- name: DOCKER | Check if there are any users to add to the docker group.
+  set_fact:
+    at_least_one_user_to_modify: true
+  when:
+    - docker_users | length > 0
+    - item not in ansible_facts.getent_group["docker"][2]
+  with_items: "{{ docker_users }}"
+
+# - include_tasks: docker-users.yml
+- include_tasks: docker/install_docker_users.yml
+  when: at_least_one_user_to_modify is defined
diff --git a/roles/dependencies/tasks/install_packages.yml b/roles/dependencies/tasks/install_packages.yml
new file mode 100644
index 0000000..edb782f
--- /dev/null
+++ b/roles/dependencies/tasks/install_packages.yml
@@ -0,0 +1,8 @@
+---
+
+- name: INSTALL_PACAKAGES | Installing the packages from list
+  ansible.builtin.package:
+    name: "{{item}}"
+    state: present
+  with_items: "{{os_dependencies_packages}}"
+  become: true
\ No newline at end of file
diff --git a/roles/dependencies/tasks/main.yml b/roles/dependencies/tasks/main.yml
new file mode 100644
index 0000000..2bf1447
--- /dev/null
+++ b/roles/dependencies/tasks/main.yml
@@ -0,0 +1,5 @@
+---
+# tasks file for dependencies
+
+- import_tasks: install_packages.yml
+- import_tasks: install_docker.yml
diff --git a/roles/dependencies/vars/Alpine.yml b/roles/dependencies/vars/Alpine.yml
new file mode 100755
index 0000000..b81917a
--- /dev/null
+++ b/roles/dependencies/vars/Alpine.yml
@@ -0,0 +1,2 @@
+---
+docker_packages: "docker"
diff --git a/roles/dependencies/vars/Archlinux.yml b/roles/dependencies/vars/Archlinux.yml
new file mode 100644
index 0000000..f68d962
--- /dev/null
+++ b/roles/dependencies/vars/Archlinux.yml
@@ -0,0 +1,3 @@
+---
+docker_packages: "docker"
+docker_compose_package: docker-compose
diff --git a/roles/dependencies/vars/main.yml b/roles/dependencies/vars/main.yml
new file mode 100755
index 0000000..805232b
--- /dev/null
+++ b/roles/dependencies/vars/main.yml
@@ -0,0 +1,2 @@
+---
+# Empty file
-- 
GitLab