github.com/go-chef/chef@v0.30.1/config_rb_reader.go (about)

     1  package chef
     2  
     3  import (
     4  	"errors"
     5  	"os"
     6  	"path/filepath"
     7  	"strings"
     8  )
     9  
    10  type ConfigRb struct {
    11  	ClientKey     string
    12  	ChefServerUrl string
    13  	NodeName      string
    14  }
    15  
    16  type clientFunc func(s []string, path string, m *ConfigRb) error
    17  
    18  var clientRegistry map[string]clientFunc
    19  
    20  func init() {
    21  	clientRegistry = make(map[string]clientFunc, 2)
    22  	clientRegistry["client_key"] = configKeyParser
    23  	clientRegistry["chef_server_url"] = configServerParser
    24  	clientRegistry["node_name"] = configNodeNameParser
    25  
    26  }
    27  func NewClientRb(data, path string) (c ConfigRb, err error) {
    28  	linesData := strings.Split(data, "\n")
    29  	if len(linesData) < 3 {
    30  		return c, errors.New("not much info")
    31  	}
    32  	for _, i := range linesData {
    33  		key, value := getKeyValue(strings.TrimSpace(i))
    34  		if fn, ok := clientRegistry[key]; ok {
    35  			err = fn(value, path, &c)
    36  			if err != nil {
    37  				return
    38  			}
    39  		}
    40  	}
    41  	return c, err
    42  }
    43  func configKeyParser(s []string, path string, c *ConfigRb) error {
    44  	str := StringParserForMeta(s)
    45  	data := strings.Split(str, "/")
    46  	size := len(data)
    47  	if size > 0 {
    48  		keyPath := filepath.Join(path, data[size-1])
    49  		keyData, err := os.ReadFile(keyPath)
    50  		if err != nil {
    51  			return err
    52  		}
    53  		c.ClientKey = string(keyData)
    54  	}
    55  	return nil
    56  }
    57  func configServerParser(s []string, path string, c *ConfigRb) error {
    58  	c.ChefServerUrl = StringParserForMeta(s)
    59  	return nil
    60  }
    61  func configNodeNameParser(s []string, path string, c *ConfigRb) error {
    62  	c.NodeName = StringParserForMeta(s)
    63  	return nil
    64  }