Skip to content

Commit

Permalink
refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
lu1as committed Mar 8, 2022
1 parent ead0160 commit 3421c18
Show file tree
Hide file tree
Showing 11 changed files with 74 additions and 74 deletions.
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ COPY . /go/src/github.com/nimbolus/terraform-backend

WORKDIR /go/src/github.com/nimbolus/terraform-backend

RUN GOOS=linux CGO_ENABLED=0 go build -o terraform-backend
RUN GOOS=linux CGO_ENABLED=0 go build cmd/terraform-backend.go

# start clean for final image
FROM alpine:3
Expand Down
2 changes: 1 addition & 1 deletion redisclient/redisclient.go → client/redis/redis.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package redisclient
package redis

import (
redis "github.com/go-redis/redis/v8"
Expand Down
2 changes: 1 addition & 1 deletion vaultclient/vaultclient.go → client/vault/vautl.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package vaultclient
package vault

import (
"fmt"
Expand Down
14 changes: 7 additions & 7 deletions cmd/terraform-backend.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
"github.com/nimbolus/terraform-backend/terraform"
"github.com/nimbolus/terraform-backend/terraform/auth"
"github.com/nimbolus/terraform-backend/terraform/lock"
"github.com/nimbolus/terraform-backend/terraform/store"
"github.com/nimbolus/terraform-backend/terraform/storage"
log "github.com/sirupsen/logrus"
"github.com/spf13/viper"
)
Expand All @@ -21,7 +21,7 @@ func httpResponse(w http.ResponseWriter, code int, body string) {
fmt.Fprint(w, body)
}

func stateHandler(stateStore store.Store, locker lock.Locker, kms kms.KMS) func(http.ResponseWriter, *http.Request) {
func stateHandler(store storage.Storage, locker lock.Locker, kms kms.KMS) func(http.ResponseWriter, *http.Request) {
return func(w http.ResponseWriter, req *http.Request) {
body, err := io.ReadAll(req.Body)
defer req.Body.Close()
Expand Down Expand Up @@ -82,7 +82,7 @@ func stateHandler(stateStore store.Store, locker lock.Locker, kms kms.KMS) func(
case http.MethodGet:
log.Debugf("get state with id %s", state.ID)
stateID := state.ID
state, err = stateStore.GetState(state.ID)
state, err = store.GetState(state.ID)
if err != nil {
log.Warnf("failed to get state with id %s: %v", stateID, err)
httpResponse(w, http.StatusBadRequest, err.Error())
Expand Down Expand Up @@ -110,7 +110,7 @@ func stateHandler(stateStore store.Store, locker lock.Locker, kms kms.KMS) func(
return
}

err := stateStore.SaveState(state)
err := store.SaveState(state)
if err != nil {
log.Warnf("failed to save state with id %s: %v", state.ID, err)
httpResponse(w, http.StatusBadRequest, err.Error())
Expand Down Expand Up @@ -143,11 +143,11 @@ func main() {
log.Infof("set log level to %s", level.String())
log.SetLevel(level)

stateStore, err := store.GetStore()
store, err := storage.GetStorage()
if err != nil {
log.Fatal(err.Error())
}
log.Infof("initialized %s store backend", stateStore.GetName())
log.Infof("initialized %s storage backend", store.GetName())

locker, err := lock.GetLocker()
if err != nil {
Expand All @@ -164,6 +164,6 @@ func main() {
addr := viper.GetString("listen_addr")
log.Printf("listening on %s", addr)
r := mux.NewRouter().StrictSlash(true)
r.HandleFunc("/state/{project}/{id}", stateHandler(stateStore, locker, kms))
r.HandleFunc("/state/{project}/{id}", stateHandler(store, locker, kms))
log.Fatalf("failed to listen on %s: %v", addr, http.ListenAndServe(addr, r))
}
2 changes: 1 addition & 1 deletion kms/kms.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ package kms
import (
"fmt"

vaultclient "github.com/nimbolus/terraform-backend/client/vault"
"github.com/nimbolus/terraform-backend/kms/local"
"github.com/nimbolus/terraform-backend/kms/transit"
"github.com/nimbolus/terraform-backend/vaultclient"
"github.com/spf13/viper"
)

Expand Down
2 changes: 1 addition & 1 deletion kms/transit/transit.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"fmt"

vault "github.com/hashicorp/vault/api"
"github.com/nimbolus/terraform-backend/vaultclient"
vaultclient "github.com/nimbolus/terraform-backend/client/vault"
)

type VaultTransit struct {
Expand Down
2 changes: 1 addition & 1 deletion terraform/lock/redis/redis.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"github.com/go-redsync/redsync/v4"
"github.com/go-redsync/redsync/v4/redis"
goredis "github.com/go-redsync/redsync/v4/redis/goredis/v8"
"github.com/nimbolus/terraform-backend/redisclient"
redisclient "github.com/nimbolus/terraform-backend/client/redis"
"github.com/nimbolus/terraform-backend/terraform"
)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package file
package filesystem

import (
"errors"
Expand All @@ -8,30 +8,30 @@ import (
"github.com/nimbolus/terraform-backend/terraform"
)

type FileStore struct {
type FileSystemStorage struct {
directory string
}

func NewFileStore(directory string) (*FileStore, error) {
func NewFileSystemStorage(directory string) (*FileSystemStorage, error) {
err := os.MkdirAll(directory, 0700)
if err != nil {
return nil, fmt.Errorf("failed to create directory %s: %v", directory, err)
}

return &FileStore{
return &FileSystemStorage{
directory: directory,
}, nil
}

func (f *FileStore) GetName() string {
func (f *FileSystemStorage) GetName() string {
return "file"
}

func (f *FileStore) SaveState(s *terraform.State) error {
func (f *FileSystemStorage) SaveState(s *terraform.State) error {
return os.WriteFile(fmt.Sprintf("%s/%s.tfstate", f.directory, s.ID), s.Data, 0600)
}

func (f *FileStore) GetState(id string) (*terraform.State, error) {
func (f *FileSystemStorage) GetState(id string) (*terraform.State, error) {
if _, err := os.Stat(f.getFileName(id)); errors.Is(err, os.ErrNotExist) {
f, err := os.Create(f.getFileName(id))
if err != nil {
Expand All @@ -52,6 +52,6 @@ func (f *FileStore) GetState(id string) (*terraform.State, error) {
}, nil
}

func (f *FileStore) getFileName(id string) string {
func (f *FileSystemStorage) getFileName(id string) string {
return fmt.Sprintf("%s/%s.tfstate", f.directory, id)
}
12 changes: 6 additions & 6 deletions terraform/store/s3/s3.go → terraform/storage/s3/s3.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@ import (
"github.com/nimbolus/terraform-backend/terraform"
)

type S3Store struct {
type S3Storage struct {
client *minio.Client
bucket string
}

func NewS3Store(endpoint, bucket, accessKey, secretKey string, useSSL bool) (*S3Store, error) {
func NewS3Storage(endpoint, bucket, accessKey, secretKey string, useSSL bool) (*S3Storage, error) {
client, err := minio.New(endpoint, &minio.Options{
Creds: credentials.NewStaticV4(accessKey, secretKey, ""),
Secure: useSSL,
Expand All @@ -30,25 +30,25 @@ func NewS3Store(endpoint, bucket, accessKey, secretKey string, useSSL bool) (*S3
return nil, fmt.Errorf("bucket does not exist")
}

return &S3Store{
return &S3Storage{
client: client,
bucket: bucket,
}, nil
}

func (s *S3Store) GetName() string {
func (s *S3Storage) GetName() string {
return "s3"
}

func (s *S3Store) SaveState(state *terraform.State) error {
func (s *S3Storage) SaveState(state *terraform.State) error {
r := bytes.NewReader(state.Data)
_, err := s.client.PutObject(context.Background(), s.bucket, getObjectName(state.ID), r, r.Size(), minio.PutObjectOptions{
ContentType: "application/octet-stream",
})
return err
}

func (s *S3Store) GetState(id string) (*terraform.State, error) {
func (s *S3Storage) GetState(id string) (*terraform.State, error) {
state := &terraform.State{
ID: id,
}
Expand Down
47 changes: 47 additions & 0 deletions terraform/storage/storage.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package storage

import (
"fmt"

"github.com/nimbolus/terraform-backend/terraform"
"github.com/nimbolus/terraform-backend/terraform/storage/filesystem"
"github.com/nimbolus/terraform-backend/terraform/storage/s3"
"github.com/spf13/viper"
)

type Storage interface {
GetName() string
SaveState(s *terraform.State) error
GetState(id string) (*terraform.State, error)
}

func GetStorage() (s Storage, err error) {
viper.SetDefault("storage_backend", "fs")
backend := viper.GetString("storage_backend")

switch backend {
case "fs":
viper.SetDefault("storage_fs_dir", "./states")
s, err = filesystem.NewFileSystemStorage(viper.GetString("storage_fs_dir"))
case "s3":
viper.SetDefault("storage_s3_endpoint", "s3.amazonaws.com")
viper.SetDefault("storage_s3_use_ssl", true)
viper.SetDefault("storage_s3_access_key", "access-key-id")
viper.SetDefault("storage_s3_secret_key", "secret-access-key")
viper.SetDefault("storage_s3_bucket", "terraform-state")

endpoint := viper.GetString("storage_s3_endpoint")
useSSL := viper.GetBool("storage_s3_use_ssl")
accessKey := viper.GetString("storage_s3_access_key")
secretKey := viper.GetString("storage_s3_secret_key")
bucket := viper.GetString("storage_s3_bucket")

s, err = s3.NewS3Storage(endpoint, bucket, accessKey, secretKey, useSSL)
default:
err = fmt.Errorf("backend is not implemented")
}
if err != nil {
return nil, fmt.Errorf("failed to initialize storage backend %s: %v", backend, err)
}
return
}
47 changes: 0 additions & 47 deletions terraform/store/store.go

This file was deleted.

0 comments on commit 3421c18

Please sign in to comment.