mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
Clean up/make consistent the APIs for registering core components, make Docker an optional component at compile time (#1111)
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
26
api/agent/drivers/register.go
Normal file
26
api/agent/drivers/register.go
Normal 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)
|
||||||
|
}
|
||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -57,5 +57,5 @@ func (mysqlHelper) IsDuplicateKeyError(err error) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
dbhelper.Add(mysqlHelper(0))
|
dbhelper.Register(mysqlHelper(0))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,5 +59,5 @@ func (postgresHelper) IsDuplicateKeyError(err error) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
dbhelper.Add(postgresHelper(0))
|
dbhelper.Register(postgresHelper(0))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,5 +70,5 @@ func (sqliteHelper) IsDuplicateKeyError(err error) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
dbhelper.Add(sqliteHelper(0))
|
dbhelper.Register(sqliteHelper(0))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -469,5 +469,5 @@ func makeKeys(names []string) []tag.Key {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
logs.AddProvider(s3StoreProvider(0))
|
logs.Register(s3StoreProvider(0))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user