Skip to content

Updates setup for id.replicated.com changes` #362

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
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
2 changes: 1 addition & 1 deletion setup/cmd/kots-field-labs/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ func HandleRequest(event fieldlabs.LambdaEvent) error {
APIOrigin: "https://api.replicated.com/vendor",
GraphQLOrigin: "https://g.replicated.com/graphql",
KURLSHOrigin: "https://kurl.sh",
IDOrigin: "https://api.replicated.com/vendor",
IDOrigin: "https://api.replicated.com",
}

action, ok := actions[event.Action]
Expand Down
8 changes: 4 additions & 4 deletions setup/cmd/kots-field-labs/param.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ func GetParams() (*fieldlabs.Params, error) {
params.KURLSHOrigin = "https://kurl.sh"
}
if params.IDOrigin == "" {
params.IDOrigin = "https://api.replicated.com/vendor"
params.IDOrigin = "https://api.replicated.com"
}

actionString := os.Getenv("REPLICATED_ACTION")
Expand Down Expand Up @@ -119,7 +119,7 @@ func getLoginResponse(params *fieldlabs.Params) (*string, error) {
return nil, errors.Wrap(err, "marshal login params")
}

loginReq, err := http.NewRequest("POST", fmt.Sprintf("%s/v1/login", params.IDOrigin), bytes.NewBuffer(loginBody))
loginReq, err := http.NewRequest("POST", fmt.Sprintf("%s/vendor/v1/login", params.IDOrigin), bytes.NewBuffer(loginBody))
if err != nil {
return nil, errors.Wrap(err, "build login request")
}
Expand All @@ -131,9 +131,9 @@ func getLoginResponse(params *fieldlabs.Params) (*string, error) {
}

defer loginResp.Body.Close()
if loginResp.StatusCode != 201 {
if loginResp.StatusCode != 201 && loginResp.StatusCode != 200 {
body, _ := ioutil.ReadAll(loginResp.Body)
return nil, fmt.Errorf("GET /policies %d: %s", loginResp.StatusCode, body)
return nil, fmt.Errorf("Parsing login response `/vendor/v1/login` %d: %s", loginResp.StatusCode, body)
}
bodyBytes, err := ioutil.ReadAll(loginResp.Body)
if err != nil {
Expand Down
167 changes: 88 additions & 79 deletions setup/pkg/fieldlabs/environment_create.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package fieldlabs

import (
"encoding/json"
"fmt"
"io"
"io/ioutil"
Expand Down Expand Up @@ -103,6 +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)

err = e.createVendorTrack(*app, *track)
if err != nil {
Expand All @@ -119,85 +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
channel, err := e.getChannel(track)
if err != nil {
return errors.Wrapf(err, "get Stable channel")
}
track.Status.Channel = channel

// 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
}
// 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
}

// 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

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)
}
}
}
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 @@ -242,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
Loading