posit-dev / posit-dev/ptd

`ptd eject` — Customer Infrastructure Handoff

Open
#206 1 comment 0 reactions 0 assignees View on GitHub

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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.