1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-08-02 20:35:25 +02:00

feat(endpoints): add the ability to define endpoints from an external source

This commit is contained in:
Anthony Lapenna 2017-02-06 18:29:34 +13:00
parent 10f7744a62
commit dc78ec5135
13 changed files with 416 additions and 67 deletions

View file

@ -4,6 +4,7 @@ import (
"github.com/portainer/portainer"
"github.com/portainer/portainer/bolt"
"github.com/portainer/portainer/cli"
"github.com/portainer/portainer/cron"
"github.com/portainer/portainer/crypto"
"github.com/portainer/portainer/file"
"github.com/portainer/portainer/http"
@ -24,12 +25,6 @@ func main() {
log.Fatal(err)
}
settings := &portainer.Settings{
HiddenLabels: *flags.Labels,
Logo: *flags.Logo,
Authentication: !*flags.NoAuth,
}
fileService, err := file.NewService(*flags.Data, "")
if err != nil {
log.Fatal(err)
@ -52,6 +47,25 @@ func main() {
var cryptoService portainer.CryptoService = &crypto.Service{}
var endpointWatcher portainer.EndpointWatcher
authorizeEndpointMgmt := true
if *flags.ExternalEndpoints != "" {
log.Println("Using external endpoint definition. Disabling endpoint management via API.")
authorizeEndpointMgmt = false
endpointWatcher = cron.NewWatcher(store.EndpointService, *flags.SyncInterval)
err = endpointWatcher.WatchEndpointFile(*flags.ExternalEndpoints)
if err != nil {
log.Fatal(err)
}
}
settings := &portainer.Settings{
HiddenLabels: *flags.Labels,
Logo: *flags.Logo,
Authentication: !*flags.NoAuth,
EndpointManagement: authorizeEndpointMgmt,
}
// Initialize the active endpoint from the CLI only if there is no
// active endpoint defined yet.
var activeEndpoint *portainer.Endpoint
@ -74,19 +88,36 @@ func main() {
log.Fatal(err)
}
}
if *flags.ExternalEndpoints != "" {
activeEndpoint, err = store.EndpointService.GetActive()
if err == portainer.ErrEndpointNotFound {
var endpoints []portainer.Endpoint
endpoints, err = store.EndpointService.Endpoints()
if err != nil {
log.Fatal(err)
}
err = store.EndpointService.SetActive(&endpoints[0])
if err != nil {
log.Fatal(err)
}
} else if err != nil {
log.Fatal(err)
}
}
var server portainer.Server = &http.Server{
BindAddress: *flags.Addr,
AssetsPath: *flags.Assets,
Settings: settings,
TemplatesURL: *flags.Templates,
AuthDisabled: *flags.NoAuth,
UserService: store.UserService,
EndpointService: store.EndpointService,
CryptoService: cryptoService,
JWTService: jwtService,
FileService: fileService,
ActiveEndpoint: activeEndpoint,
BindAddress: *flags.Addr,
AssetsPath: *flags.Assets,
Settings: settings,
TemplatesURL: *flags.Templates,
AuthDisabled: *flags.NoAuth,
EndpointManagement: authorizeEndpointMgmt,
UserService: store.UserService,
EndpointService: store.EndpointService,
CryptoService: cryptoService,
JWTService: jwtService,
FileService: fileService,
ActiveEndpoint: activeEndpoint,
}
log.Printf("Starting Portainer on %s", *flags.Addr)