From 5f4b3ab930bca50f7bafaefd84a026bd12704295 Mon Sep 17 00:00:00 2001 From: claude Date: Tue, 13 Oct 2026 14:45:40 +0200 Subject: [PATCH] Phase 0 : module Go, Docker et docker-compose --- .dockerignore | 4 ++++ .gitignore | 5 +++++ Dockerfile | 25 +++++++++++++++++++++++++ docker-compose.yml | 35 +++++++++++++++++++++++++++++++++++ go.mod | 5 +++++ go.sum | 3 +++ 6 files changed, 77 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100644 go.mod create mode 100644 go.sum diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..7e6fb18 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +.git +secrets +.env +confsync.yaml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3903e67 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +confsync.yaml +.env +secrets/ +/pve-confsync +*.local.yaml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..08cb76b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,25 @@ +# Versions d'images épinglées (mêmes bases que Logstream) : à mettre à jour volontairement. + +# ---- Build ---- +FROM golang:1.27.1-alpine3.24 AS build +WORKDIR /src +COPY go.mod go.sum ./ +RUN go mod download +COPY cmd ./cmd +COPY internal ./internal +ARG VERSION=dev +RUN CGO_ENABLED=0 go build -trimpath -ldflags="-s -w -X main.version=${VERSION}" \ + -o /out/pve-confsync ./cmd/pve-confsync + +# ---- Image finale ---- +FROM alpine:3.24.2 +RUN apk add --no-cache ca-certificates \ + && adduser -D -H -u 10001 confsync \ + && mkdir /data /config && chown confsync /data +COPY --from=build /out/pve-confsync /usr/local/bin/pve-confsync +USER confsync +WORKDIR /data +VOLUME /data +ENV CONFSYNC_CONFIG=/config/confsync.yaml +ENTRYPOINT ["/usr/local/bin/pve-confsync"] +CMD ["check"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..71e39b4 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,35 @@ +# Phase 0 : outil en ligne de commande, lancé à la demande : +# docker compose run --rm confsync check +# docker compose run --rm confsync diff +# docker compose run --rm confsync export -o /data/ref.yaml +# docker compose run --rm confsync apply # dry-run +# docker compose run --rm confsync apply -confirm # application (confirmation SDN interactive) +services: + confsync: + build: . + image: pve-confsync:dev + container_name: pve-confsync + environment: + TZ: ${TZ:-Europe/Paris} + PVE_SITE_B_SECRET: ${PVE_SITE_B_SECRET:-} # secrets par variable (voir token_secret_env) + env_file: + - path: .env + required: false + volumes: + - ./confsync.yaml:/config/confsync.yaml:ro + - confsync-data:/data # exports YAML, plus tard SQLite (phase 1) + secrets: + - pve_ref + - pve_site_a + stdin_open: true + tty: true + +# Secrets des tokens API sous forme de fichiers (chmod 600), montés dans /run/secrets/ +secrets: + pve_ref: + file: ./secrets/pve_ref + pve_site_a: + file: ./secrets/pve_site_a + +volumes: + confsync-data: diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..61040e3 --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module pve-confsync + +go 1.24 + +require gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..4bc0337 --- /dev/null +++ b/go.sum @@ -0,0 +1,3 @@ +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=