# @license http://www.gnu.org/licenses/gpl.html GPL Version 3 # @author OpenMediaVault Plugin Developers # @copyright Copyright (c) 2022-2026 openmediavault plugin developers # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . {% set config = salt['omv_conf.get']('conf.service.compose') %} {% set nocterm = salt['pillar.get']('default:OMV_NO_CTERM_DEPENDENCY', 'no') | to_bool %} {% set use_podman = config.podman | to_bool %} {% set storage_path = (config.podmanStorage if use_podman else config.dockerStorage) %} {% set create_config = (storage_path | default('') | length > 1) %} {# systemd override file paths based on runtime #} {% set waitConf = ('/etc/systemd/system/podman.service.d/waitAllMounts.conf' if use_podman else '/etc/systemd/system/docker.service.d/waitAllMounts.conf') %} {% set delayConf = ('/etc/systemd/system/podman.service.d/startDelay.conf' if use_podman else '/etc/systemd/system/docker.service.d/startDelay.conf') %} {% set restartWaitConf = '/etc/systemd/system/podman-restart.service.d/waitAllMounts.conf' %} {# ---- Storage dir (shared) ---- #} {% if create_config %} container_storage_dir: file.directory: - name: "{{ storage_path }}" - user: root - group: root - mode: '0755' - makedirs: True {% endif %} {# ---- Runtime-specific install + config ---- #} {% if use_podman %} podman_install_packages: pkg.installed: - pkgs: - podman - podman-docker - aardvark-dns {% if create_config %} podman_storage_conf: file.managed: - name: /etc/containers/storage.conf - user: root - group: root - mode: '0644' - makedirs: True - contents: | [storage] driver = "overlay" graphroot = "{{ storage_path }}" runroot = "/run/containers/storage" podman_socket_restart_on_config_change: service.running: - name: podman.socket - enable: True - watch: - file: podman_storage_conf {% endif %} podman_restart_service_enable: service.enabled: - name: podman-restart.service /etc/containers/nodocker: file.touch podman_docker_profile_sh_enable: file.rename: - source: /etc/profile.d/podman-docker.sh.disabled - name: /etc/profile.d/podman-docker.sh - force: True - onlyif: - test -f /etc/profile.d/podman-docker.sh.disabled podman_docker_profile_csh_enable: file.rename: - source: /etc/profile.d/podman-docker.csh.disabled - name: /etc/profile.d/podman-docker.csh - force: True - onlyif: - test -f /etc/profile.d/podman-docker.csh.disabled {% else %} docker_install_packages: pkg.installed: - pkgs: - containerd.io - docker-ce - docker-ce-cli {% if create_config %} configure_etc_docker_dir: file.directory: - name: "/etc/docker" - user: "root" - group: "root" - mode: '0755' - makedirs: True /etc/docker/daemon.json: file.serialize: - dataset: data-root: "{{ storage_path }}" storage-driver: "overlay2" {% if config.logmaxsize|int > 0 %} log-driver: "json-file" log-opts: max-size: "{{ config.logmaxsize }}m" max-file: "3" {% endif %} {% if config.liverestore %} live-restore: true {% endif %} - serializer: json - user: root - group: root - mode: '0600' docker: service.running: - enable: True - watch: - file: /etc/docker/daemon.json {% endif %} podman_docker_profile_sh_disable: file.rename: - source: /etc/profile.d/podman-docker.sh - name: /etc/profile.d/podman-docker.sh.disabled - force: True - onlyif: - test -f /etc/profile.d/podman-docker.sh podman_docker_profile_csh_disable: file.rename: - source: /etc/profile.d/podman-docker.csh - name: /etc/profile.d/podman-docker.csh.disabled - force: True - onlyif: - test -f /etc/profile.d/podman-docker.csh {% endif %} {# ---- Common packages ---- #} common_install_packages: pkg.installed: - pkgs: - docker-compose-plugin - docker-buildx-plugin {% if not nocterm %} - openmediavault-cterm {% endif %} - require: {% if use_podman %} - pkg: podman_install_packages {% else %} - pkg: docker_install_packages {% endif %} {# ---- Wait for /srv mounts override ---- #} {% set mounts = salt['cmd.shell']('systemctl list-unit-files --type=mount | awk \'$1 ~ /^srv-/ { print $1 }\' | sort | paste -sd\' \'') %} {{ waitConf }}: file.managed: - contents: | [Unit] After=local-fs.target {{ mounts }} Wants=local-fs.target {{ mounts }} - mode: '0644' - makedirs: True {% if use_podman %} {{ restartWaitConf }}: file.managed: - contents: | [Unit] After=local-fs.target {{ mounts }} Wants=local-fs.target {{ mounts }} - mode: '0644' - makedirs: True {% else %} {{ restartWaitConf }}: file.absent {% endif %} {% if config.dockerdelay | int > 0 %} {{ delayConf }}: file.managed: - contents: | [Service] ExecStartPre=/bin/sleep {{ config.dockerdelay }} - mode: '0644' - makedirs: True {% else %} {{ delayConf }}: file.absent {% endif %} systemd_daemon_reload: cmd.run: - name: systemctl daemon-reload - onchanges: - file: {{ waitConf }} - file: {{ delayConf }} - file: {{ restartWaitConf }}