diff options
Diffstat (limited to 'clients/netbox/client.go')
-rw-r--r-- | clients/netbox/client.go | 23 |
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 | ||
16 | type BasicNetboxClient struct { | 17 | type 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 | |||
150 | func (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 | } | ||