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  }