cmd/dex: add logging config and serve logger for different modules.
This commit is contained in:
@@ -21,6 +21,7 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/Sirupsen/logrus"
|
||||
"github.com/ghodss/yaml"
|
||||
"github.com/gtank/cryptopasta"
|
||||
"golang.org/x/net/context"
|
||||
@@ -33,6 +34,7 @@ type client struct {
|
||||
client *http.Client
|
||||
baseURL string
|
||||
namespace string
|
||||
logger logrus.FieldLogger
|
||||
|
||||
// Hash function to map IDs (which could span a large range) to Kubernetes names.
|
||||
// While this is not currently upgradable, it could be in the future.
|
||||
@@ -230,7 +232,7 @@ func (c *client) put(resource, name string, v interface{}) error {
|
||||
return checkHTTPErr(resp, http.StatusOK)
|
||||
}
|
||||
|
||||
func newClient(cluster k8sapi.Cluster, user k8sapi.AuthInfo, namespace string) (*client, error) {
|
||||
func newClient(cluster k8sapi.Cluster, user k8sapi.AuthInfo, namespace string, logger logrus.FieldLogger) (*client, error) {
|
||||
tlsConfig := cryptopasta.DefaultTLSConfig()
|
||||
data := func(b string, file string) ([]byte, error) {
|
||||
if b != "" {
|
||||
@@ -303,6 +305,7 @@ func newClient(cluster k8sapi.Cluster, user k8sapi.AuthInfo, namespace string) (
|
||||
hash: func() hash.Hash { return fnv.New64() },
|
||||
namespace: namespace,
|
||||
apiVersion: "oidc.coreos.com/v1",
|
||||
logger: logger,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
@@ -10,6 +10,7 @@ import (
|
||||
|
||||
"golang.org/x/net/context"
|
||||
|
||||
"github.com/Sirupsen/logrus"
|
||||
"github.com/coreos/dex/storage"
|
||||
"github.com/coreos/dex/storage/kubernetes/k8sapi"
|
||||
)
|
||||
@@ -39,8 +40,8 @@ type Config struct {
|
||||
}
|
||||
|
||||
// Open returns a storage using Kubernetes third party resource.
|
||||
func (c *Config) Open() (storage.Storage, error) {
|
||||
cli, err := c.open()
|
||||
func (c *Config) Open(logger logrus.FieldLogger) (storage.Storage, error) {
|
||||
cli, err := c.open(logger)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -48,7 +49,7 @@ func (c *Config) Open() (storage.Storage, error) {
|
||||
}
|
||||
|
||||
// open returns a client with no garbage collection.
|
||||
func (c *Config) open() (*client, error) {
|
||||
func (c *Config) open(logger logrus.FieldLogger) (*client, error) {
|
||||
if c.InCluster && (c.KubeConfigFile != "") {
|
||||
return nil, errors.New("cannot specify both 'inCluster' and 'kubeConfigFile'")
|
||||
}
|
||||
@@ -71,7 +72,7 @@ func (c *Config) open() (*client, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
cli, err := newClient(cluster, user, namespace)
|
||||
cli, err := newClient(cluster, user, namespace, logger)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("create client: %v", err)
|
||||
}
|
||||
|
@@ -5,6 +5,7 @@ import (
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/Sirupsen/logrus"
|
||||
"github.com/coreos/dex/storage"
|
||||
"github.com/coreos/dex/storage/conformance"
|
||||
)
|
||||
@@ -22,7 +23,12 @@ func loadClient(t *testing.T) *client {
|
||||
if config.KubeConfigFile == "" {
|
||||
t.Skipf("test environment variable %q not set, skipping", testKubeConfigEnv)
|
||||
}
|
||||
s, err := config.open()
|
||||
logger := &logrus.Logger{
|
||||
Out: os.Stderr,
|
||||
Formatter: &logrus.TextFormatter{DisableColors: true},
|
||||
Level: logrus.DebugLevel,
|
||||
}
|
||||
s, err := config.open(logger)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
@@ -6,17 +6,19 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/Sirupsen/logrus"
|
||||
"github.com/coreos/dex/storage"
|
||||
)
|
||||
|
||||
// New returns an in memory storage.
|
||||
func New() storage.Storage {
|
||||
func New(logger logrus.FieldLogger) storage.Storage {
|
||||
return &memStorage{
|
||||
clients: make(map[string]storage.Client),
|
||||
authCodes: make(map[string]storage.AuthCode),
|
||||
refreshTokens: make(map[string]storage.RefreshToken),
|
||||
authReqs: make(map[string]storage.AuthRequest),
|
||||
passwords: make(map[string]storage.Password),
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,8 +30,8 @@ type Config struct {
|
||||
}
|
||||
|
||||
// Open always returns a new in memory storage.
|
||||
func (c *Config) Open() (storage.Storage, error) {
|
||||
return New(), nil
|
||||
func (c *Config) Open(logger logrus.FieldLogger) (storage.Storage, error) {
|
||||
return New(logger), nil
|
||||
}
|
||||
|
||||
type memStorage struct {
|
||||
@@ -42,6 +44,8 @@ type memStorage struct {
|
||||
passwords map[string]storage.Password
|
||||
|
||||
keys storage.Keys
|
||||
|
||||
logger logrus.FieldLogger
|
||||
}
|
||||
|
||||
func (s *memStorage) tx(f func()) {
|
||||
|
@@ -1,11 +1,23 @@
|
||||
package memory
|
||||
|
||||
import (
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/Sirupsen/logrus"
|
||||
"github.com/coreos/dex/storage"
|
||||
"github.com/coreos/dex/storage/conformance"
|
||||
)
|
||||
|
||||
func TestStorage(t *testing.T) {
|
||||
conformance.RunTests(t, New)
|
||||
logger := &logrus.Logger{
|
||||
Out: os.Stderr,
|
||||
Formatter: &logrus.TextFormatter{DisableColors: true},
|
||||
Level: logrus.DebugLevel,
|
||||
}
|
||||
|
||||
newStorage := func() storage.Storage {
|
||||
return New(logger)
|
||||
}
|
||||
conformance.RunTests(t, newStorage)
|
||||
}
|
||||
|
@@ -1,14 +1,21 @@
|
||||
package memory
|
||||
|
||||
import (
|
||||
"os"
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"github.com/Sirupsen/logrus"
|
||||
"github.com/coreos/dex/storage"
|
||||
)
|
||||
|
||||
func TestStaticClients(t *testing.T) {
|
||||
s := New()
|
||||
logger := &logrus.Logger{
|
||||
Out: os.Stderr,
|
||||
Formatter: &logrus.TextFormatter{DisableColors: true},
|
||||
Level: logrus.DebugLevel,
|
||||
}
|
||||
s := New(logger)
|
||||
|
||||
c1 := storage.Client{ID: "foo", Secret: "foo_secret"}
|
||||
c2 := storage.Client{ID: "bar", Secret: "bar_secret"}
|
||||
|
@@ -6,6 +6,7 @@ import (
|
||||
"net/url"
|
||||
"strconv"
|
||||
|
||||
"github.com/Sirupsen/logrus"
|
||||
"github.com/coreos/dex/storage"
|
||||
)
|
||||
|
||||
@@ -16,15 +17,15 @@ type SQLite3 struct {
|
||||
}
|
||||
|
||||
// Open creates a new storage implementation backed by SQLite3
|
||||
func (s *SQLite3) Open() (storage.Storage, error) {
|
||||
conn, err := s.open()
|
||||
func (s *SQLite3) Open(logger logrus.FieldLogger) (storage.Storage, error) {
|
||||
conn, err := s.open(logger)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return conn, nil
|
||||
}
|
||||
|
||||
func (s *SQLite3) open() (*conn, error) {
|
||||
func (s *SQLite3) open(logger logrus.FieldLogger) (*conn, error) {
|
||||
db, err := sql.Open("sqlite3", s.File)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -34,7 +35,7 @@ func (s *SQLite3) open() (*conn, error) {
|
||||
// doesn't support this, so limit the number of connections to 1.
|
||||
db.SetMaxOpenConns(1)
|
||||
}
|
||||
c := &conn{db, flavorSQLite3}
|
||||
c := &conn{db, flavorSQLite3, logger}
|
||||
if _, err := c.migrate(); err != nil {
|
||||
return nil, fmt.Errorf("failed to perform migrations: %v", err)
|
||||
}
|
||||
@@ -70,15 +71,15 @@ type Postgres struct {
|
||||
}
|
||||
|
||||
// Open creates a new storage implementation backed by Postgres.
|
||||
func (p *Postgres) Open() (storage.Storage, error) {
|
||||
conn, err := p.open()
|
||||
func (p *Postgres) Open(logger logrus.FieldLogger) (storage.Storage, error) {
|
||||
conn, err := p.open(logger)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return conn, nil
|
||||
}
|
||||
|
||||
func (p *Postgres) open() (*conn, error) {
|
||||
func (p *Postgres) open(logger logrus.FieldLogger) (*conn, error) {
|
||||
v := url.Values{}
|
||||
set := func(key, val string) {
|
||||
if val != "" {
|
||||
@@ -113,7 +114,7 @@ func (p *Postgres) open() (*conn, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
c := &conn{db, flavorPostgres}
|
||||
c := &conn{db, flavorPostgres, logger}
|
||||
if _, err := c.migrate(); err != nil {
|
||||
return nil, fmt.Errorf("failed to perform migrations: %v", err)
|
||||
}
|
||||
|
@@ -7,6 +7,7 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/Sirupsen/logrus"
|
||||
"github.com/coreos/dex/storage"
|
||||
"github.com/coreos/dex/storage/conformance"
|
||||
)
|
||||
@@ -41,13 +42,19 @@ func cleanDB(c *conn) error {
|
||||
return err
|
||||
}
|
||||
|
||||
var logger = &logrus.Logger{
|
||||
Out: os.Stderr,
|
||||
Formatter: &logrus.TextFormatter{DisableColors: true},
|
||||
Level: logrus.DebugLevel,
|
||||
}
|
||||
|
||||
func TestSQLite3(t *testing.T) {
|
||||
newStorage := func() storage.Storage {
|
||||
// NOTE(ericchiang): In memory means we only get one connection at a time. If we
|
||||
// ever write tests that require using multiple connections, for instance to test
|
||||
// transactions, we need to move to a file based system.
|
||||
s := &SQLite3{":memory:"}
|
||||
conn, err := s.open()
|
||||
conn, err := s.open(logger)
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stdout, err)
|
||||
t.Fatal(err)
|
||||
@@ -92,7 +99,7 @@ func TestPostgres(t *testing.T) {
|
||||
}
|
||||
|
||||
newStorage := func() storage.Storage {
|
||||
conn, err := p.open()
|
||||
conn, err := p.open(logger)
|
||||
if err != nil {
|
||||
fatal(err)
|
||||
}
|
||||
|
@@ -2,7 +2,10 @@ package sql
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/Sirupsen/logrus"
|
||||
)
|
||||
|
||||
func TestMigrate(t *testing.T) {
|
||||
@@ -12,7 +15,13 @@ func TestMigrate(t *testing.T) {
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
c := &conn{db, flavorSQLite3}
|
||||
logger := &logrus.Logger{
|
||||
Out: os.Stderr,
|
||||
Formatter: &logrus.TextFormatter{DisableColors: true},
|
||||
Level: logrus.DebugLevel,
|
||||
}
|
||||
|
||||
c := &conn{db, flavorSQLite3, logger}
|
||||
for _, want := range []int{len(migrations), 0} {
|
||||
got, err := c.migrate()
|
||||
if err != nil {
|
||||
|
@@ -5,6 +5,7 @@ import (
|
||||
"database/sql"
|
||||
"regexp"
|
||||
|
||||
"github.com/Sirupsen/logrus"
|
||||
"github.com/cockroachdb/cockroach-go/crdb"
|
||||
|
||||
// import third party drivers
|
||||
@@ -110,6 +111,7 @@ func (f flavor) translate(query string) string {
|
||||
type conn struct {
|
||||
db *sql.DB
|
||||
flavor flavor
|
||||
logger logrus.FieldLogger
|
||||
}
|
||||
|
||||
func (c *conn) Close() error {
|
||||
|
Reference in New Issue
Block a user