isle/go/cmd/entrypoint/daemon_util.go

66 lines
1.5 KiB
Go
Raw Normal View History

package main
import (
"context"
"isle/bootstrap"
"isle/daemon"
"isle/garage"
"fmt"
"time"
)
func coalesceDaemonConfigAndBootstrap(
2022-10-26 22:23:39 +00:00
hostBootstrap bootstrap.Bootstrap,
daemonConfig daemon.Config,
) (
bootstrap.Bootstrap, daemon.Config, error,
) {
host := bootstrap.Host{
Name: hostBootstrap.HostName,
Nebula: bootstrap.NebulaHost{
SignedPublicCredentials: hostBootstrap.Nebula.SignedPublicCredentials,
PublicAddr: daemonConfig.VPN.PublicAddr,
},
}
if allocs := daemonConfig.Storage.Allocations; len(allocs) > 0 {
for i, alloc := range allocs {
id, rpcPort, err := garage.InitAlloc(alloc.MetaPath, alloc.RPCPort)
if err != nil {
return bootstrap.Bootstrap{}, daemon.Config{}, fmt.Errorf("initializing alloc at %q: %w", alloc.MetaPath, err)
}
host.Garage.Instances = append(host.Garage.Instances, bootstrap.GarageHostInstance{
ID: id,
RPCPort: rpcPort,
S3APIPort: alloc.S3APIPort,
})
allocs[i].RPCPort = rpcPort
}
}
2022-10-26 22:23:39 +00:00
hostBootstrap.Hosts[host.Name] = host
2022-10-26 22:37:03 +00:00
if err := writeBootstrapToDataDir(hostBootstrap); err != nil {
return bootstrap.Bootstrap{}, daemon.Config{}, fmt.Errorf("writing bootstrap file: %w", err)
}
return hostBootstrap, daemonConfig, nil
}
func doOnce(ctx context.Context, fn func(context.Context) error) error {
for {
if err := fn(ctx); err == nil {
return nil
} else if ctxErr := ctx.Err(); ctxErr != nil {
return ctxErr
}
time.Sleep(1 * time.Second)
}
}