github.com/argoproj/argo-cd/v3@v3.2.1/applicationset/generators/list.go (about) 1 package generators 2 3 import ( 4 "encoding/json" 5 "errors" 6 "fmt" 7 "time" 8 9 "sigs.k8s.io/controller-runtime/pkg/client" 10 "sigs.k8s.io/yaml" 11 12 argoprojiov1alpha1 "github.com/argoproj/argo-cd/v3/pkg/apis/application/v1alpha1" 13 ) 14 15 var _ Generator = (*ListGenerator)(nil) 16 17 type ListGenerator struct{} 18 19 func NewListGenerator() Generator { 20 g := &ListGenerator{} 21 return g 22 } 23 24 func (g *ListGenerator) GetRequeueAfter(_ *argoprojiov1alpha1.ApplicationSetGenerator) time.Duration { 25 return NoRequeueAfter 26 } 27 28 func (g *ListGenerator) GetTemplate(appSetGenerator *argoprojiov1alpha1.ApplicationSetGenerator) *argoprojiov1alpha1.ApplicationSetTemplate { 29 return &appSetGenerator.List.Template 30 } 31 32 func (g *ListGenerator) GenerateParams(appSetGenerator *argoprojiov1alpha1.ApplicationSetGenerator, appSet *argoprojiov1alpha1.ApplicationSet, _ client.Client) ([]map[string]any, error) { 33 if appSetGenerator == nil { 34 return nil, ErrEmptyAppSetGenerator 35 } 36 37 if appSetGenerator.List == nil { 38 return nil, ErrEmptyAppSetGenerator 39 } 40 41 res := make([]map[string]any, len(appSetGenerator.List.Elements)) 42 43 for i, tmpItem := range appSetGenerator.List.Elements { 44 params := map[string]any{} 45 var element map[string]any 46 err := json.Unmarshal(tmpItem.Raw, &element) 47 if err != nil { 48 return nil, fmt.Errorf("error unmarshling list element %w", err) 49 } 50 51 if appSet.Spec.GoTemplate { 52 res[i] = element 53 } else { 54 for key, value := range element { 55 if key == "values" { 56 values, ok := (value).(map[string]any) 57 if !ok { 58 return nil, errors.New("error parsing values map") 59 } 60 for k, v := range values { 61 value, ok := v.(string) 62 if !ok { 63 return nil, fmt.Errorf("error parsing value as string %w", err) 64 } 65 params["values."+k] = value 66 } 67 } else { 68 v, ok := value.(string) 69 if !ok { 70 return nil, fmt.Errorf("error parsing value as string %w", err) 71 } 72 params[key] = v 73 } 74 res[i] = params 75 } 76 } 77 } 78 79 // Append elements from ElementsYaml to the response 80 if appSetGenerator.List.ElementsYaml != "" { 81 var yamlElements []map[string]any 82 err := yaml.Unmarshal([]byte(appSetGenerator.List.ElementsYaml), &yamlElements) 83 if err != nil { 84 return nil, fmt.Errorf("error unmarshling decoded ElementsYaml %w", err) 85 } 86 res = append(res, yamlElements...) 87 } 88 89 return res, nil 90 }