diff --git a/go/cmd/entrypoint/admin.go b/go/cmd/entrypoint/admin.go index fde5936..7484e1f 100644 --- a/go/cmd/entrypoint/admin.go +++ b/go/cmd/entrypoint/admin.go @@ -104,12 +104,14 @@ var subCmdAdminCreateBootstrap = subCmd{ return fmt.Errorf("initializing bootstrap data: %w", err) } - hostBootstrap, err := loadHostBootstrap() + hostsRes, err := subCmdCtx.getHosts() if err != nil { - return fmt.Errorf("loading host bootstrap: %w", err) + return fmt.Errorf("getting hosts: %w", err) } - newHostBootstrap.Hosts = hostBootstrap.Hosts + for _, host := range hostsRes.Hosts { + newHostBootstrap.Hosts[host.Name] = host + } return newHostBootstrap.WriteTo(os.Stdout) }, diff --git a/go/cmd/entrypoint/client.go b/go/cmd/entrypoint/client.go new file mode 100644 index 0000000..d37e4a5 --- /dev/null +++ b/go/cmd/entrypoint/client.go @@ -0,0 +1,15 @@ +package main + +import ( + "fmt" + "isle/daemon" +) + +func (ctx subCmdCtx) getHosts() (daemon.GetHostsResult, error) { + var res daemon.GetHostsResult + err := ctx.daemonRCPClient.Call(ctx.ctx, &res, "GetHosts", nil) + if err != nil { + return daemon.GetHostsResult{}, fmt.Errorf("calling GetHosts: %w", err) + } + return res, nil +} diff --git a/go/cmd/entrypoint/hosts.go b/go/cmd/entrypoint/hosts.go index 5bb016c..367bdee 100644 --- a/go/cmd/entrypoint/hosts.go +++ b/go/cmd/entrypoint/hosts.go @@ -4,7 +4,6 @@ import ( "errors" "fmt" "isle/bootstrap" - "isle/daemon" "isle/jsonutil" "os" "regexp" @@ -26,11 +25,7 @@ var subCmdHostsList = subCmd{ name: "list", descr: "Lists all hosts in the network, and their IPs", do: func(subCmdCtx subCmdCtx) error { - - ctx := subCmdCtx.ctx - - var res daemon.GetHostsResult - err := subCmdCtx.daemonRCPClient.Call(ctx, &res, "GetHosts", nil) + hostsRes, err := subCmdCtx.getHosts() if err != nil { return fmt.Errorf("calling GetHosts: %w", err) } @@ -43,8 +38,8 @@ var subCmdHostsList = subCmd{ Storage bootstrap.GarageHost `json:",omitempty"` } - hosts := make([]host, 0, len(res.Hosts)) - for _, h := range res.Hosts { + hosts := make([]host, 0, len(hostsRes.Hosts)) + for _, h := range hostsRes.Hosts { host := host{ Name: h.Name, diff --git a/go/daemon/daemon.go b/go/daemon/daemon.go index 3fcd433..d6cc377 100644 --- a/go/daemon/daemon.go +++ b/go/daemon/daemon.go @@ -61,9 +61,8 @@ type Daemon interface { // - ErrAlreadyJoined JoinNetwork(context.Context, bootstrap.Bootstrap) error - // GetGarageBootstrapHosts loads (and verifies) the .json.signed - // file for all hosts stored in garage. - GetGarageBootstrapHosts( + // GetBootstrapHosts returns the hosts stored in the bootstrap. + GetBootstrapHosts( ctx context.Context, ) ( map[string]bootstrap.Host, error, @@ -594,7 +593,7 @@ func (d *daemon) JoinNetwork( } } -func (d *daemon) GetGarageBootstrapHosts( +func (d *daemon) GetBootstrapHosts( ctx context.Context, ) ( map[string]bootstrap.Host, error, @@ -604,7 +603,7 @@ func (d *daemon) GetGarageBootstrapHosts( ) ( map[string]bootstrap.Host, error, ) { - return getGarageBootstrapHosts(ctx, d.logger, currBootstrap) + return currBootstrap.Hosts, nil }) } diff --git a/go/daemon/rpc.go b/go/daemon/rpc.go index 5fba15c..a2aa016 100644 --- a/go/daemon/rpc.go +++ b/go/daemon/rpc.go @@ -71,7 +71,7 @@ func (r *RPC) GetHosts( ) ( GetHostsResult, error, ) { - hostsMap, err := r.daemon.GetGarageBootstrapHosts(ctx) + hostsMap, err := r.daemon.GetBootstrapHosts(ctx) if err != nil { return GetHostsResult{}, fmt.Errorf("retrieving hosts: %w", err) } diff --git a/tests/cases/hosts/00-list.sh b/tests/cases/hosts/00-list.sh index 99c5ff5..9b9459f 100644 --- a/tests/cases/hosts/00-list.sh +++ b/tests/cases/hosts/00-list.sh @@ -1,7 +1,9 @@ # shellcheck source=../../utils/with-1-data-1-empty-node-network.sh source "$UTILS"/with-1-data-1-empty-node-network.sh -as_primus +# TODO when primus creates secondus' bootstrap it should write the new host to +# its own bootstrap, as well as to garage. +as_secondus hosts="$(isle hosts list)" [ "$(echo "$hosts" | jq -r '.[0].Name')" = "primus" ]