4
4
"context"
5
5
"errors"
6
6
"fmt"
7
+ "maps"
7
8
"os"
8
9
"slices"
9
10
"strconv"
@@ -13,13 +14,12 @@ import (
13
14
"github.com/rigdev/rig-go-api/operator/api/v1/pipeline"
14
15
"github.com/rigdev/rig/cmd/common"
15
16
"github.com/rigdev/rig/cmd/rig-ops/cmd/base"
16
- "github.com/rigdev/rig/cmd/rig-ops /cmd/migrate "
17
+ "github.com/rigdev/rig/cmd/rig/cmd/capsule "
17
18
"github.com/rigdev/rig/pkg/api/config/v1alpha1"
18
19
"github.com/rigdev/rig/pkg/api/v1alpha2"
19
20
"github.com/rigdev/rig/pkg/obj"
20
21
"github.com/spf13/cobra"
21
22
"gopkg.in/yaml.v3"
22
- "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
23
23
"sigs.k8s.io/controller-runtime/pkg/client"
24
24
)
25
25
@@ -74,12 +74,12 @@ func (c *Cmd) dryRun(ctx context.Context, _ *cobra.Command, args []string) error
74
74
}
75
75
76
76
var spec string
77
- var capsule v1alpha2.Capsule
77
+ var capsuleSpec v1alpha2.Capsule
78
78
if len (args ) > 0 {
79
79
if err := c .K8s .Get (ctx , client.ObjectKey {
80
80
Namespace : args [0 ],
81
81
Name : args [1 ],
82
- }, & capsule ); err != nil {
82
+ }, & capsuleSpec ); err != nil {
83
83
return err
84
84
}
85
85
} else if specPath != "" {
@@ -88,7 +88,7 @@ func (c *Cmd) dryRun(ctx context.Context, _ *cobra.Command, args []string) error
88
88
return err
89
89
}
90
90
spec = string (bytes )
91
- if err := obj .Decode ([]byte (spec ), & capsule ); err != nil {
91
+ if err := obj .Decode ([]byte (spec ), & capsuleSpec ); err != nil {
92
92
return err
93
93
}
94
94
} else {
@@ -110,7 +110,7 @@ func (c *Cmd) dryRun(ctx context.Context, _ *cobra.Command, args []string) error
110
110
if err := c .K8s .Get (ctx , client.ObjectKey {
111
111
Namespace : choice [0 ],
112
112
Name : choice [1 ],
113
- }, & capsule ); err != nil {
113
+ }, & capsuleSpec ); err != nil {
114
114
return err
115
115
}
116
116
}
@@ -121,26 +121,29 @@ func (c *Cmd) dryRun(ctx context.Context, _ *cobra.Command, args []string) error
121
121
}
122
122
123
123
dryRun , err := c .OperatorClient .Pipeline .DryRun (ctx , connect .NewRequest (& pipeline.DryRunRequest {
124
- Namespace : capsule .Namespace ,
125
- Capsule : capsule .Name ,
124
+ Namespace : capsuleSpec .Namespace ,
125
+ Capsule : capsuleSpec .Name ,
126
126
OperatorConfig : string (cfgBytes ),
127
127
CapsuleSpec : spec ,
128
128
}))
129
129
if err != nil {
130
130
return err
131
131
}
132
132
133
- var objects []any
134
- for _ , o := range dryRun .Msg .GetOutputObjects () {
135
- object := & unstructured.Unstructured {}
136
- if err := obj .DecodeInto ([]byte (o .GetObject ().GetContent ()), object , c .Scheme ); err != nil {
137
- return err
138
- }
139
- objects = append (objects , object )
133
+ dryOutput , err := c .processDryRunOutput (dryRun .Msg )
134
+ if err != nil {
135
+ return err
140
136
}
141
137
142
138
if interactive {
143
- return c .interactiveDiff (dryRun .Msg )
139
+ return capsule .PromptDryOutput (ctx , dryOutput , c .Scheme )
140
+ }
141
+
142
+ var objects []any
143
+ for _ , o := range dryOutput .KubernetesObjects {
144
+ if o .New .Object != nil {
145
+ objects = append (objects , o .New .Object )
146
+ }
144
147
}
145
148
146
149
out , err := common .Format (objects , common .OutputTypeYAML )
@@ -156,37 +159,51 @@ func (c *Cmd) dryRun(ctx context.Context, _ *cobra.Command, args []string) error
156
159
return os .WriteFile (output , []byte (out ), 0o666 )
157
160
}
158
161
159
- func (c * Cmd ) interactiveDiff (dryRun * pipeline.DryRunResponse ) error {
160
- current := migrate .NewResources ()
161
- for _ , o := range dryRun .InputObjects {
162
- object , err := obj .DecodeAny ([]byte (o .GetContent ()), c .Scheme )
163
- if err != nil {
164
- return err
162
+ func (c * Cmd ) processDryRunOutput (resp * pipeline.DryRunResponse ) (capsule.DryOutput , error ) {
163
+ var res capsule.DryOutput
164
+
165
+ objects := map [string ]capsule.KubernetesDryObject {}
166
+ var err error
167
+ for _ , o := range resp .GetInputObjects () {
168
+ name := fmt .Sprintf ("%s %s" , o .GetGvk (), o .GetName ())
169
+ var co client.Object
170
+ if content := o .GetContent (); content != "" {
171
+ co , err = obj .DecodeUnstructured ([]byte (content ))
172
+ if err != nil {
173
+ return capsule.DryOutput {}, err
174
+ }
165
175
}
166
- if err := current .AddObject (o .GetGvk ().Kind , o .GetName (), object ); err != nil {
167
- return err
176
+ k8s := objects [name ]
177
+ k8s .Old = capsule.KubernetesObject {
178
+ Object : co ,
179
+ YAML : o .GetContent (),
168
180
}
169
- }
170
- overview := current .CreateOverview ("Current Resources" )
171
-
172
- migrated := migrate .NewResources ()
173
- if err := migrate .ProcessOperatorOutput (migrated , dryRun .GetOutputObjects (), c .Scheme ); err != nil {
174
- return err
181
+ objects [name ] = k8s
175
182
}
176
183
177
- migratedOverview := migrated .CreateOverview ("New Resources" )
178
-
179
- reports , err := migrated .Compare (current , c .Scheme )
180
- if err != nil {
181
- return err
184
+ for _ , oo := range resp .GetOutputObjects () {
185
+ o := oo .GetObject ()
186
+ name := fmt .Sprintf ("%s %s" , o .GetGvk (), o .GetName ())
187
+ var co client.Object
188
+ if content := o .GetContent (); content != "" {
189
+ co , err = obj .DecodeUnstructured ([]byte (content ))
190
+ if err != nil {
191
+ return capsule.DryOutput {}, err
192
+ }
193
+ }
194
+ k8s := objects [name ]
195
+ k8s .New = capsule.KubernetesObject {
196
+ Object : co ,
197
+ YAML : o .GetContent (),
198
+ }
199
+ objects [name ] = k8s
182
200
}
183
201
184
- warnings := map [string ][]* migrate.Warning {}
185
- for _ , k := range reports .GetKinds () {
186
- warnings [k ] = nil
202
+ for _ , key := range slices .Sorted (maps .Keys (objects )) {
203
+ res .KubernetesObjects = append (res .KubernetesObjects , objects [key ])
187
204
}
188
205
189
- return migrate . PromptDiffingChanges ( reports , warnings , overview , migratedOverview , nil , c . Prompter )
206
+ return res , nil
190
207
}
191
208
192
209
func readPlugin (path string ) (v1alpha1.Step , error ) {
0 commit comments