@@ -20,13 +20,7 @@ import (
20
20
"strings"
21
21
"time"
22
22
23
- "github.com/codefresh-io/cli-v2/pkg/log"
24
- "github.com/codefresh-io/cli-v2/pkg/runtime"
25
- "github.com/codefresh-io/cli-v2/pkg/store"
26
- "github.com/codefresh-io/cli-v2/pkg/util"
27
- apu "github.com/codefresh-io/cli-v2/pkg/util/aputil"
28
- ingressutil "github.com/codefresh-io/cli-v2/pkg/util/ingress"
29
- wfutil "github.com/codefresh-io/cli-v2/pkg/util/workflow"
23
+ "encoding/json"
30
24
31
25
apcmd "github.com/argoproj-labs/argocd-autopilot/cmd/commands"
32
26
"github.com/argoproj-labs/argocd-autopilot/pkg/application"
@@ -41,6 +35,13 @@ import (
41
35
sensorsv1alpha1 "github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1"
42
36
wf "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow"
43
37
wfv1alpha1 "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1"
38
+ "github.com/codefresh-io/cli-v2/pkg/log"
39
+ "github.com/codefresh-io/cli-v2/pkg/runtime"
40
+ "github.com/codefresh-io/cli-v2/pkg/store"
41
+ "github.com/codefresh-io/cli-v2/pkg/util"
42
+ apu "github.com/codefresh-io/cli-v2/pkg/util/aputil"
43
+ ingressutil "github.com/codefresh-io/cli-v2/pkg/util/ingress"
44
+ wfutil "github.com/codefresh-io/cli-v2/pkg/util/workflow"
44
45
"github.com/juju/ansiterm"
45
46
"github.com/spf13/cobra"
46
47
corev1 "k8s.io/api/core/v1"
@@ -230,7 +231,6 @@ func createDemoResources(ctx context.Context, opts *GitSourceCreateOptions, gsRe
230
231
if err != nil {
231
232
return fmt .Errorf ("failed to read files in git-source repo. Err: %w" , err )
232
233
}
233
-
234
234
if len (fi ) == 0 {
235
235
err = createCronExamplePipeline (& gitSourceCronExampleOptions {
236
236
runtimeName : opts .RuntimeName ,
@@ -273,7 +273,15 @@ func createCronExamplePipeline(opts *gitSourceCronExampleOptions) error {
273
273
sensorFilePath := opts .gsFs .Join (opts .gsCloneOpts .Path (), store .Get ().CronExampleSensorFileName )
274
274
275
275
eventSource := createCronExampleEventSource ()
276
- err = opts .gsCloneOpts .FS .WriteYamls (eventSourceFilePath , eventSource )
276
+ eventSourceRedundanded , err := cleanUpFieldsCronEventSource (& eventSource )
277
+
278
+ if err != nil {
279
+ err = opts .gsCloneOpts .FS .WriteYamls (eventSourceFilePath , eventSource )
280
+
281
+ } else {
282
+ err = opts .gsCloneOpts .FS .WriteYamls (eventSourceFilePath , eventSourceRedundanded )
283
+ }
284
+
277
285
if err != nil {
278
286
return fmt .Errorf ("failed to write yaml of eventsource. Error: %w" , err )
279
287
}
@@ -289,7 +297,16 @@ func createCronExamplePipeline(opts *gitSourceCronExampleOptions) error {
289
297
return fmt .Errorf ("failed to create cron example sensor. Error: %w" , err )
290
298
}
291
299
292
- err = opts .gsCloneOpts .FS .WriteYamls (sensorFilePath , sensor )
300
+ sensorRedundanded , err := cleanUpFieldsCronSensor (& sensor )
301
+
302
+ if err != nil {
303
+
304
+ err = opts .gsCloneOpts .FS .WriteYamls (sensorFilePath , sensor )
305
+
306
+ } else {
307
+ err = opts .gsCloneOpts .FS .WriteYamls (sensorFilePath , sensorRedundanded )
308
+ }
309
+
293
310
if err != nil {
294
311
return fmt .Errorf ("failed to write yaml of cron example sensor. Error: %w" , err )
295
312
}
@@ -310,7 +327,7 @@ func createCronExampleEventSource() *eventsourcev1alpha1.EventSource {
310
327
EventBusName : store .Get ().EventBusName ,
311
328
Calendar : map [string ]eventsourcev1alpha1.CalendarEventSource {
312
329
store .Get ().CronExampleEventName : {
313
- Interval : "5m " ,
330
+ Interval : "30m " ,
314
331
},
315
332
},
316
333
},
@@ -652,14 +669,37 @@ func createDemoWorkflowTemplate(gsFs fs.FS) error {
652
669
},
653
670
}
654
671
655
- return gsFs .WriteYamls (store .Get ().CronExampleWfTemplateFileName , wfTemplate )
672
+ var err error
673
+
674
+ wfRedundanded , err := cleanUpFieldsWorkflowTemplate (wfTemplate )
675
+
676
+ if err != nil {
677
+ err = gsFs .WriteYamls (store .Get ().CronExampleWfTemplateFileName , wfTemplate )
678
+ } else {
679
+ err = gsFs .WriteYamls (store .Get ().CronExampleWfTemplateFileName , wfRedundanded )
680
+ }
681
+
682
+ if err != nil {
683
+ return err
684
+ }
685
+ return err
656
686
}
657
687
658
688
func createGithubExamplePipeline (opts * gitSourceGithubExampleOptions ) error {
659
689
// Create an ingress that will manage external access to the github eventsource service
690
+ var err error
660
691
ingress := createGithubExampleIngress (opts .ingressClass )
661
692
ingressFilePath := opts .gsFs .Join (opts .gsCloneOpts .Path (), store .Get ().GithubExampleIngressFileName )
662
- err := opts .gsCloneOpts .FS .WriteYamls (ingressFilePath , ingress )
693
+
694
+ ingressRedundanded , err := cleanUpFieldsIngressGithub (& ingress )
695
+
696
+ if err != nil {
697
+ err = opts .gsCloneOpts .FS .WriteYamls (ingressFilePath , ingress )
698
+
699
+ } else {
700
+ err = opts .gsCloneOpts .FS .WriteYamls (ingressFilePath , ingressRedundanded )
701
+ }
702
+
663
703
if err != nil {
664
704
return fmt .Errorf ("failed to write yaml of github example ingress. Error: %w" , err )
665
705
}
@@ -668,19 +708,35 @@ func createGithubExamplePipeline(opts *gitSourceGithubExampleOptions) error {
668
708
gsRepoURL := opts .gsCloneOpts .URL ()
669
709
eventSource := createGithubExampleEventSource (gsRepoURL , opts .ingressHost )
670
710
eventSourceFilePath := opts .gsFs .Join (opts .gsCloneOpts .Path (), store .Get ().GithubExampleEventSourceFileName )
671
- err = opts .gsCloneOpts .FS .WriteYamls (eventSourceFilePath , eventSource )
711
+
712
+ eventSourceRedundanded , err := cleanUpFieldsGithubEventSource (& eventSource )
713
+
714
+ if err != nil {
715
+ err = opts .gsCloneOpts .FS .WriteYamls (eventSourceFilePath , eventSource )
716
+
717
+ } else {
718
+ err = opts .gsCloneOpts .FS .WriteYamls (eventSourceFilePath , eventSourceRedundanded )
719
+ }
720
+
672
721
if err != nil {
673
722
return fmt .Errorf ("failed to write yaml of secret. Error: %w" , err )
674
723
}
675
724
676
725
// Create a sensor that will listen to the events published by the github eventsource, and trigger workflows
677
726
sensor := createGithubExampleSensor ()
678
727
sensorFilePath := opts .gsFs .Join (opts .gsCloneOpts .Path (), store .Get ().GithubExampleSensorFileName )
679
- err = opts .gsCloneOpts .FS .WriteYamls (sensorFilePath , sensor )
728
+
729
+ sensorRedunded , err := cleanUpFieldsGithubSensor (& sensor )
730
+
680
731
if err != nil {
681
- return fmt .Errorf ("failed to write yaml of github example sensor. Error: %w" , err )
732
+ err = opts .gsCloneOpts .FS .WriteYamls (sensorFilePath , sensor )
733
+ } else {
734
+ err = opts .gsCloneOpts .FS .WriteYamls (sensorFilePath , sensorRedunded )
682
735
}
683
736
737
+ if err != nil {
738
+ return fmt .Errorf ("failed to write yaml of github example sensor. Error: %w" , err )
739
+ }
684
740
return nil
685
741
}
686
742
@@ -830,3 +886,177 @@ func createGithubExampleSensor() *sensorsv1alpha1.Sensor {
830
886
},
831
887
}
832
888
}
889
+
890
+ func cleanUpFieldsIngressGithub (ingress * * netv1.Ingress ) (map [string ]interface {}, error ) {
891
+
892
+ crd , err := unMarshalCustomObject (ingress )
893
+ if err != nil {
894
+ return nil , err
895
+ }
896
+ deleteRedundandedGeneralFields (crd )
897
+
898
+ return crd , nil
899
+
900
+ }
901
+
902
+ func cleanUpFieldsCronEventSource (eventSource * * eventsourcev1alpha1.EventSource ) (map [string ]interface {}, error ) {
903
+
904
+ crd , err := unMarshalCustomObject (eventSource )
905
+ if err != nil {
906
+ return nil , err
907
+ }
908
+ _ , schedule := nestedMapLookup (crd , "spec" , "calendar" , "example-with-interval" , "schedule" )
909
+
910
+ if schedule != nil {
911
+ delete (schedule , "schedule" )
912
+ }
913
+
914
+ deleteRedundandedGeneralFields (crd )
915
+
916
+ return crd , nil
917
+
918
+ }
919
+
920
+ func cleanUpFieldsWorkflowTemplate (eventSource * wfv1alpha1.WorkflowTemplate ) (map [string ]interface {}, error ) {
921
+ crd , err := unMarshalCustomObject (eventSource )
922
+ if err != nil {
923
+ return nil , err
924
+ }
925
+
926
+ deleteRedundandedGeneralFields (crd )
927
+
928
+ return crd , nil
929
+
930
+ }
931
+
932
+ func cleanUpFieldsCronSensor (sensor * * sensorsv1alpha1.Sensor ) (map [string ]interface {}, error ) {
933
+ crd , err := unMarshalCustomObject (sensor )
934
+ if err != nil {
935
+ return nil , err
936
+ }
937
+
938
+ _ , triggers := nestedMapLookup (crd , "spec" , "triggers" )
939
+ if triggers != nil {
940
+ for _ , value := range triggers ["triggers" ].([]interface {}) {
941
+ if rec , ok := value .(map [string ]interface {}); ok {
942
+
943
+ _ , resource := nestedMapLookup (rec , "template" , "argoWorkflow" , "source" , "resource" , "status" )
944
+ if resource != nil {
945
+ delete (resource , "status" )
946
+ }
947
+ _ , metadata := nestedMapLookup (rec , "template" , "argoWorkflow" , "source" , "resource" , "metadata" , "creationTimestamp" )
948
+ if metadata != nil {
949
+ delete (metadata , "creationTimestamp" )
950
+ }
951
+ }
952
+ }
953
+
954
+ }
955
+
956
+ deleteRedundandedGeneralFields (crd )
957
+
958
+ return crd , nil
959
+
960
+ }
961
+
962
+ func cleanUpFieldsGithubEventSource (eventSource * * eventsourcev1alpha1.EventSource ) (map [string ]interface {}, error ) {
963
+ crd , err := unMarshalCustomObject (eventSource )
964
+ if err != nil {
965
+ return nil , err
966
+ }
967
+
968
+ _ , targetPort := nestedMapLookup (crd , "spec" , "service" , "ports" )
969
+ if targetPort != nil {
970
+ for _ , value := range targetPort ["ports" ].([]interface {}) {
971
+ if rec , ok := value .(map [string ]interface {}); ok {
972
+ _ , targetPort := nestedMapLookup (rec , "targetPort" )
973
+ if targetPort != nil {
974
+ delete (targetPort , "targetPort" )
975
+ }
976
+ }
977
+ }
978
+ }
979
+
980
+ _ , githup := nestedMapLookup (crd , "spec" , "github" , "push" , "id" )
981
+ if githup != nil {
982
+ delete (githup , "id" )
983
+ delete (githup , "owner" )
984
+ delete (githup , "repository" )
985
+ }
986
+
987
+ deleteRedundandedGeneralFields (crd )
988
+
989
+ return crd , nil
990
+
991
+ }
992
+
993
+ func cleanUpFieldsGithubSensor (sensor * * sensorsv1alpha1.Sensor ) (map [string ]interface {}, error ) {
994
+ crd , err := unMarshalCustomObject (sensor )
995
+ if err != nil {
996
+ return nil , err
997
+ }
998
+
999
+ //Delete redunded fields from sensor
1000
+ _ , triggers := nestedMapLookup (crd , "spec" , "triggers" )
1001
+ if triggers != nil {
1002
+ for _ , value := range triggers ["triggers" ].([]interface {}) {
1003
+ if rec , ok := value .(map [string ]interface {}); ok {
1004
+
1005
+ _ , resource := nestedMapLookup (rec , "template" , "argoWorkflow" , "source" , "resource" , "status" )
1006
+ if resource != nil {
1007
+ delete (resource , "status" )
1008
+ }
1009
+ _ , metadata := nestedMapLookup (rec , "template" , "argoWorkflow" , "source" , "resource" , "metadata" , "creationTimestamp" )
1010
+ if metadata != nil {
1011
+ delete (metadata , "creationTimestamp" )
1012
+ }
1013
+ }
1014
+ }
1015
+
1016
+ }
1017
+
1018
+ deleteRedundandedGeneralFields (crd )
1019
+
1020
+ return crd , nil
1021
+
1022
+ }
1023
+
1024
+ func nestedMapLookup (m map [string ]interface {}, ks ... string ) (rval interface {}, mm map [string ]interface {}) {
1025
+ var ok bool
1026
+
1027
+ if len (ks ) == 0 {
1028
+ return nil , nil
1029
+ }
1030
+ if rval , ok = m [ks [0 ]]; ! ok {
1031
+ return nil , nil
1032
+ } else if len (ks ) == 1 {
1033
+ return rval , m
1034
+ } else if m , ok = rval .(map [string ]interface {}); ! ok {
1035
+ return nil , nil
1036
+ } else {
1037
+ return nestedMapLookup (m , ks [1 :]... )
1038
+ }
1039
+ }
1040
+
1041
+ func deleteRedundandedGeneralFields (crd map [string ]interface {}) {
1042
+ delete (crd , "status" )
1043
+ metadata := crd ["metadata" ].(map [string ]interface {})
1044
+ delete (metadata , "creationTimestamp" )
1045
+
1046
+ }
1047
+
1048
+ func unMarshalCustomObject (obj interface {}) (map [string ]interface {}, error ) {
1049
+
1050
+ crd := make (map [string ]interface {})
1051
+
1052
+ data , err := json .Marshal (obj )
1053
+ if err != nil {
1054
+ return nil , err
1055
+ }
1056
+
1057
+ err = json .Unmarshal (data , & crd )
1058
+ if err != nil {
1059
+ return nil , err
1060
+ }
1061
+ return crd , nil
1062
+ }
0 commit comments