48 lines
1.0 KiB
Go
48 lines
1.0 KiB
Go
|
package helmunit
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"strings"
|
||
|
|
||
|
"github.com/Jeffail/gabs"
|
||
|
)
|
||
|
|
||
|
type manifestCollection map[string]map[string]gabs.Container
|
||
|
|
||
|
func (c *manifestCollection) Initialize() {
|
||
|
*c = make(manifestCollection)
|
||
|
}
|
||
|
|
||
|
func (c *manifestCollection) Add(yamlInput []byte) error {
|
||
|
collection := *c
|
||
|
jsonManifest, err := yamlToJson(yamlInput)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
kind := strings.ToLower(jsonManifest.Path("kind").Data().(string))
|
||
|
name := strings.ToLower(jsonManifest.Path("metadata.name").Data().(string))
|
||
|
|
||
|
if kind == "" || name == "" {
|
||
|
return errors.New("invalid manifest")
|
||
|
}
|
||
|
|
||
|
data, ok := collection[kind]
|
||
|
if !ok {
|
||
|
data = make(map[string]gabs.Container)
|
||
|
collection[kind] = data
|
||
|
}
|
||
|
data[name] = *jsonManifest
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (c *manifestCollection) Get(kind string, name string) *gabs.Container {
|
||
|
collection := *c
|
||
|
manifest, ok := collection[strings.ToLower(kind)][strings.ToLower(name)]
|
||
|
if !ok {
|
||
|
return nil
|
||
|
}
|
||
|
return &manifest
|
||
|
}
|