68 lines
1.8 KiB
Go
68 lines
1.8 KiB
Go
package internal
|
|
|
|
import (
|
|
"context"
|
|
|
|
"coopcloud.tech/abra/pkg/config"
|
|
containerPkg "coopcloud.tech/abra/pkg/container"
|
|
"coopcloud.tech/abra/pkg/service"
|
|
"coopcloud.tech/abra/pkg/upstream/container"
|
|
"github.com/docker/cli/cli/command"
|
|
"github.com/docker/docker/api/types"
|
|
"github.com/docker/docker/api/types/filters"
|
|
dockerClient "github.com/docker/docker/client"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
// RetrieveBackupBotContainer gets the deployed backupbot container.
|
|
func RetrieveBackupBotContainer(cl *dockerClient.Client) (types.Container, error) {
|
|
ctx := context.Background()
|
|
chosenService, err := service.GetServiceByLabel(ctx, cl, config.BackupbotLabel, NoInput)
|
|
if err != nil {
|
|
return types.Container{}, err
|
|
}
|
|
|
|
logrus.Debugf("retrieved %s as backup enabled service", chosenService.Spec.Name)
|
|
|
|
filters := filters.NewArgs()
|
|
filters.Add("name", chosenService.Spec.Name)
|
|
targetContainer, err := containerPkg.GetContainer(
|
|
ctx,
|
|
cl,
|
|
filters,
|
|
NoInput,
|
|
)
|
|
if err != nil {
|
|
return types.Container{}, err
|
|
}
|
|
|
|
return targetContainer, nil
|
|
}
|
|
|
|
// RunBackupCmdRemote runs a backup related command on a remote backupbot container.
|
|
func RunBackupCmdRemote(cl *dockerClient.Client, backupCmd string, containerID string, execEnv []string) error {
|
|
execBackupListOpts := types.ExecConfig{
|
|
AttachStderr: true,
|
|
AttachStdin: true,
|
|
AttachStdout: true,
|
|
Cmd: []string{"/usr/bin/backup", "--", backupCmd},
|
|
Detach: false,
|
|
Env: execEnv,
|
|
Tty: true,
|
|
}
|
|
|
|
logrus.Debugf("running backup %s on %s with exec config %v", backupCmd, containerID, execBackupListOpts)
|
|
|
|
// FIXME: avoid instantiating a new CLI
|
|
dcli, err := command.NewDockerCli()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if _, err := container.RunExec(dcli, cl, containerID, &execBackupListOpts); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|