Sync scope is based on YAML key presence:
- Omitted resource collections are ignored.
- Explicit empty root lists mean the desired count is zero. For example,
apis: [] deletes managed APIs in the selected namespace.
- Parent and child collections are scoped separately. A
portal block without
pages doesn’t delete Dev Portal pages. Use pages: [] under that portal block to
declare that the Dev Portal should have no pages.
- Map-shaped child collections use an empty object as the empty collection. For
example,
email_templates: {} means the Dev Portal should have no customized
email templates.
- Singleton child sections use the same key-presence rule, but
{} and null
are intentionally different. Omit a singleton key to ignore that child.
Provide an object with fields to manage or update it. For optional,
delete-capable Dev Portal singletons such as custom_domain, email_config, and
audit_log_webhook, an empty object scopes the child with desired count zero:
custom_domain: {} deletes any existing managed custom domain for that
Dev Portal during sync. null is rejected because sync doesn’t infer reset or
delete semantics from null. Update-only singleton sections, such as
customization, cannot be deleted by declaring {}.
- Empty child collections must be nested under a parent resource. Root-level
api_documents: [] is rejected because it doesn’t identify which API owns
the desired zero count.
For federated ownership, include the parent resource entry in the team
configuration and scope only the child collection that team owns. When the
parent is managed elsewhere and the resource type supports _external, declare
the parent as external and nest the child collection under that parent. This
allows sync to plan the child collection without treating the managed parent
collection in the team’s namespace as desired state.
apis:
- ref: orders-api
name: Orders API
documents: []
portals:
- ref: shared-docs-portal
_external:
selector:
matchFields:
name: "Shared Docs Portal"
pages: []
The external-parent pattern should not be combined with a namespace default
unless the team also intends to scope managed parent resources in that
namespace.