feat: search multiple NetBox instances with isolated host identities
Release / release (push) Successful in 5m16s
Release / release (push) Successful in 5m16s
This commit is contained in:
1 parent
a2a6dd7591
commit
7f53b90266
26 files changed
+1299
-115
No files matched your search
@@ -0,0 +1,43 @@
|
||||
package resolver
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"git.zb-server.de/Sebi/ssh-netbox-wrapper/internal/netbox"
|
||||
)
|
||||
|
||||
func TestVMResolversStayWithinTheirNetBoxInstance(t *testing.T) {
|
||||
sources := make([]netbox.Source, 0, 2)
|
||||
for i, name := range []string{"office", "lab"} {
|
||||
ip := fmt.Sprintf("10.0.0.%d", i+1)
|
||||
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
if r.URL.Query().Get("virtual_machine_id") != "7" {
|
||||
t.Errorf("wrong VM filter: %s", r.URL.RawQuery)
|
||||
}
|
||||
if r.Header.Get("Authorization") != "Token "+name {
|
||||
t.Error("VM lookup used another instance's credentials")
|
||||
}
|
||||
fmt.Fprintf(w, `{"count":1,"results":[{"address":%q}]}`, ip+"/24")
|
||||
}))
|
||||
t.Cleanup(srv.Close)
|
||||
sources = append(sources, netbox.Source{Name: name, URL: srv.URL, Token: name})
|
||||
}
|
||||
client := netbox.NewMultiClient(sources)
|
||||
management, err := NewManagementSubnetStrategy([]string{"10.0.0.0/8"})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for i, source := range sources {
|
||||
host := &netbox.HostEntry{Source: source.Name, Name: "vm", Kind: "vm", ID: 7}
|
||||
for _, strategy := range []Strategy{management, &InterfaceNameStrategy{name: "mgmt0"}} {
|
||||
ip, err := strategy.Resolve(context.Background(), host, client)
|
||||
if want := fmt.Sprintf("10.0.0.%d", i+1); err != nil || ip != want {
|
||||
t.Fatalf("%s VM resolved through wrong instance: %q, %v", strategy.Name(), ip, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user