Add an option to buildx rm to keep the buildkitd daemon running

Add --keep-daemon to the `rm` command option to preserve the buildkitd daemon after the buildx context is deleted.

Signed-off-by: Mayeul Blanzat <mayeul.blanzat@datadoghq.com>
This commit is contained in:
Mayeul Blanzat
2021-11-17 13:56:42 +01:00
parent bcfd434829
commit 72dab552b5
6 changed files with 40 additions and 22 deletions

View File

@ -12,8 +12,9 @@ import (
)
type rmOptions struct {
builder string
keepState bool
builder string
keepState bool
keepDaemon bool
}
func runRm(dockerCli command.Cli, in rmOptions) error {
@ -30,7 +31,7 @@ func runRm(dockerCli command.Cli, in rmOptions) error {
if err != nil {
return err
}
err1 := rm(ctx, dockerCli, ng, in.keepState)
err1 := rm(ctx, dockerCli, ng, in.keepState, in.keepDaemon)
if err := txn.Remove(ng.Name); err != nil {
return err
}
@ -42,7 +43,7 @@ func runRm(dockerCli command.Cli, in rmOptions) error {
return err
}
if ng != nil {
err1 := rm(ctx, dockerCli, ng, in.keepState)
err1 := rm(ctx, dockerCli, ng, in.keepState, in.keepDaemon)
if err := txn.Remove(ng.Name); err != nil {
return err
}
@ -70,23 +71,28 @@ func rmCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command {
flags := cmd.Flags()
flags.BoolVar(&options.keepState, "keep-state", false, "Keep BuildKit state")
flags.BoolVar(&options.keepDaemon, "keep-daemon", false, "Keep the buildkitd daemon running")
return cmd
}
func rm(ctx context.Context, dockerCli command.Cli, ng *store.NodeGroup, keepState bool) error {
func rm(ctx context.Context, dockerCli command.Cli, ng *store.NodeGroup, keepState, keepDaemon bool) error {
dis, err := driversForNodeGroup(ctx, dockerCli, ng, "")
if err != nil {
return err
}
for _, di := range dis {
if di.Driver != nil {
if di.Driver == nil {
continue
}
// Do not stop the buildkitd daemon when --keep-daemon is provided
if !keepDaemon {
if err := di.Driver.Stop(ctx, true); err != nil {
return err
}
if err := di.Driver.Rm(ctx, true, !keepState); err != nil {
return err
}
}
if err := di.Driver.Rm(ctx, true, !keepState, !keepDaemon); err != nil {
return err
}
if di.Err != nil {
err = di.Err