`ptd eject` — Customer Infrastructure Handoff
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 7
- Forks
- 2
- Avg merge
- 1d 15h
- Merged PRs (30d)
- 3
Description
Summary
When a customer contract ends, we need a clean way to hand off their PTD-managed infrastructure so they can operate it independently. The ptd eject <target> command produces everything the customer needs — documentation, config, state, and resource inventory — and optionally severs the control room connection.
Phases
Phase 1: Inventory & Dry-Run
Generate a complete artifact bundle without changing any infrastructure. Immediately useful for support/sales conversations before severance is built.
ptd eject <target> --dry-run produces:
- PDF/markdown handoff document covering infrastructure overview, resource inventory, network topology, Kubernetes state, and operational guidance
- Config files (ptd.yaml, site.yaml, customizations)
- Full Pulumi stack exports and flattened resource inventory with ARNs
- Secret references (names/ARNs only, no plaintext)
- Operational runbooks (day-to-day ops, disaster recovery, observability)
Phase 2: Control Room Severance
Actually disconnect the workload from the control room — remove cross-account IAM trust, Mimir password sync, Alloy remote_write endpoints, and Team Operator control room config. Done via Pulumi (not direct API calls) to keep state consistent.
Phase 3: Standalone Operations Handoff
Enable the customer to run their infrastructure post-eject. Starting with handing over the PTD CLI + config with control room fields stripped and a standalone mode that skips control-room-dependent logic.
Key Decisions
- Severance approach: Via Pulumi (modify config, re-run ensure steps) — keeps state consistent
- Handoff model: Hand over PTD CLI + config. Standalone Pulumi / Terraform only if demand arises.
- Secrets: List names/ARNs only; customers access values via their own cloud credentials
- Scope: All-or-nothing per workload, no partial eject
- PDF generation: maroto library (already in
ptd attestation) - Observability: The existing observability stack (Grafana/Mimir/Loki/Alloy) in the workload continues running post-eject. Eject bundle provides guidance on accessing and configuring it independently.
- Team Operator: Freeze current version in ptd.yaml at eject time to make it fully stable. Eject bundle includes documentation on how to update Team Operator going forward.
Open Questions
- Transition timeline TBD
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by locating the ptd CLI entry point and the existing ptd attestation command, which already uses the maroto library for PDF generation. Scope the Phase 1 dry-run artifact bundle first, then verify how configuration, Pulumi stack exports, resource inventory, secret references, and operational guidance are represented. Done criteria for the full issue remain unresolved because the three phases and transition timeline are still open.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go, grafana, kubernetes
- Domain
- cli, cloud, devops, infrastructure, observability
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100