mirror of
https://github.com/gravitational/teleport.git
synced 2026-09-21 14:35:22 +08:00
fix filtering by no upgrader (#63184)
This commit is contained in:
+39
-3
@@ -897,6 +897,18 @@ func TestInventoryCacheFiltering(t *testing.T) {
|
||||
ExternalUpgrader: "kube",
|
||||
},
|
||||
},
|
||||
{
|
||||
ResourceHeader: types.ResourceHeader{
|
||||
Metadata: types.Metadata{
|
||||
Name: "node-no-upgrader",
|
||||
},
|
||||
},
|
||||
Spec: types.InstanceSpecV1{
|
||||
Hostname: "no-upgrader.example.com",
|
||||
Version: "18.3.0",
|
||||
Services: []types.SystemRole{types.RoleNode},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
bots := []*machineidv1.BotInstance{
|
||||
@@ -1038,7 +1050,7 @@ func TestInventoryCacheFiltering(t *testing.T) {
|
||||
require.Equal(t, "18.1.0", resp.Items[0].GetInstance().Spec.Version)
|
||||
|
||||
// Test predicate query filtering by version (greater than) for both instance types.
|
||||
// This should return 2 instances and 1 bot instance.
|
||||
// This should return 3 instances and 1 bot instance.
|
||||
resp, err = inventoryCache.ListUnifiedInstances(ctx, &inventoryv1.ListUnifiedInstancesRequest{
|
||||
PageSize: 100,
|
||||
Filter: &inventoryv1.ListUnifiedInstancesFilter{
|
||||
@@ -1047,7 +1059,7 @@ func TestInventoryCacheFiltering(t *testing.T) {
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Len(t, resp.Items, 3)
|
||||
require.Len(t, resp.Items, 4)
|
||||
|
||||
// Test predicate query filtering by version (between)
|
||||
resp, err = inventoryCache.ListUnifiedInstances(ctx, &inventoryv1.ListUnifiedInstancesRequest{
|
||||
@@ -1058,7 +1070,7 @@ func TestInventoryCacheFiltering(t *testing.T) {
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Len(t, resp.Items, 2)
|
||||
require.Len(t, resp.Items, 3)
|
||||
|
||||
// Test predicate query filtering by hostname
|
||||
resp, err = inventoryCache.ListUnifiedInstances(ctx, &inventoryv1.ListUnifiedInstancesRequest{
|
||||
@@ -1117,6 +1129,30 @@ func TestInventoryCacheFiltering(t *testing.T) {
|
||||
}
|
||||
require.True(t, upgraders["kube"])
|
||||
require.Len(t, upgraders, 1)
|
||||
|
||||
// Test filtering for no upgrader works
|
||||
resp, err = inventoryCache.ListUnifiedInstances(ctx, &inventoryv1.ListUnifiedInstancesRequest{
|
||||
PageSize: 100,
|
||||
Filter: &inventoryv1.ListUnifiedInstancesFilter{
|
||||
Upgraders: []string{""},
|
||||
InstanceTypes: []inventoryv1.InstanceType{inventoryv1.InstanceType_INSTANCE_TYPE_INSTANCE},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Len(t, resp.Items, 1)
|
||||
require.Equal(t, "no-upgrader.example.com", resp.Items[0].GetInstance().Spec.Hostname)
|
||||
require.Empty(t, resp.Items[0].GetInstance().Spec.ExternalUpgrader)
|
||||
|
||||
// Test filtering for no upgrader or kube upgrader
|
||||
resp, err = inventoryCache.ListUnifiedInstances(ctx, &inventoryv1.ListUnifiedInstancesRequest{
|
||||
PageSize: 100,
|
||||
Filter: &inventoryv1.ListUnifiedInstancesFilter{
|
||||
Upgraders: []string{"", "kube"},
|
||||
InstanceTypes: []inventoryv1.InstanceType{inventoryv1.InstanceType_INSTANCE_TYPE_INSTANCE},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Len(t, resp.Items, 3) // 2 with kube upgrader + 1 with no upgrader
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -89,11 +89,18 @@ func (h *Handler) clusterUnifiedInstancesGet(w http.ResponseWriter, r *http.Requ
|
||||
}
|
||||
}
|
||||
|
||||
// We don't use splitQuery for parsing upgraders since it should be possible to filter for upgrader "" (none),
|
||||
// and splitQuery would remove it.
|
||||
var upgraders []string
|
||||
if upgradersParam := values.Get("upgraders"); upgradersParam != "" {
|
||||
upgraders = strings.Split(upgradersParam, ",")
|
||||
}
|
||||
|
||||
filter := &inventoryv1.ListUnifiedInstancesFilter{
|
||||
Search: values.Get("search"),
|
||||
PredicateExpression: values.Get("query"),
|
||||
Services: splitQuery(values.Get("services")),
|
||||
Upgraders: splitQuery(values.Get("upgraders")),
|
||||
Upgraders: upgraders,
|
||||
UpdaterGroups: splitQuery(values.Get("updaterGroups")),
|
||||
}
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@ export function Instances() {
|
||||
|
||||
const upgradersParam = queryParams.get('upgraders');
|
||||
const selectedUpgraders = (
|
||||
upgradersParam ? upgradersParam.split(',') : []
|
||||
upgradersParam !== null ? upgradersParam.split(',') : []
|
||||
) as UpgraderType[];
|
||||
|
||||
const versionFilter = queryParams.get('version_filter') || '';
|
||||
|
||||
Reference in New Issue
Block a user