Commit Graph

45 Commits (750cf3072c036df46600c13e801e613946d86b22)

Author SHA1 Message Date
A. F. Dudley 81fb4675f9 Increase default container resources to 4 CPUs and 8GB memory
Solana/Agave validators require at least 2 CPU threads for the
ip-echo-server. Increased defaults to support more resource-intensive
workloads.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 06:06:47 -05:00
A. F. Dudley d9c0614ba3 Set ConfigMap defaultMode to 0755 for executable scripts
ConfigMaps containing scripts need execute permissions.
Without this, scripts mounted from ConfigMaps fail with
"permission denied" when used as container commands.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 06:02:26 -05:00
A. F. Dudley 2f4dd4ce12 Add command/entrypoint support for K8s deployments
Docker-compose command and entrypoint are now passed to K8s:
- entrypoint -> K8s command (overrides ENTRYPOINT)
- command -> K8s args (overrides CMD)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 05:57:38 -05:00
A. F. Dudley bce898ec35 Implement docker-compose variable expansion for K8s
- Implement _expand_shell_vars to handle ${VAR}, ${VAR:-default}, ${VAR-default}
- Pass config file values to envs_from_compose_file for variable substitution
- Variables from config file still override expanded defaults

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 05:46:37 -05:00
A. F. Dudley b458295fa5 Add UDP protocol support for K8s port definitions
- Parse protocol suffix (e.g., "8001/udp") in port definitions
- Support multiple ports per container instead of just the first
- Include protocol in NodePort service names for uniqueness
- Enables Solana RPC deployments that require UDP for QUIC protocol

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 05:20:32 -05:00
A. F. Dudley 8426d99ed9 Add kind cluster reuse and list command
- Add get_kind_cluster() to detect existing kind clusters
- Modify create_cluster() to reuse existing clusters automatically
- Add 'laconic-so deploy k8s list cluster' command
- Skip --stack requirement for k8s subcommand

This allows multiple deployments to share the same kind cluster,
simplifying local development workflows.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 04:08:16 -05:00
A. F. Dudley 3606b5dd90 Add Caddy ingress controller support for kind deployments
Replace nginx with Caddy as the default ingress controller for kind
deployments. Caddy provides automatic HTTPS via Let's Encrypt without
requiring cert-manager.

