diff --git a/internal/config/config.go b/internal/config/config.go index 36528dd..fcc4d13 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -34,7 +34,7 @@ func BoolPtr(b bool) *bool { type Config struct { Namespace string `mapstructure:"namespace"` ContainerDiskImage string `mapstructure:"container-disk-image"` - DataDiskSize string `mapstructure:"data-disk-size"` + DataDiskSize string `mapstructure:"disk-size"` CPUCores int `mapstructure:"cpu-cores"` Memory string `mapstructure:"memory"` Workloads map[string]WorkloadConfig `mapstructure:"workloads"` @@ -56,7 +56,7 @@ type Config struct { func SetDefaults(v *viper.Viper) { v.SetDefault("namespace", constants.DefaultNamespace) v.SetDefault("container-disk-image", constants.DefaultContainerDiskImage) - v.SetDefault("data-disk-size", constants.DefaultDiskSize) + v.SetDefault("disk-size", constants.DefaultDiskSize) v.SetDefault("cpu-cores", constants.DefaultCPUCores) v.SetDefault("memory", constants.DefaultMemory) v.SetDefault("wait-for-ready", true) @@ -78,7 +78,7 @@ func BindFlags(cmd *cobra.Command) { f.String("kubeconfig", "", "Path to kubeconfig file") f.String("config", "", "Path to YAML config file") f.String("container-disk-image", "", "Container disk image for VMs") - f.String("data-disk-size", "", "Data disk size") + f.String("disk-size", "", "Data disk size") f.Int("cpu-cores", 0, "CPU cores per VM") f.String("memory", "", "Memory per VM (e.g., 2Gi)") f.Bool("dry-run", false, "Print specs without creating resources") @@ -117,7 +117,7 @@ func LoadConfig(cmd *cobra.Command) (*Config, error) { bindFlagIfSet(v, cmd, "namespace") bindFlagIfSet(v, cmd, "kubeconfig") bindFlagIfSet(v, cmd, "container-disk-image") - bindFlagIfSet(v, cmd, "data-disk-size") + bindFlagIfSet(v, cmd, "disk-size") bindFlagIfSet(v, cmd, "memory") bindFlagIfSet(v, cmd, "ssh-user") bindFlagIfSet(v, cmd, "ssh-password") @@ -147,7 +147,7 @@ func LoadConfig(cmd *cobra.Command) (*Config, error) { cfg := &Config{} cfg.Namespace = v.GetString("namespace") cfg.ContainerDiskImage = v.GetString("container-disk-image") - cfg.DataDiskSize = v.GetString("data-disk-size") + cfg.DataDiskSize = v.GetString("disk-size") cfg.CPUCores = v.GetInt("cpu-cores") cfg.Memory = v.GetString("memory") cfg.KubeconfigPath = v.GetString("kubeconfig") diff --git a/internal/config/config_test.go b/internal/config/config_test.go index 43cf38a..03d7a11 100644 --- a/internal/config/config_test.go +++ b/internal/config/config_test.go @@ -251,6 +251,44 @@ container-disk-image: quay.io/test/image:latest Expect(err).NotTo(HaveOccurred()) Expect(cfg.Namespace).To(Equal("file-ns")) }) + + It("should apply --disk-size flag to DataDiskSize", func() { + err1 := cmd.Flags().Set("disk-size", "50Gi") + Expect(err1).NotTo(HaveOccurred()) + + cfg, err := config.LoadConfig(cmd) + Expect(err).NotTo(HaveOccurred()) + Expect(cfg.DataDiskSize).To(Equal("50Gi")) + }) + + It("should prefer --disk-size flag over env var", func() { + _ = os.Setenv("VIRTWORK_DISK_SIZE", "env-100Gi") + defer func() { + _ = os.Unsetenv("VIRTWORK_DISK_SIZE") + }() + + err1 := cmd.Flags().Set("disk-size", "flag-50Gi") + Expect(err1).NotTo(HaveOccurred()) + + cfg, err := config.LoadConfig(cmd) + Expect(err).NotTo(HaveOccurred()) + Expect(cfg.DataDiskSize).To(Equal("flag-50Gi")) + }) + + It("should prefer VIRTWORK_DISK_SIZE env over config file", func() { + path := writeConfigFile(tmpDir, `disk-size: file-30Gi`) + err1 := cmd.Flags().Set("config", path) + Expect(err1).NotTo(HaveOccurred()) + + _ = os.Setenv("VIRTWORK_DISK_SIZE", "env-60Gi") + defer func() { + _ = os.Unsetenv("VIRTWORK_DISK_SIZE") + }() + + cfg, err := config.LoadConfig(cmd) + Expect(err).NotTo(HaveOccurred()) + Expect(cfg.DataDiskSize).To(Equal("env-60Gi")) + }) }) Context("SSH config fields", func() {