Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
controller.go 1.55 KiB
package nucleus

import (
	"code.fbi.h-da.de/cocsn/gosdn/database"
	"code.fbi.h-da.de/cocsn/gosdn/log"
	"code.fbi.h-da.de/cocsn/gosdn/nucleus/interfaces"
	"code.fbi.h-da.de/cocsn/gosdn/restconf/client/ciena"
	"github.com/BurntSushi/toml"
	"os"
)

type controllerConfig struct {
	CliSocket        string
	DatabaseSocket   string
	DatabaseUser     string
	DatabasePassword string
	DatabaseCrypto   bool
	ConfigPath       string
}

type Core struct {
	//Assert type with clients[key].(*MCPClient)
	clients  map[string]interfaces.Client
	database database.Database
	config   controllerConfig
}

func (c *Core) Init(socket, configfile string) {
	if configfile == "" {
		configfile = "gosdn.toml"
	}
	_, err := os.Stat(configfile)
	if err != nil {
		log.Fatal("Config file is missing: ", configfile)
	}

	c.config = controllerConfig{}
	if _, err := toml.DecodeFile(configfile, &c.config); err != nil {
		log.Fatal(err)
	}
	if socket != "localhost:55055" {
		c.config.CliSocket = socket
	}
	if c.config.ConfigPath == "" {
		c.config.ConfigPath = configfile
	}

	c.AttachDatabase()

	//TODO: Create client config/CLI adapter
	c.clients["ciena-mcp"] = ciena.NewMCPClient( "141.100.70.170", "", "", &c.database)
}

func (c *Core) AttachDatabase() {
	c.database = database.NewDatabaseClient(c.config.DatabaseSocket, c.config.DatabaseUser, c.config.DatabasePassword, c.config.DatabaseCrypto)
}

func (c *Core) Shutdown() {
	f, err := os.Create(c.config.ConfigPath)
	if err != nil {
		log.Fatal(err)
	}
	enc := toml.NewEncoder(f)
	if err := enc.Encode(c.config); err != nil {
		log.Fatal(err)
	}
}