@@ -8,10 +8,12 @@ import (
8
8
)
9
9
10
10
const (
11
- listSystemsPath = "system.listSystems"
12
- listSystemFQDNsPath = "system.listFqdns"
13
- listUserSystemsPath = "system.listUserSystems"
14
- systemIDField = "id"
11
+ listSystemsPath = "system.listSystems"
12
+ listSystemsWithEntitlementPath = "system.listSystemsWithEntitlement"
13
+ listSystemFQDNsPath = "system.listFqdns"
14
+ listUserSystemsPath = "system.listUserSystems"
15
+ systemIDField = "id"
16
+ peripheralServerEntitlement = "peripheral_server"
15
17
)
16
18
17
19
type uyuniTopologyInfoRetriever struct {
@@ -29,23 +31,50 @@ func (h *uyuniTopologyInfoRetriever) RetrieveUserServerIDs(endpoint, sessionKey,
29
31
log .Printf ("Error ocurred while trying to login into the user systems: %v" , err )
30
32
return nil , err
31
33
}
34
+
35
+ allServers , err := h .ListServerIDs (endpoint , sessionKey )
36
+ if err != nil {
37
+ return nil , err
38
+ }
39
+
32
40
userServersSlice := userServers .([]interface {})
33
41
34
42
serverIDs := make ([]int64 , 0 , len (userServersSlice ))
35
43
for _ , userSystem := range userServersSlice {
36
44
serverID := userSystem .(map [string ]interface {})[systemIDField ].(int64 )
37
- serverIDs = append (serverIDs , serverID )
45
+ if contains (allServers , serverID ) {
46
+ serverIDs = append (serverIDs , serverID )
47
+ }
38
48
}
39
49
return serverIDs , nil
40
50
}
41
51
52
+ func contains (s []int64 , v int64 ) bool {
53
+ for _ , lv := range s {
54
+ if lv == v {
55
+ return true
56
+ }
57
+ }
58
+
59
+ return false
60
+ }
61
+
42
62
func (h * uyuniTopologyInfoRetriever ) ListServerIDs (endpoint , sessionKey string ) ([]int64 , error ) {
43
- systemList , err := h .uyuniCallExecutor .ExecuteCall (endpoint , listSystemsPath , []interface {}{sessionKey })
63
+ systemList , err := h .uyuniCallExecutor .ExecuteCall (endpoint , listSystemsWithEntitlementPath , []interface {}{sessionKey , peripheralServerEntitlement })
44
64
if err != nil {
45
65
log .Printf ("Error occured while retrieving the list of serverIDs: %v" , err )
46
66
return nil , err
47
67
}
48
68
systemsSlice := systemList .([]interface {})
69
+ if len (systemsSlice ) == 0 {
70
+ // No entitled servers - fallback to full list, for legacy HUB server
71
+ systemList , err = h .uyuniCallExecutor .ExecuteCall (endpoint , listSystemsPath , []interface {}{sessionKey })
72
+ if err != nil {
73
+ log .Printf ("Error occured while retrieving the list of serverIDs: %v" , err )
74
+ return nil , err
75
+ }
76
+ systemsSlice = systemList .([]interface {})
77
+ }
49
78
50
79
systemIDs := make ([]int64 , len (systemsSlice ))
51
80
for i , system := range systemsSlice {
0 commit comments