@@ -11,20 +11,31 @@ import (
11
11
"os"
12
12
"path/filepath"
13
13
14
+ "go.githedgehog.com/fabric/pkg/util/kubeutil"
14
15
fabapi "go.githedgehog.com/fabricator/api/fabricator/v1beta1"
15
16
"go.githedgehog.com/fabricator/pkg/fab"
16
- "sigs.k8s.io/yaml"
17
+ kclient "sigs.k8s.io/controller-runtime/pkg/client"
18
+ kyaml "sigs.k8s.io/yaml"
17
19
)
18
20
19
- func Versions (ctx context.Context , workDir , cacheDir string , hMode HydrateMode ) error {
21
+ func Versions (ctx context.Context , workDir , cacheDir string , hMode HydrateMode , live bool ) error {
22
+ if live {
23
+ cfg := & Config {
24
+ WorkDir : workDir ,
25
+ CacheDir : cacheDir ,
26
+ }
27
+
28
+ return getVersionsFromCluster (ctx , cfg )
29
+ }
30
+
20
31
configPath := filepath .Join (workDir , FabConfigFile )
21
32
if _ , err := os .Stat (configPath ); err != nil && errors .Is (err , os .ErrNotExist ) {
22
33
slog .Info ("No configuration found" , "file" , FabConfigFile , "action" , "Showing release versions" )
23
34
freshFab := fabapi.Fabricator {}
24
35
if err := freshFab .CalculateVersions (fab .Versions ); err != nil {
25
36
return fmt .Errorf ("calculating default versions: %w" , err )
26
37
}
27
- data , err := yaml .Marshal (freshFab .Status .Versions )
38
+ data , err := kyaml .Marshal (freshFab .Status .Versions )
28
39
if err != nil {
29
40
return fmt .Errorf ("marshalling versions: %w" , err )
30
41
}
@@ -42,16 +53,74 @@ func Versions(ctx context.Context, workDir, cacheDir string, hMode HydrateMode)
42
53
if err := freshFab .CalculateVersions (fab .Versions ); err != nil {
43
54
return fmt .Errorf ("calculating default versions: %w" , err )
44
55
}
45
- releaseData , err := yaml .Marshal (freshFab .Status .Versions )
56
+ releaseData , err := kyaml .Marshal (freshFab .Status .Versions )
46
57
if err != nil {
47
58
return fmt .Errorf ("marshalling release versions: %w" , err )
48
59
}
49
60
var release map [string ]interface {}
50
- if err := yaml .Unmarshal (releaseData , & release ); err != nil {
61
+ if err := kyaml .Unmarshal (releaseData , & release ); err != nil {
51
62
return fmt .Errorf ("unmarshalling release versions: %w" , err )
52
63
}
53
64
54
- overridesRaw , err := yaml .Marshal (cfg .Fab .Spec .Overrides .Versions )
65
+ overridesRaw , err := kyaml .Marshal (cfg .Fab .Spec .Overrides .Versions )
66
+ if err != nil {
67
+ slog .Warn ("Failed to marshal overrides" , "error" , err )
68
+ fmt .Println (string (releaseData ))
69
+
70
+ return nil
71
+ }
72
+
73
+ var overrides map [string ]interface {}
74
+ if err := kyaml .Unmarshal (overridesRaw , & overrides ); err != nil {
75
+ slog .Warn ("Failed to unmarshal overrides" , "error" , err )
76
+ fmt .Println (string (releaseData ))
77
+
78
+ return nil
79
+ }
80
+
81
+ if len (overrides ) == 0 {
82
+ slog .Info ("Printing versions of all components" )
83
+ fmt .Println (string (releaseData ))
84
+
85
+ return nil
86
+ }
87
+
88
+ slog .Info ("Printing versions of all components (release → override)" )
89
+ merged := make (map [string ]interface {})
90
+
91
+ for category , value := range release {
92
+ merged [category ] = processVersionCategory (category , value , overrides )
93
+ }
94
+
95
+ mergedData , err := kyaml .Marshal (merged )
96
+ if err != nil {
97
+ return fmt .Errorf ("marshalling merged versions: %w" , err )
98
+ }
99
+ fmt .Println (string (mergedData ))
100
+
101
+ return nil
102
+ }
103
+
104
+ func getVersionsFromCluster (ctx context.Context , c * Config ) error {
105
+ kubeconfig := filepath .Join (c .WorkDir , VLABDir , VLABKubeConfig )
106
+ kube , err := kubeutil .NewClient (ctx , kubeconfig , fabapi .SchemeBuilder )
107
+ if err != nil {
108
+ return fmt .Errorf ("creating kube client: %w" , err )
109
+ }
110
+
111
+ fab := & fabapi.Fabricator {}
112
+ if err := kube .Get (ctx , kclient.ObjectKey {Name : "default" , Namespace : "fab" }, fab ); err != nil {
113
+ return fmt .Errorf ("getting fabricator object: %w" , err )
114
+ }
115
+
116
+ slog .Info ("Printing versions from live cluster" )
117
+
118
+ releaseData , err := kyaml .Marshal (fab .Status .Versions )
119
+ if err != nil {
120
+ return fmt .Errorf ("marshalling versions: %w" , err )
121
+ }
122
+
123
+ overridesRaw , err := kyaml .Marshal (fab .Spec .Overrides .Versions )
55
124
if err != nil {
56
125
slog .Warn ("Failed to marshal overrides" , "error" , err )
57
126
fmt .Println (string (releaseData ))
@@ -60,7 +129,7 @@ func Versions(ctx context.Context, workDir, cacheDir string, hMode HydrateMode)
60
129
}
61
130
62
131
var overrides map [string ]interface {}
63
- if err := yaml .Unmarshal (overridesRaw , & overrides ); err != nil {
132
+ if err := kyaml .Unmarshal (overridesRaw , & overrides ); err != nil {
64
133
slog .Warn ("Failed to unmarshal overrides" , "error" , err )
65
134
fmt .Println (string (releaseData ))
66
135
@@ -74,14 +143,22 @@ func Versions(ctx context.Context, workDir, cacheDir string, hMode HydrateMode)
74
143
return nil
75
144
}
76
145
77
- slog .Info ("Printing versions of all components (overridden←→release)" )
146
+ var release map [string ]interface {}
147
+ if err := kyaml .Unmarshal (releaseData , & release ); err != nil {
148
+ slog .Warn ("Failed to unmarshal release versions" , "error" , err )
149
+ fmt .Println (string (releaseData ))
150
+
151
+ return nil
152
+ }
153
+
154
+ slog .Info ("Printing versions of all components (release → override)" )
78
155
merged := make (map [string ]interface {})
79
156
80
157
for category , value := range release {
81
158
merged [category ] = processVersionCategory (category , value , overrides )
82
159
}
83
160
84
- mergedData , err := yaml .Marshal (merged )
161
+ mergedData , err := kyaml .Marshal (merged )
85
162
if err != nil {
86
163
return fmt .Errorf ("marshalling merged versions: %w" , err )
87
164
}
@@ -120,7 +197,7 @@ func processVersionCategory(category string, releaseValue interface{}, overrides
120
197
if overrideComp , exists := overrideMap [compName ]; exists {
121
198
overrideVerStr , isOverrideString := overrideComp .(string )
122
199
if isOverrideString {
123
- result [compName ] = fmt .Sprintf ("%s←→ %s" , overrideVerStr , releaseVerStr )
200
+ result [compName ] = fmt .Sprintf ("%s → %s" , releaseVerStr , overrideVerStr )
124
201
} else {
125
202
result [compName ] = releaseVer
126
203
}
0 commit comments