diff --git a/internal/orchestrator/bricks/bricks.go b/internal/orchestrator/bricks/bricks.go index b9e0da7d..3248d129 100644 --- a/internal/orchestrator/bricks/bricks.go +++ b/internal/orchestrator/bricks/bricks.go @@ -141,6 +141,9 @@ func getInstanceBrickConfigVariableDetails( variableDetails := make([]BrickConfigVariable, 0, len(brick.Variables)) for _, v := range brick.Variables { + if v.Hidden { + continue + } finalValue := v.DefaultValue userValue, ok := userVariables[v.Name] @@ -224,6 +227,9 @@ func getBrickConfigVariableDetails( variableDetails := make([]BrickConfigVariable, 0, len(brick.Variables)) for _, v := range brick.Variables { + if v.Hidden { + continue + } variablesMap[v.Name] = BrickVariable{ DefaultValue: v.DefaultValue, Description: v.Description, diff --git a/internal/orchestrator/bricks/bricks_test.go b/internal/orchestrator/bricks/bricks_test.go index ef51fad6..332f5cb1 100644 --- a/internal/orchestrator/bricks/bricks_test.go +++ b/internal/orchestrator/bricks/bricks_test.go @@ -313,6 +313,20 @@ func TestGetBrickInstanceVariableDetails(t *testing.T) { expectedConfigVariables: []BrickConfigVariable{}, expectedVariableMap: map[string]string{}, }, + { + name: "hidden variables", + brick: &bricksindex.Brick{Variables: []bricksindex.BrickVariable{ + {Name: "HIDDEN_VAR", DefaultValue: "i-am-hidden", Description: "a-hidden-variable", Hidden: true}, + {Name: "VISIBLE_VAR", DefaultValue: "i-am-visible", Description: "a-visible-variable", Hidden: false}, + {Name: "VISIBLE_VAR_WITH_MISSING", DefaultValue: "i-am-visible-if-missing-hidden", Description: "a-visible-variable"}, + }}, + userVariables: map[string]string{}, + expectedConfigVariables: []BrickConfigVariable{ + {Name: "VISIBLE_VAR", Value: "i-am-visible", Description: "a-visible-variable", Required: false}, + {Name: "VISIBLE_VAR_WITH_MISSING", Value: "i-am-visible-if-missing-hidden", Description: "a-visible-variable", Required: false}, + }, + expectedVariableMap: map[string]string{"VISIBLE_VAR": "i-am-visible", "VISIBLE_VAR_WITH_MISSING": "i-am-visible-if-missing-hidden"}, + }, } for _, tt := range tests { @@ -705,6 +719,15 @@ func TestAppBrickInstancesList(t *testing.T) { RequireModel: false, Ports: []string{"7000", "8000"}, }, + { + ID: "arduino:with-hidden-vars", + Name: "I have some hidden variables", + Variables: []bricksindex.BrickVariable{ + {Name: "HIDDEN_VAR", DefaultValue: "/i/am/hidden", Hidden: true}, + {Name: "VISIBLE_VAR", DefaultValue: "/i/am/visible"}, + {Name: "VISIBLE_VAR_IF_MISSING", DefaultValue: "/i/am/visible", Hidden: false}, + }, + }, }, } @@ -833,6 +856,32 @@ func TestAppBrickInstancesList(t *testing.T) { require.Equal(t, "/models/ootb/ei/glass-breaking.eim", b2.ConfigVariables[1].Value) }, }, + { + name: "Success - hidden variables are not included", + app: &app.ArduinoApp{ + Descriptor: app.AppDescriptor{ + Bricks: []app.Brick{ + { + ID: "arduino:with-hidden-vars", + Variables: map[string]string{ + "HIDDEN_VAR": "/this/is/a/new/hidden/value", + "VISIBLE_VAR": "/this/is/a/new/visible/value", + }, + }, + }, + }, + }, + validate: func(t *testing.T, res AppBrickInstancesResult) { + require.Len(t, res.BrickInstances, 1) + brick := res.BrickInstances[0] + require.Equal(t, "arduino:with-hidden-vars", brick.ID) + expected := []BrickConfigVariable{ + {Name: "VISIBLE_VAR", Value: "/this/is/a/new/visible/value"}, + {Name: "VISIBLE_VAR_IF_MISSING", Value: "/i/am/visible"}, + } + require.Equal(t, expected, brick.ConfigVariables) + }, + }, } for _, tt := range tests { diff --git a/internal/orchestrator/bricksindex/bricks_index.go b/internal/orchestrator/bricksindex/bricks_index.go index 9e52f1c6..4fb7d065 100644 --- a/internal/orchestrator/bricksindex/bricks_index.go +++ b/internal/orchestrator/bricksindex/bricks_index.go @@ -42,6 +42,7 @@ type BrickVariable struct { Name string `yaml:"name"` DefaultValue string `yaml:"default_value"` Description string `yaml:"description,omitempty"` + Hidden bool `yaml:"hidden"` } func (v BrickVariable) IsRequired() bool { diff --git a/internal/orchestrator/bricksindex/bricks_index_test.go b/internal/orchestrator/bricksindex/bricks_index_test.go index b8d28c07..2db3bb0e 100644 --- a/internal/orchestrator/bricksindex/bricks_index_test.go +++ b/internal/orchestrator/bricksindex/bricks_index_test.go @@ -58,6 +58,15 @@ func TestGenerateBricksIndexFromFile(t *testing.T) { bNoRequireModel, found := index.FindBrickByID("arduino:missing-model-require") require.True(t, found) require.False(t, bNoRequireModel.RequireModel) + + withHidden, found := index.FindBrickByID("arduino:with-hidden-variables") + require.True(t, found) + require.Equal(t, "HIDDEN_VARIABLE", withHidden.Variables[0].Name) + require.True(t, withHidden.Variables[0].Hidden) + require.Equal(t, "VISIBLE_VARIABLE", withHidden.Variables[1].Name) + require.False(t, withHidden.Variables[1].Hidden) + require.Equal(t, "VISIBLE_VARIABLE_IF_MISSING_HIDDEN", withHidden.Variables[2].Name) + require.False(t, withHidden.Variables[2].Hidden) } func TestBricksIndexYAMLFormats(t *testing.T) { diff --git a/internal/orchestrator/bricksindex/testdata/bricks-list.yaml b/internal/orchestrator/bricksindex/testdata/bricks-list.yaml index c494df17..6af413a5 100644 --- a/internal/orchestrator/bricksindex/testdata/bricks-list.yaml +++ b/internal/orchestrator/bricksindex/testdata/bricks-list.yaml @@ -140,3 +140,19 @@ bricks: name: Model Required Brick description: A brick that requires a model require_model: true +- id: arduino:with-hidden-variables + name: Visual Anomaly Detection + description: "Brick with hidden variables" + variables: + - name: HIDDEN_VARIABLE + default_value: a_hidden_value + description: this variable is hidden + hidden: true + - name: VISIBLE_VARIABLE + default_value: a_visible_value + description: this variable is visible because 'hidden' is set to false + hidden: false + - name: VISIBLE_VARIABLE_IF_MISSING_HIDDEN + default_value: another_visible_value + description: this variable is visiable because 'hidden' field is missing + hidden: false