fix: [nomad-step-4] S4.2 — wire --with agents + deploy ordering (#956)
All checks were successful
All checks were successful
This commit is contained in:
parent
a51f543005
commit
155ec85a3e
2 changed files with 66 additions and 7 deletions
30
bin/disinto
30
bin/disinto
|
|
@ -82,7 +82,7 @@ Init options:
|
|||
--ci-id <n> Woodpecker CI repo ID (default: 0 = no CI)
|
||||
--forge-url <url> Forge base URL (default: http://localhost:3000)
|
||||
--backend <value> Orchestration backend: docker (default) | nomad
|
||||
--with <services> (nomad) Deploy services: forgejo,woodpecker[,...] (S1.3, S3.4)
|
||||
--with <services> (nomad) Deploy services: forgejo,woodpecker,agents[,...] (S1.3, S3.4, S4.2)
|
||||
--empty (nomad) Bring up cluster only, no jobs (S0.4)
|
||||
--bare Skip compose generation (bare-metal setup)
|
||||
--build Use local docker build instead of registry images (dev mode)
|
||||
|
|
@ -797,6 +797,7 @@ _disinto_init_nomad() {
|
|||
local seed_name="$svc"
|
||||
case "$svc" in
|
||||
woodpecker-server|woodpecker-agent) seed_name="woodpecker" ;;
|
||||
agents) seed_name="agents" ;;
|
||||
esac
|
||||
# Deduplicate
|
||||
if echo ",$_seed_seen," | grep -q ",$seed_name,"; then continue; fi
|
||||
|
|
@ -817,7 +818,7 @@ _disinto_init_nomad() {
|
|||
|
||||
# Build ordered deploy list: only include services present in with_services
|
||||
local DEPLOY_ORDER=""
|
||||
for ordered_svc in forgejo woodpecker-server woodpecker-agent; do
|
||||
for ordered_svc in forgejo woodpecker-server woodpecker-agent agents; do
|
||||
if echo ",$with_services," | grep -q ",$ordered_svc,"; then
|
||||
DEPLOY_ORDER="${DEPLOY_ORDER:+${DEPLOY_ORDER} }${ordered_svc}"
|
||||
fi
|
||||
|
|
@ -931,9 +932,9 @@ _disinto_init_nomad() {
|
|||
if [ -n "$with_services" ]; then
|
||||
local vault_addr="${VAULT_ADDR:-http://127.0.0.1:8200}"
|
||||
|
||||
# Build ordered deploy list (S3.4): forgejo → woodpecker-server → woodpecker-agent
|
||||
# Build ordered deploy list (S3.4, S4.2): forgejo → woodpecker-server → woodpecker-agent → agents
|
||||
local DEPLOY_ORDER=""
|
||||
for ordered_svc in forgejo woodpecker-server woodpecker-agent; do
|
||||
for ordered_svc in forgejo woodpecker-server woodpecker-agent agents; do
|
||||
if echo ",$with_services," | grep -q ",$ordered_svc,"; then
|
||||
DEPLOY_ORDER="${DEPLOY_ORDER:+${DEPLOY_ORDER} }${ordered_svc}"
|
||||
fi
|
||||
|
|
@ -945,6 +946,7 @@ _disinto_init_nomad() {
|
|||
local seed_name="$svc"
|
||||
case "$svc" in
|
||||
woodpecker-server|woodpecker-agent) seed_name="woodpecker" ;;
|
||||
agents) seed_name="agents" ;;
|
||||
esac
|
||||
local seed_script="${FACTORY_ROOT}/tools/vault-seed-${seed_name}.sh"
|
||||
if [ -x "$seed_script" ]; then
|
||||
|
|
@ -1006,6 +1008,9 @@ _disinto_init_nomad() {
|
|||
if echo ",$with_services," | grep -q ",woodpecker-agent,"; then
|
||||
echo " woodpecker-agent: (agent connected)"
|
||||
fi
|
||||
if echo ",$with_services," | grep -q ",agents,"; then
|
||||
echo " agents: (polling loop running)"
|
||||
fi
|
||||
echo "────────────────────────────────────────────────────────"
|
||||
fi
|
||||
|
||||
|
|
@ -1103,6 +1108,7 @@ disinto_init() {
|
|||
_svc=$(echo "$_svc" | xargs)
|
||||
case "$_svc" in
|
||||
woodpecker) _svc="woodpecker-server,woodpecker-agent" ;;
|
||||
agents) _svc="agents" ;;
|
||||
esac
|
||||
expanded="${expanded:+${expanded},}${_svc}"
|
||||
done
|
||||
|
|
@ -1116,14 +1122,26 @@ disinto_init() {
|
|||
with_services="forgejo,${with_services}"
|
||||
fi
|
||||
|
||||
# Auto-include forgejo and woodpecker when agents is requested
|
||||
if echo ",$with_services," | grep -q ",agents,"; then
|
||||
if ! echo ",$with_services," | grep -q ",forgejo,"; then
|
||||
echo "Note: --with agents implies --with forgejo (agents need forge)"
|
||||
with_services="forgejo,${with_services}"
|
||||
fi
|
||||
if ! echo ",$with_services," | grep -q ",woodpecker-server,\|,woodpecker-agent,"; then
|
||||
echo "Note: --with agents implies --with woodpecker (agents need CI)"
|
||||
with_services="${with_services},woodpecker-server,woodpecker-agent"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Validate all service names are known
|
||||
local IFS=','
|
||||
for _svc in $with_services; do
|
||||
_svc=$(echo "$_svc" | xargs)
|
||||
case "$_svc" in
|
||||
forgejo|woodpecker-server|woodpecker-agent) ;;
|
||||
forgejo|woodpecker-server|woodpecker-agent|agents) ;;
|
||||
*)
|
||||
echo "Error: unknown service '${_svc}' — known: forgejo, woodpecker-server, woodpecker-agent" >&2
|
||||
echo "Error: unknown service '${_svc}' — known: forgejo, woodpecker-server, woodpecker-agent, agents" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
|
|
|||
|
|
@ -215,7 +215,7 @@ setup_file() {
|
|||
run "$DISINTO_BIN" init placeholder/repo --backend=nomad --with unknown-service --dry-run
|
||||
[ "$status" -ne 0 ]
|
||||
[[ "$output" == *"unknown service"* ]]
|
||||
[[ "$output" == *"known: forgejo, woodpecker-server, woodpecker-agent"* ]]
|
||||
[[ "$output" == *"known: forgejo, woodpecker-server, woodpecker-agent, agents"* ]]
|
||||
}
|
||||
|
||||
# S3.4: woodpecker auto-expansion and forgejo auto-inclusion
|
||||
|
|
@ -385,3 +385,44 @@ setup_file() {
|
|||
[ "$status" -ne 0 ]
|
||||
[[ "$output" == *"--empty and --import-env/--import-sops/--age-key are mutually exclusive"* ]]
|
||||
}
|
||||
|
||||
# S4.2: agents service auto-expansion and dependencies
|
||||
@test "disinto init --backend=nomad --with agents auto-includes forgejo and woodpecker" {
|
||||
run "$DISINTO_BIN" init placeholder/repo --backend=nomad --with agents --dry-run
|
||||
[ "$status" -eq 0 ]
|
||||
[[ "$output" == *"services to deploy: forgejo,agents,woodpecker-server,woodpecker-agent"* ]]
|
||||
[[ "$output" == *"Note: --with agents implies --with forgejo"* ]]
|
||||
[[ "$output" == *"Note: --with agents implies --with woodpecker"* ]]
|
||||
}
|
||||
|
||||
@test "disinto init --backend=nomad --with agents deploys in correct order" {
|
||||
run "$DISINTO_BIN" init placeholder/repo --backend=nomad --with agents --dry-run
|
||||
[ "$status" -eq 0 ]
|
||||
[[ "$output" == *"deployment order: forgejo woodpecker-server woodpecker-agent agents"* ]]
|
||||
}
|
||||
|
||||
@test "disinto init --backend=nomad --with agents seeds agents service" {
|
||||
run "$DISINTO_BIN" init placeholder/repo --backend=nomad --with agents --dry-run
|
||||
[ "$status" -eq 0 ]
|
||||
[[ "$output" == *"tools/vault-seed-forgejo.sh --dry-run"* ]]
|
||||
[[ "$output" == *"tools/vault-seed-woodpecker.sh --dry-run"* ]]
|
||||
[[ "$output" == *"tools/vault-seed-agents.sh --dry-run"* ]]
|
||||
}
|
||||
|
||||
@test "disinto init --backend=nomad --with agents deploys all four services" {
|
||||
run "$DISINTO_BIN" init placeholder/repo --backend=nomad --with agents --dry-run
|
||||
[ "$status" -eq 0 ]
|
||||
[[ "$output" == *"[deploy] [dry-run] nomad job validate"*"forgejo.hcl"* ]]
|
||||
[[ "$output" == *"[deploy] [dry-run] nomad job validate"*"woodpecker-server.hcl"* ]]
|
||||
[[ "$output" == *"[deploy] [dry-run] nomad job validate"*"woodpecker-agent.hcl"* ]]
|
||||
[[ "$output" == *"[deploy] [dry-run] nomad job validate"*"agents.hcl"* ]]
|
||||
}
|
||||
|
||||
@test "disinto init --backend=nomad --with woodpecker,agents expands correctly" {
|
||||
run "$DISINTO_BIN" init placeholder/repo --backend=nomad --with woodpecker,agents --dry-run
|
||||
[ "$status" -eq 0 ]
|
||||
# woodpecker expands to server+agent, agents is already explicit
|
||||
# forgejo is auto-included by agents
|
||||
[[ "$output" == *"services to deploy: forgejo,woodpecker-server,woodpecker-agent,agents"* ]]
|
||||
[[ "$output" == *"deployment order: forgejo woodpecker-server woodpecker-agent agents"* ]]
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue