aboutsummaryrefslogtreecommitdiff
path: root/clients/netbox/client.go
diff options
context:
space:
mode:
Diffstat (limited to 'clients/netbox/client.go')
-rw-r--r--clients/netbox/client.go23
1 files changed, 23 insertions, 0 deletions
diff --git a/clients/netbox/client.go b/clients/netbox/client.go
index 3b7fbaf..aceebed 100644
--- a/clients/netbox/client.go
+++ b/clients/netbox/client.go
@@ -11,6 +11,7 @@ type NetboxClient interface {
11 GetSitePrefixesWithTag(ctx context.Context, site string, tag string) ([]*net.IPNet, error) 11 GetSitePrefixesWithTag(ctx context.Context, site string, tag string) ([]*net.IPNet, error)
12 GetPrefixesWithTag(ctx context.Context, tag string) ([]*net.IPNet, error) 12 GetPrefixesWithTag(ctx context.Context, tag string) ([]*net.IPNet, error)
13 GetServicesForVm(ctx context.Context, vmName string) ([]*Service, error) 13 GetServicesForVm(ctx context.Context, vmName string) ([]*Service, error)
14 GetDnsServersForSite(ctx context.Context, site string) ([]net.IP, error)
14} 15}
15 16
16type BasicNetboxClient struct { 17type BasicNetboxClient struct {
@@ -145,3 +146,25 @@ func (c *BasicNetboxClient) GetServicesForVm(ctx context.Context, vmName string)
145 146
146 return out, nil 147 return out, nil
147} 148}
149
150func (c *BasicNetboxClient) GetDnsServersForSite(ctx context.Context, site string) ([]net.IP, error) {
151 var m dnsServerGQLResponse
152 if err := c.Do(ctx, &NetboxGraphQLRequest{dnsServerGQLQuery}, &m); err != nil {
153 return nil, err
154 }
155
156 out := []net.IP{}
157 for _, a := range m.Data.AddressList {
158 if a.AssignedObject.VirtualMachine.Site.Name == site ||
159 a.AssignedObject.Device.Site.Name == site {
160
161 ip, _, err := net.ParseCIDR(a.Address)
162 if err != nil {
163 return nil, err
164 }
165
166 out = append(out, ip)
167 }
168 }
169 return out, nil
170}