Skip to content

Commit 7bb7162

Browse files
JonasKopfbreckle
authored andcommitted
Add wireless LAN and wireless LAN group resources
1 parent c185e3b commit 7bb7162

11 files changed

Lines changed: 940 additions & 0 deletions

.github/allowed-subcategories.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ IP Address Management (IPAM)
66
Tenancy
77
Virtualization
88
VPN Tunnels
9+
Wireless

docs/resources/wireless_lan.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
---
2+
# generated by https://github.com/fbreckle/terraform-plugin-docs
3+
page_title: "netbox_wireless_lan Resource - terraform-provider-netbox"
4+
subcategory: "Wireless"
5+
description: |-
6+
A Wireless LAN represents a broadcast wireless network, identified by its SSID and optional authentication settings.
7+
---
8+
9+
# netbox_wireless_lan (Resource)
10+
11+
> A Wireless LAN represents a broadcast wireless network, identified by its SSID and optional authentication settings.
12+
13+
## Example Usage
14+
15+
```terraform
16+
resource "netbox_wireless_lan" "guest" {
17+
ssid = "guest-wifi"
18+
status = "active"
19+
}
20+
```
21+
22+
<!-- schema generated by tfplugindocs -->
23+
## Schema
24+
25+
### Required
26+
27+
- `ssid` (String)
28+
29+
### Optional
30+
31+
- `auth_cipher` (String) Valid values are `auto`, `tkip` and `aes`.
32+
- `auth_psk` (String, Sensitive)
33+
- `auth_type` (String) Valid values are `open`, `wep`, `wpa-personal` and `wpa-enterprise`.
34+
- `comments` (String)
35+
- `custom_fields` (Map of String)
36+
- `description` (String)
37+
- `group_id` (Number)
38+
- `status` (String) Valid values are `active`, `reserved`, `disabled` and `deprecated`. Defaults to `active`.
39+
- `tags` (Set of String)
40+
- `tenant_id` (Number)
41+
- `vlan_id` (Number)
42+
43+
### Read-Only
44+
45+
- `id` (String) The ID of this resource.
46+
- `tags_all` (Set of String)
47+
48+
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
---
2+
# generated by https://github.com/fbreckle/terraform-plugin-docs
3+
page_title: "netbox_wireless_lan_group Resource - terraform-provider-netbox"
4+
subcategory: "Wireless"
5+
description: |-
6+
A Wireless LAN Group is used to organize wireless LANs into a recursive hierarchy.
7+
---
8+
9+
# netbox_wireless_lan_group (Resource)
10+
11+
> A Wireless LAN Group is used to organize wireless LANs into a recursive hierarchy.
12+
13+
## Example Usage
14+
15+
```terraform
16+
resource "netbox_wireless_lan_group" "parent" {
17+
name = "campus"
18+
}
19+
20+
resource "netbox_wireless_lan_group" "child" {
21+
name = "building-a"
22+
parent_id = netbox_wireless_lan_group.parent.id
23+
}
24+
```
25+
26+
<!-- schema generated by tfplugindocs -->
27+
## Schema
28+
29+
### Required
30+
31+
- `name` (String)
32+
33+
### Optional
34+
35+
- `custom_fields` (Map of String)
36+
- `description` (String)
37+
- `parent_id` (Number)
38+
- `slug` (String)
39+
- `tags` (Set of String)
40+
41+
### Read-Only
42+
43+
- `id` (String) The ID of this resource.
44+
- `tags_all` (Set of String)
45+
46+
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
resource "netbox_wireless_lan" "guest" {
2+
ssid = "guest-wifi"
3+
status = "active"
4+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
resource "netbox_wireless_lan_group" "parent" {
2+
name = "campus"
3+
}
4+
5+
resource "netbox_wireless_lan_group" "child" {
6+
name = "building-a"
7+
parent_id = netbox_wireless_lan_group.parent.id
8+
}

netbox/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,8 @@ func Provider() *schema.Provider {
164164
"netbox_vpn_tunnel_termination": resourceNetboxVpnTunnelTermination(),
165165
"netbox_config_context": resourceNetboxConfigContext(),
166166
"netbox_mac_address": resourceNetboxMACAddress(),
167+
"netbox_wireless_lan_group": resourceNetboxWirelessLANGroup(),
168+
"netbox_wireless_lan": resourceNetboxWirelessLAN(),
167169
},
168170
DataSourcesMap: map[string]*schema.Resource{
169171
"netbox_asn": dataSourceNetboxAsn(),
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package netbox
2+
3+
import (
4+
"github.com/fbreckle/go-netbox/netbox/client/wireless"
5+
"github.com/go-openapi/runtime"
6+
"github.com/go-openapi/strfmt"
7+
"github.com/go-viper/mapstructure/v2"
8+
)
9+
10+
type wirelessInterceptWriter struct {
11+
runtime.ClientRequest
12+
fields map[string]any
13+
}
14+
15+
func (iw wirelessInterceptWriter) SetBodyParam(p any) error {
16+
out := make(map[string]any)
17+
dec, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{
18+
TagName: "json",
19+
Result: &out,
20+
})
21+
if err != nil {
22+
return err
23+
}
24+
if err := dec.Decode(p); err != nil {
25+
return err
26+
}
27+
for fieldName, value := range iw.fields {
28+
out[fieldName] = value
29+
}
30+
return iw.ClientRequest.SetBodyParam(out)
31+
}
32+
33+
type wirelessInterceptParams struct {
34+
inner runtime.ClientRequestWriter
35+
fields map[string]any
36+
}
37+
38+
func (ip wirelessInterceptParams) WriteToRequest(req runtime.ClientRequest, reg strfmt.Registry) error {
39+
writer := wirelessInterceptWriter{ClientRequest: req, fields: ip.fields}
40+
return ip.inner.WriteToRequest(writer, reg)
41+
}
42+
43+
func hackSerializeWirelessWithValues(fields map[string]any) wireless.ClientOption {
44+
overrideFields := make(map[string]any, len(fields))
45+
for fieldName, value := range fields {
46+
overrideFields[fieldName] = value
47+
}
48+
return func(co *runtime.ClientOperation) {
49+
originalParams := co.Params
50+
co.Params = wirelessInterceptParams{inner: originalParams, fields: overrideFields}
51+
}
52+
}
53+
54+
func hackSerializeWirelessAsNull(fields ...string) wireless.ClientOption {
55+
overrideFields := make(map[string]any, len(fields))
56+
for _, field := range fields {
57+
overrideFields[field] = nil
58+
}
59+
return hackSerializeWirelessWithValues(overrideFields)
60+
}

0 commit comments

Comments
 (0)