Skip to content

Commit 1cd3400

Browse files
committed
feat: support extend require images
Signed-off-by: zwtop <[email protected]>
1 parent 1b2ab83 commit 1cd3400

File tree

2 files changed

+25
-6
lines changed

2 files changed

+25
-6
lines changed

model/plugin.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,19 @@ import "time"
2121
// PluginInstanceDefinition contains container definitions about how
2222
// to install a plugin instance
2323
type PluginInstanceDefinition struct {
24+
ExtraRequireImages []ExtraRequireImage `yaml:"extra_require_images,omitempty"`
2425
PrecheckContainers []ContainerDefinition `yaml:"precheck_containers,omitempty"`
2526
InitContainers []ContainerDefinition `yaml:"init_containers,omitempty"`
2627
Containers []ContainerDefinition `yaml:"containers"`
2728
PostContainers []ContainerDefinition `yaml:"post_containers,omitempty"`
2829
CleanContainers []ContainerDefinition `yaml:"clean_containers,omitempty"`
2930
}
3031

32+
type ExtraRequireImage struct {
33+
Name string `yaml:"name"`
34+
Unpack bool `yaml:"unpack,omitempty"`
35+
}
36+
3137
type ContainerDefinition struct {
3238
Name string `yaml:"name"`
3339
Image string `yaml:"image"`

plugin/executor.go

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,14 @@ func (w *executor) Apply(ctx context.Context) error {
184184
return fmt.Errorf("config container runtime: %s", err)
185185
}
186186

187+
requireImages := lo.Union(
188+
lo.Map(w.instance.ExtraRequireImages, func(e model.ExtraRequireImage, _ int) string { return e.Name }),
189+
lo.Map(w.instance.PrecheckContainers, func(c model.ContainerDefinition, _ int) string { return c.Image }),
190+
lo.Map(w.instance.InitContainers, func(c model.ContainerDefinition, _ int) string { return c.Image }),
191+
lo.Map(w.instance.Containers, func(c model.ContainerDefinition, _ int) string { return c.Image }),
192+
lo.Map(w.instance.PostContainers, func(c model.ContainerDefinition, _ int) string { return c.Image }),
193+
lo.Map(w.instance.CleanContainers, func(c model.ContainerDefinition, _ int) string { return c.Image }),
194+
)
187195
err = w.uploadContainerImages(ctx, append(append(w.instance.InitContainers, w.instance.Containers...), w.instance.PostContainers...)...)
188196
if err != nil {
189197
return fmt.Errorf("upload container images: %s", err)
@@ -224,7 +232,15 @@ func (w *executor) Apply(ctx context.Context) error {
224232
return fmt.Errorf("start post containers: %s", err)
225233
}
226234

227-
err = w.removeUnusedImages(ctx, w.instance.Containers...)
235+
inuseImages := lo.Union(
236+
lo.Map(w.instance.ExtraRequireImages, func(e model.ExtraRequireImage, _ int) string { return e.Name }),
237+
lo.Map(w.instance.PrecheckContainers, func(c model.ContainerDefinition, _ int) string { return c.Image }),
238+
lo.Map(w.instance.InitContainers, func(c model.ContainerDefinition, _ int) string { return c.Image }),
239+
lo.Map(w.instance.Containers, func(c model.ContainerDefinition, _ int) string { return c.Image }),
240+
lo.Map(w.instance.PostContainers, func(c model.ContainerDefinition, _ int) string { return c.Image }),
241+
lo.Map(w.instance.CleanContainers, func(c model.ContainerDefinition, _ int) string { return c.Image }),
242+
)
243+
err = w.removeUnusedImages(ctx, inuseImages...)
228244
if err != nil {
229245
return fmt.Errorf("remove unused images: %s", err)
230246
}
@@ -543,7 +559,7 @@ func (w *executor) removeAllInNamespace(ctx context.Context) error {
543559
return nil
544560
}
545561

546-
func (w *executor) removeUnusedImages(ctx context.Context, exceptImagesInContainer ...model.ContainerDefinition) error {
562+
func (w *executor) removeUnusedImages(ctx context.Context, inuseImages ...string) error {
547563
images, err := w.runtime.ListImages(ctx)
548564
if err != nil {
549565
return err
@@ -553,10 +569,7 @@ func (w *executor) removeUnusedImages(ctx context.Context, exceptImagesInContain
553569
for _, i := range images {
554570
imageSet.Insert(i.Name)
555571
}
556-
557-
for _, c := range exceptImagesInContainer {
558-
imageSet.Delete(c.Image)
559-
}
572+
imageSet.Delete(inuseImages...)
560573

561574
for _, image := range imageSet.List() {
562575
w.Infof("remove image %s from containerd", image)

0 commit comments

Comments
 (0)