Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions docs/v3/openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -3283,6 +3283,19 @@
}
}
},
{
"name": "filter[group_id]",
"in": "query",
"description": "Filter systems by inventory groups",
"style": "form",
"explode": true,
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
},
{
"name": "filter[system_profile][sap_system]",
"in": "query",
Expand Down Expand Up @@ -4577,6 +4590,19 @@
}
}
},
{
"name": "filter[group_id]",
"in": "query",
"description": "Filter systems by inventory groups",
"style": "form",
"explode": true,
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
},
{
"name": "filter[system_profile][sap_system]",
"in": "query",
Expand Down Expand Up @@ -5013,6 +5039,19 @@
}
}
},
{
"name": "filter[group_id]",
"in": "query",
"description": "Filter systems by inventory groups",
"style": "form",
"explode": true,
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
},
{
"name": "filter[system_profile][sap_system]",
"in": "query",
Expand Down
3 changes: 3 additions & 0 deletions manager/controllers/systems.go
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,7 @@ func systemsListResponse(c *gin.Context, query *gorm.DB, meta *ListMeta, params
// @Param filter[osminor] query string false "Filter OS minor version"
// @Param tags query []string false "Tag filter"
// @Param filter[group_name] query []string false "Filter systems by inventory groups"
// @Param filter[group_id] query []string false "Filter systems by inventory groups"
// @Param filter[system_profile][sap_system] query bool false "Filter only SAP systems"
// @Param filter[system_profile][sap_sids] query []string false "Filter systems by their SAP SIDs"
// @Param filter[system_profile][ansible] query string false "Filter systems by ansible"
Expand Down Expand Up @@ -352,6 +353,7 @@ func SystemsListHandler(c *gin.Context) {
// @Param filter[osminor] query string false "Filter OS minor version"
// @Param tags query []string false "Tag filter"
// @Param filter[group_name] query []string false "Filter systems by inventory groups"
// @Param filter[group_id] query []string false "Filter systems by inventory groups"
// @Param filter[system_profile][sap_system] query bool false "Filter only SAP systems"
// @Param filter[system_profile][sap_sids] query []string false "Filter systems by their SAP SIDs"
// @Param filter[system_profile][ansible] query string false "Filter systems by ansible"
Expand Down Expand Up @@ -428,6 +430,7 @@ func SystemsListPostHandler(c *gin.Context) {
// @Param filter[arch] query string false "Filter"
// @Param tags query []string false "Tag filter"
// @Param filter[group_name] query []string false "Filter systems by inventory groups"
// @Param filter[group_id] query []string false "Filter systems by inventory groups"
// @Param filter[system_profile][sap_system] query bool false "Filter only SAP systems"
// @Param filter[system_profile][sap_sids] query []string false "Filter systems by their SAP SIDs"
// @Param filter[system_profile][ansible] query string false "Filter systems by ansible"
Expand Down
14 changes: 11 additions & 3 deletions manager/controllers/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ type NestedFilterMap map[string]string

var nestedFilters = NestedFilterMap{
"group_name": "group_name",
"group_id": "group_id",
"system_profile][sap_system": "(si.sap_workload)",
"system_profile][sap_sids": "(si.sap_workload_sids)",
"system_profile][sap_sids][in]": "(si.sap_workload_sids)",
Expand Down Expand Up @@ -388,11 +389,18 @@ func ApplyInventoryWhere(filters map[string]FilterData, tx *gorm.DB) (*gorm.DB,
// buildSystemProfileQuery("system_profile][mssql][version", "1.0")
// returns "(si.mssql_workload_version) = 1.0"
func buildInventoryQuery(tx *gorm.DB, key string, values []string) *gorm.DB {
if strings.Contains(key, "group_name") {
if strings.Contains(key, "group_name") || strings.Contains(key, "group_id") {
groups := []string{}
for _, v := range values {
name := v
group, err := utils.ParseInventoryGroup(nil, &name)
var group string
var err error
if strings.Contains(key, "group_id") {
id := v
group, err = utils.ParseInventoryGroup(&id, nil)
} else {
name := v
group, err = utils.ParseInventoryGroup(nil, &name)
}
Comment thread
sourcery-ai[bot] marked this conversation as resolved.
if err != nil {
// couldn't marshal inventory group to json
continue
Expand Down
44 changes: 44 additions & 0 deletions manager/controllers/utils_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,50 @@ func TestGroupNameFilter2(t *testing.T) {
assert.Equal(t, 9, len(systems)) // 2 systems with `group2`, 6 with `group1` in test_data
}

func TestGroupIDFilter(t *testing.T) {
utils.SkipWithoutDB(t)
database.Configure()

c, _ := gin.CreateTestContext(httptest.NewRecorder())
c.Request, _ = http.NewRequest("GET", "/?filter[group_id]=inventory-group-2", nil)

filters, err := ParseAllFilters(c, ListOpts{})
assert.Nil(t, err)

var systems []SystemsID
groups := map[string]string{
utils.KeyGrouped: `{"[{\"id\":\"inventory-group-1\"}]","[{\"id\":\"inventory-group-2\"}]"}`,
}
tx := database.Systems(database.DB, 1, groups)
tx, _ = ApplyInventoryFilter(filters, tx, "si.inventory_id")
tx.Scan(&systems)

assert.Equal(t, 2, len(systems))
assert.Equal(t, "00000000-0000-0000-0000-000000000007", systems[0].ID)
assert.Equal(t, "00000000-0000-0000-0000-000000000008", systems[1].ID)
}

func TestGroupIDFilterMultiple(t *testing.T) {
utils.SkipWithoutDB(t)
database.Configure()

c, _ := gin.CreateTestContext(httptest.NewRecorder())
c.Request, _ = http.NewRequest("GET", "/?filter[group_id]=inventory-group-2,inventory-group-1", nil)

filters, err := ParseAllFilters(c, ListOpts{})
assert.Nil(t, err)

var systems []SystemsID
groups := map[string]string{
utils.KeyGrouped: `{"[{\"id\":\"inventory-group-1\"}]","[{\"id\":\"inventory-group-2\"}]"}`,
}
tx := database.Systems(database.DB, 1, groups)
tx, _ = ApplyInventoryFilter(filters, tx, "si.inventory_id")
tx.Scan(&systems)

assert.Equal(t, 9, len(systems))
}

func TestApplySearchEmpty(t *testing.T) {
var baseTx gorm.DB

Expand Down
Loading