diff --git a/internal/cmd/machine.go b/internal/cmd/machine.go index 8bdf655..fa0a44c 100644 --- a/internal/cmd/machine.go +++ b/internal/cmd/machine.go @@ -9,7 +9,9 @@ import ( "github.com/nleeper/goment" "github.com/rodaine/table" "inet.af/netaddr" + "os" "strings" + "text/tabwriter" ) func machineCommands() *coral.Command { @@ -19,6 +21,7 @@ func machineCommands() *coral.Command { SilenceUsage: true, } + command.AddCommand(getMachineCommand()) command.AddCommand(deleteMachineCommand()) command.AddCommand(expireMachineCommand()) command.AddCommand(listMachinesCommand()) @@ -30,6 +33,88 @@ func machineCommands() *coral.Command { return command } +func getMachineCommand() *coral.Command { + command := &coral.Command{ + Use: "get", + Short: "Retrieve detailed information for a machine", + SilenceUsage: true, + } + + var machineID uint64 + var target = Target{} + target.prepareCommand(command) + command.Flags().Uint64Var(&machineID, "machine-id", 0, "Machine ID.") + + _ = command.MarkFlagRequired("machine-id") + + command.RunE = func(command *coral.Command, args []string) error { + client, err := target.createGRPCClient() + if err != nil { + return err + } + + req := api.GetMachineRequest{MachineId: machineID} + resp, err := client.GetMachine(context.Background(), connect.NewRequest(&req)) + if err != nil { + return err + } + + m := resp.Msg.Machine + var lastSeen = "N/A" + var expiresAt = "No expiry" + + if m.LastSeen != nil && !m.LastSeen.AsTime().IsZero() { + if mom, err := goment.New(m.LastSeen.AsTime()); err == nil { + lastSeen = mom.FromNow() + } + } + + if !m.KeyExpiryDisabled && m.ExpiresAt != nil && !m.ExpiresAt.AsTime().IsZero() { + if mom, err := goment.New(m.ExpiresAt.AsTime()); !m.ExpiresAt.AsTime().IsZero() && err == nil { + expiresAt = mom.FromNow() + } + } + + // initialize tabwriter + w := new(tabwriter.Writer) + + // minwidth, tabwidth, padding, padchar, flags + w.Init(os.Stdout, 8, 8, 0, '\t', 0) + + defer w.Flush() + + fmt.Fprintf(w, "%s\t%d\n", "ID", m.Id) + fmt.Fprintf(w, "%s\t%s\n", "Machine name", m.Name) + fmt.Fprintf(w, "%s\t%s\n", "Creator", m.User.Name) + fmt.Fprintf(w, "%s\t%s\n", "OS", m.Os) + fmt.Fprintf(w, "%s\t%s\n", "Tailscale version", m.ClientVersion) + fmt.Fprintf(w, "%s\t%s\n", "Tailscale IPv4", m.Ipv4) + fmt.Fprintf(w, "%s\t%s\n", "Tailscale IPv6", m.Ipv6) + fmt.Fprintf(w, "%s\t%s\n", "Last seen", lastSeen) + fmt.Fprintf(w, "%s\t%s\n", "Key expiry", expiresAt) + + for i, t := range m.Tags { + if i == 0 { + fmt.Fprintf(w, "%s\t%s\n", "ACL tags", t) + } else { + fmt.Fprintf(w, "%s\t%s\n", "", t) + } + } + + for i, e := range m.ClientConnectivity.Endpoints { + if i == 0 { + fmt.Fprintf(w, "%s\t%s\n", "Endpoints", e) + } else { + fmt.Fprintf(w, "%s\t%s\n", "", e) + } + } + + return nil + } + + return command +} + func deleteMachineCommand() *coral.Command { command := &coral.Command{ Use: "delete", diff --git a/internal/service/machine.go b/internal/service/machine.go index 55ed7e5..a10689d 100644 --- a/internal/service/machine.go +++ b/internal/service/machine.go @@ -5,12 +5,53 @@ import ( "errors" "fmt" "github.com/bufbuild/connect-go" + "github.com/jsiebens/ionscale/internal/domain" api "github.com/jsiebens/ionscale/pkg/gen/ionscale/v1" "google.golang.org/protobuf/types/known/timestamppb" "inet.af/netaddr" "time" ) +func (s *Service) machineToApi(m *domain.Machine) *api.Machine { + var lastSeen *timestamppb.Timestamp + + var name = m.Name + if m.NameIdx != 0 { + name = fmt.Sprintf("%s-%d", m.Name, m.NameIdx) + } + online := s.brokers(m.TailnetID).IsConnected(m.ID) + if m.LastSeen != nil { + lastSeen = timestamppb.New(*m.LastSeen) + } + + return &api.Machine{ + Id: m.ID, + Name: name, + Ipv4: m.IPv4.String(), + Ipv6: m.IPv6.String(), + Ephemeral: m.Ephemeral, + Tags: m.Tags, + LastSeen: lastSeen, + CreatedAt: timestamppb.New(m.CreatedAt), + ExpiresAt: timestamppb.New(m.ExpiresAt), + KeyExpiryDisabled: m.KeyExpiryDisabled, + Connected: online, + Os: m.HostInfo.OS, + ClientVersion: m.HostInfo.IPNVersion, + Tailnet: &api.Ref{ + Id: m.Tailnet.ID, + Name: m.Tailnet.Name, + }, + User: &api.Ref{ + Id: m.User.ID, + Name: m.User.Name, + }, + ClientConnectivity: &api.ClientConnectivity{ + Endpoints: m.Endpoints, + }, + } +} + func (s *Service) ListMachines(ctx context.Context, req *connect.Request[api.ListMachinesRequest]) (*connect.Response[api.ListMachinesResponse], error) { principal := CurrentPrincipal(ctx) if !principal.IsSystemAdmin() && !principal.IsTailnetAdmin(req.Msg.TailnetId) { @@ -32,38 +73,31 @@ func (s *Service) ListMachines(ctx context.Context, req *connect.Request[api.Lis response := &api.ListMachinesResponse{} for _, m := range machines { - var name = m.Name - if m.NameIdx != 0 { - name = fmt.Sprintf("%s-%d", m.Name, m.NameIdx) - } - online := s.brokers(m.TailnetID).IsConnected(m.ID) - var lastSeen *timestamppb.Timestamp - if m.LastSeen != nil { - lastSeen = timestamppb.New(*m.LastSeen) - } - response.Machines = append(response.Machines, &api.Machine{ - Id: m.ID, - Name: name, - Ipv4: m.IPv4.String(), - Ipv6: m.IPv6.String(), - Ephemeral: m.Ephemeral, - Tags: m.Tags, - LastSeen: lastSeen, - Connected: online, - Tailnet: &api.Ref{ - Id: m.Tailnet.ID, - Name: m.Tailnet.Name, - }, - User: &api.Ref{ - Id: m.User.ID, - Name: m.User.Name, - }, - }) + response.Machines = append(response.Machines, s.machineToApi(&m)) } return connect.NewResponse(response), nil } +func (s *Service) GetMachine(ctx context.Context, req *connect.Request[api.GetMachineRequest]) (*connect.Response[api.GetMachineResponse], error) { + principal := CurrentPrincipal(ctx) + + m, err := s.repository.GetMachine(ctx, req.Msg.MachineId) + if err != nil { + return nil, err + } + + if m == nil { + return nil, connect.NewError(connect.CodeNotFound, errors.New("machine not found")) + } + + if !principal.IsSystemAdmin() && !principal.IsTailnetAdmin(m.TailnetID) { + return nil, connect.NewError(connect.CodePermissionDenied, errors.New("permission denied")) + } + + return connect.NewResponse(&api.GetMachineResponse{Machine: s.machineToApi(m)}), nil +} + func (s *Service) DeleteMachine(ctx context.Context, req *connect.Request[api.DeleteMachineRequest]) (*connect.Response[api.DeleteMachineResponse], error) { principal := CurrentPrincipal(ctx) diff --git a/pkg/gen/ionscale/v1/acl.pb.go b/pkg/gen/ionscale/v1/acl.pb.go index 560c9ac..2398472 100644 --- a/pkg/gen/ionscale/v1/acl.pb.go +++ b/pkg/gen/ionscale/v1/acl.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc (unknown) // source: ionscale/v1/acl.proto diff --git a/pkg/gen/ionscale/v1/auth.pb.go b/pkg/gen/ionscale/v1/auth.pb.go index 109f6f3..8805ab7 100644 --- a/pkg/gen/ionscale/v1/auth.pb.go +++ b/pkg/gen/ionscale/v1/auth.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc (unknown) // source: ionscale/v1/auth.proto diff --git a/pkg/gen/ionscale/v1/auth_keys.pb.go b/pkg/gen/ionscale/v1/auth_keys.pb.go index 02a14a4..1fbf55e 100644 --- a/pkg/gen/ionscale/v1/auth_keys.pb.go +++ b/pkg/gen/ionscale/v1/auth_keys.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc (unknown) // source: ionscale/v1/auth_keys.proto diff --git a/pkg/gen/ionscale/v1/derp.pb.go b/pkg/gen/ionscale/v1/derp.pb.go index cae7edf..336af60 100644 --- a/pkg/gen/ionscale/v1/derp.pb.go +++ b/pkg/gen/ionscale/v1/derp.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc (unknown) // source: ionscale/v1/derp.proto diff --git a/pkg/gen/ionscale/v1/dns.pb.go b/pkg/gen/ionscale/v1/dns.pb.go index cc97583..b007239 100644 --- a/pkg/gen/ionscale/v1/dns.pb.go +++ b/pkg/gen/ionscale/v1/dns.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc (unknown) // source: ionscale/v1/dns.proto diff --git a/pkg/gen/ionscale/v1/iam.pb.go b/pkg/gen/ionscale/v1/iam.pb.go index 2daea3c..89a2e03 100644 --- a/pkg/gen/ionscale/v1/iam.pb.go +++ b/pkg/gen/ionscale/v1/iam.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc (unknown) // source: ionscale/v1/iam.proto diff --git a/pkg/gen/ionscale/v1/ionscale.pb.go b/pkg/gen/ionscale/v1/ionscale.pb.go index ce19f9e..8ac35d7 100644 --- a/pkg/gen/ionscale/v1/ionscale.pb.go +++ b/pkg/gen/ionscale/v1/ionscale.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc (unknown) // source: ionscale/v1/ionscale.proto @@ -48,7 +48,7 @@ var file_ionscale_v1_ionscale_proto_rawDesc = []byte{ 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x72, 0x70, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x32, 0xfd, 0x11, 0x0a, 0x0f, 0x49, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x53, + 0x74, 0x6f, 0x32, 0xce, 0x12, 0x0a, 0x0f, 0x49, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, @@ -156,47 +156,52 @@ var file_ionscale_v1_ionscale_proto_rawDesc = []byte{ 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, - 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x0d, - 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x12, 0x21, 0x2e, - 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x69, - 0x72, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x22, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, - 0x78, 0x70, 0x69, 0x72, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x12, 0x21, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, - 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x69, 0x6f, 0x6e, - 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x6a, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4b, 0x65, - 0x79, 0x45, 0x78, 0x70, 0x69, 0x72, 0x79, 0x12, 0x27, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, - 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x4b, 0x65, 0x79, 0x45, 0x78, 0x70, 0x69, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x28, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x45, 0x78, 0x70, 0x69, - 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x10, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x12, 0x1e, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, + 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x58, 0x0a, + 0x0d, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x12, 0x21, + 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, + 0x69, 0x72, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x22, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x12, 0x21, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, + 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x69, 0x6f, + 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x6a, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4b, + 0x65, 0x79, 0x45, 0x78, 0x70, 0x69, 0x72, 0x79, 0x12, 0x27, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, + 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x4b, 0x65, 0x79, 0x45, 0x78, 0x70, 0x69, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x28, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x45, 0x78, 0x70, + 0x69, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, + 0x10, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, + 0x73, 0x12, 0x24, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, - 0x12, 0x24, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, - 0x6f, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x61, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x6f, 0x75, - 0x74, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x6f, 0x75, 0x74, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x69, 0x6f, 0x6e, 0x73, - 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x42, 0x3d, 0x5a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x6a, 0x73, 0x69, 0x65, 0x62, 0x65, 0x6e, 0x73, 0x2f, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, - 0x6c, 0x65, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x69, 0x6f, 0x6e, 0x73, 0x63, - 0x61, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x76, - 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, + 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x61, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x6f, + 0x75, 0x74, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x6f, 0x75, + 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x69, 0x6f, 0x6e, + 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x42, 0x3d, 0x5a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x6a, 0x73, 0x69, 0x65, 0x62, 0x65, 0x6e, 0x73, 0x2f, 0x69, 0x6f, 0x6e, 0x73, 0x63, + 0x61, 0x6c, 0x65, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x69, 0x6f, 0x6e, 0x73, + 0x63, 0x61, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, + 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var file_ionscale_v1_ionscale_proto_goTypes = []interface{}{ @@ -220,37 +225,39 @@ var file_ionscale_v1_ionscale_proto_goTypes = []interface{}{ (*ListAuthKeysRequest)(nil), // 17: ionscale.v1.ListAuthKeysRequest (*ListUsersRequest)(nil), // 18: ionscale.v1.ListUsersRequest (*DeleteUserRequest)(nil), // 19: ionscale.v1.DeleteUserRequest - (*ListMachinesRequest)(nil), // 20: ionscale.v1.ListMachinesRequest - (*ExpireMachineRequest)(nil), // 21: ionscale.v1.ExpireMachineRequest - (*DeleteMachineRequest)(nil), // 22: ionscale.v1.DeleteMachineRequest - (*SetMachineKeyExpiryRequest)(nil), // 23: ionscale.v1.SetMachineKeyExpiryRequest - (*GetMachineRoutesRequest)(nil), // 24: ionscale.v1.GetMachineRoutesRequest - (*SetMachineRoutesRequest)(nil), // 25: ionscale.v1.SetMachineRoutesRequest - (*GetVersionResponse)(nil), // 26: ionscale.v1.GetVersionResponse - (*AuthenticationResponse)(nil), // 27: ionscale.v1.AuthenticationResponse - (*GetDERPMapResponse)(nil), // 28: ionscale.v1.GetDERPMapResponse - (*SetDERPMapResponse)(nil), // 29: ionscale.v1.SetDERPMapResponse - (*CreateTailnetResponse)(nil), // 30: ionscale.v1.CreateTailnetResponse - (*GetTailnetResponse)(nil), // 31: ionscale.v1.GetTailnetResponse - (*ListTailnetResponse)(nil), // 32: ionscale.v1.ListTailnetResponse - (*DeleteTailnetResponse)(nil), // 33: ionscale.v1.DeleteTailnetResponse - (*GetDNSConfigResponse)(nil), // 34: ionscale.v1.GetDNSConfigResponse - (*SetDNSConfigResponse)(nil), // 35: ionscale.v1.SetDNSConfigResponse - (*GetIAMPolicyResponse)(nil), // 36: ionscale.v1.GetIAMPolicyResponse - (*SetIAMPolicyResponse)(nil), // 37: ionscale.v1.SetIAMPolicyResponse - (*GetACLPolicyResponse)(nil), // 38: ionscale.v1.GetACLPolicyResponse - (*SetACLPolicyResponse)(nil), // 39: ionscale.v1.SetACLPolicyResponse - (*GetAuthKeyResponse)(nil), // 40: ionscale.v1.GetAuthKeyResponse - (*CreateAuthKeyResponse)(nil), // 41: ionscale.v1.CreateAuthKeyResponse - (*DeleteAuthKeyResponse)(nil), // 42: ionscale.v1.DeleteAuthKeyResponse - (*ListAuthKeysResponse)(nil), // 43: ionscale.v1.ListAuthKeysResponse - (*ListUsersResponse)(nil), // 44: ionscale.v1.ListUsersResponse - (*DeleteUserResponse)(nil), // 45: ionscale.v1.DeleteUserResponse - (*ListMachinesResponse)(nil), // 46: ionscale.v1.ListMachinesResponse - (*ExpireMachineResponse)(nil), // 47: ionscale.v1.ExpireMachineResponse - (*DeleteMachineResponse)(nil), // 48: ionscale.v1.DeleteMachineResponse - (*SetMachineKeyExpiryResponse)(nil), // 49: ionscale.v1.SetMachineKeyExpiryResponse - (*GetMachineRoutesResponse)(nil), // 50: ionscale.v1.GetMachineRoutesResponse + (*GetMachineRequest)(nil), // 20: ionscale.v1.GetMachineRequest + (*ListMachinesRequest)(nil), // 21: ionscale.v1.ListMachinesRequest + (*ExpireMachineRequest)(nil), // 22: ionscale.v1.ExpireMachineRequest + (*DeleteMachineRequest)(nil), // 23: ionscale.v1.DeleteMachineRequest + (*SetMachineKeyExpiryRequest)(nil), // 24: ionscale.v1.SetMachineKeyExpiryRequest + (*GetMachineRoutesRequest)(nil), // 25: ionscale.v1.GetMachineRoutesRequest + (*SetMachineRoutesRequest)(nil), // 26: ionscale.v1.SetMachineRoutesRequest + (*GetVersionResponse)(nil), // 27: ionscale.v1.GetVersionResponse + (*AuthenticationResponse)(nil), // 28: ionscale.v1.AuthenticationResponse + (*GetDERPMapResponse)(nil), // 29: ionscale.v1.GetDERPMapResponse + (*SetDERPMapResponse)(nil), // 30: ionscale.v1.SetDERPMapResponse + (*CreateTailnetResponse)(nil), // 31: ionscale.v1.CreateTailnetResponse + (*GetTailnetResponse)(nil), // 32: ionscale.v1.GetTailnetResponse + (*ListTailnetResponse)(nil), // 33: ionscale.v1.ListTailnetResponse + (*DeleteTailnetResponse)(nil), // 34: ionscale.v1.DeleteTailnetResponse + (*GetDNSConfigResponse)(nil), // 35: ionscale.v1.GetDNSConfigResponse + (*SetDNSConfigResponse)(nil), // 36: ionscale.v1.SetDNSConfigResponse + (*GetIAMPolicyResponse)(nil), // 37: ionscale.v1.GetIAMPolicyResponse + (*SetIAMPolicyResponse)(nil), // 38: ionscale.v1.SetIAMPolicyResponse + (*GetACLPolicyResponse)(nil), // 39: ionscale.v1.GetACLPolicyResponse + (*SetACLPolicyResponse)(nil), // 40: ionscale.v1.SetACLPolicyResponse + (*GetAuthKeyResponse)(nil), // 41: ionscale.v1.GetAuthKeyResponse + (*CreateAuthKeyResponse)(nil), // 42: ionscale.v1.CreateAuthKeyResponse + (*DeleteAuthKeyResponse)(nil), // 43: ionscale.v1.DeleteAuthKeyResponse + (*ListAuthKeysResponse)(nil), // 44: ionscale.v1.ListAuthKeysResponse + (*ListUsersResponse)(nil), // 45: ionscale.v1.ListUsersResponse + (*DeleteUserResponse)(nil), // 46: ionscale.v1.DeleteUserResponse + (*GetMachineResponse)(nil), // 47: ionscale.v1.GetMachineResponse + (*ListMachinesResponse)(nil), // 48: ionscale.v1.ListMachinesResponse + (*ExpireMachineResponse)(nil), // 49: ionscale.v1.ExpireMachineResponse + (*DeleteMachineResponse)(nil), // 50: ionscale.v1.DeleteMachineResponse + (*SetMachineKeyExpiryResponse)(nil), // 51: ionscale.v1.SetMachineKeyExpiryResponse + (*GetMachineRoutesResponse)(nil), // 52: ionscale.v1.GetMachineRoutesResponse } var file_ionscale_v1_ionscale_proto_depIdxs = []int32{ 0, // 0: ionscale.v1.IonscaleService.GetVersion:input_type -> ionscale.v1.GetVersionRequest @@ -273,40 +280,42 @@ var file_ionscale_v1_ionscale_proto_depIdxs = []int32{ 17, // 17: ionscale.v1.IonscaleService.ListAuthKeys:input_type -> ionscale.v1.ListAuthKeysRequest 18, // 18: ionscale.v1.IonscaleService.ListUsers:input_type -> ionscale.v1.ListUsersRequest 19, // 19: ionscale.v1.IonscaleService.DeleteUser:input_type -> ionscale.v1.DeleteUserRequest - 20, // 20: ionscale.v1.IonscaleService.ListMachines:input_type -> ionscale.v1.ListMachinesRequest - 21, // 21: ionscale.v1.IonscaleService.ExpireMachine:input_type -> ionscale.v1.ExpireMachineRequest - 22, // 22: ionscale.v1.IonscaleService.DeleteMachine:input_type -> ionscale.v1.DeleteMachineRequest - 23, // 23: ionscale.v1.IonscaleService.SetMachineKeyExpiry:input_type -> ionscale.v1.SetMachineKeyExpiryRequest - 24, // 24: ionscale.v1.IonscaleService.GetMachineRoutes:input_type -> ionscale.v1.GetMachineRoutesRequest - 25, // 25: ionscale.v1.IonscaleService.SetMachineRoutes:input_type -> ionscale.v1.SetMachineRoutesRequest - 26, // 26: ionscale.v1.IonscaleService.GetVersion:output_type -> ionscale.v1.GetVersionResponse - 27, // 27: ionscale.v1.IonscaleService.Authenticate:output_type -> ionscale.v1.AuthenticationResponse - 28, // 28: ionscale.v1.IonscaleService.GetDERPMap:output_type -> ionscale.v1.GetDERPMapResponse - 29, // 29: ionscale.v1.IonscaleService.SetDERPMap:output_type -> ionscale.v1.SetDERPMapResponse - 30, // 30: ionscale.v1.IonscaleService.CreateTailnet:output_type -> ionscale.v1.CreateTailnetResponse - 31, // 31: ionscale.v1.IonscaleService.GetTailnet:output_type -> ionscale.v1.GetTailnetResponse - 32, // 32: ionscale.v1.IonscaleService.ListTailnets:output_type -> ionscale.v1.ListTailnetResponse - 33, // 33: ionscale.v1.IonscaleService.DeleteTailnet:output_type -> ionscale.v1.DeleteTailnetResponse - 34, // 34: ionscale.v1.IonscaleService.GetDNSConfig:output_type -> ionscale.v1.GetDNSConfigResponse - 35, // 35: ionscale.v1.IonscaleService.SetDNSConfig:output_type -> ionscale.v1.SetDNSConfigResponse - 36, // 36: ionscale.v1.IonscaleService.GetIAMPolicy:output_type -> ionscale.v1.GetIAMPolicyResponse - 37, // 37: ionscale.v1.IonscaleService.SetIAMPolicy:output_type -> ionscale.v1.SetIAMPolicyResponse - 38, // 38: ionscale.v1.IonscaleService.GetACLPolicy:output_type -> ionscale.v1.GetACLPolicyResponse - 39, // 39: ionscale.v1.IonscaleService.SetACLPolicy:output_type -> ionscale.v1.SetACLPolicyResponse - 40, // 40: ionscale.v1.IonscaleService.GetAuthKey:output_type -> ionscale.v1.GetAuthKeyResponse - 41, // 41: ionscale.v1.IonscaleService.CreateAuthKey:output_type -> ionscale.v1.CreateAuthKeyResponse - 42, // 42: ionscale.v1.IonscaleService.DeleteAuthKey:output_type -> ionscale.v1.DeleteAuthKeyResponse - 43, // 43: ionscale.v1.IonscaleService.ListAuthKeys:output_type -> ionscale.v1.ListAuthKeysResponse - 44, // 44: ionscale.v1.IonscaleService.ListUsers:output_type -> ionscale.v1.ListUsersResponse - 45, // 45: ionscale.v1.IonscaleService.DeleteUser:output_type -> ionscale.v1.DeleteUserResponse - 46, // 46: ionscale.v1.IonscaleService.ListMachines:output_type -> ionscale.v1.ListMachinesResponse - 47, // 47: ionscale.v1.IonscaleService.ExpireMachine:output_type -> ionscale.v1.ExpireMachineResponse - 48, // 48: ionscale.v1.IonscaleService.DeleteMachine:output_type -> ionscale.v1.DeleteMachineResponse - 49, // 49: ionscale.v1.IonscaleService.SetMachineKeyExpiry:output_type -> ionscale.v1.SetMachineKeyExpiryResponse - 50, // 50: ionscale.v1.IonscaleService.GetMachineRoutes:output_type -> ionscale.v1.GetMachineRoutesResponse - 50, // 51: ionscale.v1.IonscaleService.SetMachineRoutes:output_type -> ionscale.v1.GetMachineRoutesResponse - 26, // [26:52] is the sub-list for method output_type - 0, // [0:26] is the sub-list for method input_type + 20, // 20: ionscale.v1.IonscaleService.GetMachine:input_type -> ionscale.v1.GetMachineRequest + 21, // 21: ionscale.v1.IonscaleService.ListMachines:input_type -> ionscale.v1.ListMachinesRequest + 22, // 22: ionscale.v1.IonscaleService.ExpireMachine:input_type -> ionscale.v1.ExpireMachineRequest + 23, // 23: ionscale.v1.IonscaleService.DeleteMachine:input_type -> ionscale.v1.DeleteMachineRequest + 24, // 24: ionscale.v1.IonscaleService.SetMachineKeyExpiry:input_type -> ionscale.v1.SetMachineKeyExpiryRequest + 25, // 25: ionscale.v1.IonscaleService.GetMachineRoutes:input_type -> ionscale.v1.GetMachineRoutesRequest + 26, // 26: ionscale.v1.IonscaleService.SetMachineRoutes:input_type -> ionscale.v1.SetMachineRoutesRequest + 27, // 27: ionscale.v1.IonscaleService.GetVersion:output_type -> ionscale.v1.GetVersionResponse + 28, // 28: ionscale.v1.IonscaleService.Authenticate:output_type -> ionscale.v1.AuthenticationResponse + 29, // 29: ionscale.v1.IonscaleService.GetDERPMap:output_type -> ionscale.v1.GetDERPMapResponse + 30, // 30: ionscale.v1.IonscaleService.SetDERPMap:output_type -> ionscale.v1.SetDERPMapResponse + 31, // 31: ionscale.v1.IonscaleService.CreateTailnet:output_type -> ionscale.v1.CreateTailnetResponse + 32, // 32: ionscale.v1.IonscaleService.GetTailnet:output_type -> ionscale.v1.GetTailnetResponse + 33, // 33: ionscale.v1.IonscaleService.ListTailnets:output_type -> ionscale.v1.ListTailnetResponse + 34, // 34: ionscale.v1.IonscaleService.DeleteTailnet:output_type -> ionscale.v1.DeleteTailnetResponse + 35, // 35: ionscale.v1.IonscaleService.GetDNSConfig:output_type -> ionscale.v1.GetDNSConfigResponse + 36, // 36: ionscale.v1.IonscaleService.SetDNSConfig:output_type -> ionscale.v1.SetDNSConfigResponse + 37, // 37: ionscale.v1.IonscaleService.GetIAMPolicy:output_type -> ionscale.v1.GetIAMPolicyResponse + 38, // 38: ionscale.v1.IonscaleService.SetIAMPolicy:output_type -> ionscale.v1.SetIAMPolicyResponse + 39, // 39: ionscale.v1.IonscaleService.GetACLPolicy:output_type -> ionscale.v1.GetACLPolicyResponse + 40, // 40: ionscale.v1.IonscaleService.SetACLPolicy:output_type -> ionscale.v1.SetACLPolicyResponse + 41, // 41: ionscale.v1.IonscaleService.GetAuthKey:output_type -> ionscale.v1.GetAuthKeyResponse + 42, // 42: ionscale.v1.IonscaleService.CreateAuthKey:output_type -> ionscale.v1.CreateAuthKeyResponse + 43, // 43: ionscale.v1.IonscaleService.DeleteAuthKey:output_type -> ionscale.v1.DeleteAuthKeyResponse + 44, // 44: ionscale.v1.IonscaleService.ListAuthKeys:output_type -> ionscale.v1.ListAuthKeysResponse + 45, // 45: ionscale.v1.IonscaleService.ListUsers:output_type -> ionscale.v1.ListUsersResponse + 46, // 46: ionscale.v1.IonscaleService.DeleteUser:output_type -> ionscale.v1.DeleteUserResponse + 47, // 47: ionscale.v1.IonscaleService.GetMachine:output_type -> ionscale.v1.GetMachineResponse + 48, // 48: ionscale.v1.IonscaleService.ListMachines:output_type -> ionscale.v1.ListMachinesResponse + 49, // 49: ionscale.v1.IonscaleService.ExpireMachine:output_type -> ionscale.v1.ExpireMachineResponse + 50, // 50: ionscale.v1.IonscaleService.DeleteMachine:output_type -> ionscale.v1.DeleteMachineResponse + 51, // 51: ionscale.v1.IonscaleService.SetMachineKeyExpiry:output_type -> ionscale.v1.SetMachineKeyExpiryResponse + 52, // 52: ionscale.v1.IonscaleService.GetMachineRoutes:output_type -> ionscale.v1.GetMachineRoutesResponse + 52, // 53: ionscale.v1.IonscaleService.SetMachineRoutes:output_type -> ionscale.v1.GetMachineRoutesResponse + 27, // [27:54] is the sub-list for method output_type + 0, // [0:27] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name 0, // [0:0] is the sub-list for extension extendee 0, // [0:0] is the sub-list for field type_name diff --git a/pkg/gen/ionscale/v1/ionscalev1connect/ionscale.connect.go b/pkg/gen/ionscale/v1/ionscalev1connect/ionscale.connect.go index 2362c74..95d7b73 100644 --- a/pkg/gen/ionscale/v1/ionscalev1connect/ionscale.connect.go +++ b/pkg/gen/ionscale/v1/ionscalev1connect/ionscale.connect.go @@ -47,6 +47,7 @@ type IonscaleServiceClient interface { ListAuthKeys(context.Context, *connect_go.Request[v1.ListAuthKeysRequest]) (*connect_go.Response[v1.ListAuthKeysResponse], error) ListUsers(context.Context, *connect_go.Request[v1.ListUsersRequest]) (*connect_go.Response[v1.ListUsersResponse], error) DeleteUser(context.Context, *connect_go.Request[v1.DeleteUserRequest]) (*connect_go.Response[v1.DeleteUserResponse], error) + GetMachine(context.Context, *connect_go.Request[v1.GetMachineRequest]) (*connect_go.Response[v1.GetMachineResponse], error) ListMachines(context.Context, *connect_go.Request[v1.ListMachinesRequest]) (*connect_go.Response[v1.ListMachinesResponse], error) ExpireMachine(context.Context, *connect_go.Request[v1.ExpireMachineRequest]) (*connect_go.Response[v1.ExpireMachineResponse], error) DeleteMachine(context.Context, *connect_go.Request[v1.DeleteMachineRequest]) (*connect_go.Response[v1.DeleteMachineResponse], error) @@ -165,6 +166,11 @@ func NewIonscaleServiceClient(httpClient connect_go.HTTPClient, baseURL string, baseURL+"/ionscale.v1.IonscaleService/DeleteUser", opts..., ), + getMachine: connect_go.NewClient[v1.GetMachineRequest, v1.GetMachineResponse]( + httpClient, + baseURL+"/ionscale.v1.IonscaleService/GetMachine", + opts..., + ), listMachines: connect_go.NewClient[v1.ListMachinesRequest, v1.ListMachinesResponse]( httpClient, baseURL+"/ionscale.v1.IonscaleService/ListMachines", @@ -220,6 +226,7 @@ type ionscaleServiceClient struct { listAuthKeys *connect_go.Client[v1.ListAuthKeysRequest, v1.ListAuthKeysResponse] listUsers *connect_go.Client[v1.ListUsersRequest, v1.ListUsersResponse] deleteUser *connect_go.Client[v1.DeleteUserRequest, v1.DeleteUserResponse] + getMachine *connect_go.Client[v1.GetMachineRequest, v1.GetMachineResponse] listMachines *connect_go.Client[v1.ListMachinesRequest, v1.ListMachinesResponse] expireMachine *connect_go.Client[v1.ExpireMachineRequest, v1.ExpireMachineResponse] deleteMachine *connect_go.Client[v1.DeleteMachineRequest, v1.DeleteMachineResponse] @@ -328,6 +335,11 @@ func (c *ionscaleServiceClient) DeleteUser(ctx context.Context, req *connect_go. return c.deleteUser.CallUnary(ctx, req) } +// GetMachine calls ionscale.v1.IonscaleService.GetMachine. +func (c *ionscaleServiceClient) GetMachine(ctx context.Context, req *connect_go.Request[v1.GetMachineRequest]) (*connect_go.Response[v1.GetMachineResponse], error) { + return c.getMachine.CallUnary(ctx, req) +} + // ListMachines calls ionscale.v1.IonscaleService.ListMachines. func (c *ionscaleServiceClient) ListMachines(ctx context.Context, req *connect_go.Request[v1.ListMachinesRequest]) (*connect_go.Response[v1.ListMachinesResponse], error) { return c.listMachines.CallUnary(ctx, req) @@ -380,6 +392,7 @@ type IonscaleServiceHandler interface { ListAuthKeys(context.Context, *connect_go.Request[v1.ListAuthKeysRequest]) (*connect_go.Response[v1.ListAuthKeysResponse], error) ListUsers(context.Context, *connect_go.Request[v1.ListUsersRequest]) (*connect_go.Response[v1.ListUsersResponse], error) DeleteUser(context.Context, *connect_go.Request[v1.DeleteUserRequest]) (*connect_go.Response[v1.DeleteUserResponse], error) + GetMachine(context.Context, *connect_go.Request[v1.GetMachineRequest]) (*connect_go.Response[v1.GetMachineResponse], error) ListMachines(context.Context, *connect_go.Request[v1.ListMachinesRequest]) (*connect_go.Response[v1.ListMachinesResponse], error) ExpireMachine(context.Context, *connect_go.Request[v1.ExpireMachineRequest]) (*connect_go.Response[v1.ExpireMachineResponse], error) DeleteMachine(context.Context, *connect_go.Request[v1.DeleteMachineRequest]) (*connect_go.Response[v1.DeleteMachineResponse], error) @@ -495,6 +508,11 @@ func NewIonscaleServiceHandler(svc IonscaleServiceHandler, opts ...connect_go.Ha svc.DeleteUser, opts..., )) + mux.Handle("/ionscale.v1.IonscaleService/GetMachine", connect_go.NewUnaryHandler( + "/ionscale.v1.IonscaleService/GetMachine", + svc.GetMachine, + opts..., + )) mux.Handle("/ionscale.v1.IonscaleService/ListMachines", connect_go.NewUnaryHandler( "/ionscale.v1.IonscaleService/ListMachines", svc.ListMachines, @@ -611,6 +629,10 @@ func (UnimplementedIonscaleServiceHandler) DeleteUser(context.Context, *connect_ return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("ionscale.v1.IonscaleService.DeleteUser is not implemented")) } +func (UnimplementedIonscaleServiceHandler) GetMachine(context.Context, *connect_go.Request[v1.GetMachineRequest]) (*connect_go.Response[v1.GetMachineResponse], error) { + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("ionscale.v1.IonscaleService.GetMachine is not implemented")) +} + func (UnimplementedIonscaleServiceHandler) ListMachines(context.Context, *connect_go.Request[v1.ListMachinesRequest]) (*connect_go.Response[v1.ListMachinesResponse], error) { return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("ionscale.v1.IonscaleService.ListMachines is not implemented")) } diff --git a/pkg/gen/ionscale/v1/machines.pb.go b/pkg/gen/ionscale/v1/machines.pb.go index 8bf619c..14e25dd 100644 --- a/pkg/gen/ionscale/v1/machines.pb.go +++ b/pkg/gen/ionscale/v1/machines.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc (unknown) // source: ionscale/v1/machines.proto @@ -379,27 +379,127 @@ func (*SetMachineKeyExpiryResponse) Descriptor() ([]byte, []int) { return file_ionscale_v1_machines_proto_rawDescGZIP(), []int{7} } +type GetMachineRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MachineId uint64 `protobuf:"varint,1,opt,name=machine_id,json=machineId,proto3" json:"machine_id,omitempty"` +} + +func (x *GetMachineRequest) Reset() { + *x = GetMachineRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_ionscale_v1_machines_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMachineRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMachineRequest) ProtoMessage() {} + +func (x *GetMachineRequest) ProtoReflect() protoreflect.Message { + mi := &file_ionscale_v1_machines_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMachineRequest.ProtoReflect.Descriptor instead. +func (*GetMachineRequest) Descriptor() ([]byte, []int) { + return file_ionscale_v1_machines_proto_rawDescGZIP(), []int{8} +} + +func (x *GetMachineRequest) GetMachineId() uint64 { + if x != nil { + return x.MachineId + } + return 0 +} + +type GetMachineResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Machine *Machine `protobuf:"bytes,1,opt,name=machine,proto3" json:"machine,omitempty"` +} + +func (x *GetMachineResponse) Reset() { + *x = GetMachineResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_ionscale_v1_machines_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMachineResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMachineResponse) ProtoMessage() {} + +func (x *GetMachineResponse) ProtoReflect() protoreflect.Message { + mi := &file_ionscale_v1_machines_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMachineResponse.ProtoReflect.Descriptor instead. +func (*GetMachineResponse) Descriptor() ([]byte, []int) { + return file_ionscale_v1_machines_proto_rawDescGZIP(), []int{9} +} + +func (x *GetMachineResponse) GetMachine() *Machine { + if x != nil { + return x.Machine + } + return nil +} + type Machine struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Ipv4 string `protobuf:"bytes,3,opt,name=ipv4,proto3" json:"ipv4,omitempty"` - Ipv6 string `protobuf:"bytes,4,opt,name=ipv6,proto3" json:"ipv6,omitempty"` - Ephemeral bool `protobuf:"varint,5,opt,name=ephemeral,proto3" json:"ephemeral,omitempty"` - LastSeen *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` - Connected bool `protobuf:"varint,7,opt,name=connected,proto3" json:"connected,omitempty"` - Tailnet *Ref `protobuf:"bytes,8,opt,name=tailnet,proto3" json:"tailnet,omitempty"` - User *Ref `protobuf:"bytes,9,opt,name=user,proto3" json:"user,omitempty"` - Tags []string `protobuf:"bytes,10,rep,name=tags,proto3" json:"tags,omitempty"` + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Ipv4 string `protobuf:"bytes,3,opt,name=ipv4,proto3" json:"ipv4,omitempty"` + Ipv6 string `protobuf:"bytes,4,opt,name=ipv6,proto3" json:"ipv6,omitempty"` + Ephemeral bool `protobuf:"varint,5,opt,name=ephemeral,proto3" json:"ephemeral,omitempty"` + LastSeen *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` + Connected bool `protobuf:"varint,7,opt,name=connected,proto3" json:"connected,omitempty"` + Tailnet *Ref `protobuf:"bytes,8,opt,name=tailnet,proto3" json:"tailnet,omitempty"` + User *Ref `protobuf:"bytes,9,opt,name=user,proto3" json:"user,omitempty"` + Tags []string `protobuf:"bytes,10,rep,name=tags,proto3" json:"tags,omitempty"` + ClientVersion string `protobuf:"bytes,11,opt,name=client_version,json=clientVersion,proto3" json:"client_version,omitempty"` + Os string `protobuf:"bytes,12,opt,name=os,proto3" json:"os,omitempty"` + ClientConnectivity *ClientConnectivity `protobuf:"bytes,13,opt,name=client_connectivity,json=clientConnectivity,proto3" json:"client_connectivity,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,14,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + ExpiresAt *timestamppb.Timestamp `protobuf:"bytes,15,opt,name=expires_at,json=expiresAt,proto3" json:"expires_at,omitempty"` + KeyExpiryDisabled bool `protobuf:"varint,16,opt,name=key_expiry_disabled,json=keyExpiryDisabled,proto3" json:"key_expiry_disabled,omitempty"` } func (x *Machine) Reset() { *x = Machine{} if protoimpl.UnsafeEnabled { - mi := &file_ionscale_v1_machines_proto_msgTypes[8] + mi := &file_ionscale_v1_machines_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -412,7 +512,7 @@ func (x *Machine) String() string { func (*Machine) ProtoMessage() {} func (x *Machine) ProtoReflect() protoreflect.Message { - mi := &file_ionscale_v1_machines_proto_msgTypes[8] + mi := &file_ionscale_v1_machines_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -425,7 +525,7 @@ func (x *Machine) ProtoReflect() protoreflect.Message { // Deprecated: Use Machine.ProtoReflect.Descriptor instead. func (*Machine) Descriptor() ([]byte, []int) { - return file_ionscale_v1_machines_proto_rawDescGZIP(), []int{8} + return file_ionscale_v1_machines_proto_rawDescGZIP(), []int{10} } func (x *Machine) GetId() uint64 { @@ -498,6 +598,95 @@ func (x *Machine) GetTags() []string { return nil } +func (x *Machine) GetClientVersion() string { + if x != nil { + return x.ClientVersion + } + return "" +} + +func (x *Machine) GetOs() string { + if x != nil { + return x.Os + } + return "" +} + +func (x *Machine) GetClientConnectivity() *ClientConnectivity { + if x != nil { + return x.ClientConnectivity + } + return nil +} + +func (x *Machine) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *Machine) GetExpiresAt() *timestamppb.Timestamp { + if x != nil { + return x.ExpiresAt + } + return nil +} + +func (x *Machine) GetKeyExpiryDisabled() bool { + if x != nil { + return x.KeyExpiryDisabled + } + return false +} + +type ClientConnectivity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Endpoints []string `protobuf:"bytes,1,rep,name=endpoints,proto3" json:"endpoints,omitempty"` +} + +func (x *ClientConnectivity) Reset() { + *x = ClientConnectivity{} + if protoimpl.UnsafeEnabled { + mi := &file_ionscale_v1_machines_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientConnectivity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientConnectivity) ProtoMessage() {} + +func (x *ClientConnectivity) ProtoReflect() protoreflect.Message { + mi := &file_ionscale_v1_machines_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientConnectivity.ProtoReflect.Descriptor instead. +func (*ClientConnectivity) Descriptor() ([]byte, []int) { + return file_ionscale_v1_machines_proto_rawDescGZIP(), []int{11} +} + +func (x *ClientConnectivity) GetEndpoints() []string { + if x != nil { + return x.Endpoints + } + return nil +} + var File_ionscale_v1_machines_proto protoreflect.FileDescriptor var file_ionscale_v1_machines_proto_rawDesc = []byte{ @@ -534,31 +723,60 @@ var file_ionscale_v1_machines_proto_rawDesc = []byte{ 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x1d, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x45, 0x78, 0x70, 0x69, 0x72, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb0, 0x02, 0x0a, 0x07, 0x4d, 0x61, - 0x63, 0x68, 0x69, 0x6e, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x70, 0x76, - 0x34, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x70, 0x76, 0x34, 0x12, 0x12, 0x0a, - 0x04, 0x69, 0x70, 0x76, 0x36, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x70, 0x76, - 0x36, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x12, - 0x37, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, - 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x07, 0x74, 0x61, 0x69, 0x6c, 0x6e, 0x65, - 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, - 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x07, 0x74, 0x61, 0x69, 0x6c, 0x6e, - 0x65, 0x74, 0x12, 0x24, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x66, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, - 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x42, 0x3d, 0x5a, 0x3b, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6a, 0x73, 0x69, 0x65, 0x62, - 0x65, 0x6e, 0x73, 0x2f, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2f, 0x70, 0x6b, 0x67, - 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2f, 0x76, 0x31, - 0x3b, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x0a, 0x11, 0x47, 0x65, 0x74, + 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, + 0x0a, 0x0a, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x09, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x49, 0x64, 0x22, 0x44, 0x0a, + 0x12, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x07, 0x6d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x22, 0xdf, 0x04, 0x0a, 0x07, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x70, 0x76, 0x34, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x69, 0x70, 0x76, 0x34, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x70, 0x76, 0x36, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x70, 0x76, 0x36, 0x12, 0x1c, 0x0a, 0x09, 0x65, + 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, + 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x61, 0x73, + 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, + 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x12, 0x2a, 0x0a, 0x07, 0x74, 0x61, 0x69, 0x6c, 0x6e, 0x65, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x10, 0x2e, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x65, 0x66, 0x52, 0x07, 0x74, 0x61, 0x69, 0x6c, 0x6e, 0x65, 0x74, 0x12, 0x24, 0x0a, 0x04, + 0x75, 0x73, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x69, 0x6f, 0x6e, + 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x04, 0x75, 0x73, + 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, + 0x02, 0x6f, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6f, 0x73, 0x12, 0x50, 0x0a, + 0x13, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, + 0x76, 0x69, 0x74, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x69, 0x6f, 0x6e, + 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x12, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, + 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0e, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x65, 0x78, + 0x70, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x65, 0x78, 0x70, 0x69, + 0x72, 0x65, 0x73, 0x41, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x6b, 0x65, 0x79, 0x5f, 0x65, 0x78, 0x70, + 0x69, 0x72, 0x79, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x10, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x11, 0x6b, 0x65, 0x79, 0x45, 0x78, 0x70, 0x69, 0x72, 0x79, 0x44, 0x69, 0x73, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x32, 0x0a, 0x12, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x65, + 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, + 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x42, 0x3d, 0x5a, 0x3b, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6a, 0x73, 0x69, 0x65, 0x62, 0x65, 0x6e, 0x73, + 0x2f, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x67, 0x65, + 0x6e, 0x2f, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x69, 0x6f, + 0x6e, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -573,7 +791,7 @@ func file_ionscale_v1_machines_proto_rawDescGZIP() []byte { return file_ionscale_v1_machines_proto_rawDescData } -var file_ionscale_v1_machines_proto_msgTypes = make([]protoimpl.MessageInfo, 9) +var file_ionscale_v1_machines_proto_msgTypes = make([]protoimpl.MessageInfo, 12) var file_ionscale_v1_machines_proto_goTypes = []interface{}{ (*ListMachinesRequest)(nil), // 0: ionscale.v1.ListMachinesRequest (*ListMachinesResponse)(nil), // 1: ionscale.v1.ListMachinesResponse @@ -583,20 +801,27 @@ var file_ionscale_v1_machines_proto_goTypes = []interface{}{ (*ExpireMachineResponse)(nil), // 5: ionscale.v1.ExpireMachineResponse (*SetMachineKeyExpiryRequest)(nil), // 6: ionscale.v1.SetMachineKeyExpiryRequest (*SetMachineKeyExpiryResponse)(nil), // 7: ionscale.v1.SetMachineKeyExpiryResponse - (*Machine)(nil), // 8: ionscale.v1.Machine - (*timestamppb.Timestamp)(nil), // 9: google.protobuf.Timestamp - (*Ref)(nil), // 10: ionscale.v1.Ref + (*GetMachineRequest)(nil), // 8: ionscale.v1.GetMachineRequest + (*GetMachineResponse)(nil), // 9: ionscale.v1.GetMachineResponse + (*Machine)(nil), // 10: ionscale.v1.Machine + (*ClientConnectivity)(nil), // 11: ionscale.v1.ClientConnectivity + (*timestamppb.Timestamp)(nil), // 12: google.protobuf.Timestamp + (*Ref)(nil), // 13: ionscale.v1.Ref } var file_ionscale_v1_machines_proto_depIdxs = []int32{ - 8, // 0: ionscale.v1.ListMachinesResponse.machines:type_name -> ionscale.v1.Machine - 9, // 1: ionscale.v1.Machine.last_seen:type_name -> google.protobuf.Timestamp - 10, // 2: ionscale.v1.Machine.tailnet:type_name -> ionscale.v1.Ref - 10, // 3: ionscale.v1.Machine.user:type_name -> ionscale.v1.Ref - 4, // [4:4] is the sub-list for method output_type - 4, // [4:4] is the sub-list for method input_type - 4, // [4:4] is the sub-list for extension type_name - 4, // [4:4] is the sub-list for extension extendee - 0, // [0:4] is the sub-list for field type_name + 10, // 0: ionscale.v1.ListMachinesResponse.machines:type_name -> ionscale.v1.Machine + 10, // 1: ionscale.v1.GetMachineResponse.machine:type_name -> ionscale.v1.Machine + 12, // 2: ionscale.v1.Machine.last_seen:type_name -> google.protobuf.Timestamp + 13, // 3: ionscale.v1.Machine.tailnet:type_name -> ionscale.v1.Ref + 13, // 4: ionscale.v1.Machine.user:type_name -> ionscale.v1.Ref + 11, // 5: ionscale.v1.Machine.client_connectivity:type_name -> ionscale.v1.ClientConnectivity + 12, // 6: ionscale.v1.Machine.created_at:type_name -> google.protobuf.Timestamp + 12, // 7: ionscale.v1.Machine.expires_at:type_name -> google.protobuf.Timestamp + 8, // [8:8] is the sub-list for method output_type + 8, // [8:8] is the sub-list for method input_type + 8, // [8:8] is the sub-list for extension type_name + 8, // [8:8] is the sub-list for extension extendee + 0, // [0:8] is the sub-list for field type_name } func init() { file_ionscale_v1_machines_proto_init() } @@ -703,6 +928,30 @@ func file_ionscale_v1_machines_proto_init() { } } file_ionscale_v1_machines_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMachineRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_ionscale_v1_machines_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMachineResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_ionscale_v1_machines_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Machine); i { case 0: return &v.state @@ -714,6 +963,18 @@ func file_ionscale_v1_machines_proto_init() { return nil } } + file_ionscale_v1_machines_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientConnectivity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -721,7 +982,7 @@ func file_ionscale_v1_machines_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_ionscale_v1_machines_proto_rawDesc, NumEnums: 0, - NumMessages: 9, + NumMessages: 12, NumExtensions: 0, NumServices: 0, }, diff --git a/pkg/gen/ionscale/v1/ref.pb.go b/pkg/gen/ionscale/v1/ref.pb.go index 55139fd..dcb7e10 100644 --- a/pkg/gen/ionscale/v1/ref.pb.go +++ b/pkg/gen/ionscale/v1/ref.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc (unknown) // source: ionscale/v1/ref.proto diff --git a/pkg/gen/ionscale/v1/routes.pb.go b/pkg/gen/ionscale/v1/routes.pb.go index 22998ff..fab3d4b 100644 --- a/pkg/gen/ionscale/v1/routes.pb.go +++ b/pkg/gen/ionscale/v1/routes.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc (unknown) // source: ionscale/v1/routes.proto diff --git a/pkg/gen/ionscale/v1/tailnets.pb.go b/pkg/gen/ionscale/v1/tailnets.pb.go index a3430ad..d81b068 100644 --- a/pkg/gen/ionscale/v1/tailnets.pb.go +++ b/pkg/gen/ionscale/v1/tailnets.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc (unknown) // source: ionscale/v1/tailnets.proto diff --git a/pkg/gen/ionscale/v1/users.pb.go b/pkg/gen/ionscale/v1/users.pb.go index e957abd..3f89069 100644 --- a/pkg/gen/ionscale/v1/users.pb.go +++ b/pkg/gen/ionscale/v1/users.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc (unknown) // source: ionscale/v1/users.proto diff --git a/pkg/gen/ionscale/v1/version.pb.go b/pkg/gen/ionscale/v1/version.pb.go index 5ed3fdb..e6a6c01 100644 --- a/pkg/gen/ionscale/v1/version.pb.go +++ b/pkg/gen/ionscale/v1/version.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc (unknown) // source: ionscale/v1/version.proto diff --git a/proto/ionscale/v1/ionscale.proto b/proto/ionscale/v1/ionscale.proto index 64d9434..5e54223 100644 --- a/proto/ionscale/v1/ionscale.proto +++ b/proto/ionscale/v1/ionscale.proto @@ -48,6 +48,7 @@ service IonscaleService { rpc ListUsers(ListUsersRequest) returns (ListUsersResponse) {} rpc DeleteUser(DeleteUserRequest) returns (DeleteUserResponse) {} + rpc GetMachine (GetMachineRequest) returns (GetMachineResponse) {} rpc ListMachines (ListMachinesRequest) returns (ListMachinesResponse) {} rpc ExpireMachine(ExpireMachineRequest) returns (ExpireMachineResponse) {} rpc DeleteMachine(DeleteMachineRequest) returns (DeleteMachineResponse) {} diff --git a/proto/ionscale/v1/machines.proto b/proto/ionscale/v1/machines.proto index 8a9430a..63dcc43 100644 --- a/proto/ionscale/v1/machines.proto +++ b/proto/ionscale/v1/machines.proto @@ -35,6 +35,14 @@ message SetMachineKeyExpiryRequest { message SetMachineKeyExpiryResponse {} +message GetMachineRequest { + uint64 machine_id = 1; +} + +message GetMachineResponse { + Machine machine = 1; +} + message Machine { uint64 id = 1; string name = 2; @@ -46,4 +54,14 @@ message Machine { Ref tailnet = 8; Ref user = 9; repeated string tags = 10; -} \ No newline at end of file + string client_version = 11; + string os = 12; + ClientConnectivity client_connectivity = 13; + google.protobuf.Timestamp created_at = 14; + google.protobuf.Timestamp expires_at = 15; + bool key_expiry_disabled = 16; +} + +message ClientConnectivity { + repeated string endpoints = 1; +}