Skip to content

Commit

Permalink
[WIP] upload state gcp
Browse files Browse the repository at this point in the history
  • Loading branch information
ramonskie committed Aug 30, 2023
1 parent 84cc14a commit 1ed02b8
Show file tree
Hide file tree
Showing 2 changed files with 107 additions and 1 deletion.
53 changes: 52 additions & 1 deletion backends/backend.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ type Config struct {
Bucket string
Region string
Dest string
Source string
}

type Provider interface {
Expand All @@ -48,6 +49,7 @@ func (p provider) Client(iaas string) (Backend, error) {

type Backend interface {
GetState(Config, string) error
SetState(Config, string) error
}

type cloudStorageBackend struct{}
Expand Down Expand Up @@ -165,6 +167,36 @@ func (c cloudStorageBackend) GetState(config Config, name string) error {
return nil
}

func (c cloudStorageBackend) SetState(config Config, name string) error {
// TODO: implement
// first we need to get gcp working.
awsAuthSettings := make(gou.JsonHelper)
awsAuthSettings[awss3.ConfKeyAccessKey] = config.AWSAccessKeyID
awsAuthSettings[awss3.ConfKeyAccessSecret] = config.AWSSecretAccessKey

csConfig := cloudstorage.Config{
Type: awss3.StoreType,
AuthMethod: awss3.AuthAccessKey,
Bucket: config.Bucket,
Settings: awsAuthSettings,
Region: config.Region,
}

store, err := cloudstorage.NewStore(&csConfig)
if err != nil {
return err
}

obj, err := store.NewObject(name)
if err != nil {
return err
}

obj.Close()

return err
}

type gcsStateBackend struct{}

func (g gcsStateBackend) GetState(config Config, name string) error {
Expand All @@ -178,14 +210,33 @@ func (g gcsStateBackend) GetState(config Config, name string) error {
return fmt.Errorf("could not create GCS client: %s", err)
}

_, err = gcsClient.Download(config.Dest)
_, err = gcsClient.Download(config.Source)
if err != nil {
return fmt.Errorf("downloading remote state from GCS: %s", err)
}

return nil
}

func (g gcsStateBackend) SetState(config Config, name string) error {
key, err := g.getGCPServiceAccountKey(config.GCPServiceAccountKey)
if err != nil {
return fmt.Errorf("could not read GCP service account key: %s", err)
}

gcsClient, err := storage.NewStorageClient(key, name, config.Bucket)
if err != nil {
return fmt.Errorf("could not create GCS client: %s", err)
}

_, err = gcsClient.Upload(config.Source)
if err != nil {
return fmt.Errorf("upload remote state to GCS: %s", err)
}

return nil
}

func (g gcsStateBackend) getGCPServiceAccountKey(key string) (string, error) {
if _, err := os.Stat(key); err != nil {
return key, nil
Expand Down
55 changes: 55 additions & 0 deletions config/uploader.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package config

import (
"github.com/cloudfoundry/bosh-bootloader/backends"
)

type Uploader struct {
provider backends.Provider

Check failure on line 8 in config/uploader.go

View workflow job for this annotation

GitHub Actions / lint (ubuntu-latest)

field `provider` is unused (unused)
}

func NewUploader(provider backends.Provider) Downloader {
return Downloader{provider: provider}
}

func (d Downloader) UploadeState(flags GlobalFlags) error {
backend, err := d.provider.Client(flags.IAAS)
if err != nil {
return err
}

var config backends.Config
switch flags.IAAS {
case "aws":
config = backends.Config{
Source: flags.StateDir,
Dest: flags.StateDir,
Bucket: flags.StateBucket,
Region: flags.AWSRegion,
AWSAccessKeyID: flags.AWSAccessKeyID,
AWSSecretAccessKey: flags.AWSSecretAccessKey,
}

case "gcp":
config = backends.Config{
Source: flags.StateDir,
Dest: flags.StateDir,
Bucket: flags.StateBucket,
Region: flags.GCPRegion,
GCPServiceAccountKey: flags.GCPServiceAccountKey,
}
}

return backend.SetState(config, flags.EnvID)
}

// // set logic from https://github.com/cloudfoundry/bbl-state-resource/blob/master/cmd/out/out.go#L48 where?
// // how to get globalflags?
// if globalFlags.StateBucket != "" {
// version, err := StorageClient.Upload(bblStateDir)
// if err != nil {
// return fmt.Errorf(os.Stderr, "failed to upload bbl state: %s\n", err)
// }

// return fmt.Errorf("successfully uploaded bbl state!\n")
// }

0 comments on commit 1ed02b8

Please sign in to comment.