github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/lib/flags/loadflags/impl.go (about)

     1  package loadflags
     2  
     3  import (
     4  	"bufio"
     5  	"errors"
     6  	"flag"
     7  	"os"
     8  	"path/filepath"
     9  	"strings"
    10  )
    11  
    12  func loadFlags(dirname string) error {
    13  	err := loadFlagsFromFile(filepath.Join(dirname, "flags.default"))
    14  	if err != nil {
    15  		return err
    16  	}
    17  	return loadFlagsFromFile(filepath.Join(dirname, "flags.extra"))
    18  }
    19  
    20  func loadFlagsFromFile(filename string) error {
    21  	file, err := os.Open(filename)
    22  	if err != nil {
    23  		if os.IsNotExist(err) {
    24  			return nil
    25  		}
    26  		return err
    27  	}
    28  	scanner := bufio.NewScanner(file)
    29  	for scanner.Scan() {
    30  		line := strings.TrimSpace(scanner.Text())
    31  		if len(line) < 1 {
    32  			continue
    33  		}
    34  		if line[0] == '#' || line[0] == ';' {
    35  			continue
    36  		}
    37  		splitLine := strings.SplitN(line, "=", 2)
    38  		if len(splitLine) < 2 {
    39  			return errors.New("bad line, cannot split name from value: " + line)
    40  		}
    41  		name := strings.TrimSpace(splitLine[0])
    42  		if strings.Count(name, " ") != 0 {
    43  			return errors.New("bad line, name has whitespace: " + line)
    44  		}
    45  		value := strings.TrimSpace(splitLine[1])
    46  		if err := flag.CommandLine.Set(name, value); err != nil {
    47  			return err
    48  		}
    49  	}
    50  	return scanner.Err()
    51  }