Rename template/ to infmap/, add template publish CI job
Some checks failed
Build-Publish / build (linux/amd64) (push) Successful in 4s
Build-Publish / build (linux/arm64) (push) Successful in 11s
Build-Publish / create-manifest (push) Successful in 2s
Build-Publish / publish-template (push) Failing after 5s

This commit is contained in:
j
2026-03-07 20:44:29 +13:00
parent 601079e601
commit 54ec2a2e48
16 changed files with 34 additions and 2 deletions

12
infmap/backup.sh Executable file
View File

@@ -0,0 +1,12 @@
#!/bin/bash
source "${AGENT_PATH}/common.sh"
_check_required_env_vars "CONTAINER_NAME" "DATA_VOLUME" "BACKUP_FILE" "TEMP_DIR"
mkdir -p "${TEMP_DIR}/backup"
docker run --rm -v "${DATA_VOLUME}":/source -v "${TEMP_DIR}/backup":/backup \
debian bash -c "tar -czf /backup/data.tgz -C /source ." || _die "Failed to backup data volume"
tar -czf "${BACKUP_FILE}" -C "${TEMP_DIR}/backup" . || _die "Failed to create backup archive"
echo "Backup completed successfully"

View File

@@ -0,0 +1,20 @@
# Infrastructure Map Configuration
#
# Format:
# GROUPNAME
# USERNAME@SERVERNAME
# USERNAME@SERVERNAME
# ...
#
# GROUPNAME is a freeform label to group servers together.
# USERNAME@SERVERNAME is the SSH user and hostname/IP to connect to.
#
# Example:
#
# Production
# root@prod-web-01
# root@prod-db-01
#
# Development
# deploy@dev-01
# deploy@dev-02

12
infmap/config/service.env Normal file
View File

@@ -0,0 +1,12 @@
CONTAINER_NAME=infmap
SSH_USER="root"
# Web UI port (HTTP)
WEB_PORT=8080
# Path to SSH private key on the host (used to connect to monitored servers)
SSH_KEY_PATH=/root/.ssh/id_ed25519
# Collection settings
COLLECTION_INTERVAL=300
MAX_CONCURRENT_SSH=5

13
infmap/destroy.sh Executable file
View File

@@ -0,0 +1,13 @@
#!/bin/bash
source "${AGENT_PATH}/common.sh"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
_check_required_env_vars "CONTAINER_NAME" "DATA_VOLUME"
echo "WARNING: This will PERMANENTLY DELETE all data for ${CONTAINER_NAME}"
docker compose -p "${CONTAINER_NAME}" down 2>/dev/null || true
_remove_volume "$DATA_VOLUME"
echo "Service and all data destroyed"

18
infmap/docker-compose.yml Normal file
View File

@@ -0,0 +1,18 @@
services:
app:
image: ${IMAGE_REGISTRY}/${IMAGE_REPO}:${IMAGE_TAG}
ports:
- "${WEB_PORT}:5000"
environment:
COLLECTION_INTERVAL: ${COLLECTION_INTERVAL}
MAX_CONCURRENT_SSH: ${MAX_CONCURRENT_SSH}
volumes:
- ${SSH_KEY_PATH}:/app/ssh_key:ro
- ${CONFIG_PATH}/infrastructure.conf:/app/infrastructure.conf:ro
- app_data:/app/data
restart: unless-stopped
volumes:
app_data:
external: true
name: ${CONTAINER_NAME}_data

10
infmap/install-pre.sh Executable file
View File

@@ -0,0 +1,10 @@
#!/bin/bash
source "${AGENT_PATH}/common.sh"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
_check_required_env_vars "CONTAINER_NAME" "IMAGE_REGISTRY" "IMAGE_REPO" "IMAGE_TAG"
docker pull -q "$IMAGE_REGISTRY/$IMAGE_REPO:$IMAGE_TAG" || echo "Warning: pre-pull failed, install.sh will retry"
echo "Pre-install complete"

24
infmap/install.sh Executable file
View File

