Skip to content

Commit

Permalink
docker: add controller
Browse files Browse the repository at this point in the history
  • Loading branch information
saltydk committed Dec 31, 2023
1 parent 82dba81 commit f482f68
Show file tree
Hide file tree
Showing 21 changed files with 692 additions and 6 deletions.
14 changes: 14 additions & 0 deletions inventories/group_vars/all.yml
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,15 @@ docker_volumes_common: "{{ docker_volumes_common_folders + docker_volumes_downlo

docker_hosts_common: []

docker_labels_docker_depends_on_template:
com.github.saltbox.depends_on: "{{ lookup('vars', role_name + '_depends_on') }}"

docker_labels_docker_depends_on_delay_template:
com.github.saltbox.depends_on.delay: "{{ lookup('vars', role_name + '_depends_on_delay') }}"

docker_labels_docker_depends_on_healthchecks_template:
com.github.saltbox.depends_on.healthchecks: "{{ lookup('vars', role_name + '_depends_on_healthchecks') }}"

docker_labels_diun_template:
diun.enable: "true"

Expand All @@ -360,6 +369,9 @@ docker_labels_saltbox_tmp:
- com.github.saltbox.saltbox_managed: "true"
- "{{ docker_labels_diun_template if (lookup('vars', role_name + '_diun_enabled', default=true) | bool) else omit }}"
- "{{ docker_labels_autoheal_template if (lookup('vars', role_name + '_autoheal_enabled', default=true) | bool) else omit }}"
- "{{ docker_labels_docker_depends_on_template if (lookup('vars', role_name + '_depends_on', default='') | length > 0) else omit }}"
- "{{ docker_labels_docker_depends_on_delay_template if (lookup('vars', role_name + '_depends_on_delay', default='') | length > 0) else omit }}"
- "{{ docker_labels_docker_depends_on_healthchecks_template if (lookup('vars', role_name + '_depends_on_healthchecks', default='') | length > 0) else omit }}"

docker_labels_saltbox: "{{ docker_labels_saltbox_tmp | reject('equalto', omit) | list }}"

Expand Down Expand Up @@ -440,6 +452,8 @@ docker_log_options: "{{ docker_log_options_json

docker_network_container_health_delay: 5

docker_controller_url: "http://127.0.0.1:3377"

################################
# Saltbox Version Manager
################################
Expand Down
5 changes: 5 additions & 0 deletions roles/authelia/defaults/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -279,3 +279,8 @@ authelia_docker_restart_policy: always

# State
authelia_docker_state: started

# Dependencies
authelia_depends_on: "{{ 'authelia_redis,lldap' if (authelia_authentication_backend == 'ldap') else 'authelia_redis' }}"
authelia_depends_on_delay: "0"
authelia_depends_on_healthchecks: "{{ 'true' if (authelia_authentication_backend == 'ldap') else 'false' }}"
7 changes: 2 additions & 5 deletions roles/authelia/tasks/subtasks/file_backend.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,7 @@
mode: "0775"
when: (not authelia_user_config_stat.stat.exists)

- name: File | Remove LDAP Containers
- name: File | Remove LLDAP Container
ansible.builtin.include_tasks: "{{ resources_tasks_path }}/docker/remove_docker_container.yml"
vars:
var_prefix: "{{ item }}"
loop:
- "openldap"
- "phpldapadmin"
var_prefix: "lldap"
31 changes: 31 additions & 0 deletions roles/backup/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,13 @@
ansible.builtin.set_fact:
docker_containers: "{{ docker_containers | join(' ') }}"

- name: Stop Saltbox Containers
ansible.builtin.uri:
url: "{{ docker_controller_url }}/stop"
method: POST
timeout: 600
ignore_errors: true

- name: "Stop all running Docker containers"
ansible.builtin.shell: "docker stop {{ docker_containers }}"
ignore_errors: true
Expand Down Expand Up @@ -363,6 +370,14 @@
ansible.builtin.wait_for:
timeout: 5

- name: Start Saltbox Containers
ansible.builtin.uri:
url: "{{ docker_controller_url }}/start"
method: POST
timeout: 600
ignore_errors: true
when: (docker_containers | trim | length > 0)

- name: "Snapshot | Start all previously running Docker containers"
ansible.builtin.shell: 'docker start {{ docker_containers }}'
ignore_errors: true
Expand Down Expand Up @@ -478,6 +493,14 @@
ansible.builtin.wait_for:
timeout: 5

- name: Start Saltbox Containers
ansible.builtin.uri:
url: "{{ docker_controller_url }}/start"
method: POST
timeout: 600
ignore_errors: true
when: (docker_containers | trim | length > 0)

- name: "Start all previously running Docker containers"
ansible.builtin.shell: 'docker start {{ docker_containers }}'
ignore_errors: true
Expand Down Expand Up @@ -672,6 +695,14 @@
ansible.builtin.wait_for:
timeout: 5

