Skip to content

Commit

Permalink
Use peripheral_server entitlement
Browse files Browse the repository at this point in the history
  • Loading branch information
nadvornik committed Mar 13, 2024
1 parent 8fc7d7d commit 455f199
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 6 deletions.
13 changes: 13 additions & 0 deletions integration_tests/hub_infrastructure.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ func initServer(port int64, uyuniServer *UyuniServer) {
codec.RegisterMapping("auth.login", "UyuniServer.Login", parser.LoginRequestParser)
codec.RegisterMapping("auth.logout", "UyuniServer.Logout", parser.LoginRequestParser)
codec.RegisterMapping("system.listSystems", "UyuniServer.ListSystems", parser.LoginRequestParser)
codec.RegisterMapping("system.listSystemsWithEntitlement", "UyuniServer.ListSystemsWithEntitlement", parser.LoginRequestParser)
codec.RegisterMapping("system.listUserSystems", "UyuniServer.ListUserSystems", parser.LoginRequestParser)
codec.RegisterMapping("system.listFqdns", "UyuniServer.ListFqdns", parser.LoginRequestParser)

Expand Down Expand Up @@ -108,6 +109,18 @@ func (u *UyuniServer) ListSystems(r *http.Request, args *struct{ SessionKey stri
return nil
}

func (u *UyuniServer) ListSystemsWithEntitlement(r *http.Request, args *struct{ SessionKey, Entitlement string }, reply *struct{ Data []SystemInfoResponse }) error {
log.Println(u.serverName+" -> System.ListSystemsWithEntitlement", args.SessionKey)
if args.SessionKey == u.sessionKey {
minions := make([]SystemInfoResponse, 0, len(u.minionsByID))
for _, minion := range u.minionsByID {
minions = append(minions, SystemInfoResponse{minion.id, minion.name})
}
reply.Data = minions
}
return nil
}

func (u *UyuniServer) ListFqdns(r *http.Request, args *struct {
SessionKey string
ServerId int64
Expand Down
41 changes: 35 additions & 6 deletions uyuni/uyuni_topology_info_retriever.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@ import (
)

const (
listSystemsPath = "system.listSystems"
listSystemFQDNsPath = "system.listFqdns"
listUserSystemsPath = "system.listUserSystems"
systemIDField = "id"
listSystemsPath = "system.listSystems"
listSystemsWithEntitlementPath = "system.listSystemsWithEntitlement"
listSystemFQDNsPath = "system.listFqdns"
listUserSystemsPath = "system.listUserSystems"
systemIDField = "id"
peripheralServerEntitlement = "peripheral_server"
)

type uyuniTopologyInfoRetriever struct {
Expand All @@ -29,23 +31,50 @@ func (h *uyuniTopologyInfoRetriever) RetrieveUserServerIDs(endpoint, sessionKey,
log.Printf("Error ocurred while trying to login into the user systems: %v", err)
return nil, err
}

allServers, err := h.ListServerIDs(endpoint, sessionKey)
if err != nil {
return nil, err
}

userServersSlice := userServers.([]interface{})

serverIDs := make([]int64, 0, len(userServersSlice))
for _, userSystem := range userServersSlice {
serverID := userSystem.(map[string]interface{})[systemIDField].(int64)
serverIDs = append(serverIDs, serverID)
if contains(allServers, serverID) {
serverIDs = append(serverIDs, serverID)
}
}
return serverIDs, nil
}

func contains(s []int64, v int64) bool {
for _, lv := range s {
if lv == v {
return true
}
}

return false
}

func (h *uyuniTopologyInfoRetriever) ListServerIDs(endpoint, sessionKey string) ([]int64, error) {
systemList, err := h.uyuniCallExecutor.ExecuteCall(endpoint, listSystemsPath, []interface{}{sessionKey})
systemList, err := h.uyuniCallExecutor.ExecuteCall(endpoint, listSystemsWithEntitlementPath, []interface{}{sessionKey, peripheralServerEntitlement})
if err != nil {
log.Printf("Error occured while retrieving the list of serverIDs: %v", err)
return nil, err
}
systemsSlice := systemList.([]interface{})
if len(systemsSlice) == 0 {
// No entitled servers - fallback to full list, for legacy HUB server
systemList, err = h.uyuniCallExecutor.ExecuteCall(endpoint, listSystemsPath, []interface{}{sessionKey})
if err != nil {
log.Printf("Error occured while retrieving the list of serverIDs: %v", err)
return nil, err
}
systemsSlice = systemList.([]interface{})
}

systemIDs := make([]int64, len(systemsSlice))
for i, system := range systemsSlice {
Expand Down

0 comments on commit 455f199

Please sign in to comment.