github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/internal/utils/helper/yaml.go (about) 1 package helper 2 3 import ( 4 "strings" 5 6 yamlfile "github.com/caos/orbos/internal/utils/yaml" 7 "gopkg.in/yaml.v3" 8 ) 9 10 type Metadata struct { 11 Name string `yaml:"name"` 12 Namespace string `yaml:"namespace"` 13 } 14 15 type Resource struct { 16 Kind string `yaml:"kind"` 17 ApiVersion string `yaml:"apiVersion"` 18 Metadata *Metadata `yaml:"metadata"` 19 } 20 21 func AddStringBeforePointForKindAndName(path, kind, name, point, addContent string) error { 22 y := yamlfile.New(path) 23 24 parts, err := y.ToObjectList() 25 if err != nil { 26 return err 27 } 28 29 if err := y.DeleteFile(); err != nil { 30 return err 31 } 32 33 for _, part := range parts { 34 if part == "" { 35 continue 36 } 37 struc := &Resource{} 38 if err := yaml.Unmarshal([]byte(part), struc); err != nil { 39 return err 40 } 41 output := part 42 if struc.Kind == kind && struc.Metadata.Name == name { 43 lines := strings.Split(part, "\n") 44 for i, line := range lines { 45 if strings.Contains(line, point) { 46 lines[i] = strings.Join([]string{addContent, line}, "") 47 } 48 } 49 output = strings.Join(lines, "\n") 50 } 51 52 if err := y.AddStringObject(output); err != nil { 53 return err 54 } 55 } 56 return nil 57 } 58 59 func DeleteKindFromYaml(path, kind string) error { 60 y := yamlfile.New(path) 61 62 parts, err := y.ToObjectList() 63 if err != nil { 64 return err 65 } 66 67 if err := y.DeleteFile(); err != nil { 68 return err 69 } 70 71 for _, part := range parts { 72 73 struc := &Resource{} 74 if err := yaml.Unmarshal([]byte(part), struc); err != nil { 75 return err 76 } 77 78 if struc.Kind != kind { 79 if err := y.AddStringObject(part); err != nil { 80 return err 81 } 82 } 83 } 84 85 return nil 86 } 87 88 func DeleteFirstResourceFromYaml(path, apiVersion, kind, name string) error { 89 y := yamlfile.New(path) 90 91 parts, err := y.ToObjectList() 92 if err != nil { 93 return err 94 } 95 96 if err := y.DeleteFile(); err != nil { 97 return err 98 } 99 100 found := false 101 for _, part := range parts { 102 struc := &Resource{} 103 if err := yaml.Unmarshal([]byte(part), struc); err != nil { 104 return err 105 } 106 107 if found || !(struc.ApiVersion == apiVersion && struc.Kind == kind && struc.Metadata.Name == name) { 108 if err := y.AddStringObject(part); err != nil { 109 return err 110 } 111 } else { 112 found = true 113 } 114 } 115 return nil 116 }