- name: Start Saltbox Containers
ansible.builtin.uri:
url: "{{ docker_controller_url }}/start"
method: POST
timeout: 600
ignore_errors: true
when: (docker_containers | trim | length > 0)

- name: "Start all previously running Docker containers"
ansible.builtin.shell: 'docker start {{ docker_containers }}'
ignore_errors: true
Expand Down
31 changes: 31 additions & 0 deletions roles/backup2/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,13 @@
ansible.builtin.set_fact:
docker_containers: "{{ docker_containers | join(' ') }}"

- name: Stop Saltbox Containers
ansible.builtin.uri:
url: "{{ docker_controller_url }}/stop"
method: POST
timeout: 600
ignore_errors: true

- name: "Stop all running Docker containers"
ansible.builtin.shell: "docker stop {{ docker_containers }}"
ignore_errors: true
Expand Down Expand Up @@ -292,6 +299,14 @@
ansible.builtin.wait_for:
timeout: 5

- name: Start Saltbox Containers
ansible.builtin.uri:
url: "{{ docker_controller_url }}/start"
method: POST
timeout: 600
ignore_errors: true
when: (docker_containers | trim | length > 0)

- name: "Snapshot | Start all previously running Docker containers"
ansible.builtin.shell: 'docker start {{ docker_containers }}'
ignore_errors: true
Expand Down Expand Up @@ -452,6 +467,14 @@
ansible.builtin.wait_for:
timeout: 5

- name: Start Saltbox Containers
ansible.builtin.uri:
url: "{{ docker_controller_url }}/start"
method: POST
timeout: 600
ignore_errors: true
when: (docker_containers | trim | length > 0)

- name: "Start all previously running Docker containers"
ansible.builtin.shell: 'docker start {{ docker_containers }}'
ignore_errors: true
Expand Down Expand Up @@ -545,6 +568,14 @@
ansible.builtin.wait_for:
timeout: 5

- name: Start Saltbox Containers
ansible.builtin.uri:
url: "{{ docker_controller_url }}/start"
method: POST
timeout: 600
ignore_errors: true
when: (docker_containers | trim | length > 0)

- name: "Start all previously running Docker containers"
ansible.builtin.shell: 'docker start {{ docker_containers }}'
ignore_errors: true
Expand Down
42 changes: 42 additions & 0 deletions roles/docker/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@
- name: Tasks for when Docker exists and is running
when: docker_service_check
block:
- name: "Import Controller tasks"
ansible.builtin.import_tasks: "subtasks/controller.yml"

- name: Gather list of running Docker containers
ansible.builtin.shell: "docker ps --format '{{ '{{' }} .Names{{ '}}' }}' | sort | xargs echo -n"
register: docker_running_containers_ps
Expand All @@ -45,6 +48,13 @@
ansible.builtin.set_fact:
docker_running_containers: "{{ containers_list | default(docker_running_containers_ps.stdout) | default('') }}"

- name: Stop Saltbox Containers
ansible.builtin.uri:
url: "{{ docker_controller_url }}/stop"
method: POST
timeout: 600
ignore_errors: true

- name: Stop all running Docker containers
ansible.builtin.shell: "docker stop {{ docker_running_containers }} &> /dev/null || true"
ignore_errors: true
Expand All @@ -54,6 +64,13 @@
ansible.builtin.include_tasks: "subtasks/btrfs/cleanup.yml"
when: ('btrfs' in var_lib_file_system.stdout)

- name: Block Docker Controller
ansible.builtin.uri:
url: "{{ docker_controller_url }}/block/20"
method: POST
timeout: 600
ignore_errors: true

- name: Stop docker service
ansible.builtin.systemd_service:
name: docker
Expand Down Expand Up @@ -93,6 +110,17 @@
ansible.builtin.wait_for:
timeout: "{{ docker_containers_startup_delay }}"

- name: "Import Controller tasks"
ansible.builtin.import_tasks: "subtasks/controller.yml"
when: not docker_service_check

- name: Stop Saltbox Containers
ansible.builtin.uri:
url: "{{ docker_controller_url }}/stop"
method: POST
timeout: 600
ignore_errors: true

- name: "Stop all Docker containers"
ansible.builtin.shell: docker stop $(docker ps -aq) &> /dev/null || true

Expand Down Expand Up @@ -125,6 +153,13 @@
ansible.builtin.wait_for:
timeout: "{{ docker_network_container_health_delay }}"

- name: Start Saltbox Containers
ansible.builtin.uri:
url: "{{ docker_controller_url }}/start"
method: POST
timeout: 600
ignore_errors: true

