github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/lib/filegen/util/load.go (about)

     1  package util
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	"github.com/Cloud-Foundations/Dominator/lib/filegen"
     8  	"github.com/Cloud-Foundations/Dominator/lib/fsutil"
     9  )
    10  
    11  type configFunc func(*filegen.Manager, string, []string) error
    12  
    13  type configType struct {
    14  	minParams  int
    15  	maxParams  int
    16  	configFunc configFunc
    17  }
    18  
    19  var configs = map[string]configType{
    20  	"DynamicTemplateFile": {1, 1, dynamicTemplateFileGenerator},
    21  	"File":                {1, 1, fileGenerator},
    22  	"MDB":                 {0, 0, mdbGenerator},
    23  	"StaticTemplateFile":  {1, 1, staticTemplateFileGenerator},
    24  }
    25  
    26  func loadConfiguration(manager *filegen.Manager, filename string) error {
    27  	lines, err := fsutil.LoadLines(filename)
    28  	if err != nil {
    29  		return fmt.Errorf("error loading configuration file: %s", err)
    30  	}
    31  	for _, line := range lines {
    32  		fields := strings.Fields(line)
    33  		if len(fields) < 2 {
    34  			return fmt.Errorf("insufficient fields in line: \"%s\"", line)
    35  		}
    36  		config, ok := configs[fields[0]]
    37  		if !ok {
    38  			return fmt.Errorf("unknown generator type: %s", fields[0])
    39  		}
    40  		numParams := len(fields) - 2
    41  		if numParams < config.minParams {
    42  			return fmt.Errorf("insufficient params in line: \"%s\"", line)
    43  		}
    44  		if config.maxParams >= 0 && numParams > config.maxParams {
    45  			return fmt.Errorf("too many params in line: \"%s\"", line)
    46  		}
    47  		if err := config.configFunc(manager, fields[1],
    48  			fields[2:]); err != nil {
    49  			return err
    50  		}
    51  	}
    52  	return nil
    53  }
    54  
    55  func dynamicTemplateFileGenerator(manager *filegen.Manager, pathname string,
    56  	params []string) error {
    57  	return manager.RegisterTemplateFileForPath(pathname, params[0], true)
    58  }
    59  
    60  func fileGenerator(manager *filegen.Manager, pathname string,
    61  	params []string) error {
    62  	manager.RegisterFileForPath(pathname, params[0])
    63  	return nil
    64  }
    65  
    66  func mdbGenerator(manager *filegen.Manager, pathname string,
    67  	params []string) error {
    68  	manager.RegisterMdbGeneratorForPath(pathname)
    69  	return nil
    70  }
    71  
    72  func staticTemplateFileGenerator(manager *filegen.Manager, pathname string,
    73  	params []string) error {
    74  	return manager.RegisterTemplateFileForPath(pathname, params[0], false)
    75  }