func ValidateConf()

in cli/pkg/config/config.go [181:232]


func ValidateConf(c *Config) error {
	log.Println("⏱ Validating Config...")

	// Config-wide vars
	if c.TerraformState != "local" && c.TerraformState != "cloud" {
		return fmt.Errorf("terraform state must be one of: local, cloud")
	}
	// if err := validateNodeOS(c.DefaultNodepoolOS); err != nil {
	// 	return err
	// }
	if err := validateTFModuleRepo(c.TFModuleRepo); err != nil {
		return err
	}
	if c.MinNodeCount < 1 || c.MaxNodeCount > 100 {
		return fmt.Errorf("NumNodes must be a number between 1-100")
	}

	// VPC Config vars
	if c.VpcConfig.VpcType != "standalone" && c.VpcConfig.VpcType != "shared" {
		return fmt.Errorf("VPC Type must be one of: standalone, shared")
	}
	if c.VpcConfig.VpcName == "" {
		return fmt.Errorf("VPC Name cannot be empty")
	}
	// err := validateVPC(c.VpcConfig.VpcName, c.VpcConfig.VpcProjectID)
	// if err != nil {
	// 	return err
	// }
	// log.Printf("🌐 VPC name %s is valid + does not yet exist in VPC project %s\n", c.VpcConfig.VpcName, c.VpcConfig.VpcProjectID)

	// Validate each ClusterConfig
	for i, cc := range c.ClustersConfig {
		// TODO - what is cluster type? why is line 125 here?
		if cc.ClusterType != "managed" && cc.ClusterType != "on-prem" {
			if cc.SubnetName == "" {
				return fmt.Errorf("ClustersConfig[%d] SubnetName cannot be empty", i)
			}
			if err := validateRegionAndZone(c.ClustersProjectID, cc.Region, cc.Zones); err != nil {
				return fmt.Errorf("ClustersConfig[%d]: %s", i, err)
			}
			// if err := validateMachineType(c.ClustersProjectID, cc.MachineType, cc.Zones); err != nil {
			// 	return fmt.Errorf("ClustersConfig[%d]: %s", i, err)
			// }
			if err := validateNodeOS(c.DefaultNodepoolOS); err != nil {
				return fmt.Errorf("ClustersConfig[%d]: %s", i, err)
			}
		}
	}

	log.Println("✅ Config is valid.")
	return nil
}