diff --git a/cmd/daemon.go b/cmd/daemon.go index 4398cc7..1577f85 100644 --- a/cmd/daemon.go +++ b/cmd/daemon.go @@ -25,7 +25,7 @@ func (c *DaemonCmd) Run(args []string) int { var debug bool cmdFlags := flag.NewFlagSet("event", flag.ExitOnError) cmdFlags.StringVar(&port, "port", ":8000", "port") - cmdFlags.StringVar(&configPath, "config", "/etc/deamon.yml", "config") + cmdFlags.StringVar(&configPath, "config", "", "config") cmdFlags.BoolVar(&debug, "debug", false, "debug") if err := cmdFlags.Parse(args); err != nil { logrus.WithField("error", err).Warn("Problem to parse arguments.") @@ -35,15 +35,22 @@ func (c *DaemonCmd) Run(args []string) int { logrus.SetLevel(logrus.DebugLevel) logrus.Debug("Daemon started in debug mode") } - config, err := readConfiguration(configPath) - if err != nil { - logrus.WithField("error", err).Warn("Configuration file malformed.") - return 1 - } - core, err := core.NewCore(config.AutoscalersConf) - if err != nil { - logrus.WithField("error", err).Warn(err) - return 1 + var coreEngine core.Core + if configPath != "" { + config, err := readConfiguration(configPath) + if err != nil { + logrus.WithField("error", err).Warn("Configuration file malformed.") + return 1 + } + logrus.Infof("Starting from configuration file located %s", configPath) + coreEngine, err = core.NewCoreByConfig(config.AutoscalersConf) + if err != nil { + logrus.WithField("error", err).Warn(err) + return 1 + } + } else { + logrus.Info("Starting in auto-detection mode.") + coreEngine, err = core.Autodetect() } go func() { sigchan := make(chan os.Signal, 10) @@ -52,7 +59,7 @@ func (c *DaemonCmd) Run(args []string) int { logrus.Info("Stopping and cleaning. Bye!") os.Exit(0) }() - router := api.GetRouter(core, c.EventChannel) + router := api.GetRouter(coreEngine, c.EventChannel) logrus.Infof("API Server run on port %s", port) http.ListenAndServe(port, router) return 0 diff --git a/core/autodetect.go b/core/autodetect.go new file mode 100644 index 0000000..d719629 --- /dev/null +++ b/core/autodetect.go @@ -0,0 +1,21 @@ +package core + +import "github.com/gianarb/orbiter/autoscaler" + +// This function use diferent strategies to get information from +// the system itself to configure the autoloader. +// They can be environment variables for example or other systems. +func Autodetect() (Core error) { + scalers := autoscaler.Autoscalers{} + var core Core + autoDetectSwarmMode(&scalers) + return core, nil +} + +func autoDetectSwarmMode(a *autoscaler.Autoscalers) { + // Create Docker Client by EnvVar and check if it's working. + + // Get List of Services + + // Check which services has labels and register them to orbiter. +} diff --git a/core/daemon.go b/core/daemon.go index 1fefe66..cf3b750 100644 --- a/core/daemon.go +++ b/core/daemon.go @@ -11,7 +11,7 @@ type Core struct { Autoscalers autoscaler.Autoscalers } -func NewCore(c map[string]AutoscalerConf) (Core, error) { +func NewCoreByConfig(c map[string]AutoscalerConf) (Core, error) { scalers := autoscaler.Autoscalers{} var core Core for scalerName, scaler := range c { diff --git a/core/daemon_test.go b/core/daemon_test.go index 5a588d1..c4f824f 100644 --- a/core/daemon_test.go +++ b/core/daemon_test.go @@ -29,7 +29,7 @@ func TestNewCore(t *testing.T) { }, }, } - core, err := NewCore(conf) + core, err := NewCoreByConfig(conf) if err != nil { t.Fatal(err) } @@ -55,7 +55,7 @@ func TestGetSingleAutoscaler(t *testing.T) { }, }, } - core, _ := NewCore(conf) + core, _ := NewCoreByConfig(conf) _, ok := core.Autoscalers["second/micro"] if ok == false { t.Fatal("micro exist") @@ -89,7 +89,7 @@ func TestNewCoreWithUnsupportedProvider(t *testing.T) { }, }, } - _, err := NewCore(conf) + _, err := NewCoreByConfig(conf) if err.Error() != "lalala not supported." { t.Fatal(err) }