diff --git a/images/virtualization-artifact/cmd/virtualization-controller/main.go b/images/virtualization-artifact/cmd/virtualization-controller/main.go index 3609029a02..5858a2b8c7 100644 --- a/images/virtualization-artifact/cmd/virtualization-controller/main.go +++ b/images/virtualization-artifact/cmd/virtualization-controller/main.go @@ -186,8 +186,17 @@ func main() { os.Exit(1) } - viStorageClassSettings := appconfig.LoadVirtualImageStorageClassSettings() - vdStorageClassSettings := appconfig.LoadVirtualDiskStorageClassSettings() + viStorageClassSettings, err := appconfig.LoadVirtualImageStorageClassSettings() + if err != nil { + log.Error(err.Error()) + os.Exit(1) + } + + vdStorageClassSettings, err := appconfig.LoadVirtualDiskStorageClassSettings() + if err != nil { + log.Error(err.Error()) + os.Exit(1) + } // Get a config to talk to the apiserver cfg, err := config.GetConfig() diff --git a/images/virtualization-artifact/pkg/config/load_vd_storage_class_settings.go b/images/virtualization-artifact/pkg/config/load_vd_storage_class_settings.go index b6d7691956..7837785e7c 100644 --- a/images/virtualization-artifact/pkg/config/load_vd_storage_class_settings.go +++ b/images/virtualization-artifact/pkg/config/load_vd_storage_class_settings.go @@ -17,6 +17,7 @@ limitations under the License. package config import ( + "fmt" "os" "strings" ) @@ -33,9 +34,12 @@ type VirtualDiskStorageClassSettings struct { DefaultStorageClassName string } -func LoadVirtualDiskStorageClassSettings() VirtualDiskStorageClassSettings { +func LoadVirtualDiskStorageClassSettings() (VirtualDiskStorageClassSettings, error) { var allowedStorageClassNames []string - allowedStorageClassNamesRaw := os.Getenv(VirtualDiskAllowedStorageClasses) + allowedStorageClassNamesRaw, exists := os.LookupEnv(VirtualDiskAllowedStorageClasses) + if exists && allowedStorageClassNamesRaw == "" { + return VirtualDiskStorageClassSettings{}, fmt.Errorf("%s is empty. Specify valid StorageClass names or remove the restriction", VirtualDiskAllowedStorageClasses) + } if allowedStorageClassNamesRaw != "" { allowedStorageClassNames = strings.Split(allowedStorageClassNamesRaw, ",") } @@ -43,5 +47,5 @@ func LoadVirtualDiskStorageClassSettings() VirtualDiskStorageClassSettings { return VirtualDiskStorageClassSettings{ AllowedStorageClassNames: allowedStorageClassNames, DefaultStorageClassName: os.Getenv(VirtualDiskDefaultStorageClass), - } + }, nil } diff --git a/images/virtualization-artifact/pkg/config/load_vi_storage_class_settings.go b/images/virtualization-artifact/pkg/config/load_vi_storage_class_settings.go index d8fed5ea56..b38af47352 100644 --- a/images/virtualization-artifact/pkg/config/load_vi_storage_class_settings.go +++ b/images/virtualization-artifact/pkg/config/load_vi_storage_class_settings.go @@ -17,6 +17,7 @@ limitations under the License. package config import ( + "fmt" "os" "strings" ) @@ -36,9 +37,12 @@ type VirtualImageStorageClassSettings struct { StorageClassName string } -func LoadVirtualImageStorageClassSettings() VirtualImageStorageClassSettings { +func LoadVirtualImageStorageClassSettings() (VirtualImageStorageClassSettings, error) { var allowedStorageClassNames []string - allowedStorageClassNamesRaw := os.Getenv(VirtualImageAllowedStorageClasses) + allowedStorageClassNamesRaw, exists := os.LookupEnv(VirtualImageAllowedStorageClasses) + if exists && allowedStorageClassNamesRaw == "" { + return VirtualImageStorageClassSettings{}, fmt.Errorf("%s is empty. Specify valid StorageClass names or remove the restriction", VirtualImageAllowedStorageClasses) + } if allowedStorageClassNamesRaw != "" { allowedStorageClassNames = strings.Split(allowedStorageClassNamesRaw, ",") } @@ -47,5 +51,5 @@ func LoadVirtualImageStorageClassSettings() VirtualImageStorageClassSettings { AllowedStorageClassNames: allowedStorageClassNames, DefaultStorageClassName: os.Getenv(VirtualImageDefaultStorageClass), StorageClassName: os.Getenv(VirtualImageStorageClass), - } + }, nil } diff --git a/openapi/config-values.yaml b/openapi/config-values.yaml index bfe927b4d3..5cf5baae25 100644 --- a/openapi/config-values.yaml +++ b/openapi/config-values.yaml @@ -208,11 +208,14 @@ properties: type: object description: | Selector for allowed storage classes to be used for virtual images on PVC. + minProperties: 1 properties: matchNames: type: array + minItems: 1 items: type: string + minLength: 1 x-examples: ["sc-1", "sc-2"] virtualDisks: type: object @@ -227,11 +230,14 @@ properties: type: object description: | Selector for allowed storage classes to be used for virtual disks. + minProperties: 1 properties: matchNames: type: array + minItems: 1 items: type: string + minLength: 1 x-examples: ["sc-1", "sc-2"] logLevel: type: string diff --git a/openapi/doc-ru-config-values.yaml b/openapi/doc-ru-config-values.yaml index 3d9f0f02b2..041db60763 100644 --- a/openapi/doc-ru-config-values.yaml +++ b/openapi/doc-ru-config-values.yaml @@ -109,11 +109,14 @@ properties: type: object description: | Селектор разрешенных классов хранения, которые можно использовать для виртуальных образов на PVC. + minProperties: 1 properties: matchNames: type: array + minItems: 1 items: type: string + minLength: 1 virtualDisks: type: object description: | @@ -127,11 +130,14 @@ properties: type: object description: | Селектор разрешенных классов хранения, используемых для виртуальных дисков. + minProperties: 1 properties: matchNames: type: array + minItems: 1 items: type: string + minLength: 1 audit: type: object description: |