Skip to content

Commit

Permalink
CreateAppFromOnline in the store
Browse files Browse the repository at this point in the history
  • Loading branch information
marccampbell committed Aug 26, 2020
1 parent 8b9729e commit 3556eec
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 39 deletions.
4 changes: 2 additions & 2 deletions kotsadm/pkg/airgap/airgap.go
Expand Up @@ -67,7 +67,7 @@ func CreateAppFromAirgap(pendingApp *types.PendingApp, airgapBundle multipart.Fi
}
}()

if err := store.GetStore().SetAppIsAirgap(pendingApp.ID); err != nil {
if err := store.GetStore().SetAppIsAirgap(pendingApp.ID, true); err != nil {
return errors.Wrap(err, "failed to set app is airgap")
}

Expand Down Expand Up @@ -200,7 +200,7 @@ func CreateAppFromAirgap(pendingApp *types.PendingApp, airgapBundle multipart.Fi
}

// yes, again in case of errors
if err := store.GetStore().SetAppIsAirgap(pendingApp.ID); err != nil {
if err := store.GetStore().SetAppIsAirgap(pendingApp.ID, true); err != nil {
return errors.Wrap(err, "failed to set app is airgap the second time")
}

Expand Down
35 changes: 4 additions & 31 deletions kotsadm/pkg/online/online.go
Expand Up @@ -14,7 +14,6 @@ import (
"github.com/replicatedhq/kots/kotsadm/pkg/kotsutil"
"github.com/replicatedhq/kots/kotsadm/pkg/logger"
"github.com/replicatedhq/kots/kotsadm/pkg/online/types"
"github.com/replicatedhq/kots/kotsadm/pkg/persistence"
"github.com/replicatedhq/kots/kotsadm/pkg/preflight"
"github.com/replicatedhq/kots/kotsadm/pkg/store"
"github.com/replicatedhq/kots/kotsadm/pkg/updatechecker"
Expand Down Expand Up @@ -70,8 +69,6 @@ func CreateAppFromOnline(pendingApp *types.PendingApp, upstreamURI string, isAut
}
}()

db := persistence.MustGetPGSession()

pipeReader, pipeWriter := io.Pipe()
go func() {
scanner := bufio.NewScanner(pipeReader)
Expand Down Expand Up @@ -149,35 +146,11 @@ func CreateAppFromOnline(pendingApp *types.PendingApp, upstreamURI string, isAut
// copying this from typescript ...
// i'll leave this next line
// TODO: refactor this entire function to be testable, reliable and less monolithic
query := `select id, title from cluster`
rows, err := db.Query(query)
if err != nil {
return nil, errors.Wrap(err, "failed to query clusters")
}
defer rows.Close()

clusterIDs := map[string]string{}
for rows.Next() {
clusterID := ""
name := ""
if err := rows.Scan(&clusterID, &name); err != nil {
return nil, errors.Wrap(err, "failed to scan row")
}

clusterIDs[clusterID] = name
if err := store.GetStore().AddAppToAllDownstreams(pendingApp.ID); err != nil {
return nil, errors.Wrap(err, "failed to add app to all downstreams")
}
for clusterID, name := range clusterIDs {
query = `insert into app_downstream (app_id, cluster_id, downstream_name) values ($1, $2, $3)`
_, err = db.Exec(query, pendingApp.ID, clusterID, name)
if err != nil {
return nil, errors.Wrap(err, "failed to create app downstream")
}
}

query = `update app set is_airgap=false where id = $1`
_, err = db.Exec(query, pendingApp.ID)
if err != nil {
return nil, errors.Wrap(err, "failed to update app to installed")
if err := store.GetStore().SetAppIsAirgap(pendingApp.ID, false); err != nil {
return nil, errors.Wrap(err, "failed to set app is not airgap")
}

newSequence, err := version.CreateFirstVersion(pendingApp.ID, tmpRoot, "Online Install")
Expand Down
16 changes: 14 additions & 2 deletions kotsadm/pkg/store/ocistore/airgap_store.go
@@ -1,6 +1,7 @@
package ocistore

import (
"github.com/pkg/errors"
airgaptypes "github.com/replicatedhq/kots/kotsadm/pkg/airgap/types"
)

Expand All @@ -16,8 +17,19 @@ func (s OCIStore) ResetAirgapInstallInProgress(appID string) error {
return ErrNotImplemented
}

func (s OCIStore) SetAppIsAirgap(appID string) error {
return ErrNotImplemented
func (s OCIStore) SetAppIsAirgap(appID string, isAirgap bool) error {
app, err := s.GetApp(appID)
if err != nil {
return errors.Wrap(err, "failed to get app")
}

app.IsAirgap = isAirgap

if err := s.updateApp(app); err != nil {
return errors.Wrap(err, "failed to update app")
}

return nil
}

func (s OCIStore) SetAppInstallState(appID string, state string) error {
Expand Down
24 changes: 24 additions & 0 deletions kotsadm/pkg/store/ocistore/app_store.go
Expand Up @@ -264,3 +264,27 @@ func (c OCIStore) SetSnapshotSchedule(appID string, snapshotSchedule string) err
func (c OCIStore) SetSnapshotTTL(appID string, snapshotTTL string) error {
return ErrNotImplemented
}

func (s OCIStore) updateApp(app *apptypes.App) error {
b, err := json.Marshal(app)
if err != nil {
return errors.Wrap(err, "failed to marhsal app")
}

configMap, err := s.getConfigmap(AppListConfigmapName)
if err != nil {
return errors.Wrap(err, "failed to get app list")
}

if configMap.Data == nil {
configMap.Data = map[string]string{}
}

configMap.Data[app.ID] = string(b)

if err := s.updateConfigmap(configMap); err != nil {
return errors.Wrap(err, "failed to update app list config map")
}

return nil
}
6 changes: 3 additions & 3 deletions kotsadm/pkg/store/s3pg/airgap_store.go
Expand Up @@ -71,11 +71,11 @@ func (s S3PGStore) ResetAirgapInstallInProgress(appID string) error {
return nil
}

func (s S3PGStore) SetAppIsAirgap(appID string) error {
func (s S3PGStore) SetAppIsAirgap(appID string, isAirgap bool) error {
db := persistence.MustGetPGSession()

query := `update app set is_airgap=true where id = $1`
_, err := db.Exec(query, appID)
query := `update app set is_airgap=$1 where id = $1`
_, err := db.Exec(query, isAirgap, appID)
if err != nil {
return errors.Wrap(err, "failed to set app airgap flag")
}
Expand Down
2 changes: 1 addition & 1 deletion kotsadm/pkg/store/store_interface.go
Expand Up @@ -76,7 +76,7 @@ type AirgapStore interface {
GetPendingAirgapUploadApp() (*airgaptypes.PendingApp, error)
GetAirgapInstallStatus() (*airgaptypes.InstallStatus, error)
ResetAirgapInstallInProgress(string) error
SetAppIsAirgap(string) error
SetAppIsAirgap(string, bool) error
}

type TaskStore interface {
Expand Down

0 comments on commit 3556eec

Please sign in to comment.