Clean up/make consistent the APIs for registering core components, make Docker an optional component at compile time (#1111)

This commit is contained in:
Owen Cliffe
2018-07-07 10:37:19 +01:00
committed by GitHub
parent cc468afeec
commit fff95e7992
15 changed files with 62 additions and 20 deletions

View File

@@ -12,7 +12,6 @@ import (
"time" "time"
"github.com/fnproject/fn/api/agent/drivers" "github.com/fnproject/fn/api/agent/drivers"
"github.com/fnproject/fn/api/agent/drivers/docker"
"github.com/fnproject/fn/api/agent/protocol" "github.com/fnproject/fn/api/agent/protocol"
"github.com/fnproject/fn/api/common" "github.com/fnproject/fn/api/common"
"github.com/fnproject/fn/api/id" "github.com/fnproject/fn/api/id"
@@ -142,7 +141,11 @@ func New(da CallHandler, options ...AgentOption) Agent {
logrus.Infof("agent starting cfg=%+v", a.cfg) logrus.Infof("agent starting cfg=%+v", a.cfg)
if a.driver == nil { if a.driver == nil {
a.driver = NewDockerDriver(&a.cfg) d, err := NewDockerDriver(&a.cfg)
if err != nil {
logrus.WithError(err).Fatal("failed to create docker driver ")
}
a.driver = d
} }
a.resources = NewResourceTracker(&a.cfg) a.resources = NewResourceTracker(&a.cfg)
@@ -201,8 +204,8 @@ func WithCallOverrider(fn CallOverrider) AgentOption {
} }
// NewDockerDriver creates a default docker driver from agent config // NewDockerDriver creates a default docker driver from agent config
func NewDockerDriver(cfg *AgentConfig) *docker.DockerDriver { func NewDockerDriver(cfg *AgentConfig) (drivers.Driver, error) {
return docker.NewDocker(drivers.Config{ return drivers.New("docker", drivers.Config{
DockerNetworks: cfg.DockerNetworks, DockerNetworks: cfg.DockerNetworks,
ServerVersion: cfg.MinDockerVersion, ServerVersion: cfg.MinDockerVersion,
PreForkPoolSize: cfg.PreForkPoolSize, PreForkPoolSize: cfg.PreForkPoolSize,

View File

@@ -16,6 +16,7 @@ import (
"testing" "testing"
"time" "time"
_ "github.com/fnproject/fn/api/agent/drivers/docker"
"github.com/fnproject/fn/api/id" "github.com/fnproject/fn/api/id"
"github.com/fnproject/fn/api/logs" "github.com/fnproject/fn/api/logs"
"github.com/fnproject/fn/api/models" "github.com/fnproject/fn/api/models"

View File

@@ -646,3 +646,9 @@ func (w *waitResult) wait(ctx context.Context) (status string, err error) {
} }
var _ drivers.Driver = &DockerDriver{} var _ drivers.Driver = &DockerDriver{}
func init() {
drivers.Register("docker", func(config drivers.Config) (drivers.Driver, error) {
return NewDocker(config), nil
})
}

View File

@@ -0,0 +1,26 @@
package drivers
import (
"fmt"
"github.com/sirupsen/logrus"
)
type DriverFunc func(config Config) (Driver, error)
var drivers = make(map[string]DriverFunc)
// Register adds a container driver by name to this process
func Register(name string, driverFunc DriverFunc) {
logrus.Infof("Registering container driver '%s'", name)
drivers[name] = driverFunc
}
// New Instantiates a driver by name
func New(driverName string, config Config) (Driver, error) {
driverFunc, ok := drivers[driverName]
if !ok {
return nil, fmt.Errorf("agent driver \"%s\" is not registered", driverName)
}
return driverFunc(config)
}

View File

@@ -44,8 +44,8 @@ type Provider interface {
var providers []Provider var providers []Provider
// AddProvider globally registers a data store provider // Register globally registers a data store provider
func AddProvider(provider Provider) { func Register(provider Provider) {
logrus.Infof("Adding DataStore provider %s", provider) logrus.Infof("Registering data store provider '%s'", provider)
providers = append(providers, provider) providers = append(providers, provider)
} }

View File

@@ -10,9 +10,9 @@ import (
var sqlHelpers []Helper var sqlHelpers []Helper
//Add registers a new SQL helper //Register registers a new SQL helper
func Add(helper Helper) { func Register(helper Helper) {
logrus.Infof("Registering DB helper %s", helper) logrus.Infof("Registering sql helper '%s'", helper)
sqlHelpers = append(sqlHelpers, helper) sqlHelpers = append(sqlHelpers, helper)
} }

View File

@@ -57,5 +57,5 @@ func (mysqlHelper) IsDuplicateKeyError(err error) bool {
} }
func init() { func init() {
dbhelper.Add(mysqlHelper(0)) dbhelper.Register(mysqlHelper(0))
} }

View File

@@ -59,5 +59,5 @@ func (postgresHelper) IsDuplicateKeyError(err error) bool {
} }
func init() { func init() {
dbhelper.Add(postgresHelper(0)) dbhelper.Register(postgresHelper(0))
} }

View File

@@ -1443,6 +1443,6 @@ func (ds *SQLStore) Close() error {
} }
func init() { func init() {
datastore.AddProvider(sqlDsProvider(0)) datastore.Register(sqlDsProvider(0))
logs.AddProvider(sqlLogsProvider(0)) logs.Register(sqlLogsProvider(0))
} }

View File

@@ -70,5 +70,5 @@ func (sqliteHelper) IsDuplicateKeyError(err error) bool {
} }
func init() { func init() {
dbhelper.Add(sqliteHelper(0)) dbhelper.Register(sqliteHelper(0))
} }

View File

@@ -24,9 +24,9 @@ type Provider interface {
var providers []Provider var providers []Provider
// AddProvider globally registers a new LogStore provider // Register globally registers a new LogStore provider
func AddProvider(pf Provider) { func Register(pf Provider) {
logrus.Infof("Adding log provider %s", pf) logrus.Infof("Registering log provider '%s'", pf)
providers = append(providers, pf) providers = append(providers, pf)
} }

View File

@@ -469,5 +469,5 @@ func makeKeys(names []string) []tag.Key {
} }
func init() { func init() {
logs.AddProvider(s3StoreProvider(0)) logs.Register(s3StoreProvider(0))
} }

View File

@@ -5,6 +5,7 @@ package defaultexts
import ( import (
// import all datastore/log/mq modules for runtime config // import all datastore/log/mq modules for runtime config
_ "github.com/fnproject/fn/api/agent/drivers/docker"
_ "github.com/fnproject/fn/api/datastore/sql" _ "github.com/fnproject/fn/api/datastore/sql"
_ "github.com/fnproject/fn/api/datastore/sql/mysql" _ "github.com/fnproject/fn/api/datastore/sql/mysql"
_ "github.com/fnproject/fn/api/datastore/sql/postgres" _ "github.com/fnproject/fn/api/datastore/sql/postgres"

View File

@@ -13,6 +13,7 @@ import (
"testing" "testing"
"github.com/fnproject/fn/api/agent" "github.com/fnproject/fn/api/agent"
_ "github.com/fnproject/fn/api/agent/drivers/docker"
"github.com/fnproject/fn/api/datastore" "github.com/fnproject/fn/api/datastore"
"github.com/fnproject/fn/api/datastore/sql" "github.com/fnproject/fn/api/datastore/sql"
_ "github.com/fnproject/fn/api/datastore/sql/sqlite" _ "github.com/fnproject/fn/api/datastore/sql/sqlite"

View File

@@ -259,8 +259,12 @@ func SetUpPureRunnerNode(ctx context.Context, nodeNum int) (*server.Server, erro
} }
// customer driver that overrides generic docker driver // customer driver that overrides generic docker driver
d, err := agent.NewDockerDriver(cfg)
if err != nil {
return nil, err
}
drv := &customDriver{ drv := &customDriver{
drv: agent.NewDockerDriver(cfg), drv: d,
} }
// inner agent for pure-runners // inner agent for pure-runners