cleanup: remove docker-host module — replaced by podman
This commit is contained in:
@@ -1,122 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
with lib;
|
|
||||||
|
|
||||||
let
|
|
||||||
cfg = config.services.docker-host-incus;
|
|
||||||
containerName = "docker-host";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.services.docker-host-incus = {
|
|
||||||
enable = mkEnableOption "Incus Docker host container";
|
|
||||||
|
|
||||||
image = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "images:ubuntu/24.04";
|
|
||||||
description = "Incus image to use for the Docker host container";
|
|
||||||
};
|
|
||||||
|
|
||||||
network = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "internalbr0";
|
|
||||||
description = "Incus bridge network to attach the container to";
|
|
||||||
};
|
|
||||||
|
|
||||||
ip = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "10.0.0.2";
|
|
||||||
description = "Static IP for the Docker host container";
|
|
||||||
};
|
|
||||||
|
|
||||||
gateway = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "10.0.0.1";
|
|
||||||
description = "Gateway for the container network";
|
|
||||||
};
|
|
||||||
|
|
||||||
dns = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "1.1.1.1";
|
|
||||||
description = "DNS server for the container";
|
|
||||||
};
|
|
||||||
|
|
||||||
exposeDockerTcp = mkOption {
|
|
||||||
type = types.bool;
|
|
||||||
default = false;
|
|
||||||
description = "Expose Docker TCP API on port 2375 (internal bridge only)";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
# Ensure incus + jq are available on the host
|
|
||||||
environment.systemPackages = with pkgs; [ incus-lts jq ];
|
|
||||||
|
|
||||||
# ── Systemd oneshot that creates/starts the Docker host container ──
|
|
||||||
systemd.services.incus-docker-host = {
|
|
||||||
description = "Incus Docker Host Container (${containerName})";
|
|
||||||
after = [ "incus.service" ];
|
|
||||||
requires = [ "incus.service" ];
|
|
||||||
wantedBy = [ "multi-user.target" ];
|
|
||||||
|
|
||||||
path = with pkgs; [ incus-lts jq ];
|
|
||||||
|
|
||||||
script = ''
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
create_container() {
|
|
||||||
echo "Creating ${containerName} from ${cfg.image}..."
|
|
||||||
|
|
||||||
incus init "${cfg.image}" "${containerName}" \
|
|
||||||
--config security.privileged=true \
|
|
||||||
--config boot.autostart=true
|
|
||||||
|
|
||||||
# Attach to the internal bridge
|
|
||||||
incus config device add "${containerName}" eth0 nic \
|
|
||||||
nictype=bridged \
|
|
||||||
parent="${cfg.network}"
|
|
||||||
|
|
||||||
# Inject cloud-init to install Docker
|
|
||||||
incus config set "${containerName}" user.user-data - <<'CLOUD_EOF'
|
|
||||||
#cloud-config
|
|
||||||
package_update: true
|
|
||||||
packages:
|
|
||||||
- docker.io
|
|
||||||
- docker-compose-v2
|
|
||||||
- curl
|
|
||||||
runcmd:
|
|
||||||
- systemctl enable docker.service
|
|
||||||
- systemctl start docker.service
|
|
||||||
- sleep 2
|
|
||||||
- docker info || echo "Docker not ready yet, will start on boot"
|
|
||||||
CLOUD_EOF
|
|
||||||
|
|
||||||
# Set a static lease
|
|
||||||
${optionalString (cfg.ip != "auto") ''
|
|
||||||
incus config device set "${containerName}" eth0 ipv4.address "${cfg.ip}"
|
|
||||||
''}
|
|
||||||
|
|
||||||
incus start "${containerName}"
|
|
||||||
echo "✓ ${containerName} created and started"
|
|
||||||
}
|
|
||||||
|
|
||||||
# ── Main logic ──
|
|
||||||
if ! incus list --format json 2>/dev/null | jq -e '.[] | select(.name == "${containerName}")' >/dev/null 2>&1; then
|
|
||||||
create_container
|
|
||||||
else
|
|
||||||
STATUS=$(incus list --format json 2>/dev/null | jq -r '.[] | select(.name == "${containerName}") | .status')
|
|
||||||
if [ "$STATUS" != "Running" ]; then
|
|
||||||
echo "${containerName} is $STATUS — starting..."
|
|
||||||
incus start "${containerName}"
|
|
||||||
else
|
|
||||||
echo "${containerName} already running"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
|
|
||||||
serviceConfig = {
|
|
||||||
Type = "oneshot";
|
|
||||||
RemainAfterExit = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user