- name: "Re-start all previously running Docker containers"
ansible.builtin.shell: "docker start {{ docker_running_containers }}"
ignore_errors: true
Expand All @@ -145,3 +180,10 @@
ansible.builtin.include_role:
name: ctop
tags: ctop

- name: Unblock Docker Controller
ansible.builtin.uri:
url: "{{ docker_controller_url }}/unblock"
method: POST
timeout: 600
ignore_errors: true
76 changes: 76 additions & 0 deletions roles/docker/tasks/subtasks/controller.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
#########################################################################
# Title: Saltbox: Docker | Controller Tasks #
# Author(s): salty #
# URL: https://github.com/saltyorg/Saltbox #
# -- #
#########################################################################
# GNU General Public License v3.0 #
#########################################################################
---
- name: Controller | Set Python version
ansible.builtin.set_fact:
docker_controller_python_version: "{{ 'python3'
if ansible_distribution_version is version('22.04', '==')
else 'python3.10' }}"

- name: Controller | Check if venv folder exists
ansible.builtin.stat:
path: "/srv/docker-controller/venv"
register: docker_controller_venv

- name: Controller | Delete venv folder
ansible.builtin.file:
path: "/srv/docker-controller/venv"
state: absent
when: docker_controller_venv.stat.exists

- name: Controller | Install pip requirements
ansible.builtin.pip:
requirements: "/srv/git/saltbox/scripts/saltbox_docker_controller_requirements.txt"
virtualenv_python: "{{ docker_controller_python_version }}"
virtualenv: "/srv/docker-controller/venv"
become: true
become_user: "{{ user.name }}"

- name: Controller | Find pip3 path
ansible.builtin.find:
paths: "/srv/docker-controller/venv"
recurse: yes
patterns: 'uvicorn'
register: docker_controller_venv_files

- name: Controller | Path
ansible.builtin.set_fact:
docker_controller_uvicorn_path: "{{ docker_controller_venv_files.files[0].path }}"

- name: Controller | Import 'saltbox_managed_docker_controller.service'
ansible.builtin.template:
src: docker-controller.service.j2
dest: /etc/systemd/system/saltbox_managed_docker_controller.service
mode: "0644"
force: true

- name: Controller | Enable 'saltbox_managed_docker_controller.service'
ansible.builtin.systemd_service:
name: saltbox_managed_docker_controller
enabled: true
state: restarted
daemon_reload: true

- name: "Controller | Wait for 10 seconds"
ansible.builtin.wait_for:
timeout: "10"

- name: Controller | Import 'saltbox_managed_docker_controller.service'
ansible.builtin.template:
src: docker-controller-helper.service.j2
dest: /etc/systemd/system/saltbox_managed_docker_controller_helper.service
mode: "0644"
force: true

- name: Controller | Enable 'saltbox_managed_docker_controller_helper.service'
ansible.builtin.systemd_service:
name: saltbox_managed_docker_controller_helper.service
enabled: true
state: started
daemon_reload: true
24 changes: 24 additions & 0 deletions roles/docker/templates/docker-controller-helper.service.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# /etc/systemd/system/saltbox_managed_docker_controller_helper.service
#########################################################################
# Title: Saltbox: Docker Controller Helper #
# Author(s): salty #
# URL: https://github.com/saltyorg/Saltbox #
# -- #
#########################################################################
# GNU General Public License v3.0 #
#########################################################################
[Unit]
Description=Saltbox Docker Controller Helper
Requires=docker.service
After=docker.service
PartOf=docker.service

[Service]
Type=simple
ExecStart=/srv/git/saltbox/scripts/saltbox_docker_controller_helper.sh
ExecStop=/bin/kill $MAINPID
TimeoutStartSec=360
TimeoutStopSec=360

[Install]
WantedBy=multi-user.target
21 changes: 21 additions & 0 deletions roles/docker/templates/docker-controller.service.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# /etc/systemd/system/saltbox_managed_docker_controller.service
#########################################################################
# Title: Saltbox: Docker Controller #
# Author(s): salty #
# URL: https://github.com/saltyorg/Saltbox #
# -- #
#########################################################################
# GNU General Public License v3.0 #
#########################################################################
[Unit]
Description=Saltbox Docker Controller

[Service]
Type=simple
WorkingDirectory=/srv/git/saltbox/scripts
ExecStart={{ docker_controller_uvicorn_path }} saltbox_docker_controller:app --host 127.0.0.1 --port 3377
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target
2 changes: 1 addition & 1 deletion roles/docker/templates/docker-update-hosts.service.j2
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# /etc/systemd/system/docker-update-hosts.service
# /etc/systemd/system/saltbox_managed_docker_update_hosts.service
#########################################################################
# Title: Saltbox: Docker Host DNS Resolution #
# Author(s): salty #
Expand Down
Loading

0 comments on commit f482f68

Please sign in to comment.