Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions model/plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ type PluginInstanceDefinition struct {
PrecheckContainers []ContainerDefinition `yaml:"precheck_containers,omitempty"`
InitContainers []ContainerDefinition `yaml:"init_containers,omitempty"`
Containers []ContainerDefinition `yaml:"containers"`
PostContainers []ContainerDefinition `yaml:"post_containers,omitempty"`
CleanContainers []ContainerDefinition `yaml:"clean_containers,omitempty"`
}

Expand Down
13 changes: 10 additions & 3 deletions plugin/executor.go
Original file line number Diff line number Diff line change
Expand Up @@ -134,20 +134,22 @@ func (w *executor) Precheck(ctx context.Context) error {

// Apply installs plugin to containerd, perform the following steps:
// 1. config container runtime.
// 2. upload init_containers and containers required images to containerd.
// 2. upload required images to containerd.
// 3. remove all containers in the containerd namespace.
// 4. start and wait init_containers, kill the container after timeout.
// 5. start and run containers.
// 6. wait for all containers ready.
// 7. setup container logging config.
// 8. remove unused images from containerd.
// 8. setup container metrics config.
// 9. start and wait post_containers, kill the container after timeout.
// 10. remove unused images from containerd.
func (w *executor) Apply(ctx context.Context) error {
err := w.configContainerRuntime(ctx)
if err != nil {
return fmt.Errorf("config container runtime: %s", err)
}

err = w.uploadContainerImages(ctx, append(w.instance.InitContainers, w.instance.Containers...)...)
err = w.uploadContainerImages(ctx, append(append(w.instance.InitContainers, w.instance.Containers...), w.instance.PostContainers...)...)
if err != nil {
return fmt.Errorf("upload container images: %s", err)
}
Expand Down Expand Up @@ -182,6 +184,11 @@ func (w *executor) Apply(ctx context.Context) error {
return fmt.Errorf("setup metrics: %s", err)
}

err = w.runAndWaitContainers(ctx, w.instance.PostContainers...)
if err != nil {
return fmt.Errorf("start post containers: %s", err)
}

err = w.removeUnusedImages(ctx, w.instance.Containers...)
if err != nil {
return fmt.Errorf("remove unused images: %s", err)
Expand Down
4 changes: 4 additions & 0 deletions plugin/executor_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,10 @@ func TestHostPluginExecutorApply(t *testing.T) {
newContainerDefinition(rand.String(10), rand.String(10)),
newContainerDefinition(rand.String(10), rand.String(10)),
},
PostContainers: []model.ContainerDefinition{
newContainerDefinition(rand.String(10), rand.String(10)),
newContainerDefinition(rand.String(10), rand.String(10)),
},
})

t.Run("should create containers and remove unused containers", func(t *testing.T) {
Expand Down
Loading