@@ -0,0 +1,24 @@
#!/bin/bash
source "${AGENT_PATH}/common.sh"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
_check_required_env_vars "CONTAINER_NAME" "WEB_PORT" "SSH_KEY_PATH" "DATA_VOLUME" "IMAGE_REGISTRY" "IMAGE_REPO" "IMAGE_TAG"
_check_docker_installed || _die "Docker test failed"
# Check SSH key exists
[ -f "${SSH_KEY_PATH}" ] || _die "SSH key not found at ${SSH_KEY_PATH}"
# Check infrastructure.conf exists
[ -f "${CONFIG_PATH}/infrastructure.conf" ] || _die "infrastructure.conf not found at ${CONFIG_PATH}/infrastructure.conf"
docker pull "$IMAGE_REGISTRY/$IMAGE_REPO:$IMAGE_TAG" || _die "Failed to pull image"
# Create data volume
docker volume create "${DATA_VOLUME}" 2>/dev/null || true
bash ./stop.sh || true
docker compose -p "${CONTAINER_NAME}" up -d || _die "Failed to start services"
echo "Installation of ${CONTAINER_NAME} complete"
echo "Web UI available at http://localhost:${WEB_PORT}"

8
infmap/logs.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/bash
source "${AGENT_PATH}/common.sh"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
_check_required_env_vars "CONTAINER_NAME"
docker compose -p "${CONTAINER_NAME}" logs "$@"

5
infmap/ports.sh Executable file
View File

@@ -0,0 +1,5 @@
#!/bin/bash
source "${AGENT_PATH}/common.sh"
_check_required_env_vars "WEB_PORT"
echo "${WEB_PORT}"

13
infmap/restore.sh Executable file
View File

@@ -0,0 +1,13 @@
#!/bin/bash
source "${AGENT_PATH}/common.sh"
_check_required_env_vars "CONTAINER_NAME" "DATA_VOLUME" "BACKUP_FILE" "TEMP_DIR"
mkdir -p "${TEMP_DIR}/restore"
tar -xzf "${BACKUP_FILE}" -C "${TEMP_DIR}/restore" || _die "Failed to extract backup archive"
docker volume rm "${DATA_VOLUME}" 2>/dev/null || true
docker volume create "${DATA_VOLUME}" || _die "Failed to create data volume"
docker run --rm -v "${DATA_VOLUME}":/target -v "${TEMP_DIR}/restore":/backup \
debian bash -c "tar -xzf /backup/data.tgz -C /target" || _die "Failed to restore data volume"
echo "Restore completed successfully"

11
infmap/start.sh Executable file
View File

@@ -0,0 +1,11 @@
#!/bin/bash
source "${AGENT_PATH}/common.sh"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
_check_required_env_vars "CONTAINER_NAME" "DATA_VOLUME"
docker volume create "${DATA_VOLUME}" 2>/dev/null || true
docker compose -p "${CONTAINER_NAME}" up -d || _die "Failed to start services"
echo "${CONTAINER_NAME} started"

23
infmap/status.sh Executable file
View File

@@ -0,0 +1,23 @@
#!/bin/bash
source "${AGENT_PATH}/common.sh"
_check_required_env_vars "CONTAINER_NAME"
APP_CONTAINER="${CONTAINER_NAME}-app-1"
if ! docker ps -a --format "{{.Names}}" | grep -q "^${APP_CONTAINER}$"; then
echo "Unknown"
exit 0
fi
STATE=$(docker inspect -f '{{.State.Status}}' "$APP_CONTAINER" 2>/dev/null)
case "$STATE" in
running)
echo "Running"
;;
exited|stopped)
echo "Stopped"
;;
*)
echo "Unknown"
;;
esac

10
infmap/stop.sh Executable file
View File

@@ -0,0 +1,10 @@
#!/bin/bash
source "${AGENT_PATH}/common.sh"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
_check_required_env_vars "CONTAINER_NAME"
docker compose -p "${CONTAINER_NAME}" down 2>/dev/null || true
echo "${CONTAINER_NAME} stopped"

9
infmap/template_info.env Normal file
View File

@@ -0,0 +1,9 @@
REQUIRES_HOST_ROOT=false
REQUIRES_DOCKER=true
REQUIRES_DOCKER_ROOT=false
IMAGE_REGISTRY="gitea.jde.nz"
IMAGE_REPO="public/infmap"
IMAGE_TAG="latest"
DATA_VOLUME="${CONTAINER_NAME}_data"

12
infmap/uninstall.sh Executable file
View File

@@ -0,0 +1,12 @@
#!/bin/bash
source "${AGENT_PATH}/common.sh"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
_check_required_env_vars "CONTAINER_NAME"
docker compose -p "${CONTAINER_NAME}" down || _die "Failed to stop services"
# DO NOT remove volumes here! Data is preserved for reinstallation.
echo "Uninstallation of ${CONTAINER_NAME} complete"
echo "Note: Data volumes have been preserved. To remove all data, use destroy.sh"