|
1 | 1 | package plan |
2 | 2 |
|
3 | 3 | import ( |
4 | | - "sync" |
5 | | - |
6 | 4 | log "github.com/sirupsen/logrus" |
7 | 5 |
|
8 | 6 | "github.com/mxcd/gitops-cli/internal/k8s" |
9 | 7 | "github.com/mxcd/gitops-cli/internal/secret" |
10 | | - "github.com/mxcd/gitops-cli/internal/util" |
11 | 8 | ) |
12 | 9 |
|
13 | 10 | type Plan struct { |
@@ -67,83 +64,33 @@ func (p *Plan) Execute() error { |
67 | 64 | } |
68 | 65 |
|
69 | 66 | func executeKubernetesPlan(p *Plan) error { |
70 | | - parallelism := util.GetCliContext().Int("parallelism") |
71 | | - if parallelism < 1 { |
72 | | - parallelism = 1 |
73 | | - } |
74 | | - |
75 | | - // Filter items that need processing |
76 | | - itemsToProcess := []PlanItem{} |
77 | 67 | for _, item := range p.Items { |
78 | | - if !item.Diff.Equal { |
79 | | - itemsToProcess = append(itemsToProcess, item) |
80 | | - } else { |
| 68 | + if item.Diff.Equal { |
81 | 69 | log.Trace("Secret ", item.LocalSecret.Namespace, "/", item.LocalSecret.Name, " is equal, skipping...") |
| 70 | + continue |
82 | 71 | } |
83 | | - } |
84 | | - |
85 | | - if len(itemsToProcess) == 0 { |
86 | | - return nil |
87 | | - } |
88 | | - |
89 | | - // Create channels for parallel processing |
90 | | - itemChan := make(chan PlanItem, len(itemsToProcess)) |
91 | | - errorChan := make(chan error, len(itemsToProcess)) |
92 | | - |
93 | | - // Start worker goroutines |
94 | | - var workerGroup sync.WaitGroup |
95 | | - for i := 0; i < parallelism; i++ { |
96 | | - workerGroup.Add(1) |
97 | | - go func() { |
98 | | - defer workerGroup.Done() |
99 | | - for item := range itemChan { |
100 | | - var err error |
101 | | - if item.Diff.Type == secret.SecretDiffTypeAdded { |
102 | | - log.Trace("Secret ", item.LocalSecret.Namespace, "/", item.LocalSecret.Name, " is new, creating...") |
103 | | - err = k8s.CreateSecret(item.LocalSecret, item.LocalSecret.Target) |
104 | | - if err != nil { |
105 | | - log.Error("Failed to create secret ", item.LocalSecret.Namespace, "/", item.LocalSecret.Name, " in cluster") |
106 | | - } |
107 | | - } else if item.Diff.Type == secret.SecretDiffTypeChanged { |
108 | | - log.Trace("Secret ", item.LocalSecret.Namespace, "/", item.LocalSecret.Name, " is modified, updating...") |
109 | | - err = k8s.UpdateSecret(item.LocalSecret, item.LocalSecret.Target) |
110 | | - if err != nil { |
111 | | - log.Error("Failed to update secret ", item.LocalSecret.Namespace, "/", item.LocalSecret.Name, " in cluster") |
112 | | - } |
113 | | - } else if item.Diff.Type == secret.SecretDiffTypeRemoved { |
114 | | - log.Trace("Secret ", item.RemoteSecret.Namespace, "/", item.RemoteSecret.Name, " is deleted, deleting...") |
115 | | - err = k8s.DeleteSecret(item.RemoteSecret, item.RemoteSecret.Target) |
116 | | - if err != nil { |
117 | | - log.Error("Failed to delete secret ", item.RemoteSecret.Namespace, "/", item.RemoteSecret.Name, " in cluster") |
118 | | - } |
119 | | - } |
120 | | - if err != nil { |
121 | | - errorChan <- err |
122 | | - } |
| 72 | + if item.Diff.Type == secret.SecretDiffTypeAdded { |
| 73 | + log.Trace("Secret ", item.LocalSecret.Namespace, "/", item.LocalSecret.Name, " is new, creating...") |
| 74 | + err := k8s.CreateSecret(item.LocalSecret, item.LocalSecret.Target) |
| 75 | + if err != nil { |
| 76 | + log.Error("Failed to create secret ", item.LocalSecret.Namespace, "/", item.LocalSecret.Name, " in cluster") |
| 77 | + return err |
| 78 | + } |
| 79 | + } else if item.Diff.Type == secret.SecretDiffTypeChanged { |
| 80 | + log.Trace("Secret ", item.LocalSecret.Namespace, "/", item.LocalSecret.Name, " is modified, updating...") |
| 81 | + err := k8s.UpdateSecret(item.LocalSecret, item.LocalSecret.Target) |
| 82 | + if err != nil { |
| 83 | + log.Error("Failed to update secret ", item.LocalSecret.Namespace, "/", item.LocalSecret.Name, " in cluster") |
| 84 | + return err |
| 85 | + } |
| 86 | + } else if item.Diff.Type == secret.SecretDiffTypeRemoved { |
| 87 | + log.Trace("Secret ", item.RemoteSecret.Namespace, "/", item.RemoteSecret.Name, " is deleted, deleting...") |
| 88 | + err := k8s.DeleteSecret(item.RemoteSecret, item.RemoteSecret.Target) |
| 89 | + if err != nil { |
| 90 | + log.Error("Failed to delete secret ", item.RemoteSecret.Namespace, "/", item.RemoteSecret.Name, " in cluster") |
| 91 | + return err |
123 | 92 | } |
124 | | - }() |
125 | | - } |
126 | | - |
127 | | - // Send work to workers |
128 | | - go func() { |
129 | | - for _, item := range itemsToProcess { |
130 | | - itemChan <- item |
131 | | - } |
132 | | - close(itemChan) |
133 | | - }() |
134 | | - |
135 | | - // Wait for all workers to finish |
136 | | - go func() { |
137 | | - workerGroup.Wait() |
138 | | - close(errorChan) |
139 | | - }() |
140 | | - |
141 | | - // Check for errors |
142 | | - for err := range errorChan { |
143 | | - if err != nil { |
144 | | - return err |
145 | 93 | } |
146 | 94 | } |
147 | | - |
148 | 95 | return nil |
149 | 96 | } |
0 commit comments