1
0
mirror of https://github.com/raseels-repos/golang-saas-starter-kit.git synced 2025-08-08 22:36:41 +02:00

fix listing ecr images

This commit is contained in:
Lee Brown
2019-08-21 17:32:51 -08:00
parent d0b44f21d7
commit 3999f30232
5 changed files with 117 additions and 67 deletions

View File

@ -3,6 +3,7 @@ package config
import ( import (
"context" "context"
"fmt" "fmt"
"geeks-accelerator/oss/saas-starter-kit/internal/platform/web/webcontext"
"log" "log"
"os" "os"
"path/filepath" "path/filepath"
@ -33,13 +34,13 @@ const (
type Env = string type Env = string
var ( var (
EnvDev Env = "dev" EnvDev Env = webcontext.Env_Dev
EnvStage Env = "stage" EnvStage Env = webcontext.Env_Stage
EnvProd Env = "prod" EnvProd Env = webcontext.Env_Prod
) )
// List of env names used by main.go for help. // List of env names used by main.go for help.
var EnvNames = []Function{ var EnvNames = []Env{
EnvDev, EnvDev,
EnvStage, EnvStage,
EnvProd, EnvProd,

2
go.mod
View File

@ -38,7 +38,7 @@ require (
github.com/tinylib/msgp v1.1.0 // indirect github.com/tinylib/msgp v1.1.0 // indirect
github.com/urfave/cli v1.21.0 github.com/urfave/cli v1.21.0
github.com/xwb1989/sqlparser v0.0.0-20180606152119-120387863bf2 github.com/xwb1989/sqlparser v0.0.0-20180606152119-120387863bf2
gitlab.com/geeks-accelerator/oss/devops v1.0.0 gitlab.com/geeks-accelerator/oss/devops v1.0.2
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 // indirect golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 // indirect

2
go.sum
View File

@ -311,6 +311,8 @@ gitlab.com/geeks-accelerator/oss/devops v0.0.0-20190822001238-2bc33b036611 h1:uv
gitlab.com/geeks-accelerator/oss/devops v0.0.0-20190822001238-2bc33b036611/go.mod h1:rvI71qNJyNiO99ZgGnv/PmJCVrjJjupsXBmfYFXdjGM= gitlab.com/geeks-accelerator/oss/devops v0.0.0-20190822001238-2bc33b036611/go.mod h1:rvI71qNJyNiO99ZgGnv/PmJCVrjJjupsXBmfYFXdjGM=
gitlab.com/geeks-accelerator/oss/devops v1.0.0 h1:5XMS1NO34ZJbrSN8/yOwukCP9NeuDY1JLMyWr5bwzng= gitlab.com/geeks-accelerator/oss/devops v1.0.0 h1:5XMS1NO34ZJbrSN8/yOwukCP9NeuDY1JLMyWr5bwzng=
gitlab.com/geeks-accelerator/oss/devops v1.0.0/go.mod h1:rvI71qNJyNiO99ZgGnv/PmJCVrjJjupsXBmfYFXdjGM= gitlab.com/geeks-accelerator/oss/devops v1.0.0/go.mod h1:rvI71qNJyNiO99ZgGnv/PmJCVrjJjupsXBmfYFXdjGM=
gitlab.com/geeks-accelerator/oss/devops v1.0.2 h1:LqME1zTc9bgB+J/tw7tv1WDjvgmrgl2OZdKcRToleqg=
gitlab.com/geeks-accelerator/oss/devops v1.0.2/go.mod h1:rvI71qNJyNiO99ZgGnv/PmJCVrjJjupsXBmfYFXdjGM=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=

View File

@ -45,6 +45,13 @@ var (
Env_Prod Env = "prod" Env_Prod Env = "prod"
) )
// List of env names.
var EnvNames = []Env{
Env_Dev,
Env_Stage,
Env_Prod,
}
func ContextEnv(ctx context.Context) string { func ContextEnv(ctx context.Context) string {
cv := ctx.Value(KeyValues).(*Values) cv := ctx.Value(KeyValues).(*Values)
if cv != nil { if cv != nil {

View File

@ -2,26 +2,22 @@ package main
import ( import (
"context" "context"
"encoding/json" "fmt"
"expvar"
"geeks-accelerator/oss/saas-starter-kit/internal/platform/web/webcontext"
"log" "log"
"net/url" "net/url"
"os" "os"
"strings"
"time" "time"
"geeks-accelerator/oss/saas-starter-kit/internal/platform/flag" "github.com/urfave/cli"
"geeks-accelerator/oss/saas-starter-kit/internal/platform/web/webcontext"
"geeks-accelerator/oss/saas-starter-kit/internal/schema" "geeks-accelerator/oss/saas-starter-kit/internal/schema"
"github.com/kelseyhightower/envconfig"
"github.com/lib/pq" "github.com/lib/pq"
_ "github.com/lib/pq" _ "github.com/lib/pq"
sqltrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql" sqltrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql"
sqlxtrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/jmoiron/sqlx" sqlxtrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/jmoiron/sqlx"
) )
// build is the git version of this program. It is set using build flags in the makefile.
var build = "develop"
// service is the name of the program used for logging, tracing and the // service is the name of the program used for logging, tracing and the
// the prefix used for loading env variables // the prefix used for loading env variables
// ie: export SCHEMA_ENV=dev // ie: export SCHEMA_ENV=dev
@ -38,57 +34,101 @@ type DB struct {
} }
func main() { func main() {
// ========================================================================= // =========================================================================
// Logging // Logging
log.SetFlags(log.LstdFlags | log.Lmicroseconds | log.Lshortfile)
log := log.New(os.Stdout, service+" : ", log.LstdFlags|log.Lmicroseconds|log.Lshortfile) log.SetPrefix(service + " : ")
log := log.New(os.Stdout, log.Prefix(), log.Flags())
// ========================================================================= // =========================================================================
// Configuration // New CLI application.
var cfg struct { app := cli.NewApp()
Env string `default:"dev" envconfig:"ENV"` app.Name = "schema"
DB struct { app.Version = "1.0.0"
Host string `default:"127.0.0.1:5433" envconfig:"HOST"` app.Author = "Lee Brown"
User string `default:"postgres" envconfig:"USER"` app.Email = "lee@geeksinthewoods.com"
Pass string `default:"postgres" envconfig:"PASS" json:"-"` // don't print
Database string `default:"shared" envconfig:"DATABASE"`
Driver string `default:"postgres" envconfig:"DRIVER"`
Timezone string `default:"utc" envconfig:"TIMEZONE"`
DisableTLS bool `default:"true" envconfig:"DISABLE_TLS"`
}
}
// For additional details refer to https://github.com/kelseyhightower/envconfig app.Commands = []cli.Command{
if err := envconfig.Process(service, &cfg); err != nil {
log.Fatalf("main : Parsing Config : %v", err)
}
if err := flag.Process(&cfg); err != nil {
if err != flag.ErrHelp {
log.Fatalf("main : Parsing Command Line : %v", err)
}
return // We displayed help.
}
// =========================================================================
// Log App Info
// Print the build version for our logs. Also expose it under /debug/vars.
expvar.NewString("build").Set(build)
log.Printf("main : Started : Application Initializing version %q", build)
defer log.Println("main : Completed")
// Print the config for our logs. It's important to any credentials in the config
// that could expose a security risk are excluded from being json encoded by
// applying the tag `json:"-"` to the struct var.
{ {
cfgJSON, err := json.MarshalIndent(cfg, "", " ") Name: "migrate",
if err != nil { Aliases: []string{"m"},
log.Fatalf("main : Marshalling Config to JSON : %v", err) Usage: "run schema migration",
} Flags: []cli.Flag{
log.Printf("main : Config : %v\n", string(cfgJSON)) cli.StringFlag{
Name: "env",
Usage: fmt.Sprintf("target environment, one of [%s]",
strings.Join(webcontext.EnvNames, ", ")),
Required: true,
EnvVar: "ENV",
},
cli.StringFlag{
Name: "host",
Usage: "host",
Required: true,
Value:"127.0.0.1:5433",
EnvVar: "SCHEMA_DB_HOST",
},
cli.StringFlag{
Name: "user",
Usage: "username",
Required: true,
Value: "postgres",
EnvVar: "SCHEMA_DB_USER",
},
cli.StringFlag{
Name: "pass",
Usage: "password",
Required: true,
Value: "postgres",
EnvVar: "SCHEMA_DB_PASS",
},
cli.StringFlag{
Name: "database",
Usage: "name of the default",
Required: true,
Value: "shared",
EnvVar: "SCHEMA_DB_DATABASE",
},
cli.StringFlag{
Name: "driver",
Usage: "database drive to use for connection",
Required: true,
Value: "postgres",
EnvVar: "SCHEMA_DB_DRIVER",
},
cli.BoolTFlag{
Name: "disable-tls",
Usage: "disable TLS for the database connection",
EnvVar: "SCHEMA_DB_DISABLE_TLS",
},
},
Action: func(c *cli.Context) error {
targetEnv := c.String("env")
var dbInfo = DB {
Host : c.String("host"),
User : c.String("user"),
Pass : c.String("pass"),
Database : c.String("database"),
Driver : c.String("driver"),
DisableTLS: c.Bool("disable-tls"),
} }
return runMigrate(log, targetEnv, dbInfo)
},
},
}
err := app.Run(os.Args)
if err != nil {
log.Fatalf("%+v", err)
}
}
// runMigrate executes the schema migration against the provided database connection details.
func runMigrate(log *log.Logger, targetEnv string, dbInfo DB) error {
// ========================================================================= // =========================================================================
// Start Database // Start Database
var dbUrl url.URL var dbUrl url.URL
@ -97,20 +137,18 @@ func main() {
var q url.Values = make(map[string][]string) var q url.Values = make(map[string][]string)
// Handle SSL Mode // Handle SSL Mode
if cfg.DB.DisableTLS { if dbInfo.DisableTLS {
q.Set("sslmode", "disable") q.Set("sslmode", "disable")
} else { } else {
q.Set("sslmode", "require") q.Set("sslmode", "require")
} }
q.Set("timezone", cfg.DB.Timezone)
// Construct url. // Construct url.
dbUrl = url.URL{ dbUrl = url.URL{
Scheme: cfg.DB.Driver, Scheme: dbInfo.Driver,
User: url.UserPassword(cfg.DB.User, cfg.DB.Pass), User: url.UserPassword(dbInfo.User, dbInfo.Pass),
Host: cfg.DB.Host, Host: dbInfo.Host,
Path: cfg.DB.Database, Path: dbInfo.Database,
RawQuery: q.Encode(), RawQuery: q.Encode(),
} }
} }
@ -118,10 +156,10 @@ func main() {
// Register informs the sqlxtrace package of the driver that we will be using in our program. // Register informs the sqlxtrace package of the driver that we will be using in our program.
// It uses a default service name, in the below case "postgres.db". To use a custom service // It uses a default service name, in the below case "postgres.db". To use a custom service
// name use RegisterWithServiceName. // name use RegisterWithServiceName.
sqltrace.Register(cfg.DB.Driver, &pq.Driver{}, sqltrace.WithServiceName(service)) sqltrace.Register(dbInfo.Driver, &pq.Driver{}, sqltrace.WithServiceName(service))
masterDb, err := sqlxtrace.Open(cfg.DB.Driver, dbUrl.String()) masterDb, err := sqlxtrace.Open(dbInfo.Driver, dbUrl.String())
if err != nil { if err != nil {
log.Fatalf("main : Register DB : %s : %v", cfg.DB.Driver, err) log.Fatalf("main : Register DB : %s : %v", dbInfo.Driver, err)
} }
defer masterDb.Close() defer masterDb.Close()
@ -132,13 +170,15 @@ func main() {
// process the request. // process the request.
v := webcontext.Values{ v := webcontext.Values{
Now: time.Now(), Now: time.Now(),
Env: cfg.Env, Env: targetEnv,
} }
ctx := context.WithValue(context.Background(), webcontext.KeyValues, &v) ctx := context.WithValue(context.Background(), webcontext.KeyValues, &v)
// Execute the migrations // Execute the migrations
if err = schema.Migrate(ctx, masterDb, log, false); err != nil { if err = schema.Migrate(ctx, masterDb, log, false); err != nil {
log.Fatalf("main : Migrate : %v", err) return err
} }
log.Printf("main : Migrate : Completed") log.Printf("main : Migrate : Completed")
return nil
} }