feat(resource): define DigitalOcean cloud resource hierarchy (do-account, do-region, do-vpc, do-droplet, do-spaces-bucket) #2432

Open
opened 2026-04-03 18:02:41 +00:00 by freemo · 0 comments
Owner

Metadata

  • Branch: feat/v360/digitalocean-resource-hierarchy
  • Commit Message: feat(resource): define DigitalOcean resource type hierarchy (do-account through do-spaces-bucket)
  • Milestone: v3.6.0
  • Parent Epic: #1019

Background

Part of the cloud resource hierarchy expansion (Epic #1019). This issue implements the full DigitalOcean provider resource type hierarchy following the generic cloud-* base layer pattern established by PR #669.

DigitalOcean's hierarchy is simpler than Azure's: do-accountdo-regiondo-vpcdo-droplet. Object storage (do-spaces-bucket) is region-scoped.

Expected Behavior

  • do-account inherits from cloud-account, is user-addable (entry point for the provider), accepts API token as CLI argument
  • do-region inherits from cloud-region, is auto-discovered as a child of do-account
  • do-vpc inherits from cloud-network, is auto-discovered as a child of do-region
  • do-droplet inherits from cloud-compute-instance, is auto-discovered as a child of do-vpc or do-region
  • do-spaces-bucket inherits from cloud-object-store, is auto-discovered as a child of do-region
  • All non-account types are non-user-addable
  • All types pass ResourceTypeSpec.from_config() validation
  • Inheritance chain depth ≤ 5 levels (ADR-042)
  • DigitalOcean hierarchy has ≥ 5 types (satisfying the Epic acceptance criterion of ≥15 types across all providers combined)

Acceptance Criteria

  • do-account defined with inherits: cloud-account, user_addable: true, CLI argument api-token
  • do-region defined with inherits: cloud-region, parent do-account, user_addable: false
  • do-vpc defined with inherits: cloud-network, parent do-region, user_addable: false
  • do-droplet defined with inherits: cloud-compute-instance, parent do-vpc, user_addable: false
  • do-spaces-bucket defined with inherits: cloud-object-store, parent do-region, user_addable: false
  • All five types registered in the resource type registry
  • All five types pass ResourceTypeSpec.from_config() validation
  • Inheritance chain ≤ 5 levels deep for all types
  • All nox stages pass
  • Coverage ≥ 97%

Dependencies

  • Blocked by: (none — DigitalOcean hierarchy is independent of Azure hierarchy)
  • Blocks: #1019

Subtasks

  • Define do-account resource type config with inherits: cloud-account, user_addable: true, CLI argument api-token
  • Define do-region resource type config with inherits: cloud-region, parent do-account
  • Define do-vpc resource type config with inherits: cloud-network, parent do-region
  • Define do-droplet resource type config with inherits: cloud-compute-instance, parent do-vpc
  • Define do-spaces-bucket resource type config with inherits: cloud-object-store, parent do-region
  • Register all five types in the resource type registry
  • Validate all types pass ResourceTypeSpec.from_config() validation
  • Run nox (all default sessions), fix any errors
  • Verify coverage ≥ 97% via nox -s coverage_report

Definition of Done

  • All subtasks completed and checked off
  • All five DigitalOcean resource types are defined, registered, and validated
  • A Git commit is created where the first line of the commit message matches the Commit Message in Metadata exactly
  • The commit is pushed to the remote on the branch matching the Branch in Metadata exactly
  • The commit is submitted as a pull request to master, reviewed, and merged before this issue is marked done
  • All nox stages pass
  • Coverage ≥ 97%

Automated by CleverAgents Bot
Supervisor: Unknown | Agent: ca-epic-planner

## Metadata - **Branch**: `feat/v360/digitalocean-resource-hierarchy` - **Commit Message**: `feat(resource): define DigitalOcean resource type hierarchy (do-account through do-spaces-bucket)` - **Milestone**: v3.6.0 - **Parent Epic**: #1019 ## Background Part of the cloud resource hierarchy expansion (Epic #1019). This issue implements the full DigitalOcean provider resource type hierarchy following the generic `cloud-*` base layer pattern established by PR #669. DigitalOcean's hierarchy is simpler than Azure's: `do-account` → `do-region` → `do-vpc` → `do-droplet`. Object storage (`do-spaces-bucket`) is region-scoped. ## Expected Behavior - `do-account` inherits from `cloud-account`, is user-addable (entry point for the provider), accepts API token as CLI argument - `do-region` inherits from `cloud-region`, is auto-discovered as a child of `do-account` - `do-vpc` inherits from `cloud-network`, is auto-discovered as a child of `do-region` - `do-droplet` inherits from `cloud-compute-instance`, is auto-discovered as a child of `do-vpc` or `do-region` - `do-spaces-bucket` inherits from `cloud-object-store`, is auto-discovered as a child of `do-region` - All non-account types are non-user-addable - All types pass `ResourceTypeSpec.from_config()` validation - Inheritance chain depth ≤ 5 levels (ADR-042) - DigitalOcean hierarchy has ≥ 5 types (satisfying the Epic acceptance criterion of ≥15 types across all providers combined) ## Acceptance Criteria - [ ] `do-account` defined with `inherits: cloud-account`, `user_addable: true`, CLI argument `api-token` - [ ] `do-region` defined with `inherits: cloud-region`, parent `do-account`, `user_addable: false` - [ ] `do-vpc` defined with `inherits: cloud-network`, parent `do-region`, `user_addable: false` - [ ] `do-droplet` defined with `inherits: cloud-compute-instance`, parent `do-vpc`, `user_addable: false` - [ ] `do-spaces-bucket` defined with `inherits: cloud-object-store`, parent `do-region`, `user_addable: false` - [ ] All five types registered in the resource type registry - [ ] All five types pass `ResourceTypeSpec.from_config()` validation - [ ] Inheritance chain ≤ 5 levels deep for all types - [ ] All nox stages pass - [ ] Coverage ≥ 97% ## Dependencies - Blocked by: (none — DigitalOcean hierarchy is independent of Azure hierarchy) - Blocks: #1019 ## Subtasks - [ ] Define `do-account` resource type config with `inherits: cloud-account`, `user_addable: true`, CLI argument `api-token` - [ ] Define `do-region` resource type config with `inherits: cloud-region`, parent `do-account` - [ ] Define `do-vpc` resource type config with `inherits: cloud-network`, parent `do-region` - [ ] Define `do-droplet` resource type config with `inherits: cloud-compute-instance`, parent `do-vpc` - [ ] Define `do-spaces-bucket` resource type config with `inherits: cloud-object-store`, parent `do-region` - [ ] Register all five types in the resource type registry - [ ] Validate all types pass `ResourceTypeSpec.from_config()` validation - [ ] Run `nox` (all default sessions), fix any errors - [ ] Verify coverage ≥ 97% via `nox -s coverage_report` ## Definition of Done - [ ] All subtasks completed and checked off - [ ] All five DigitalOcean resource types are defined, registered, and validated - [ ] A Git commit is created where the **first line** of the commit message matches the Commit Message in Metadata exactly - [ ] The commit is pushed to the remote on the branch matching the **Branch** in Metadata exactly - [ ] The commit is submitted as a **pull request** to `master`, reviewed, and **merged** before this issue is marked done - [ ] All nox stages pass - [ ] Coverage ≥ 97% --- **Automated by CleverAgents Bot** Supervisor: Unknown | Agent: ca-epic-planner
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
cleveragents/cleveragents-core#2432
No description provided.