github.com/Cloud-Foundations/Dominator@v0.3.4/lib/filegen/util/load.go (about)

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