Architecture
This document covers architectural details relevant to controller developers. For user-facing concepts (management policies, dependencies, deletion behavior), see Core Concepts. For design rationale, see Design Principles.
Adoption
Adoption is a mechanism to recover from partial failures during resource
creation. If ORC creates an OpenStack resource but fails to record its ID in
status.id (e.g. due to a controller crash), the resource would appear
orphaned on the next reconcile.
To handle this, before creating a new resource, ORC searches OpenStack for existing resources that match the spec. If a match is found, ORC adopts it instead of creating a duplicate. This makes resource creation idempotent.
Adoption is an internal implementation detail, not a user-facing feature. It differs from import, which is an intentional mechanism for users to bring existing resources under ORC management.
Documenting implicit behavior overrides
When ORC overrides OpenStack's default behavior to ensure deterministic behavior (e.g. not creating IP addresses for ports unless explicitly specified), the behavior should be documented in the API's Godoc.