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 }