Wraps the new /api/v1/coverages endpoints. Schema mirrors the cnHeat
mental model — antenna, frequency, height, azimuth, downtilt, radius
— with cnHeat-style imperial units (height_agl_ft, radius_mi,
frequency_ghz) the API converts to SI before validation.
Compute is asynchronous: 'terraform apply' returns once the prediction
is queued. The status / progress_pct / error_message / png_path /
raster_path / computed_at fields are computed and update on
'terraform refresh' as the worker progresses through queued →
computing → ready (or failed). Downstream resources that need a
ready heatmap can use a terraform_data trigger that polls the
status field.
Resource semantics:
- Create POST /api/v1/coverages (auto-queues compute)
- Read GET /api/v1/coverages/:id
- Update PATCH /api/v1/coverages/:id (does NOT auto-recompute)
- Delete DELETE /api/v1/coverages/:id
Update doesn't auto-recompute because parameter tweaks may not
require a fresh heatmap; operators can call the recompute endpoint
directly via the existing client method when they want fresh
outputs.
ImportState supported via the standard UUID passthrough.
- Removed DeviceRoleSource field from Device struct and DeviceResourceModel
- Updated device_role description to reflect default value "other"
- Device role is now optional and defaults to "other" if not specified
- Cleaned up all CRUD operations to remove device_role_source handling
All device types are now manually selected with "other" as default.
- Add device_role field to Device struct in client
- Add device_role and device_role_source to DeviceResourceModel
- Add schema attributes for device_role (optional/computed) and device_role_source (computed)
- Handle device_role in Create, Read, and Update operations
- Valid device_role values: server, switch, router, access_point, backhaul, other
- device_role_source automatically set to 'manual' by API when device_role is provided
- Add snmp_community field to Organization struct (client.go)
- Add snmp_community attribute to organization resource schema
- Mark as Optional and Sensitive in Terraform
- Include in Create and Update operations
- Only settable by organization owners (enforced by API)
Example usage:
resource "towerops_organization" "main" {
name = "My Organization"
use_sites = true
snmp_community = "public"
}
- Make 'name' field optional and computed in organization resource
- Include name in Create and Update operations when provided
- Name can only be changed by organization owners (enforced by API)
- Matches API capability to update organization name
- Backwards compatible: name remains optional
Example usage:
resource "towerops_organization" "main" {
name = "My Organization"
use_sites = true
}
- Make site_id optional, add organization_id field
- Devices can be created without sites (directly in organization)
- Add SNMPv3 authentication and privacy fields
- Update documentation with new examples