Skip to content

Support templated/ephemeral targets for deploying own test infrastructure #132

Description

@ineedjet

Problem

flightdeck's current model is oriented around one use case: running a stable, hand-declared fleet of pre-packaged applications - the kind of thing you'd use to run a homelab or a corporate infrastructure built from ready-made services, where the containers themselves are authored by someone else.

Everything reflects that:

  • targets/*.yml and vaults/*.yml are static files checked into git, hand-authored per target.
  • release.yml's load-yaml-matrix step discovers and deploys to every file in targets/ unconditionally on every release - there's no notion of "some targets exist temporarily."
  • app_refs resolve to published release bundles (owner/repo@tag), i.e. curated app catalogs, not arbitrary images at arbitrary versions.
  • deploy/deploy.py has no teardown path at all - once a target exists, it exists until someone manually deletes its files and cleans up the host by hand.

This doesn't fit a second, genuinely different use case: orchestrating your own test infrastructure - spinning up short-lived test stands to exercise your own containers at arbitrary branches/tags/commits, then tearing them down once the test is done (e.g. one stand per PR, or per feature branch, or on manual trigger).

Proposal

Not fully scoped yet - this needs a design discussion before implementation, since it touches several parts of the pipeline at once. Some threads worth exploring:

  • A way to generate a target's manifest (and its vault wiring) programmatically or from a template at trigger time, instead of requiring targets/{name}.yml to already exist in git before a deploy can happen.
  • Deploying arbitrary image refs (branch/tag/SHA) for one's own containers rather than curated release-asset bundles - the vault-per-app model and env_refs mechanism are probably already agnostic to what the image actually is, so this half may already work; the missing piece is more about generating the target/vault wiring on demand than the image resolution itself.
  • The existing per-target path field (targets/{name}.yml, defaults to ~/flightdeck) already lets multiple targets share one host without colliding - releases/, current, and apps-data are all scoped under it. Worth confirming this is sufficient for running several concurrent test stands on one host, or whether a lighter host-provisioning story is also needed.
  • A teardown path: something needs to actually stop containers and prune the release/data directories when a test stand's lifetime ends (PR closed, branch deleted, TTL expired) - deploy/deploy.py only knows how to deploy today, never how to remove.

Related

This is a genuinely different mode from flightdeck's current one ("stable declared fleet") and would meaningfully broaden what it covers - closing the gap between "run my homelab" and "orchestrate my own test/staging infrastructure" would mean flightdeck could replace a separate tool for the latter entirely.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions