Terraform provider for Netbox.
- A libc library like libc6-compat or libc-utils
- General developer tools like make, bash, ... (to build the provider)
- Go 1.19 minimum (to build the provider)
- Terraform (to use the provider)
Netbox version | Provider version |
---|---|
2.8 | 0.x.y |
2.9 | 1.x.y |
2.11 | 2.x.y |
3.0 | 3.x.y |
3.1 | 4.x.y |
3.2 | 5.x.y |
3.3 | 6.x.y |
This project does not use netbox-community/go-netbox but the same library generated by myself located here smutel/go-netbox for three reasons:
- By the past this project was not maintained anymore so I decided to create my own project
- I am using a patch strategy and generation of the library by the CI
- I does not need to wait if I need a patch quickly
Clone repository to: $GOPATH/src/github.com/smutel/terraform-provider-netbox
mkdir -p $GOPATH/src/github.com/smutel
cd $GOPATH/src/github.com/smutel
git clone git@github.com:smutel/terraform-provider-netbox.git
Enter the provider directory and build the provider
cd $GOPATH/src/github.com/smutel/terraform-provider-netbox
make build
To run the tests you need to have a running netbox installation. For example netbox-docker.
To run the tests execute:
export NETBOX_TOKEN=0123456789abcdef0123456789abcdef01234567
export NETBOX_SCHEME=http
export NETBOX_URL=localhost:8000
TF_ACC=1 go test -v ./...
Scheme and URL are not needed it the default is used (https and localhost:8000)
To run only some tests execute the following:
TF_ACC=1 go test -v ./... -run TestAccNetboxVirtualizationVM
To run this provider in delve run:
dlv exec --accept-multiclient --continue --headless ./terraform-provider-netbox -- -debug
For Visual Studio Code a config is provided in this repo. Pressing should run the provider in debug mode.
This will output a value for TF_REATTACH_PROVIDER:
Starting: /home/andy/go/bin/dlv dap --check-go-version=false --listen=127.0.0.1:43501 --log-dest=3 from /home/andy/terraform/terraform-provider-netbox
DAP server listening at: 127.0.0.1:43501
Type 'dlv help' for list of commands.
{"@level":"debug","@message":"plugin address","@timestamp":"2022-09-04T19:19:00.482554+02:00","address":"/tmp/plugin2734508527","network":"unix"}
Provider started. To attach Terraform CLI, set the TF_REATTACH_PROVIDERS environment variable with the following:
TF_REATTACH_PROVIDERS='{"registry.terraform.io/smutel/netbox":{"Protocol":"grpc","ProtocolVersion":5,"Pid":2519102,"Test":true,"Addr":{"Network":"unix","String":"/tmp/plugin2734508527"}}}'
In your terrafom directory run the following:
export TF_REATTACH_PROVIDER=(Value from above)
terraform plan
More information about debugging a terraform provider can be found in the terraform documentation
NOTE
Before changing the version of the provider, please remove the temporary folder .terraform
and ~/.terraform.d
.
terraform {
required_providers {
netbox = {
source = "smutel/netbox"
version = "~> 6.0.0"
}
}
}
You can install the provider manually in your global terraform provider folder.
export NETBOX_PROVIDER_VERSION=6.0.0
mkdir -p ~/.terraform.d/plugins/registry.terraform.io/smutel/netbox/${NETBOX_PROVIDER_VERSION}/linux_amd64
cp terraform-provider-netbox_v${NETBOX_PROVIDER_VERSION} ~/.terraform.d/plugins/registry.terraform.io/smutel/netbox/${NETBOX_PROVIDER_VERSION}/linux_amd64/terraform-provider-netbox_v${NETBOX_PROVIDER_VERSION}
make localinstall
==> Creating folder ~/.terraform.d/plugins/registry.terraform.io/smutel/netbox/0.0.1/linux_amd64
==> Installing provider in this folder
The definition of the provider is optional. All the parameters could be setup by environment variables.
provider netbox {
# Environment variable NETBOX_URL
url = "127.0.0.1:8000"
# Environment variable NETBOX_TOKEN
token = "0123456789abcdef0123456789abcdef01234567"
# Environment variable NETBOX_SCHEME
scheme = "http"
# Environment variable NETBOX_INSECURE
insecure = "true"
}
For further information, check this documentation
To contribute to this project, please follow the conventional commits rules.
You can find some examples in the examples folder. Each example can be executed directly with command terraform init & terraform apply. You can set different environment variables for your test:
- NETBOX_URL to define the URL and the port (127.0.0.1:8000 by default)
- NETBOX_TOKEN to define the TOKEN to access the application (empty by default)
- NETBOX_SCHEME to define the SCHEME of the URL (https by default)
export NETBOX_URL="127.0.0.1:8000"
export NETBOX_TOKEN="c07a2db4adb8b1e7f75e7c4369964e92f7680512"
export NETBOX_SCHEME="http"
cd examples
terraform init & terraform apply