feat(clustertool): validate and ensure numbers in clusterenv are always quoted.

This commit is contained in:
Kjeld Schouten
2024-10-21 13:45:35 +02:00
parent ea79ed73d3
commit b909826175
+59
View File
@@ -1,10 +1,13 @@
package initfiles
import (
"bufio"
"fmt"
"net"
"os"
"regexp"
"strings"
"unicode"
"github.com/rs/zerolog/log"
"github.com/truecharts/public/clustertool/pkg/helper"
@@ -26,12 +29,68 @@ func LoadTalEnv() error {
os.Exit(1)
}
clusterName()
checkQuotedNumbersInFile()
PostProcessTalEnv()
clusterEnvtoEnv()
log.Info().Msgf("ClusterEnv loaded successfully\n")
return nil
}
// Function to check if all numbers after ':' in a file are unquoted integers or floats
func checkQuotedNumbersInFile() (bool, error) {
filePath := helper.ClusterPath + "/clusterenv.yaml"
// Regular expression to find patterns like ': number' where number can be an int or float
re := regexp.MustCompile(`:\s*(.+)`) // Matches anything after ': '
// Open the file
file, err := os.Open(filePath)
if err != nil {
log.Error().Msgf("Failed to open file: %s \nError: %s", filePath, err)
os.Exit(1)
return false, err
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := scanner.Text()
// Skip lines that start with a number
trimmedLine := strings.TrimSpace(line)
if len(trimmedLine) > 0 && unicode.IsDigit(rune(trimmedLine[0])) {
continue
}
// Find matches for entries in each line
matches := re.FindStringSubmatch(line)
if len(matches) < 2 {
continue // Skip lines without a colon and value
}
// Get the value after the colon
value := strings.TrimSpace(matches[1])
// Check if the value is a valid number (int or float with a single dot)
isValidNumber := regexp.MustCompile(`^[0-9]+(\.[0-9]+)?$`).MatchString(value)
// If it's a valid number, log an error
if isValidNumber {
log.Error().Msgf("Unquoted number found %s line: %s", filePath, line)
os.Exit(1)
return false, nil
}
}
if err := scanner.Err(); err != nil {
log.Error().Msgf("Error scanning the file: %s", err)
os.Exit(1)
return false, err
}
return true, nil
}
func clusterName() {
helper.TalEnv["CLUSTERNAME"] = helper.ClusterName
}