# TowerOps Terraform Provider Terraform provider for managing [TowerOps](https://towerops.io) resources. ## Requirements - [Terraform](https://www.terraform.io/downloads.html) >= 1.0 - [Go](https://golang.org/doc/install) >= 1.21 (to build the provider) ## Installation ```hcl terraform { required_providers { towerops = { source = "towerops/towerops" version = "~> 0.1" } } } ``` ## Authentication The provider requires an API token for authentication. Generate a token from the TowerOps web application under Settings → API Tokens. ```hcl provider "towerops" { token = var.towerops_api_token } ``` You can also set the token via environment variable: ```bash export TOWEROPS_TOKEN="your-api-token" ``` ## Resources ### towerops_site Manages a TowerOps site. Sites represent physical locations that contain devices. ```hcl resource "towerops_site" "example" { name = "Main Office" location = "New York, NY" snmp_community = "public" } ``` #### Arguments | Name | Type | Required | Description | |------|------|----------|-------------| | `name` | string | Yes | Site name (2-200 characters) | | `location` | string | No | Physical location or address | | `snmp_community` | string | No | Default SNMP community string for devices | #### Attributes | Name | Description | |------|-------------| | `id` | Unique identifier (UUID) | | `inserted_at` | Creation timestamp | #### Import ```bash terraform import towerops_site.example 550e8400-e29b-41d4-a716-446655440000 ``` ### towerops_device Manages a TowerOps device. Devices represent network equipment at a site. ```hcl resource "towerops_device" "router" { site_id = towerops_site.example.id name = "Core Router" ip_address = "192.168.1.1" monitoring_enabled = true snmp_enabled = true snmp_version = "2c" snmp_port = 161 } ``` #### Arguments | Name | Type | Required | Default | Description | |------|------|----------|---------|-------------| | `site_id` | string | Yes | - | ID of the parent site (forces replacement if changed) | | `name` | string | Yes | - | Device name | | `ip_address` | string | Yes | - | Device IP address | | `description` | string | No | - | Device description | | `monitoring_enabled` | bool | No | `true` | Enable monitoring | | `snmp_enabled` | bool | No | `true` | Enable SNMP polling | | `snmp_version` | string | No | `"2c"` | SNMP version (1, 2c, or 3) | | `snmp_port` | number | No | `161` | SNMP port | #### Attributes | Name | Description | |------|-------------| | `id` | Unique identifier (UUID) | | `inserted_at` | Creation timestamp | #### Import ```bash terraform import towerops_device.router 7c9e6679-7425-40de-944b-e07fc1f90ae7 ``` ## Example ```hcl terraform { required_providers { towerops = { source = "towerops/towerops" version = "~> 0.1" } } } variable "towerops_api_token" { type = string sensitive = true } provider "towerops" { token = var.towerops_api_token } resource "towerops_site" "datacenter" { name = "Primary Datacenter" location = "Chicago, IL" snmp_community = "monitoring" } resource "towerops_device" "core_switch" { site_id = towerops_site.datacenter.id name = "Core Switch" ip_address = "10.0.0.1" description = "Main distribution switch" snmp_enabled = true snmp_version = "2c" } resource "towerops_device" "edge_router" { site_id = towerops_site.datacenter.id name = "Edge Router" ip_address = "10.0.0.2" snmp_enabled = true snmp_version = "3" } output "site_id" { value = towerops_site.datacenter.id } ``` ## License MPL-2.0