github.com/Cloud-Foundations/Dominator@v0.3.4/lib/flags/loadflags/impl.go (about)

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