Skip to content

Commit

Permalink
Ensure bundle is installed even if we reported that it is
Browse files Browse the repository at this point in the history
  • Loading branch information
ibuildthecloud committed Sep 24, 2020
1 parent 218f46f commit 8912040
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 5 deletions.
1 change: 1 addition & 0 deletions modules/agent/pkg/deployer/deployer.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ type DeployedBundle struct {
type Deployer interface {
Deploy(bundleID string, manifest *manifest.Manifest, options fleet.BundleDeploymentOptions) (*Resources, error)
ListDeployments() ([]DeployedBundle, error)
EnsureInstalled(bundleID, resourcesID string) (bool, error)
Resources(bundleID, resourcesID string) (*Resources, error)
Delete(bundleID, releaseName string) error
}
6 changes: 5 additions & 1 deletion modules/agent/pkg/deployer/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,11 @@ func (m *Manager) Resources(bd *fleet.BundleDeployment) (*Resources, error) {

func (m *Manager) Deploy(bd *fleet.BundleDeployment) (string, error) {
if bd.Spec.DeploymentID == bd.Status.AppliedDeploymentID {
return bd.Status.Release, nil
if ok, err := m.deployer.EnsureInstalled(bd.Name, bd.Status.Release); err != nil {
return "", err
} else if ok {
return bd.Status.Release, nil
}
}

manifestID, _ := kv.Split(bd.Spec.DeploymentID, ":")
Expand Down
34 changes: 30 additions & 4 deletions pkg/helmdeployer/deployer.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@ package helmdeployer

import (
"bytes"
"errors"
"fmt"
"strconv"
"strings"
"time"

"helm.sh/helm/v3/pkg/storage/driver"

"github.com/rancher/fleet/modules/agent/pkg/deployer"
fleet "github.com/rancher/fleet/pkg/apis/fleet.cattle.io/v1alpha1"
"github.com/rancher/fleet/pkg/kustomize"
Expand All @@ -33,6 +36,8 @@ const (
DefaultServiceAccount = "fleetDefault"
)

var ErrNoRelease = errors.New("failed to find release")

type helm struct {
serviceAccountNamespace string
serviceAccountCache corecontrollers.ServiceAccountCache
Expand Down Expand Up @@ -326,7 +331,7 @@ func (h *helm) ListDeployments() ([]deployer.DeployedBundle, error) {
return result, nil
}

func (h *helm) Resources(bundleID, resourcesID string) (*deployer.Resources, error) {
func (h *helm) getRelease(bundleID, resourcesID string) (*release.Release, error) {
hist := action.NewHistory(&h.globalCfg)

namespace, name := kv.Split(resourcesID, "/")
Expand All @@ -338,17 +343,38 @@ func (h *helm) Resources(bundleID, resourcesID string) (*deployer.Resources, err
}

releases, err := hist.Run(releaseName)
if err != nil {
if err == driver.ErrReleaseNotFound {
return nil, ErrNoRelease
} else if err != nil {
return nil, err
}

for _, release := range releases {
if release.Name == releaseName && release.Version == version && release.Namespace == namespace {
return releaseToResources(release)
return release, nil
}
}

return &deployer.Resources{}, nil
return nil, ErrNoRelease
}

func (h *helm) EnsureInstalled(bundleID, resourcesID string) (bool, error) {
if _, err := h.getRelease(bundleID, resourcesID); err == ErrNoRelease {
return false, nil
} else if err != nil {
return false, err
}
return true, nil
}

func (h *helm) Resources(bundleID, resourcesID string) (*deployer.Resources, error) {
release, err := h.getRelease(bundleID, resourcesID)
if err == ErrNoRelease {
return &deployer.Resources{}, nil
} else if err != nil {
return nil, err
}
return releaseToResources(release)
}

func (h *helm) Delete(bundleID, releaseName string) error {
Expand Down

0 comments on commit 8912040

Please sign in to comment.