Skip to content

Commit d83ead0

Browse files
kakaZhou719kakzhou719
andauthored
feat: support merge cmd env with image extension (#2207)
* feat: support merge cmd env with image extension Signed-off-by: kakzhou719 <[email protected]> feat: support merge cmd env with image extension Signed-off-by: kakzhou719 <[email protected]> feat:support env and appenv instruction * feat:support env and appenv instruction --------- Co-authored-by: kakzhou719 <[email protected]>
1 parent a593435 commit d83ead0

File tree

11 files changed

+252
-51
lines changed

11 files changed

+252
-51
lines changed

cmd/sealer/cmd/cluster/apply.go

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import (
2727
imagev1 "github.com/sealerio/sealer/pkg/define/image/v1"
2828
"github.com/sealerio/sealer/pkg/define/options"
2929
"github.com/sealerio/sealer/pkg/imageengine"
30-
"github.com/sealerio/sealer/pkg/infradriver"
3130
"github.com/sealerio/sealer/utils/strings"
3231

3332
"github.com/pkg/errors"
@@ -102,7 +101,8 @@ func NewApplyCmd() *cobra.Command {
102101
}
103102

104103
if imageSpec.ImageExtension.Type == imagev1.AppInstaller {
105-
app := utils.ConstructApplication(cf.GetApplication(), desiredCluster.Spec.CMD, desiredCluster.Spec.APPNames)
104+
app := utils.ConstructApplication(cf.GetApplication(), desiredCluster.Spec.CMD,
105+
desiredCluster.Spec.APPNames, desiredCluster.Spec.Env)
106106

107107
return runApplicationImage(&RunApplicationImageRequest{
108108
ImageName: imageName,
@@ -138,7 +138,8 @@ func NewApplyCmd() *cobra.Command {
138138
}
139139

140140
// install application
141-
app := utils.ConstructApplication(cf.GetApplication(), desiredCluster.Spec.CMD, desiredCluster.Spec.APPNames)
141+
//TODO use flag env to construct application directly. at present ,sealer use cluster.env to construct application
142+
app := utils.ConstructApplication(cf.GetApplication(), desiredCluster.Spec.CMD, desiredCluster.Spec.APPNames, desiredCluster.Spec.Env)
142143
return runApplicationImage(&RunApplicationImageRequest{
143144
ImageName: imageName,
144145
Application: app,
@@ -191,8 +192,11 @@ func applyClusterWithNew(cf clusterfile.Interface, applyMode string,
191192
return fmt.Errorf("failed to merge cluster with apply args: %v", err)
192193
}
193194

195+
// merge image extension
196+
mergedWithExt := utils.MergeClusterWithImageExtension(cluster, imageSpec.ImageExtension)
197+
194198
// set merged cluster
195-
cf.SetCluster(*cluster)
199+
cf.SetCluster(*mergedWithExt)
196200
return runClusterImage(imageEngine, cf, imageSpec, applyMode, applyFlags.IgnoreCache)
197201
}
198202

@@ -218,12 +222,12 @@ func applyClusterWithExisted(cf clusterfile.Interface, client *k8s.Client,
218222
return false, fmt.Errorf("make sure all masters' ip exist in your clusterfile: %s", applyFlags.ClusterFile)
219223
}
220224

221-
infraDriver, err := infradriver.NewInfraDriver(&desiredCluster)
222-
if err != nil {
223-
return false, err
224-
}
225+
// merge image extension
226+
mergedWithExt := utils.MergeClusterWithImageExtension(&desiredCluster, imageSpec.ImageExtension)
227+
228+
cf.SetCluster(*mergedWithExt)
225229

226-
if err := scaleUpCluster(imageSpec.Name, mj, nj, infraDriver, imageEngine, cf, applyFlags.IgnoreCache); err != nil {
230+
if err := scaleUpCluster(mj, nj, imageSpec, cf, imageEngine, applyFlags.IgnoreCache); err != nil {
227231
return false, err
228232
}
229233
return true, nil

cmd/sealer/cmd/cluster/join.go

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,14 @@ import (
1818
"fmt"
1919
"path/filepath"
2020

21-
"github.com/sirupsen/logrus"
22-
"github.com/spf13/cobra"
23-
2421
"github.com/sealerio/sealer/cmd/sealer/cmd/types"
2522
"github.com/sealerio/sealer/cmd/sealer/cmd/utils"
2623
"github.com/sealerio/sealer/common"
2724
"github.com/sealerio/sealer/pkg/clusterfile"
28-
imagecommon "github.com/sealerio/sealer/pkg/define/options"
25+
"github.com/sealerio/sealer/pkg/define/options"
2926
"github.com/sealerio/sealer/pkg/imageengine"
30-
"github.com/sealerio/sealer/pkg/infradriver"
27+
"github.com/sirupsen/logrus"
28+
"github.com/spf13/cobra"
3129
)
3230

3331
var joinFlags *types.ScaleUpFlags
@@ -85,19 +83,35 @@ func NewJoinCmd() *cobra.Command {
8583
if err != nil {
8684
return err
8785
}
88-
cf.SetCluster(cluster)
8986

90-
infraDriver, err := infradriver.NewInfraDriver(&cluster)
87+
// get image extension
88+
imageName := cluster.Spec.Image
89+
imageEngine, err := imageengine.NewImageEngine(options.EngineGlobalConfigurations{})
9190
if err != nil {
9291
return err
9392
}
9493

95-
imageEngine, err := imageengine.NewImageEngine(imagecommon.EngineGlobalConfigurations{})
94+
id, err := imageEngine.Pull(&options.PullOptions{
95+
Quiet: false,
96+
PullPolicy: "missing",
97+
Image: imageName,
98+
Platform: "local",
99+
})
96100
if err != nil {
97101
return err
98102
}
99103

100-
return scaleUpCluster(cluster.Spec.Image, mj, nj, infraDriver, imageEngine, cf, joinFlags.IgnoreCache)
104+
imageSpec, err := imageEngine.Inspect(&options.InspectOptions{ImageNameOrID: id})
105+
if err != nil {
106+
return fmt.Errorf("failed to get sealer image extension: %s", err)
107+
}
108+
109+
// merge image extension
110+
mergedWithExt := utils.MergeClusterWithImageExtension(&cluster, imageSpec.ImageExtension)
111+
112+
cf.SetCluster(*mergedWithExt)
113+
114+
return scaleUpCluster(mj, nj, imageSpec, cf, imageEngine, joinFlags.IgnoreCache)
101115
},
102116
}
103117

cmd/sealer/cmd/cluster/rollback.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,10 @@ func rollbackCluster(cf clusterfile.Interface, imageEngine imageengine.Interface
114114
}
115115

116116
cluster := cf.GetCluster()
117-
infraDriver, err := infradriver.NewInfraDriver(&cluster)
117+
// merge image extension
118+
mergedWithExt := utils.MergeClusterWithImageExtension(&cluster, imageSpec.ImageExtension)
119+
120+
infraDriver, err := infradriver.NewInfraDriver(mergedWithExt)
118121
if err != nil {
119122
return err
120123
}
@@ -190,7 +193,7 @@ func rollbackCluster(cf clusterfile.Interface, imageEngine imageengine.Interface
190193
appNames := infraDriver.GetClusterLaunchApps()
191194

192195
// merge to application between v2.ClusterSpec, v2.Application and image extension
193-
v2App, err := application.NewV2Application(utils.ConstructApplication(cf.GetApplication(), cmds, appNames), imageSpec.ImageExtension)
196+
v2App, err := application.NewV2Application(utils.ConstructApplication(cf.GetApplication(), cmds, appNames, cluster.Spec.Env), imageSpec.ImageExtension)
194197
if err != nil {
195198
return fmt.Errorf("failed to parse application from Clusterfile:%v ", err)
196199
}

cmd/sealer/cmd/cluster/run.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ func NewRunCmd() *cobra.Command {
112112
}
113113

114114
if imageSpec.ImageExtension.Type == imagev1.AppInstaller {
115-
app := utils.ConstructApplication(nil, runFlags.Cmds, runFlags.AppNames)
115+
app := utils.ConstructApplication(nil, runFlags.Cmds, runFlags.AppNames, runFlags.CustomEnv)
116116

117117
return runApplicationImage(&RunApplicationImageRequest{
118118
ImageName: args[0],
@@ -221,7 +221,7 @@ func runWithClusterfile(clusterFile string, runFlags *types.RunFlags) error {
221221
}
222222

223223
if imageSpec.ImageExtension.Type == imagev1.AppInstaller {
224-
app := utils.ConstructApplication(cf.GetApplication(), cluster.Spec.CMD, cluster.Spec.APPNames)
224+
app := utils.ConstructApplication(cf.GetApplication(), cluster.Spec.CMD, cluster.Spec.APPNames, runFlags.CustomEnv)
225225

226226
return runApplicationImage(&RunApplicationImageRequest{
227227
ImageName: imageName,
@@ -241,7 +241,11 @@ func runWithClusterfile(clusterFile string, runFlags *types.RunFlags) error {
241241
func runClusterImage(imageEngine imageengine.Interface, cf clusterfile.Interface,
242242
imageSpec *imagev1.ImageSpec, mode string, ignoreCache bool) error {
243243
cluster := cf.GetCluster()
244-
infraDriver, err := infradriver.NewInfraDriver(&cluster)
244+
245+
// merge image extension
246+
mergedWithExt := utils.MergeClusterWithImageExtension(&cluster, imageSpec.ImageExtension)
247+
248+
infraDriver, err := infradriver.NewInfraDriver(mergedWithExt)
245249
if err != nil {
246250
return err
247251
}
@@ -327,7 +331,7 @@ func runClusterImage(imageEngine imageengine.Interface, cf clusterfile.Interface
327331

328332
// TODO valid construct application
329333
// merge to application between v2.ClusterSpec, v2.Application and image extension
330-
v2App, err := application.NewV2Application(utils.ConstructApplication(cf.GetApplication(), cmds, appNames), imageSpec.ImageExtension)
334+
v2App, err := application.NewV2Application(utils.ConstructApplication(cf.GetApplication(), cmds, appNames, cluster.Spec.Env), imageSpec.ImageExtension)
331335
if err != nil {
332336
return fmt.Errorf("failed to parse application from Clusterfile:%v ", err)
333337
}

cmd/sealer/cmd/cluster/scale-up.go

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,18 @@ import (
1919
"net"
2020
"path/filepath"
2121

22-
"github.com/sirupsen/logrus"
23-
"github.com/spf13/cobra"
24-
2522
"github.com/sealerio/sealer/cmd/sealer/cmd/types"
2623
"github.com/sealerio/sealer/cmd/sealer/cmd/utils"
2724
"github.com/sealerio/sealer/common"
2825
clusterruntime "github.com/sealerio/sealer/pkg/cluster-runtime"
2926
"github.com/sealerio/sealer/pkg/clusterfile"
30-
imagecommon "github.com/sealerio/sealer/pkg/define/options"
27+
imagev1 "github.com/sealerio/sealer/pkg/define/image/v1"
28+
"github.com/sealerio/sealer/pkg/define/options"
3129
"github.com/sealerio/sealer/pkg/imagedistributor"
3230
"github.com/sealerio/sealer/pkg/imageengine"
3331
"github.com/sealerio/sealer/pkg/infradriver"
32+
"github.com/sirupsen/logrus"
33+
"github.com/spf13/cobra"
3434
)
3535

3636
var scaleUpFlags *types.ScaleUpFlags
@@ -87,19 +87,33 @@ func NewScaleUpCmd() *cobra.Command {
8787
if err != nil {
8888
return err
8989
}
90-
cf.SetCluster(cluster)
9190

92-
infraDriver, err := infradriver.NewInfraDriver(&cluster)
91+
imageEngine, err := imageengine.NewImageEngine(options.EngineGlobalConfigurations{})
9392
if err != nil {
9493
return err
9594
}
9695

97-
imageEngine, err := imageengine.NewImageEngine(imagecommon.EngineGlobalConfigurations{})
96+
id, err := imageEngine.Pull(&options.PullOptions{
97+
Quiet: false,
98+
PullPolicy: "missing",
99+
Image: cluster.Spec.Image,
100+
Platform: "local",
101+
})
98102
if err != nil {
99103
return err
100104
}
101105

102-
return scaleUpCluster(cluster.Spec.Image, mj, nj, infraDriver, imageEngine, cf, scaleUpFlags.IgnoreCache)
106+
imageSpec, err := imageEngine.Inspect(&options.InspectOptions{ImageNameOrID: id})
107+
if err != nil {
108+
return fmt.Errorf("failed to get sealer image extension: %s", err)
109+
}
110+
111+
// merge image extension
112+
mergedWithExt := utils.MergeClusterWithImageExtension(&cluster, imageSpec.ImageExtension)
113+
114+
cf.SetCluster(*mergedWithExt)
115+
116+
return scaleUpCluster(mj, nj, imageSpec, cf, imageEngine, scaleUpFlags.IgnoreCache)
103117
},
104118
}
105119

@@ -116,15 +130,23 @@ func NewScaleUpCmd() *cobra.Command {
116130
return scaleUpFlagsCmd
117131
}
118132

119-
func scaleUpCluster(clusterImageName string, scaleUpMasterIPList, scaleUpNodeIPList []net.IP,
120-
infraDriver infradriver.InfraDriver, imageEngine imageengine.Interface,
121-
cf clusterfile.Interface, ignoreCache bool) error {
133+
func scaleUpCluster(scaleUpMasterIPList, scaleUpNodeIPList []net.IP, imageSpec *imagev1.ImageSpec,
134+
cf clusterfile.Interface, imageEngine imageengine.Interface, ignoreCache bool) error {
122135
logrus.Infof("start to scale up cluster")
123136

124137
var (
125138
newHosts = append(scaleUpMasterIPList, scaleUpNodeIPList...)
126139
)
127140

141+
cluster := cf.GetCluster()
142+
143+
infraDriver, err := infradriver.NewInfraDriver(&cluster)
144+
if err != nil {
145+
return err
146+
}
147+
148+
clusterImageName := infraDriver.GetClusterImageName()
149+
128150
clusterHostsPlatform, err := infraDriver.GetHostsPlatform(newHosts)
129151
if err != nil {
130152
return err
@@ -172,11 +194,6 @@ func scaleUpCluster(clusterImageName string, scaleUpMasterIPList, scaleUpNodeIPL
172194
runtimeConfig.KubeadmConfig = *cf.GetKubeadmConfig()
173195
}
174196

175-
imageSpec, err := imageEngine.Inspect(&imagecommon.InspectOptions{ImageNameOrID: clusterImageName})
176-
if err != nil {
177-
return fmt.Errorf("failed to get sealer image extension: %s", err)
178-
}
179-
180197
installer, err := clusterruntime.NewInstaller(infraDriver, *runtimeConfig,
181198
clusterruntime.GetClusterInstallInfo(imageSpec.ImageExtension.Labels, runtimeConfig.ContainerRuntimeConfig))
182199
if err != nil {

cmd/sealer/cmd/cluster/upgrade.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ func upgradeCluster(cf clusterfile.Interface, imageEngine imageengine.Interface,
122122
}
123123

124124
cluster := cf.GetCluster()
125-
infraDriver, err := infradriver.NewInfraDriver(&cluster)
125+
infraDriver, err := infradriver.NewInfraDriver(utils.MergeClusterWithImageExtension(&cluster, imageSpec.ImageExtension))
126126
if err != nil {
127127
return err
128128
}
@@ -197,7 +197,7 @@ func upgradeCluster(cf clusterfile.Interface, imageEngine imageengine.Interface,
197197
appNames := infraDriver.GetClusterLaunchApps()
198198

199199
// merge to application between v2.ClusterSpec, v2.Application and image extension
200-
v2App, err := application.NewV2Application(utils.ConstructApplication(cf.GetApplication(), cmds, appNames), imageSpec.ImageExtension)
200+
v2App, err := application.NewV2Application(utils.ConstructApplication(cf.GetApplication(), cmds, appNames, cluster.Spec.Env), imageSpec.ImageExtension)
201201
if err != nil {
202202
return fmt.Errorf("failed to parse application from Clusterfile:%v ", err)
203203
}

cmd/sealer/cmd/utils/application.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import (
2020
)
2121

2222
//ConstructApplication merge flags to v2.Application
23-
func ConstructApplication(app *v2.Application, cmds, appNames []string) *v2.Application {
23+
func ConstructApplication(app *v2.Application, cmds, appNames, globalEnvs []string) *v2.Application {
2424
var newApp *v2.Application
2525

2626
if app != nil {
@@ -42,5 +42,15 @@ func ConstructApplication(app *v2.Application, cmds, appNames []string) *v2.Appl
4242
newApp.Spec.LaunchApps = appNames
4343
}
4444

45+
// add appEnvs from flag to application object.
46+
if len(globalEnvs) > 0 {
47+
var appConfigList []v2.ApplicationConfig
48+
for _, appConfig := range newApp.Spec.Configs {
49+
appConfig.Env = append(globalEnvs, appConfig.Env...)
50+
appConfigList = append(appConfigList, appConfig)
51+
}
52+
newApp.Spec.Configs = appConfigList
53+
}
54+
4555
return newApp
4656
}

0 commit comments

Comments
 (0)