Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions internal/generate/cloud_engines_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ func TestCloudEngineTemplatesLint(t *testing.T) {
wantIn string // a literal that must survive into the rendered compose
}{
{"localstack", "aws", 4566, "_localstack/health"},
{"ministack", "aws", 4566, "_ministack/ready"},
{"nats", "nats", 4222, "-js"},
{"kafka", "kafka", 9092, "advertise-kafka-addr=internal://shared-kafka:9092"},
{"rabbitmq", "amqp", 5672, "rabbitmq-diagnostics -q ping"},
Expand Down Expand Up @@ -75,6 +76,7 @@ func cloudResolver() *graphResolver {
Shared: map[string]config.SharedSvc{
"localstack": {Template: "localstack", Params: map[string]any{"region": "eu-west-1"}},
"awsdefault": {Template: "localstack"},
"ministack": {Template: "ministack", Params: map[string]any{"region": "ap-south-1"}},
"nats": {Template: "nats"},
"kafka": {Template: "kafka"},
"rabbitmq": {Template: "rabbitmq"},
Expand All @@ -87,6 +89,7 @@ func cloudResolver() *graphResolver {
sharedPort: map[string]int{
"localstack": 4566,
"awsdefault": 4566,
"ministack": 4566,
"nats": 4222,
"kafka": 9092,
"rabbitmq": 5672,
Expand All @@ -109,6 +112,13 @@ func TestSharedAttr_EndpointAndRegion(t *testing.T) {
if got, err := r.sharedAttr("awsdefault", "region"); err != nil || got != "us-east-1" {
t.Errorf("region default = %q err=%v, want us-east-1", got, err)
}
// ministack shares the generic AWS-emulation export path with localstack.
if got, err := r.sharedAttr("ministack", "endpoint"); err != nil || got != "http://shared-ministack:4566" {
t.Errorf("ministack endpoint = %q err=%v, want http://shared-ministack:4566", got, err)
}
if got, err := r.sharedAttr("ministack", "region"); err != nil || got != "ap-south-1" {
t.Errorf("ministack region = %q err=%v, want ap-south-1 (the param)", got, err)
}
}

// TestSharedAttr_SecondaryPorts covers the per-template export-attr→secondary-port
Expand Down
2 changes: 1 addition & 1 deletion templates/embed.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ package templates

import "embed"

//go:embed all:postgres all:redis all:minio all:php.nginx all:php.laravel.nginx all:node.vite all:localstack all:nats all:kafka all:rabbitmq
//go:embed all:postgres all:redis all:minio all:php.nginx all:php.laravel.nginx all:node.vite all:localstack all:ministack all:nats all:kafka all:rabbitmq
var builtinFS embed.FS

// FS is the embedded built-in templates root: template-name directories at the
Expand Down
31 changes: 31 additions & 0 deletions templates/ministack/golden.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: devstack-lint
services:
ministack:
environment:
AWS_DEFAULT_REGION: us-east-1
PERSIST_STATE: "1"
SERVICES: s3,sqs,sns
STATE_DIR: /var/lib/ministack
healthcheck:
test:
- CMD-SHELL
- curl -sf http://localhost:4566/_ministack/ready
timeout: 5s
interval: 10s
retries: 8
start_period: 20s
image: ministackorg/ministack:latest
networks:
default: null
restart: unless-stopped
volumes:
- type: volume
source: ministackdata
target: /var/lib/ministack
volume: {}
networks:
default:
name: devstack-lint_default
volumes:
ministackdata:
name: devstack-lint_ministackdata
39 changes: 39 additions & 0 deletions templates/ministack/template.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
schemaVersion: 1
description: "Shared ministack AWS-emulation engine (LocalStack-compatible), reached over the shared network at shared-ministack:4566."
provides: aws
exports: [host, port, endpoint, region]
defaultPort: 4566
params:
image:
type: string
default: "ministackorg/ministack:latest"
description: "ministack image; pin a tag (e.g. ministackorg/ministack:1) for stable (engine,major) ledger keying — latest floats across majors."
services:
type: string
default: "s3,sqs,sns"
description: "Comma list for the SERVICES env (selects which AWS services start — a light default for fast startup; empty/all enables everything)."
region:
type: string
default: "us-east-1"
description: "Default AWS region advertised to in-network consumers (the region export)."

service:
image: "[[ .params.image ]]"
restart: unless-stopped
environment:
SERVICES: "[[ .params.services ]]"
AWS_DEFAULT_REGION: "[[ .params.region ]]"
PERSIST_STATE: "1"
STATE_DIR: "/var/lib/ministack"
volumes:
- "ministackdata:/var/lib/ministack"
healthcheck:
# /_ministack/ready returns 200 when the edge is serving (503 while starting).
test: ["CMD-SHELL", "curl -sf http://localhost:4566/_ministack/ready"]
interval: 10s
timeout: 5s
retries: 8
start_period: 20s

volumes:
ministackdata: {}
Loading