Skip to content
Snippets Groups Projects
Commit 6dc714a4 authored by fejao's avatar fejao
Browse files

Merge branch 'Adding_role_dependencies_submodule' into 'main'

Adding role dependencies submodule

See merge request !19
parents 762ba4c5 e85501ad
No related branches found
No related tags found
1 merge request!19Adding role dependencies submodule
Pipeline #37761 passed
Showing
with 53 additions and 866 deletions
...@@ -60,6 +60,10 @@ include: ...@@ -60,6 +60,10 @@ include:
- local: ci-cd/templates/role-oh-my-bash.yml - local: ci-cd/templates/role-oh-my-bash.yml
rules: rules:
- if: '$RUN_UPSTREAM_FOR_ROLE_OH_MY_BASH == "true"' - if: '$RUN_UPSTREAM_FOR_ROLE_OH_MY_BASH == "true"'
### BEFORE MREGE REQUEST
- local: ci-cd/templates/all-roles-b4-merge.yml
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
### ###
### TEST PARSED VARS FROM UPSTREAM ### TEST PARSED VARS FROM UPSTREAM
......
[submodule "roles/c3infodesk-deployment-role-test"] [submodule "roles/c3infodesk-deployment-role-test"]
path = roles/c3infodesk-deployment-role-test path = roles/c3infodesk-deployment-role-test
url = git@git.cccv.de:fejao/c3infodesk-deployment-role-test.git url = git@git.cccv.de:fejao/c3infodesk-deployment-role-test.git
[submodule "roles/c3infodesk-deployment-role-dependencies"]
path = roles/c3infodesk-deployment-role-dependencies
url = git@git.cccv.de:fejao/c3infodesk-deployment-role-dependencies.git
---
###
### VARIABLES
###
variables:
AUTHOR: fejao
# RUN_UPSTREAM_FOR_ROLE_TEST: true
# RUN_UPSTREAM_FOR_ROLE_DEPENDENCIES: true
# RUN_UPSTREAM_FOR_ROLE_CLONE_REPOSITORIES: true
# RUN_UPSTREAM_FOR_ROLE_DOCKER_IMAGES: true
# RUN_UPSTREAM_FOR_ROLE_DOCKER_CONTAINERS: true
# RUN_UPSTREAM_FOR_ROLE_OH_MY_BASH: true
###
### INCLUDE
###
include:
### ROLE TEST
- local: ci-cd/templates/role-test.yml
# rules:
# - if: '$RUN_UPSTREAM_FOR_ROLE_TEST == "true"'
### ROLE DEPENDENCIES
- local: ci-cd/templates/role-dependencies.yml
# rules:
# - if: '$RUN_UPSTREAM_FOR_ROLE_DEPENDENCIES == "true"'
### ROLE CLONE-REPOSITORIES
- local: ci-cd/templates/role-clone-repositories.yml
# rules:
# - if: '$RUN_UPSTREAM_FOR_ROLE_CLONE_REPOSITORIES == "true"'
### ROLE DOCKER-IMAGES
- local: ci-cd/templates/role-docker-images.yml
# rules:
# - if: '$RUN_UPSTREAM_FOR_ROLE_DOCKER_IMAGES == "true"'
### ROLE DOCKER-CONTAINERS
- local: ci-cd/templates/role-docker-containers.yml
# rules:
# - if: '$RUN_UPSTREAM_FOR_ROLE_DOCKER_CONTAINERS == "true"'
### ROLE OH-MY-BASH
- local: ci-cd/templates/role-oh-my-bash.yml
# rules:
# - if: '$RUN_UPSTREAM_FOR_ROLE_OH_MY_BASH == "true"'
Subproject commit 0c1e74bbb71bce7827c0a4b9dd713fc24c12d61e
Subproject commit ddc45d25c366878dd3f92136c54d4852562342c6 Subproject commit 796e6c8f9f2088ab2c4ff69d3280bf053e64b6c9
# 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.
## Configuration
You need to set some configuration for this to work
- ### ansible.cfg
You have to edit the **ansible.cfg** file to your needs for accessing your target.
- #### remote_user
You need to set the **remote_user** configuration for accessing the target host.
Example: [remote_user](https://git.cccv.de/fejao/c3infodesk-deployment/-/blob/main/ansible.cfg#L227)
- ### HOST_VARS
In order to access your target host, you need to create/edit your **inventories/host_vars/<YOUR_HOST_NAME>.yml**
- #### ansible_become_pass
You need to set the **sudo** password from the user setted on **remote_user** for installing packages and etc. at the target.
Example: [ansible_become_pass](https://git.cccv.de/fejao/c3infodesk-deployment/-/blob/main/inventories/host_vars/example_server.yml#L5)
- ### HOSTS
You need to provide a **group** in which your target belongs to with the same name setted for **inventories/host_vars/<YOUR_HOST_NAME>.yml**.
There you can add/edit the target address/IP.
Example: [hosts](https://git.cccv.de/fejao/c3infodesk-deployment/-/blob/main/inventories/hosts)
## 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 example playbook **[playbooks/examples/example_02_dependencies.yml](https://git.cccv.de/fejao/c3infodesk-deployment/-/blob/main/playbooks/examples/example_02_dependencies.yml)** file you only need to:
- Change the user at the **[ansible.cfg](https://git.cccv.de/fejao/c3infodesk-deployment/-/blob/main/ansible.cfg)** file at the field **[remote_user](https://git.cccv.de/fejao/c3infodesk-deployment/-/blob/main/ansible.cfg#L227)** for acessing your target.
- Update the file **[inventories/host_vars/example_server.yml](https://git.cccv.de/fejao/c3infodesk-deployment/-/blob/main/inventories/host_vars/example_server.yml)** and change the value for **[ansible_become_pass](https://git.cccv.de/fejao/c3infodesk-deployment/-/blob/main/inventories/host_vars/example_server.yml#L5)** from the **[remote_user](https://git.cccv.de/fejao/c3infodesk-deployment/-/blob/main/ansible.cfg#L227)**
- Update the **[inventories/hosts](https://git.cccv.de/fejao/c3infodesk-deployment/-/blob/main/inventories/hosts)** file and change the **[example_server](https://git.cccv.de/fejao/c3infodesk-deployment/-/blob/main/inventories/hosts#L2)** with the IP address from your target.
And run the command:
```bash
ansible-playbook -i inventories/hosts playbooks/examples/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:
- roles/dependencies
```
And call the playbook as:
```bash
ansible-playbook -i <INVENTORY> <PLAYBOOK_NAME>.yml
```
## Testing
You can test this locally using **DIND (docker in docker)** at your own computer using [ansible molecule](https://ansible.readthedocs.io/projects/molecule/installation/)
- ### Testing requirements
You need docker installed at your system and the [ansible molecule](https://ansible.readthedocs.io/projects/molecule/installation/).
You might have to set DIND at your system, for linux, you can create the file **/etc/docker/daemon.json**
And add the content and restart docker.
```json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"features": {
"buildkit": true
},
"experimental": true,
"cgroup-parent": "docker.slice"
}
```
- ### Using molecule
Just go to the root of the role **roles/dependencies** and run the command:
```bash
molecule test
```
## License
MIT / BSD
## Author Information
![fejao logo](../../files/from_authors/fejao_logo_circle.png "fejao") [https://chaos.social/@fejao](https://chaos.social/@fejao)
---
# 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"
# A list of users who will be added to the docker group.
docker_users: []
###
### install_packages.yml
###
os_dependencies_packages:
- bash-completion
- git
- htop
- vim
- tree
###
### install_docker.yml
###
docker_installed: false
# 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"
# Docker daemon options as a dict
docker_daemon_options: {}
---
# handlers file for dependencies
- name: HANDLER_RESTART_DOCKER
ansible.builtin.systemd_service:
name: docker
state: restarted
daemon_reload: true
when: docker_service_manage | bool
become: true
---
galaxy_info:
role_name: dependencies
description: Role to install the dependencies from the c3InfoDesk sytems
author: fejao
company: cccv.de
license: "MIT / BSD"
min_ansible_version: '2.10'
galaxy_tags: []
dependencies: []
## ansible molecule tests for role: dependencies
## Why to use it
It's allways a good idea to test your things.
With **ansible molecule** you can test your role locally without the need of using a **real server** but a local **docker container**.
## Dependencies
- ### molecule
You need to have [ansible molecule](https://ansible.readthedocs.io/projects/molecule/installation/) installed.
- ### DIND (docker in docker)
For using the tests, you will to have **docker** installed locally and and set it for using **DIND (docker in docker)**
- ### DIND linux
You have to create/edit the file **/etc/docker/daemon.json** with the content:
```json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"features": {
"buildkit": true
},
"experimental": true,
"cgroup-parent": "docker.slice"
}
```
## Configuration
There's not much for configuring for using the tests
## Running the tests
For running the **molecule tests** you just need to run the command:
```bash
molecule test
```
---
- name: MOLECULE | Converge
hosts: all
pre_tasks:
- name: MOLECULE | COVERGE | PRE-TASKS | VARIABLES | From -> ../../defaults
ansible.builtin.include_vars:
dir: ../../defaults
depth: 1
extensions:
- 'yml'
- name: MOLECULE | COVERGE | PRE-TASKS | VARIABLES | From -> ../../vars
ansible.builtin.include_vars:
dir: ../../vars
depth: 1
extensions:
- 'yml'
- name: MOLECULE | COVERGE | PRE-TASKS | VARIABLES | From -> ../../../../inventories/group_vars
ansible.builtin.include_vars:
dir: ../../../../inventories/group_vars
extensions:
- 'yml'
- name: MOLECULE | COVERGE | PRE-TASKS | VARIABLES | From -> ../../../../inventories/host_vars
ansible.builtin.include_vars:
dir: ../../../../inventories/host_vars
extensions:
- 'yml'
tasks:
- name: MOLECULE | CONVERGE | Call the 'dependencies' role.
ansible.builtin.include_role:
name: dependencies
---
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: molecule_dependencies
### At the moment I'm not running at the latest kernel, please use always with a older kernel than the host
# image: docker.io/geerlingguy/docker-ubuntu2204-ansible
image: geerlingguy/docker-ubuntu2204-ansible:latest
command: /usr/sbin/init
pre_build_image: true
cgroupns_mode: host
privileged: true
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:rw
- /var/lib/containerd
provisioner:
name: ansible
lint: |
ansible-lint --exclude molecule/default/
scenario:
name: default
create_sequence:
- dependency
- create
- prepare
check_sequence:
- dependency
- cleanup
- destroy
- create
- prepare
- converge
- check
- destroy
converge_sequence:
- dependency
- create
- prepare
- converge
destroy_sequence:
- dependency
- cleanup
- destroy
test_sequence:
# - lint
# - dependency
# - cleanup
- destroy
- syntax
- create
# - prepare
- converge
- verify
- idempotence
# - side_effect
# - cleanup
- destroy
verifier:
name: ansible
---
- name: VERIFY | Test role for debugging variables
hosts: all
vars:
package_name_docker: 'docker'
package_name_docker_ce: 'docker-ce'
package_name_docker_compose: 'docker-compose'
package_name_docker_compose_plugin: 'docker-compose-plugin'
pre_tasks:
- name: MOLECULE | VERIFY | PRE-TASKS | VARIABLES | From -> ../../defaults
ansible.builtin.include_vars:
dir: ../../defaults
depth: 1
extensions:
- 'yml'
- name: MOLECULE | VERIFY | PRE-TASKS | VARIABLES | From -> ../../vars
ansible.builtin.include_vars:
dir: ../../vars
depth: 1
extensions:
- 'yml'
- name: MOLECULE | VERIFY | PRE-TASKS | VARIABLES | From -> ../../../../inventories/group_vars
ansible.builtin.include_vars:
dir: ../../../../inventories/group_vars
extensions:
- 'yml'
- name: MOLECULE | VERIFY | PRE-TASKS | VARIABLES | From -> ../../../../inventories/host_vars
ansible.builtin.include_vars:
dir: ../../../../inventories/host_vars
extensions:
- 'yml'
tasks:
###
### POPULATE
###
- name: MOLECULE | VERIFY | POPULATE | Gather the package facts
ansible.builtin.package_facts:
manager: auto
# - name: MOLECULE | VERIFY | POPULATE | Gather service facts
# ansible.builtin.service_facts:
###
### TESTS - PACKAGES
###
- name: MOLECULE | VERIFY | TEST | Check that the packages from 'os_dependencies_packages' are installed.
ansible.builtin.debug:
msg: "Package: '{{ package_name }}' is installed"
loop: "{{ os_dependencies_packages }}"
loop_control:
loop_var: package_name
failed_when: package_name not in ansible_facts.packages
- name: MOLECULE | VERIFY | TEST | Check that docker is installed.
ansible.builtin.debug:
msg: "Package: 'docker' is installed"
failed_when:
- package_name_docker not in ansible_facts.packages
- package_name_docker_ce not in ansible_facts.packages
- name: MOLECULE | VERIFY | TEST | Check that docker-compose is installed.
ansible.builtin.debug:
msg: "Package: 'docker-cokmpose' is installed"
failed_when:
- package_name_docker_compose not in ansible_facts.packages
- package_name_docker_compose_plugin not in ansible_facts.packages
###
### TESTS - DOCKER
###
- name: MOLECULE | VERIFY | TEST | Get docker service state.
ansible.builtin.systemd:
name: "docker"
register: docker_service
- name: MOLECULE | VERIFY | TEST | Check that docker is running.
ansible.builtin.debug:
msg: "Docker IS running..."
failed_when: "'active' != docker_service.status.ActiveState"
###
### TESTS - ADDED USERS
###
- name: MOLECULE | VERIFY | TEST | Get added users infos.
ansible.builtin.user:
name: "{{ item }}"
loop: "{{ docker_users }}"
check_mode: true
register: test_users
- name: MOLECULE | VERIFY | TEST | Check if users exists
ansible.builtin.debug:
msg: "User {{ item.item }} {{ 'exists' if item.state | d('') == 'present' else 'does not exist' }}"
loop: "{{ test_users.results }}"
loop_control:
label: "{{ item.item }}"
- name: MOLECULE | VERIFY | TEST | Get the groups that the users belongs to.
ansible.builtin.command:
cmd: "id -Gn {{ item.item }}"
loop: "{{ test_users.results }}"
loop_control:
label: "{{ item.item }}"
register: user_groups
changed_when: false
- name: MOLECULE | VERIFY | TEST | Check that the users are at the 'docker' group.
ansible.builtin.debug:
msg: "User '{{ item.item.item }}' belongs to the docker group"
with_items: "{{ user_groups.results }}"
failed_when: "'docker' not in item.stdout"
---
- name: DOCKER | COMPOSE | Check current docker-compose version.
ansible.builtin.command: "{{ docker_compose_path }} --version"
register: docker_compose_vsn
check_mode: false
changed_when: false
failed_when: false
- name: Setting the docker compose version
ansible.builtin.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.
ansible.builtin.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).
ansible.builtin.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', '')), '<'))
---
- name: DOCKER | USERS | Ensure docker users are added to the docker group.
ansible.builtin.user:
name: "{{ item }}"
groups: docker
append: true
with_items: "{{ docker_users }}"
become: true
- name: DOCKER | USERS | Reset ssh connection to apply user changes.
ansible.builtin.meta: reset_connection
---
- 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
ansible.builtin.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.
ansible.builtin.package:
name: "{{ docker_obsolete_packages }}"
state: absent
- name: DOCKER | DEBIAN | Ensure dependencies are installed.
become: true
ansible.builtin.apt:
name:
- apt-transport-https
- ca-certificates
state: present
when: docker_add_repo | bool
- name: DOCKER | DEBIAN | Ensure directory exists for /etc/apt/keyrings
ansible.builtin.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).
ansible.builtin.apt:
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).
ansible.builtin.shell: >
set -o pipefail &&
curl -sSL {{ docker_apt_gpg_key }} | apt-key add -
when: add_repository_key is failed and docker_add_repo | bool
register: ret_add_docker_key
changed_when: ret_add_docker_key.rc != 0
- name: DOCKER | DEBIAN | Add Docker repository.
ansible.builtin.apt_repository:
repo: "{{ docker_apt_repository }}"
state: present
filename: "{{ docker_apt_filename }}"
update_cache: true
when: docker_add_repo | bool
become: true
---
- name: DOCKER | RED-HAT | Ensure old versions of Docker are not installed.
ansible.builtin.package:
name:
- docker
- docker-common
- docker-engine
state: absent
- name: DOCKER | RED-HAT | Add Docker GPG key.
ansible.builtin.rpm_key:
key: "{{ docker_yum_gpg_key }}"
state: present
when: docker_add_repo | bool
- name: DOCKER | RED-HAT | Add Docker repository.
ansible.builtin.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.
community.general.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.
community.general.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.
when: ansible_distribution_major_version | int == 8
block:
- name: Ensure runc is not installed.
ansible.builtin.package:
name: runc
state: absent
- name: Ensure container-selinux is installed.
ansible.builtin.package:
name: container-selinux
state: present
- name: Ensure containerd.io is installed.
ansible.builtin.package:
name: containerd.io
state: present
---
- name: DOCKER | Load OS-specific vars.
ansible.builtin.include_vars: "{{ lookup('first_found', params) }}"
vars:
params:
files:
- '{{ ansible_distribution }}.yml'
- '{{ ansible_os_family }}.yml'
- main.yml
paths:
- 'vars'
- name: DOCKER | Installing for RedHat OS family
ansible.builtin.include_tasks: docker/setup-RedHat.yml
when: ansible_os_family == 'RedHat'
- name: DOCKER | Installing for Debian OS family
ansible.builtin.include_tasks: docker/setup-Debian.yml
when: ansible_os_family == 'Debian'
- name: DOCKER | Install Docker packages.
ansible.builtin.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).
ansible.builtin.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.
ansible.builtin.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
- 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).
ansible.builtin.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
- ansible_version.full is version_compare('2.12', '>=')
- ansible_os_family in ['RedHat', 'Debian']
become: true
- name: DOCKER | Ensure /etc/docker/ directory exists.
ansible.builtin.file:
path: /etc/docker
state: directory
mode: "0755"
when: docker_daemon_options.keys() | length > 0
- name: DOCKER | Configure Docker daemon options.
ansible.builtin.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.
ansible.builtin.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.
ansible.builtin.meta: flush_handlers
- name: Installing 'docker compose'
ansible.builtin.include_tasks: docker/install_compose.yml
when: docker_install_compose | bool
- name: DOCKER | Get docker group info using getent.
ansible.builtin.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.
ansible.builtin.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 }}"
- name: DOCKER | Adding users to the docker group
ansible.builtin.include_tasks: docker/install_docker_users.yml
when: at_least_one_user_to_modify is defined
---
- name: INSTALL_PACKAGES | Installing the packages from list
ansible.builtin.package:
name: "{{ package_name }}"
state: present
update_cache: true
loop: "{{ os_dependencies_packages }}"
loop_control:
loop_var: package_name
become: true
---
# tasks file for dependencies
- name: Importing the 'install_packages.yml' tasks
ansible.builtin.import_tasks: install_packages.yml
- name: Get docker service state.
ansible.builtin.systemd:
name: "docker"
register: docker_service
- name: Set fact if docker already installed and active.
ansible.builtin.set_fact:
docker_installed: true
when:
- docker_service is defined
- "'active' == docker_service.status.ActiveState"
- name: Importing the 'install_docker.yml' tasks if docker not installed.
ansible.builtin.import_tasks: install_docker.yml
when: docker_installed | bool is false
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment