//go:build linux package host import ( "context" "github.com/carlosframework/platform/internal/controlsock" "github.com/carlosframework/platform/internal/hostbox" "github.com/carlosframework/platform/internal/hostclaim" "github.com/carlosframework/platform/internal/hostwrite" "github.com/carlosframework/platform/internal/provision" "github.com/carlosframework/platform/internal/registry" ) type claimTokenWork struct { tokens claimAdminTokens host string } func (w claimTokenWork) With(ctx context.Context, _ hostwrite.Identity, effect func() error) error { return w.tokens.With(ctx, w.host, effect) } func (t claimAdminTokens) prepareState(ctx context.Context, route registry.Route) error { if route.DBPath != provision.NestedDBPath(t.Guard.DataDir, route.Host) { return hostbox.ErrChanged } call := rootJournalClient(controlsock.Path) _, inventory := hostbox.RemoteJournals(call) defer inventory.Close() t.Guard.FenceView = rootFenceViewClient(call) observed, err := hostclaim.Read(ctx, t.Claims, route.Host) if err != nil { return err } actor, err := t.Verify(ctx) if err != nil { return err } a := &ClaimRoleAssembly{Claims: t.Claims, Guard: t.Guard, Inventory: inventory, ManagedRoots: map[string]string{"data": t.Guard.DataDir}} return a.prepareStateRemote(ctx, observed, claimTokenWork{t, route.Host}, ClaimLaunchInputs{DBPath: route.DBPath}, actor) }