Skip to content

Commit

Permalink
Fixes teardown and improves ergonomics
Browse files Browse the repository at this point in the history
  • Loading branch information
crdant committed Feb 12, 2025
1 parent f23c750 commit 122a0dc
Show file tree
Hide file tree
Showing 4 changed files with 170 additions and 115 deletions.
174 changes: 87 additions & 87 deletions setup/pkg/fieldlabs/environment_create.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package fieldlabs

import (
"encoding/json"
"fmt"
"io"
"io/ioutil"
"strings"
"time"
"encoding/json"

"github.com/pkg/errors"
"github.com/replicatedhq/replicated/pkg/kotsclient"
Expand Down Expand Up @@ -104,9 +104,9 @@ func (e *EnvironmentManager) Ensure(track *TrackSpec) error {
if err != nil {
return errors.Wrap(err, "add member")
}
memberJson, _ := json.Marshal(members)
policyJson, _ := json.Marshal(policies)
e.Log.ActionWithSpinner("Added member: %s %s", memberJson, policyJson)
memberJson, _ := json.Marshal(members)
policyJson, _ := json.Marshal(policies)
e.Log.ActionWithSpinner("Added member: %s %s", memberJson, policyJson)

err = e.createVendorTrack(*app, *track)
if err != nil {
Expand All @@ -123,90 +123,90 @@ func (e *EnvironmentManager) createVendorTrack(app types.App, trackSpec TrackSpe
appTrackSlug := fmt.Sprintf("%s-%s", app.Slug, track.Spec.Slug)
e.Log.ActionWithSpinner("Provision track %s", appTrackSlug)

// get the stable channel to assign for customer
// get the stable channel to assign for customer
e.Log.ActionWithSpinner("Get stable channel")
channel, err := e.getChannel(track)
if err != nil {
return errors.Wrapf(err, "get Stable channel")
}
track.Status.Channel = channel
e.Log.ActionWithSpinner("Got channel: %s", channel)

// Create customer
e.Log.ActionWithSpinner("Create customer")
if trackSpec.Customer != "" {
customer, err := e.getOrCreateCustomer(track)
if err != nil {
return errors.Wrapf(err, "create customer for track %q app %q", trackSpec.Slug, app.Slug)
}
track.Status.Customer = customer
}
channel, err := e.getChannel(track)
if err != nil {
return errors.Wrapf(err, "get Stable channel")
}
track.Status.Channel = channel
e.Log.ActionWithSpinner("Got channel: %s", channel)

// Create customer
e.Log.ActionWithSpinner("Create customer")
if trackSpec.Customer != "" {
customer, err := e.getOrCreateCustomer(track)
if err != nil {
return errors.Wrapf(err, "create customer for track %q app %q", trackSpec.Slug, app.Slug)
}
track.Status.Customer = customer
}

// load yaml for releases first to ensure directories exist
if trackSpec.YAMLDir != "" {
kotsYAML, err := readYAMLDir(fmt.Sprintf("%s/%s", e.VendorLoc, trackSpec.YAMLDir))

if err != nil {
return errors.Wrapf(err, "read yaml dir %q", fmt.Sprintf("%s/%s", e.VendorLoc, trackSpec.YAMLDir))
}

for _, extraRelease := range track.Spec.ExtraReleases {
kotsYAML, err := readYAMLDir(fmt.Sprintf("%s/%s", e.VendorLoc, extraRelease.YAMLDir))
if err != nil {
return errors.Wrapf(err, "read yaml dir %q", fmt.Sprintf("%s/%s", e.VendorLoc, trackSpec.YAMLDir))
}
track.Status.ExtraReleases = append(track.Status.ExtraReleases, ExtraReleaseStatus{
Spec: extraRelease,
YAML: kotsYAML,
})

}

release, err := e.Client.CreateRelease(app.ID, kotsYAML)
if err != nil {
return errors.Wrapf(err, "create release for %q", fmt.Sprintf("%s/%s", e.VendorLoc, trackSpec.YAMLDir))
}

track.Status.Release = release

e.Log.ActionWithSpinner("Promote release")
err = e.Client.PromoteRelease(app.ID, release.Sequence, "0.1.0", trackSpec.Slug, false, channel.ID)
if err != nil {
return errors.Wrapf(err, "promote release %d to channel %q", release.Sequence, channel.Slug)
}

for _, extraRelease := range track.Status.ExtraReleases {
releaseInfo, err := e.Client.CreateRelease(app.ID, extraRelease.YAML)
if err != nil {
return errors.Wrapf(err, "create release for %q", fmt.Sprintf("%s/%s", e.VendorLoc, extraRelease.Spec.YAMLDir))
}
extraRelease.Release = releaseInfo

if extraRelease.Spec.PromoteChannel != "" {

continue
}
}

if trackSpec.K8sInstallerYAMLPath != "" {
kurlYAML, err := ioutil.ReadFile(fmt.Sprintf("%s/%s", e.VendorLoc, trackSpec.K8sInstallerYAMLPath))
if err != nil {
return errors.Wrapf(err, "read installer yaml %q", fmt.Sprintf("%s/%s", e.VendorLoc, trackSpec.K8sInstallerYAMLPath))
}

installer, err := e.Client.CreateInstaller(app.ID, string(kurlYAML))
if err != nil {
return errors.Wrapf(err, "create installer from %q", fmt.Sprintf("%s/%s", e.VendorLoc, trackSpec.K8sInstallerYAMLPath))
}
track.Status.Installer = installer

err = e.Client.PromoteInstaller(app.ID, installer.Sequence, channel.ID, trackSpec.Slug)
if err != nil {
return errors.Wrapf(err, "promote installer %d to channel %q", installer.Sequence, channel.Slug)
}
}
}
e.Log.ActionWithSpinner("Provisioned")
if trackSpec.YAMLDir != "" {
kotsYAML, err := readYAMLDir(fmt.Sprintf("%s/%s", e.VendorLoc, trackSpec.YAMLDir))

if err != nil {
return errors.Wrapf(err, "read yaml dir %q", fmt.Sprintf("%s/%s", e.VendorLoc, trackSpec.YAMLDir))
}

for _, extraRelease := range track.Spec.ExtraReleases {
kotsYAML, err := readYAMLDir(fmt.Sprintf("%s/%s", e.VendorLoc, extraRelease.YAMLDir))
if err != nil {
return errors.Wrapf(err, "read yaml dir %q", fmt.Sprintf("%s/%s", e.VendorLoc, trackSpec.YAMLDir))
}
track.Status.ExtraReleases = append(track.Status.ExtraReleases, ExtraReleaseStatus{
Spec: extraRelease,
YAML: kotsYAML,
})

}

release, err := e.Client.CreateRelease(app.ID, kotsYAML)
if err != nil {
return errors.Wrapf(err, "create release for %q", fmt.Sprintf("%s/%s", e.VendorLoc, trackSpec.YAMLDir))
}

track.Status.Release = release

e.Log.ActionWithSpinner("Promote release")
err = e.Client.PromoteRelease(app.ID, release.Sequence, "0.1.0", trackSpec.Slug, false, channel.ID)
if err != nil {
return errors.Wrapf(err, "promote release %d to channel %q", release.Sequence, channel.Slug)
}

for _, extraRelease := range track.Status.ExtraReleases {
releaseInfo, err := e.Client.CreateRelease(app.ID, extraRelease.YAML)
if err != nil {
return errors.Wrapf(err, "create release for %q", fmt.Sprintf("%s/%s", e.VendorLoc, extraRelease.Spec.YAMLDir))
}
extraRelease.Release = releaseInfo

if extraRelease.Spec.PromoteChannel != "" {

continue
}
}

if trackSpec.K8sInstallerYAMLPath != "" {
kurlYAML, err := ioutil.ReadFile(fmt.Sprintf("%s/%s", e.VendorLoc, trackSpec.K8sInstallerYAMLPath))
if err != nil {
return errors.Wrapf(err, "read installer yaml %q", fmt.Sprintf("%s/%s", e.VendorLoc, trackSpec.K8sInstallerYAMLPath))
}

installer, err := e.Client.CreateInstaller(app.ID, string(kurlYAML))
if err != nil {
return errors.Wrapf(err, "create installer from %q", fmt.Sprintf("%s/%s", e.VendorLoc, trackSpec.K8sInstallerYAMLPath))
}
track.Status.Installer = installer

err = e.Client.PromoteInstaller(app.ID, installer.Sequence, channel.ID, trackSpec.Slug)
if err != nil {
return errors.Wrapf(err, "promote installer %d to channel %q", installer.Sequence, channel.Slug)
}
}
}
e.Log.ActionWithSpinner("Provisioned")
return nil
}

Expand Down Expand Up @@ -251,8 +251,8 @@ func (e *EnvironmentManager) getOrCreateCustomer(track Track) (*types.Customer,
}
}

var createOpts = kotsclient.CreateCustomerOpts{ Name: track.Spec.Customer, AppID: track.Status.App.ID, Email: track.Spec.Customer + "@replicated-labs.com", ChannelID: track.Status.Channel.ID, ExpiresAt: OneWeek }
customer, err := e.Client.CreateCustomer(createOpts)
var createOpts = kotsclient.CreateCustomerOpts{Name: track.Spec.Customer, AppID: track.Status.App.ID, Email: track.Spec.Customer + "@replicated-labs.com", ChannelID: track.Status.Channel.ID, ExpiresAt: OneWeek}
customer, err := e.Client.CreateCustomer(createOpts)
if err != nil {
return nil, errors.Wrapf(err, "create customer for track %q app %q", track.Spec.Slug, track.Status.App.Slug)
}
Expand Down
12 changes: 12 additions & 0 deletions setup/pkg/fieldlabs/environment_destroy.go
Original file line number Diff line number Diff line change
@@ -1,36 +1,48 @@
package fieldlabs

import (
"encoding/json"
"github.com/pkg/errors"
)

func (e *EnvironmentManager) Destroy(track *TrackSpec) error {
e.Log.Verbose()
e.Log.Debug("Destroying environment %s", e.Params.ParticipantId)
e.Log.Debug("Get policies")
policies, err := e.getPolicies()
if err != nil {
return errors.Wrap(err, "get policies")
}

e.Log.Debug("Get member map")
members, err := e.getMembersMap()
if err != nil {
return errors.Wrap(err, "get members")
}
inviteEmail := e.Params.ParticipantId + "@replicated-labs.com"

memberJson, _ := json.Marshal(members)
e.Log.Debug("Need to find %s in: %s", inviteEmail, memberJson)
e.Log.Debug("Delete member %s", inviteEmail)
err = e.DeleteMember(members[inviteEmail].Id)
if err != nil {
return err
}
e.Log.Debug("Delete policy id %s", policies[e.Params.ParticipantId])
err = e.DeletePolicyId(policies[e.Params.ParticipantId])
if err != nil {
return err
}

// Delete the app
e.Log.Debug("List apps")
apps, err := e.Client.ListApps()
if err != nil {
return errors.Wrapf(err, "list apps")
}
for _, app := range apps {
if app.App.Name == track.Name+" "+e.Params.ParticipantId {
e.Log.Debug("Delete app %s", app.App.Name)
err = e.Client.DeleteKOTSApp(app.App.ID)
if err != nil {
return errors.Wrapf(err, "delete app")
Expand Down
Loading

0 comments on commit 122a0dc

Please sign in to comment.