Changes:
- Add ingress-caddy-kind-deploy.yaml manifest with full RBAC setup
- Modify helpers.py to support configurable ingress_type parameter
- Update cluster_info.py to use caddy ingress class
- Add port 443 mapping for HTTPS support in kind config

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 02:39:01 -05:00
Thomas E Lackey fa21ff2627 Support uploaded config, add 'publish-webapp-deployer' and 'request-webapp-deployment' commands (#938)
Lint Checks / Run linter (push) Failing after 5s Details
Publish / Build and publish (push) Failing after 4s Details
Webapp Test / Run webapp test suite (push) Failing after 3s Details
Deploy Test / Run deploy test suite (push) Failing after 3s Details
Smoke Test / Run basic test suite (push) Failing after 3s Details
This adds two new commands: `publish-webapp-deployer` and `request-webapp-deployment`.

`publish-webapp-deployer` creates a `WebappDeployer` record, which provides information to requestors like the API URL, minimum required payment, payment address, and public key to use for encrypting config.

```
$ laconic-so publish-deployer-to-registry \
  --laconic-config ~/.laconic/laconic.yml \
  --api-url https://webapp-deployer-api.dev.vaasl.io \
  --public-key-file webapp-deployer-api.dev.vaasl.io.pgp.pub  \
  --lrn lrn://laconic/deployers/webapp-deployer-api.dev.vaasl.io  \
  --min-required-payment 100000
```

`request-webapp-deployment` simplifies publishing a `WebappDeploymentRequest` and can also handle automatic payment, and encryption and upload of configuration.

```
$ laconic-so request-webapp-deployment \
  --laconic-config ~/.laconic/laconic.yml \
  --deployer lrn://laconic/deployers/webapp-deployer-api.dev.vaasl.io \
  --app lrn://cerc-io/applications/webapp-hello-world@0.1.3 \
  --env-file ~/yaml/hello.env \
  --make-payment auto
```

Related changes are included for the deploy/undeploy commands for decrypting and using config, using the payment address from the WebappDeployer record, etc.

Reviewed-on: https://git.vdb.to/cerc-io/stack-orchestrator/pulls/938
2024-08-27 19:55:06 +00:00
David Boreham e56da7dcc1 Add support for k8s pod to node affinity and taint toleration (#917)
Deploy Test / Run deploy test suite (push) Failing after 4s Details
Webapp Test / Run webapp test suite (push) Failing after 3s Details
Smoke Test / Run basic test suite (push) Failing after 4s Details
Publish / Build and publish (push) Failing after 4s Details
K8s Deployment Control Test / Run deployment control suite on kind/k8s (push) Failing after 3s Details
Lint Checks / Run linter (push) Failing after 3s Details
Reviewed-on: https://git.vdb.to/cerc-io/stack-orchestrator/pulls/917
Reviewed-by: Thomas E Lackey <telackey@noreply.git.vdb.to>
Co-authored-by: David Boreham <david@bozemanpass.com>
Co-committed-by: David Boreham <david@bozemanpass.com>
2024-08-15 20:32:58 +00:00
Thomas E Lackey 8576137557 Convert port to string. (#919)
Lint Checks / Run linter (push) Failing after 4s Details
Webapp Test / Run webapp test suite (push) Failing after 3s Details
Publish / Build and publish (push) Failing after 5s Details
Deploy Test / Run deploy test suite (push) Failing after 3s Details
Smoke Test / Run basic test suite (push) Failing after 3s Details
The str type check doesn't work if the port is a ruamel.yaml.scalarstring.SingleQuotedScalarString or ruamel.yaml.scalarstring.DoubleQuotedScalarString

Reviewed-on: https://git.vdb.to/cerc-io/stack-orchestrator/pulls/919
Co-authored-by: Thomas E Lackey <telackey@bozemanpass.com>
Co-committed-by: Thomas E Lackey <telackey@bozemanpass.com>
2024-08-14 00:25:35 +00:00
David Boreham 65c1cdf6b1 Fix crash if port has int type in yaml (#918)
Reviewed-on: https://git.vdb.to/cerc-io/stack-orchestrator/pulls/918
Reviewed-by: Thomas E Lackey <telackey@noreply.git.vdb.to>
Co-authored-by: David Boreham <david@bozemanpass.com>
Co-committed-by: David Boreham <david@bozemanpass.com>
2024-08-13 20:47:09 +00:00
David Boreham 265699bc38 Allow to disable kind cluster management for testing (#915)
Deploy Test / Run deploy test suite (push) Failing after 5s Details
Webapp Test / Run webapp test suite (push) Failing after 2s Details
Smoke Test / Run basic test suite (push) Failing after 2s Details
Lint Checks / Run linter (push) Failing after 3s Details
Publish / Build and publish (push) Failing after 4s Details
Reviewed-on: https://git.vdb.to/cerc-io/stack-orchestrator/pulls/915
Co-authored-by: David Boreham <david@bozemanpass.com>
Co-committed-by: David Boreham <david@bozemanpass.com>
2024-08-13 17:48:14 +00:00
Thomas E Lackey 1def279d26 Support multiple NodePorts, static NodePort mapping, and add 'replicas' spec option (#913)
Deploy Test / Run deploy test suite (push) Failing after 3s Details
Webapp Test / Run webapp test suite (push) Failing after 2s Details
Publish / Build and publish (push) Failing after 4s Details
Smoke Test / Run basic test suite (push) Failing after 2s Details
Lint Checks / Run linter (push) Failing after 2s Details
NodePort example:

```
network:
  ports:
    caddy:
     - 1234
     - 32020:2020
```

Replicas example:

```
replicas: 2
```

This also adds an optimization for k8s where if a directory matching the name of a configmap exists in beneath config/ in the stack, its contents will be copied into the corresponding configmap.

For example:

```
# Config files in the stack
❯ ls stack-orchestrator/config/caddyconfig
Caddyfile  Caddyfile.one-req-per-upstream-example

# ConfigMap in the spec
❯ cat foo.yml | grep config
...
configmaps:
  caddyconfig: ./configmaps/caddyconfig

# Create the deployment
❯ laconic-so --stack ~/cerc/caddy-ethcache/stack-orchestrator/stacks/caddy-ethcache deploy create --spec-file foo.yml

# The files from beneath config/<config_map_name> have been copied to the ConfigMap directory from the spec.
❯ ls deployment-001/configmaps/caddyconfig
Caddyfile  Caddyfile.one-req-per-upstream-example
```

Reviewed-on: https://git.vdb.to/cerc-io/stack-orchestrator/pulls/913
Reviewed-by: David Boreham <dboreham@noreply.git.vdb.to>
Co-authored-by: Thomas E Lackey <telackey@bozemanpass.com>
Co-committed-by: Thomas E Lackey <telackey@bozemanpass.com>
2024-08-09 02:32:06 +00:00
David Boreham 3fb025b5c9 Make remote image tags unique to the deployment (#838)
Webapp Test / Run webapp test suite (push) Failing after 4s Details
Deploy Test / Run deploy test suite (push) Failing after 3s Details
Publish / Build and publish (push) Failing after 4s Details
Smoke Test / Run basic test suite (push) Failing after 3s Details
Lint Checks / Run linter (push) Failing after 3s Details
Reviewed-on: https://git.vdb.to/cerc-io/stack-orchestrator/pulls/838
Reviewed-by: Thomas E Lackey <telackey@noreply.git.vdb.to>
Co-authored-by: David Boreham <david@bozemanpass.com>
Co-committed-by: David Boreham <david@bozemanpass.com>
2024-06-13 03:26:58 +00:00
Thomas E Lackey 523b5779be Auto-detect which certificate to use (including wildcards). (#779)
Publish / Build and publish (push) Successful in 53s Details
Deploy Test / Run deploy test suite (push) Successful in 3m39s Details
Webapp Test / Run webapp test suite (push) Successful in 2m47s Details
Smoke Test / Run basic test suite (push) Successful in 3m54s Details
Lint Checks / Run linter (push) Failing after 3s Details
Rather than always requesting a certificate, attempt to re-use an existing certificate if it already exists in the k8s cluster.  This includes matching to a wildcard certificate.

Reviewed-on: https://git.vdb.to/cerc-io/stack-orchestrator/pulls/779
Co-authored-by: Thomas E Lackey <telackey@bozemanpass.com>
Co-committed-by: Thomas E Lackey <telackey@bozemanpass.com>
2024-03-07 17:38:36 +00:00
David Boreham 37b9500483 Support non-tls ingress for kind (#748)
Publish / Build and publish (push) Successful in 3m2s Details
Smoke Test / Run basic test suite (push) Successful in 4m16s Details
Webapp Test / Run webapp test suite (push) Successful in 11m15s Details
Lint Checks / Run linter (push) Failing after 4s Details
Deploy Test / Run deploy test suite (push) Successful in 3m34s Details
Reviewed-on: https://git.vdb.to/cerc-io/stack-orchestrator/pulls/748
Co-authored-by: David Boreham <david@bozemanpass.com>
Co-committed-by: David Boreham <david@bozemanpass.com>
2024-02-17 01:54:30 +00:00
David Boreham d9bb6b3588 Test Database Stack (#737)
Smoke Test / Run basic test suite (push) Successful in 3m54s Details
Deploy Test / Run deploy test suite (push) Successful in 3m40s Details
Publish / Build and publish (push) Successful in 50s Details
Webapp Test / Run webapp test suite (push) Successful in 2m33s Details
Lint Checks / Run linter (push) Failing after 3s Details
Reviewed-on: https://git.vdb.to/cerc-io/stack-orchestrator/pulls/737
2024-02-15 05:26:29 +00:00
Thomas E Lackey b22c72e715 For k8s, use provisioner-managed volumes when an absolute host path is not specified. (#741)
In kind, when we bind-mount a host directory it is first mounted into the kind container at /mnt, then into the pod at the desired location.

We accidentally picked this up for full-blown k8s, and were creating volumes at /mnt.  This changes the behavior for both kind and regular k8s so that bind mounts are only allowed if a fully-qualified path is specified.  If no path is specified at all, a default storageClass is assumed to be present, and the volume managed by a provisioner.

Eg, for kind, the default provisioner is: https://github.com/rancher/local-path-provisioner

```
stack: test
deploy-to: k8s-kind
config:
  test-variable-1: test-value-1
network:
  ports:
    test:
     - '80'
volumes:
  # this will be bind-mounted to a host-path
  test-data-bind: /srv/data
  # this will be managed by the k8s node
  test-data-auto:
configmaps:
  test-config: ./configmap/test-config
```

Reviewed-on: https://git.vdb.to/cerc-io/stack-orchestrator/pulls/741
Co-authored-by: Thomas E Lackey <telackey@bozemanpass.com>
Co-committed-by: Thomas E Lackey <telackey@bozemanpass.com>
2024-02-14 21:45:01 +00:00
Thomas E Lackey 903f3b10e2 Add support for annotations and labels in spec. (#739)
```
stack: webapp-deployer-backend
deploy-to: k8s
annotations:
  foo.bar.annot/{name}: baz
labels:
  a.b.c/{name}.blah: "value"
```

Reviewed-on: https://git.vdb.to/cerc-io/stack-orchestrator/pulls/739
Co-authored-by: Thomas E Lackey <telackey@bozemanpass.com>
Co-committed-by: Thomas E Lackey <telackey@bozemanpass.com>
2024-02-09 00:11:07 +00:00
David Boreham 8be1e684e8 Process environment variables defined in compose files (#736)
Reviewed-on: https://git.vdb.to/cerc-io/stack-orchestrator/pulls/736
Co-authored-by: David Boreham <david@bozemanpass.com>
Co-committed-by: David Boreham <david@bozemanpass.com>
2024-02-08 19:41:57 +00:00
Thomas E Lackey 3309782439 Refactor 2024-02-08 00:47:46 -06:00
Thomas E Lackey 4b3b3478e7 Switch to Docker-style limits 2024-02-08 00:43:41 -06:00
Thomas E Lackey 2a9955055c debug 2024-02-07 16:56:35 -06:00
Thomas E Lackey 8964e1c0fe Add resource limit options to spec. 2024-02-07 16:48:02 -06:00
David Boreham bfbcfb7904
Volume processing fixes (#729)
Publish / Build and publish (push) Successful in 55s Details
Deploy Test / Run deploy test suite (push) Successful in 2m58s Details
Webapp Test / Run webapp test suite (push) Successful in 2m42s Details
Smoke Test / Run basic test suite (push) Successful in 3m57s Details
2024-02-06 12:32:10 -07:00
David Boreham 6848fc33cf
Implement dry run support for k8s deploy (#727) 2024-02-06 07:07:56 -07:00
Thomas E Lackey 36bb068983
Add ConfigMap test. (#726)
Publish / Build and publish (push) Successful in 1m24s Details
Deploy Test / Run deploy test suite (push) Successful in 2m52s Details
K8s Deploy Test / Run deploy test suite on kind/k8s (push) Failing after 1m3s Details
Webapp Test / Run webapp test suite (push) Successful in 2m40s Details
Smoke Test / Run basic test suite (push) Successful in 4m24s Details
* Add ConfigMap test.

* eof

* Minor tweak

* Trigger test

---------

Co-authored-by: David Boreham <david@bozemanpass.com>
2024-02-05 14:15:11 -06:00
Thomas E Lackey 2fcd416e29
Basic webapp deployer stack. (#722)
Webapp Test / Run webapp test suite (push) Successful in 2m35s Details
Smoke Test / Run basic test suite (push) Successful in 3m46s Details
Publish / Build and publish (push) Successful in 50s Details
Deploy Test / Run deploy test suite (push) Successful in 2m56s Details
2024-02-02 19:05:15 -07:00
Thomas E Lackey 12ec1bec43
Add ConfigMap support for k8s. (#714)
Publish / Build and publish (push) Successful in 50s Details
Deploy Test / Run deploy test suite (push) Successful in 3m7s Details
Webapp Test / Run webapp test suite (push) Successful in 2m38s Details
Smoke Test / Run basic test suite (push) Successful in 3m45s Details
* Minor fixes for deploying with k8s and podman.

* ConfigMap support
2024-01-30 23:09:48 -06:00
Thomas E Lackey 62af03077f
Add deployed/error status output to the state file. (#719)
* More status info
* Up default resource limits.
* Need ps
2024-01-30 22:13:45 -06:00
David Boreham 1f9653e6f7
Fix kind mode and add k8s deployment test (#704)
* Fix kind mode and add k8s deployment test

* Fix lint errors
2024-01-16 15:55:58 -07:00
David Boreham d8357df345
Add image pull secret to pods (#692)
Publish / Build and publish (push) Successful in 56s Details
Deploy Test / Run deploy test suite (push) Successful in 3m16s Details
K8s Deploy Test / Run deploy test suite (push) Failing after 3m14s Details
Webapp Test / Run webapp test suite (push) Failing after 2m37s Details
Smoke Test / Run basic test suite (push) Successful in 4m26s Details
2023-12-15 14:27:45 -07:00
Thomas E Lackey 88f66a3626
Add `deployment update` and `deploy-webapp-from-registry` commands. (#676) 2023-12-13 21:02:34 -06:00
Thomas E Lackey 077ea80c70
Add `deployment status` command and fix k8s output for `deployment ps` (#679)
Publish / Build and publish (push) Successful in 59s Details
Deploy Test / Run deploy test suite (push) Successful in 3m13s Details
K8s Deploy Test / Run deploy test suite (push) Failing after 3m16s Details
Webapp Test / Run webapp test suite (push) Failing after 3m48s Details
Smoke Test / Run basic test suite (push) Successful in 4m25s Details
2023-12-06 09:27:47 -07:00
Thomas E Lackey 03a3645b3c
Add --port option to run-webapp. (#667)
K8s Deploy Test / Run deploy test suite (push) Failing after 3m1s Details
Webapp Test / Run webapp test suite (push) Failing after 3m30s Details
Smoke Test / Run basic test suite (push) Successful in 4m2s Details
Publish / Build and publish (push) Successful in 58s Details
Deploy Test / Run deploy test suite (push) Successful in 3m18s Details
* Add --port option to run-webapp

* Fixed merge

* lint
2023-11-29 11:32:28 -06:00
David Boreham 113c0bfbf1
Propagate env file for webapp deployment (#669)
Deploy Test / Run deploy test suite (push) Successful in 3m21s Details
K8s Deploy Test / Run deploy test suite (push) Failing after 3m7s Details
Webapp Test / Run webapp test suite (push) Failing after 3m53s Details
Smoke Test / Run basic test suite (push) Successful in 4m7s Details
Publish / Build and publish (push) Successful in 57s Details
2023-11-28 21:14:02 -07:00
David Boreham a68cd5d65c
Webapp deploy (#662)
Webapp Test / Run webapp test suite (push) Failing after 4m1s Details
Smoke Test / Run basic test suite (push) Successful in 4m14s Details
Publish / Build and publish (push) Successful in 58s Details
Deploy Test / Run deploy test suite (push) Successful in 3m40s Details
K8s Deploy Test / Run deploy test suite (push) Failing after 3m20s Details
2023-11-27 22:02:16 -07:00
David Boreham 87bedde5cb
Support for k8s ingress and tls (#659)
Smoke Test / Run basic test suite (push) Successful in 4m9s Details
Publish / Build and publish (push) Successful in 1m3s Details
Deploy Test / Run deploy test suite (push) Successful in 3m1s Details
K8s Deploy Test / Run deploy test suite (push) Failing after 3m4s Details
Webapp Test / Run webapp test suite (push) Failing after 3m34s Details
2023-11-21 16:04:36 -07:00
David Boreham 01029cf7aa
Fix for code path that doesn't create a DeploymentContext (#658) 2023-11-21 08:35:31 -07:00
David Boreham f6624cb33a
Add image push command (#656)
Publish / Build and publish (push) Successful in 57s Details
Deploy Test / Run deploy test suite (push) Successful in 3m6s Details
K8s Deploy Test / Run deploy test suite (push) Failing after 3m10s Details
Webapp Test / Run webapp test suite (push) Failing after 3m37s Details
Smoke Test / Run basic test suite (push) Successful in 4m8s Details
2023-11-20 20:23:55 -07:00
David Boreham c9c6a0eee3
Changes for remote k8s (#655)
Publish / Build and publish (push) Successful in 1m2s Details
Deploy Test / Run deploy test suite (push) Successful in 3m6s Details
K8s Deploy Test / Run deploy test suite (push) Failing after 3m4s Details
Webapp Test / Run webapp test suite (push) Failing after 3m36s Details
Smoke Test / Run basic test suite (push) Successful in 4m4s Details
2023-11-20 09:12:57 -07:00
Thomas E Lackey 2059d67dca
Add run-webapp command. (#651) 2023-11-15 10:54:27 -07:00
David Boreham ce587457d7
Add env var support for k8s (#634) 2023-11-08 17:53:46 -07:00
David Boreham 5e91c2224e
kind test stack (#629)
Publish / Build and publish (push) Successful in 58s Details
Deploy Test / Run deploy test suite (push) Successful in 3m7s Details
Webapp Test / Run webapp test suite (push) Failing after 3m37s Details
Smoke Test / Run basic test suite (push) Successful in 4m1s Details
2023-11-08 01:11:00 -07:00
David Boreham 4456e70c93
Rename app -> stack_orchestrator (#625)
Publish / Build and publish (push) Successful in 1m0s Details
Deploy Test / Run deploy test suite (push) Successful in 3m25s Details
Smoke Test / Run basic test suite (push) Successful in 4m21s Details
2023-11-07 00:06:55 -07:00