1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-23 07:19:41 +02:00

feat(system): upgrade on swarm [EE-5848] (#11728)

Co-authored-by: Chaim Lev-Ari <chaim.levi-ari@portainer.io>
Co-authored-by: LP B <xAt0mZ@users.noreply.github.com>
This commit is contained in:
Chaim Lev-Ari 2024-09-20 19:00:38 +03:00 committed by GitHub
parent 3cb484f06a
commit 6f84317e7a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
22 changed files with 362 additions and 158 deletions

View file

@ -3,11 +3,13 @@ package upgrade
import (
"fmt"
"github.com/pkg/errors"
portainer "github.com/portainer/portainer/api"
"github.com/portainer/portainer/api/kubernetes/cli"
"github.com/portainer/portainer/api/platform"
"github.com/portainer/portainer/pkg/libstack"
"github.com/portainer/portainer/api/dataservices"
dockerclient "github.com/portainer/portainer/api/docker/client"
kubecli "github.com/portainer/portainer/api/kubernetes/cli"
plf "github.com/portainer/portainer/api/platform"
"github.com/portainer/portainer/api/stacks/deployments"
"github.com/rs/zerolog/log"
)
const (
@ -26,48 +28,54 @@ const (
)
type Service interface {
Upgrade(environment *portainer.Endpoint, licenseKey string) error
Upgrade(platform plf.ContainerPlatform, environment *portainer.Endpoint, licenseKey string) error
}
type service struct {
composeDeployer libstack.Deployer
kubernetesClientFactory *cli.ClientFactory
kubernetesClientFactory *kubecli.ClientFactory
dockerClientFactory *dockerclient.ClientFactory
dockerComposeStackManager portainer.ComposeStackManager
fileService portainer.FileService
isUpdating bool
platform platform.ContainerPlatform
assetsPath string
}
func NewService(
assetsPath string,
composeDeployer libstack.Deployer,
kubernetesClientFactory *cli.ClientFactory,
kubernetesClientFactory *kubecli.ClientFactory,
dockerClientFactory *dockerclient.ClientFactory,
dockerComposeStackManager portainer.ComposeStackManager,
dataStore dataservices.DataStore,
fileService portainer.FileService,
stackDeployer deployments.StackDeployer,
) (Service, error) {
platform, err := platform.DetermineContainerPlatform()
if err != nil {
return nil, errors.Wrap(err, "failed to determine container platform")
}
return &service{
assetsPath: assetsPath,
composeDeployer: composeDeployer,
kubernetesClientFactory: kubernetesClientFactory,
platform: platform,
assetsPath: assetsPath,
kubernetesClientFactory: kubernetesClientFactory,
dockerClientFactory: dockerClientFactory,
dockerComposeStackManager: dockerComposeStackManager,
fileService: fileService,
}, nil
}
func (service *service) Upgrade(environment *portainer.Endpoint, licenseKey string) error {
func (service *service) Upgrade(platform plf.ContainerPlatform, environment *portainer.Endpoint, licenseKey string) error {
service.isUpdating = true
log.Debug().
Str("platform", string(platform)).
Msg("Starting upgrade process")
switch service.platform {
case platform.PlatformDockerStandalone:
return service.upgradeDocker(licenseKey, portainer.APIVersion, "standalone")
case platform.PlatformDockerSwarm:
return service.upgradeDocker(licenseKey, portainer.APIVersion, "swarm")
case platform.PlatformKubernetes:
switch platform {
case plf.PlatformDockerStandalone:
return service.upgradeDocker(environment, licenseKey, portainer.APIVersion, "standalone")
case plf.PlatformDockerSwarm:
return service.upgradeDocker(environment, licenseKey, portainer.APIVersion, "swarm")
case plf.PlatformKubernetes:
return service.upgradeKubernetes(environment, licenseKey, portainer.APIVersion)
}
return fmt.Errorf("unsupported platform %s", service.platform)
service.isUpdating = false
return fmt.Errorf("unsupported platform %s", platform)
}