Full Terraform Provider ↔ API Parity
A
Andrii Mrichko
Summary
Several Port API capabilities have no provider equivalent, forcing customers to fall back to null_resource + local-exec raw API calls. This undermines the value of IaC and blocks Via Transportation from going full production.
Gaps
SaaS Integrations port_integration cannot set installation type correctly; bootstraps hardcode installationType: "OnPrem" on POST. Workaround: manual API calls.
Integration Credentials port_integration only applies mapping config; no way to set credentials or other integration configuration available via the API. Workaround: manual API calls.
Integration Resync No way to trigger a resync after creation. Suggested implementation via Terraform provider functions. Workaround: manual API calls.
Per-Widget Page Editing Only whole-page replacement is supported; no ability to modify individual widgets. Preferred model: port_page as an umbrella resource referencing widgets by position, with port_page_widget as a configurable child resource.
Catalog Page Metadata port_page (including beta) does not expose showInSidebar or section fields. Workaround: not possible via IaC.
Page Type Support Only blueprint-entities, dashboard, and home page types are currently supported. Workaround: not possible via IaC.
Blueprint Relation/Ownership No first-class resource exists; gaps filled today via external scripts (ensure_blueprint_relation.py, ensure_blueprint_ownership.sh).
Native Team Field on Entities Ocean cannot set the team field natively. Workaround: apply_team_membership.py.
Ask
Full provider ↔ API parity across integrations (SaaS installation type, credentials, resync trigger), page metadata (showInSidebar, section), and all page types.
First-class port_page_widget resource — expose port_page as an umbrella resource referencing widgets by position, with port_page_widget as a configurable child resource supporting partial updates.
First-class port_blueprint_relation resource — supporting partial updates and deferred binding to eliminate reliance on out-of-band scripts.
Documentation of replace-only fields — e.g. the full widgets JSON on catalog pages, which is currently replaced entirely on every apply