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 charts/fleet-crd/templates/crds.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -974,6 +974,7 @@ spec:
ready:
type: boolean
release:
description: Release is the Helm release ID
nullable: true
type: string
resources:
Expand Down
8 changes: 4 additions & 4 deletions integrationtests/cli/deploy/deploy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -115,9 +115,9 @@ var _ = Describe("Fleet CLI Deploy", func() {
It("creates resources", func() {
buf, err := act(args)
Expect(err).NotTo(HaveOccurred())
Expect(buf).To(gbytes.Say("defaultNamespace: default"))
Expect(buf).To(gbytes.Say("objects"))
Expect(buf).To(gbytes.Say("- apiVersion: v1"))
Expect(buf).To(gbytes.Say(" data:"))
Expect(buf).To(gbytes.Say(" name: example-value"))

cm := &corev1.ConfigMap{}
err = k8sClient.Get(ctx, types.NamespacedName{Namespace: "default", Name: "test-simple-chart-config"}, cm)
Expand All @@ -136,9 +136,9 @@ var _ = Describe("Fleet CLI Deploy", func() {
It("creates resources", func() {
buf, err := act(args)
Expect(err).NotTo(HaveOccurred())
Expect(buf).To(gbytes.Say("defaultNamespace: " + namespace))
Expect(buf).To(gbytes.Say("objects"))
Expect(buf).To(gbytes.Say("- apiVersion: v1"))
Expect(buf).To(gbytes.Say(" data:"))
Expect(buf).To(gbytes.Say(" name: example-value"))

cm := &corev1.ConfigMap{}
err = k8sClient.Get(ctx, types.NamespacedName{Namespace: namespace, Name: "test-simple-chart-config"}, cm)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@ func (r *BundleDeploymentReconciler) Reconcile(ctx context.Context, req ctrl.Req
bd.Status = setCondition(status, nil, condition.Cond(fleetv1.BundleDeploymentConditionDeployed))
}

// retrieve the resources from the helm history.
// if we can't retrieve the resources, we don't need to try any of the other operations and requeue now
resources, err := r.Deployer.Resources(bd.Name, bd.Status.Release)
if err != nil {
Expand Down
16 changes: 8 additions & 8 deletions internal/cmd/agent/deployer/deployer.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ func New(localClient client.Client, upstreamClient client.Reader, lookup Lookup,
}
}

func (d *Deployer) Resources(name string, release string) (*helmdeployer.Resources, error) {
return d.helm.Resources(name, release)
func (d *Deployer) Resources(name string, releaseID string) (*helmdeployer.Resources, error) {
return d.helm.Resources(name, releaseID)
}

func (d *Deployer) RemoveExternalChanges(ctx context.Context, bd *fleet.BundleDeployment) (string, error) {
Expand All @@ -62,7 +62,7 @@ func (d *Deployer) DeployBundle(ctx context.Context, bd *fleet.BundleDeployment)
return status, err
}

release, err := d.helmdeploy(ctx, bd)
releaseID, err := d.helmdeploy(ctx, bd)
if err != nil {
// When an error from DeployBundle is returned it causes DeployBundle
// to requeue and keep trying to deploy on a loop. If there is something
Expand All @@ -83,11 +83,11 @@ func (d *Deployer) DeployBundle(ctx context.Context, bd *fleet.BundleDeployment)
}
return status, err
}
status.Release = release
status.Release = releaseID
status.AppliedDeploymentID = bd.Spec.DeploymentID
logger.Info("Deployed bundle", "release", release, "appliedDeploymentID", status.AppliedDeploymentID)
logger.Info("Deployed bundle", "release", releaseID, "appliedDeploymentID", status.AppliedDeploymentID)

if err := d.setNamespaceLabelsAndAnnotations(ctx, bd, release); err != nil {
if err := d.setNamespaceLabelsAndAnnotations(ctx, bd, releaseID); err != nil {
return fleet.BundleDeploymentStatus{}, err
}

Expand Down Expand Up @@ -152,12 +152,12 @@ func (d *Deployer) helmdeploy(ctx context.Context, bd *fleet.BundleDeployment) (
}

manifest.Commit = bd.Labels["fleet.cattle.io/commit"]
resource, err := d.helm.Deploy(ctx, bd.Name, manifest, bd.Spec.Options)
release, err := d.helm.Deploy(ctx, bd.Name, manifest, bd.Spec.Options)
if err != nil {
return "", err
}

return resource.ID, nil
return helmdeployer.ReleaseToResourceID(release), nil
}

// setNamespaceLabelsAndAnnotations updates the namespace for the release, applying all labels and annotations to that namespace as configured in the bundle spec.
Expand Down
9 changes: 7 additions & 2 deletions internal/cmd/cli/deploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -159,12 +159,17 @@ func (d *Deploy) Run(cmd *cobra.Command, args []string) error {
return err
}

resources, err := deployer.Deploy(ctx, bd.Name, manifest, bd.Spec.Options)
release, err := deployer.Deploy(ctx, bd.Name, manifest, bd.Spec.Options)
if err != nil {
return err
}

b, err = yaml.Marshal(resources)
objects, err := helmdeployer.ReleaseToObjects(release)
if err != nil {
return err
}

b, err = yaml.Marshal(objects)
if err != nil {
return err
}
Expand Down
3 changes: 2 additions & 1 deletion internal/helmdeployer/deployer.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,9 @@ type Helm struct {
labelSuffix string
}

// Resources contains information from a helm release
type Resources struct {
ID string `json:"id,omitempty"`
// DefaultNamespace is the namespace of the helm release
DefaultNamespace string `json:"defaultNamespace,omitempty"`
Objects []runtime.Object `json:"objects,omitempty"`
}
Expand Down
27 changes: 14 additions & 13 deletions internal/helmdeployer/history.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"helm.sh/helm/v3/pkg/action"
"helm.sh/helm/v3/pkg/release"
"helm.sh/helm/v3/pkg/storage/driver"
"k8s.io/apimachinery/pkg/runtime"

"github.com/rancher/wrangler/v3/pkg/kv"
"github.com/rancher/wrangler/v3/pkg/yaml"
Expand Down Expand Up @@ -40,7 +41,10 @@ func (h *Helm) Resources(bundleID, resourcesID string) (*Resources, error) {
} else if err != nil {
return nil, err
}
return releaseToResources(release)

resources := &Resources{DefaultNamespace: release.Namespace}
resources.Objects, err = ReleaseToObjects(release)
return resources, err
}

func (h *Helm) ResourcesFromPreviousReleaseVersion(bundleID, resourcesID string) (*Resources, error) {
Expand All @@ -55,7 +59,10 @@ func (h *Helm) ResourcesFromPreviousReleaseVersion(bundleID, resourcesID string)
} else if err != nil {
return nil, err
}
return releaseToResources(release)

resources := &Resources{DefaultNamespace: release.Namespace}
resources.Objects, err = ReleaseToObjects(release)
return resources, err
}

func getReleaseNameVersionAndNamespace(bundleID, resourcesID string) (string, int, string, error) {
Expand Down Expand Up @@ -94,19 +101,13 @@ func (h *Helm) getRelease(releaseName, namespace string, version int) (*release.
return nil, ErrNoRelease
}

func releaseToResourceID(release *release.Release) string {
func ReleaseToResourceID(release *release.Release) string {
return fmt.Sprintf("%s/%s:%d", release.Namespace, release.Name, release.Version)
}

func releaseToResources(release *release.Release) (*Resources, error) {
var (
err error
)
resources := &Resources{
DefaultNamespace: release.Namespace,
ID: releaseToResourceID(release),
}
func ReleaseToObjects(release *release.Release) ([]runtime.Object, error) {
var err error

resources.Objects, err = yaml.ToObjects(bytes.NewBufferString(release.Manifest))
return resources, err
objs, err := yaml.ToObjects(bytes.NewBufferString(release.Manifest))
return objs, err
}
13 changes: 4 additions & 9 deletions internal/helmdeployer/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import (
)

// Deploy deploys an unpacked content resource with helm. bundleID is the name of the bundledeployment.
func (h *Helm) Deploy(ctx context.Context, bundleID string, manifest *manifest.Manifest, options fleet.BundleDeploymentOptions) (*Resources, error) {
func (h *Helm) Deploy(ctx context.Context, bundleID string, manifest *manifest.Manifest, options fleet.BundleDeploymentOptions) (*release.Release, error) {
if options.Helm == nil {
options.Helm = &fleet.HelmOptions{}
}
Expand Down Expand Up @@ -53,18 +53,13 @@ func (h *Helm) Deploy(ctx context.Context, bundleID string, manifest *manifest.M
chart.Metadata.Annotations[CommitAnnotation] = manifest.Commit
}

if resources, err := h.install(ctx, bundleID, manifest, chart, options, true); err != nil {
if release, err := h.install(ctx, bundleID, manifest, chart, options, true); err != nil {
return nil, err
} else if h.template {
return releaseToResources(resources)
return release, nil
}

release, err := h.install(ctx, bundleID, manifest, chart, options, false)
if err != nil {
return nil, err
}

return releaseToResources(release)
return h.install(ctx, bundleID, manifest, chart, options, false)
}

// install runs helm install or upgrade and supports dry running the action. Will run helm rollback in case of a failed upgrade.
Expand Down
2 changes: 1 addition & 1 deletion internal/helmdeployer/rollback.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ func (h *Helm) RemoveExternalChanges(ctx context.Context, bd *fleet.BundleDeploy
if err != nil {
return "", err
}
return releaseToResourceID(release), nil
return ReleaseToResourceID(release), nil
}

func removeFailedRollback(cfg action.Configuration, currentRelease *release.Release, err error) error {
Expand Down
4 changes: 2 additions & 2 deletions internal/helmdeployer/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,10 @@ func Template(ctx context.Context, bundleID string, manifest *manifest.Manifest,
h.globalCfg.Log = logrus.Infof
h.globalCfg.Releases = storage.Init(mem)

resources, err := h.Deploy(ctx, bundleID, manifest, options)
release, err := h.Deploy(ctx, bundleID, manifest, options)
if err != nil {
return nil, err
}

return resources.Objects, nil
return ReleaseToObjects(release)
}
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,7 @@ type BundleDeploymentStatus struct {
Conditions []genericcondition.GenericCondition `json:"conditions,omitempty"`
// +nullable
AppliedDeploymentID string `json:"appliedDeploymentID,omitempty"`
// Release is the Helm release ID
// +nullable
Release string `json:"release,omitempty"`
Ready bool `json:"ready,omitempty"`
Expand Down
Loading