Resolve merge
This commit is contained in:
commit
2fd36dd254
|
@ -46,30 +46,6 @@ func init() {
|
||||||
log.Fatalf(err.Error())
|
log.Fatalf(err.Error())
|
||||||
}
|
}
|
||||||
nodeCmd.AddCommand(deleteNodeCmd)
|
nodeCmd.AddCommand(deleteNodeCmd)
|
||||||
|
|
||||||
shareMachineCmd.Flags().StringP("namespace", "n", "", "Namespace")
|
|
||||||
err = shareMachineCmd.MarkFlagRequired("namespace")
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf(err.Error())
|
|
||||||
}
|
|
||||||
shareMachineCmd.Flags().Uint64P("identifier", "i", 0, "Node identifier (ID)")
|
|
||||||
err = shareMachineCmd.MarkFlagRequired("identifier")
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf(err.Error())
|
|
||||||
}
|
|
||||||
nodeCmd.AddCommand(shareMachineCmd)
|
|
||||||
|
|
||||||
unshareMachineCmd.Flags().StringP("namespace", "n", "", "Namespace")
|
|
||||||
err = unshareMachineCmd.MarkFlagRequired("namespace")
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf(err.Error())
|
|
||||||
}
|
|
||||||
unshareMachineCmd.Flags().Uint64P("identifier", "i", 0, "Node identifier (ID)")
|
|
||||||
err = unshareMachineCmd.MarkFlagRequired("identifier")
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf(err.Error())
|
|
||||||
}
|
|
||||||
nodeCmd.AddCommand(unshareMachineCmd)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var nodeCmd = &cobra.Command{
|
var nodeCmd = &cobra.Command{
|
||||||
|
@ -317,139 +293,6 @@ var deleteNodeCmd = &cobra.Command{
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func sharingWorker(
|
|
||||||
cmd *cobra.Command,
|
|
||||||
) (string, *v1.Machine, *v1.Namespace, error) {
|
|
||||||
output, _ := cmd.Flags().GetString("output")
|
|
||||||
namespaceStr, err := cmd.Flags().GetString("namespace")
|
|
||||||
if err != nil {
|
|
||||||
ErrorOutput(err, fmt.Sprintf("Error getting namespace: %s", err), output)
|
|
||||||
|
|
||||||
return "", nil, nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx, client, conn, cancel := getHeadscaleCLIClient()
|
|
||||||
defer cancel()
|
|
||||||
defer conn.Close()
|
|
||||||
|
|
||||||
identifier, err := cmd.Flags().GetUint64("identifier")
|
|
||||||
if err != nil {
|
|
||||||
ErrorOutput(err, fmt.Sprintf("Error converting ID to integer: %s", err), output)
|
|
||||||
|
|
||||||
return "", nil, nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
machineRequest := &v1.GetMachineRequest{
|
|
||||||
MachineId: identifier,
|
|
||||||
}
|
|
||||||
|
|
||||||
machineResponse, err := client.GetMachine(ctx, machineRequest)
|
|
||||||
if err != nil {
|
|
||||||
ErrorOutput(
|
|
||||||
err,
|
|
||||||
fmt.Sprintf("Error getting node node: %s", status.Convert(err).Message()),
|
|
||||||
output,
|
|
||||||
)
|
|
||||||
|
|
||||||
return "", nil, nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
namespaceRequest := &v1.GetNamespaceRequest{
|
|
||||||
Name: namespaceStr,
|
|
||||||
}
|
|
||||||
|
|
||||||
namespaceResponse, err := client.GetNamespace(ctx, namespaceRequest)
|
|
||||||
if err != nil {
|
|
||||||
ErrorOutput(
|
|
||||||
err,
|
|
||||||
fmt.Sprintf("Error getting node node: %s", status.Convert(err).Message()),
|
|
||||||
output,
|
|
||||||
)
|
|
||||||
|
|
||||||
return "", nil, nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return output, machineResponse.GetMachine(), namespaceResponse.GetNamespace(), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var shareMachineCmd = &cobra.Command{
|
|
||||||
Use: "share",
|
|
||||||
Short: "Shares a node from the current namespace to the specified one",
|
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
|
||||||
output, machine, namespace, err := sharingWorker(cmd)
|
|
||||||
if err != nil {
|
|
||||||
ErrorOutput(
|
|
||||||
err,
|
|
||||||
fmt.Sprintf("Failed to fetch namespace or machine: %s", err),
|
|
||||||
output,
|
|
||||||
)
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx, client, conn, cancel := getHeadscaleCLIClient()
|
|
||||||
defer cancel()
|
|
||||||
defer conn.Close()
|
|
||||||
|
|
||||||
request := &v1.ShareMachineRequest{
|
|
||||||
MachineId: machine.Id,
|
|
||||||
Namespace: namespace.Name,
|
|
||||||
}
|
|
||||||
|
|
||||||
response, err := client.ShareMachine(ctx, request)
|
|
||||||
if err != nil {
|
|
||||||
ErrorOutput(
|
|
||||||
err,
|
|
||||||
fmt.Sprintf("Error sharing node: %s", status.Convert(err).Message()),
|
|
||||||
output,
|
|
||||||
)
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
SuccessOutput(response.Machine, "Node shared", output)
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
var unshareMachineCmd = &cobra.Command{
|
|
||||||
Use: "unshare",
|
|
||||||
Short: "Unshares a node from the specified namespace",
|
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
|
||||||
output, machine, namespace, err := sharingWorker(cmd)
|
|
||||||
if err != nil {
|
|
||||||
ErrorOutput(
|
|
||||||
err,
|
|
||||||
fmt.Sprintf("Failed to fetch namespace or machine: %s", err),
|
|
||||||
output,
|
|
||||||
)
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx, client, conn, cancel := getHeadscaleCLIClient()
|
|
||||||
defer cancel()
|
|
||||||
defer conn.Close()
|
|
||||||
|
|
||||||
request := &v1.UnshareMachineRequest{
|
|
||||||
MachineId: machine.Id,
|
|
||||||
Namespace: namespace.Name,
|
|
||||||
}
|
|
||||||
|
|
||||||
response, err := client.UnshareMachine(ctx, request)
|
|
||||||
if err != nil {
|
|
||||||
ErrorOutput(
|
|
||||||
err,
|
|
||||||
fmt.Sprintf("Error unsharing node: %s", status.Convert(err).Message()),
|
|
||||||
output,
|
|
||||||
)
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
SuccessOutput(response.Machine, "Node unshared", output)
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
func nodesToPtables(
|
func nodesToPtables(
|
||||||
currentNamespace string,
|
currentNamespace string,
|
||||||
machines []*v1.Machine,
|
machines []*v1.Machine,
|
||||||
|
|
5
db.go
5
db.go
|
@ -54,10 +54,7 @@ func (h *Headscale) initDB() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = db.AutoMigrate(&SharedMachine{})
|
_ = db.Migrator().DropTable("shared_machines")
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
err = db.AutoMigrate(&APIKey{})
|
err = db.AutoMigrate(&APIKey{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
32
dns_test.go
32
dns_test.go
|
@ -1,8 +1,6 @@
|
||||||
package headscale
|
package headscale
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"gopkg.in/check.v1"
|
"gopkg.in/check.v1"
|
||||||
"inet.af/netaddr"
|
"inet.af/netaddr"
|
||||||
"tailscale.com/tailcfg"
|
"tailscale.com/tailcfg"
|
||||||
|
@ -225,9 +223,6 @@ func (s *Suite) TestDNSConfigMapResponseWithMagicDNS(c *check.C) {
|
||||||
}
|
}
|
||||||
app.db.Save(machine2InShared1)
|
app.db.Save(machine2InShared1)
|
||||||
|
|
||||||
err = app.AddSharedMachineToNamespace(machineInShared2, namespaceShared1)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
|
|
||||||
baseDomain := "foobar.headscale.net"
|
baseDomain := "foobar.headscale.net"
|
||||||
dnsConfigOrig := tailcfg.DNSConfig{
|
dnsConfigOrig := tailcfg.DNSConfig{
|
||||||
Routes: make(map[string][]dnstype.Resolver),
|
Routes: make(map[string][]dnstype.Resolver),
|
||||||
|
@ -245,19 +240,21 @@ func (s *Suite) TestDNSConfigMapResponseWithMagicDNS(c *check.C) {
|
||||||
peersOfMachineInShared1,
|
peersOfMachineInShared1,
|
||||||
)
|
)
|
||||||
c.Assert(dnsConfig, check.NotNil)
|
c.Assert(dnsConfig, check.NotNil)
|
||||||
c.Assert(len(dnsConfig.Routes), check.Equals, 2)
|
|
||||||
|
|
||||||
domainRouteShared1 := fmt.Sprintf("%s.%s", namespaceShared1.Name, baseDomain)
|
// TODO: Remove comment out when we have all nodes available to every node
|
||||||
_, ok := dnsConfig.Routes[domainRouteShared1]
|
// c.Assert(len(dnsConfig.Routes), check.Equals, 2)
|
||||||
c.Assert(ok, check.Equals, true)
|
|
||||||
|
|
||||||
domainRouteShared2 := fmt.Sprintf("%s.%s", namespaceShared2.Name, baseDomain)
|
// domainRouteShared1 := fmt.Sprintf("%s.%s", namespaceShared1.Name, baseDomain)
|
||||||
_, ok = dnsConfig.Routes[domainRouteShared2]
|
// _, ok := dnsConfig.Routes[domainRouteShared1]
|
||||||
c.Assert(ok, check.Equals, true)
|
// c.Assert(ok, check.Equals, true)
|
||||||
|
//
|
||||||
domainRouteShared3 := fmt.Sprintf("%s.%s", namespaceShared3.Name, baseDomain)
|
// domainRouteShared2 := fmt.Sprintf("%s.%s", namespaceShared2.Name, baseDomain)
|
||||||
_, ok = dnsConfig.Routes[domainRouteShared3]
|
// _, ok = dnsConfig.Routes[domainRouteShared2]
|
||||||
c.Assert(ok, check.Equals, false)
|
// c.Assert(ok, check.Equals, true)
|
||||||
|
//
|
||||||
|
// domainRouteShared3 := fmt.Sprintf("%s.%s", namespaceShared3.Name, baseDomain)
|
||||||
|
// _, ok = dnsConfig.Routes[domainRouteShared3]
|
||||||
|
// c.Assert(ok, check.Equals, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Suite) TestDNSConfigMapResponseWithoutMagicDNS(c *check.C) {
|
func (s *Suite) TestDNSConfigMapResponseWithoutMagicDNS(c *check.C) {
|
||||||
|
@ -374,9 +371,6 @@ func (s *Suite) TestDNSConfigMapResponseWithoutMagicDNS(c *check.C) {
|
||||||
}
|
}
|
||||||
app.db.Save(machine2InShared1)
|
app.db.Save(machine2InShared1)
|
||||||
|
|
||||||
err = app.AddSharedMachineToNamespace(machineInShared2, namespaceShared1)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
|
|
||||||
baseDomain := "foobar.headscale.net"
|
baseDomain := "foobar.headscale.net"
|
||||||
dnsConfigOrig := tailcfg.DNSConfig{
|
dnsConfigOrig := tailcfg.DNSConfig{
|
||||||
Routes: make(map[string][]dnstype.Resolver),
|
Routes: make(map[string][]dnstype.Resolver),
|
||||||
|
|
|
@ -7,12 +7,11 @@
|
||||||
package v1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
reflect "reflect"
|
|
||||||
sync "sync"
|
|
||||||
|
|
||||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||||
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
|
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
|
||||||
|
reflect "reflect"
|
||||||
|
sync "sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -7,12 +7,11 @@
|
||||||
package v1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
reflect "reflect"
|
|
||||||
sync "sync"
|
|
||||||
|
|
||||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||||
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
|
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
|
||||||
|
reflect "reflect"
|
||||||
|
sync "sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -7,11 +7,10 @@
|
||||||
package v1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
reflect "reflect"
|
|
||||||
|
|
||||||
_ "google.golang.org/genproto/googleapis/api/annotations"
|
_ "google.golang.org/genproto/googleapis/api/annotations"
|
||||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||||
|
reflect "reflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -37,7 +36,7 @@ var file_headscale_v1_headscale_proto_rawDesc = []byte{
|
||||||
0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2f, 0x76,
|
0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2f, 0x76,
|
||||||
0x31, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19,
|
0x31, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19,
|
||||||
0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x70, 0x69,
|
0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x70, 0x69,
|
||||||
0x6b, 0x65, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xcb, 0x15, 0x0a, 0x10, 0x48, 0x65,
|
0x6b, 0x65, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xa3, 0x13, 0x0a, 0x10, 0x48, 0x65,
|
||||||
0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x77,
|
0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x77,
|
||||||
0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21,
|
0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21,
|
||||||
0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65,
|
0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65,
|
||||||
|
@ -152,68 +151,50 @@ var file_headscale_v1_headscale_proto_rawDesc = []byte{
|
||||||
0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x73, 0x52,
|
0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x73, 0x52,
|
||||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12,
|
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12,
|
||||||
0x0f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65,
|
0x0f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65,
|
||||||
0x12, 0x8d, 0x01, 0x0a, 0x0c, 0x53, 0x68, 0x61, 0x72, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e,
|
0x12, 0x8b, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52,
|
||||||
0x65, 0x12, 0x21, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31,
|
0x6f, 0x75, 0x74, 0x65, 0x12, 0x24, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65,
|
||||||
0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71,
|
0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x6f,
|
||||||
0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65,
|
0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x68, 0x65, 0x61,
|
||||||
0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65,
|
0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x63,
|
||||||
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30,
|
0x68, 0x69, 0x6e, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||||
0x22, 0x2e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e,
|
0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f,
|
||||||
0x65, 0x2f, 0x7b, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x73,
|
0x76, 0x31, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2f, 0x7b, 0x6d, 0x61, 0x63, 0x68,
|
||||||
0x68, 0x61, 0x72, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d,
|
0x69, 0x6e, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x12, 0x97,
|
||||||
0x12, 0x95, 0x01, 0x0a, 0x0e, 0x55, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x4d, 0x61, 0x63, 0x68,
|
0x01, 0x0a, 0x13, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65,
|
||||||
0x69, 0x6e, 0x65, 0x12, 0x23, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e,
|
0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61,
|
||||||
0x76, 0x31, 0x2e, 0x55, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e,
|
0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x61, 0x63, 0x68,
|
||||||
0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73,
|
0x69, 0x6e, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||||
0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x4d,
|
0x1a, 0x29, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e,
|
||||||
0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38,
|
0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x6f, 0x75,
|
||||||
0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x22, 0x30, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f,
|
0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4,
|
||||||
0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2f, 0x7b, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65,
|
0x93, 0x02, 0x25, 0x22, 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x63,
|
||||||
0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x2f, 0x7b, 0x6e, 0x61,
|
0x68, 0x69, 0x6e, 0x65, 0x2f, 0x7b, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5f, 0x69, 0x64,
|
||||||
0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x12, 0x8b, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74,
|
0x7d, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x12, 0x70, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61,
|
||||||
0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x24, 0x2e, 0x68,
|
0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73,
|
||||||
0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d,
|
0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70,
|
||||||
0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
|
0x69, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x68, 0x65,
|
||||||
0x73, 0x74, 0x1a, 0x25, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76,
|
0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
|
||||||
0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x6f, 0x75, 0x74,
|
0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
|
||||||
0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02,
|
0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31,
|
||||||
0x25, 0x12, 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69,
|
0x2f, 0x61, 0x70, 0x69, 0x6b, 0x65, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x77, 0x0a, 0x0c, 0x45, 0x78,
|
||||||
0x6e, 0x65, 0x2f, 0x7b, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f,
|
0x70, 0x69, 0x72, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x2e, 0x68, 0x65, 0x61,
|
||||||
0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x12, 0x97, 0x01, 0x0a, 0x13, 0x45, 0x6e, 0x61, 0x62, 0x6c,
|
0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65,
|
||||||
0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x12, 0x28,
|
0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e,
|
||||||
0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e,
|
0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70,
|
||||||
0x61, 0x62, 0x6c, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65,
|
0x69, 0x72, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||||
0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73,
|
0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f,
|
||||||
0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x61,
|
0x76, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x6b, 0x65, 0x79, 0x2f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65,
|
||||||
0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
|
0x3a, 0x01, 0x2a, 0x12, 0x6a, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x69, 0x4b, 0x65,
|
||||||
0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x23, 0x2f, 0x61, 0x70,
|
0x79, 0x73, 0x12, 0x20, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76,
|
||||||
0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2f, 0x7b, 0x6d, 0x61,
|
0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71,
|
||||||
0x63, 0x68, 0x69, 0x6e, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73,
|
0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65,
|
||||||
0x12, 0x70, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79,
|
0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x73, 0x52,
|
||||||
0x12, 0x21, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e,
|
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12,
|
||||||
0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75,
|
0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x6b, 0x65, 0x79, 0x42,
|
||||||
0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e,
|
0x29, 0x5a, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6a, 0x75,
|
||||||
0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52,
|
0x61, 0x6e, 0x66, 0x6f, 0x6e, 0x74, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65,
|
||||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22,
|
0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
|
||||||
0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x6b, 0x65, 0x79, 0x3a,
|
0x6f, 0x33,
|
||||||
0x01, 0x2a, 0x12, 0x77, 0x0a, 0x0c, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x41, 0x70, 0x69, 0x4b,
|
|
||||||
0x65, 0x79, 0x12, 0x21, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76,
|
|
||||||
0x31, 0x2e, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, 0x65,
|
|
||||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c,
|
|
||||||
0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65,
|
|
||||||
0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02,
|
|
||||||
0x1a, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x6b, 0x65,
|
|
||||||
0x79, 0x2f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x6a, 0x0a, 0x0b, 0x4c,
|
|
||||||
0x69, 0x73, 0x74, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x20, 0x2e, 0x68, 0x65, 0x61,
|
|
||||||
0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70,
|
|
||||||
0x69, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x68,
|
|
||||||
0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74,
|
|
||||||
0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
|
|
||||||
0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31,
|
|
||||||
0x2f, 0x61, 0x70, 0x69, 0x6b, 0x65, 0x79, 0x42, 0x29, 0x5a, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75,
|
|
||||||
0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6a, 0x75, 0x61, 0x6e, 0x66, 0x6f, 0x6e, 0x74, 0x2f, 0x68,
|
|
||||||
0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f,
|
|
||||||
0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var file_headscale_v1_headscale_proto_goTypes = []interface{}{
|
var file_headscale_v1_headscale_proto_goTypes = []interface{}{
|
||||||
|
@ -231,34 +212,30 @@ var file_headscale_v1_headscale_proto_goTypes = []interface{}{
|
||||||
(*DeleteMachineRequest)(nil), // 11: headscale.v1.DeleteMachineRequest
|
(*DeleteMachineRequest)(nil), // 11: headscale.v1.DeleteMachineRequest
|
||||||
(*ExpireMachineRequest)(nil), // 12: headscale.v1.ExpireMachineRequest
|
(*ExpireMachineRequest)(nil), // 12: headscale.v1.ExpireMachineRequest
|
||||||
(*ListMachinesRequest)(nil), // 13: headscale.v1.ListMachinesRequest
|
(*ListMachinesRequest)(nil), // 13: headscale.v1.ListMachinesRequest
|
||||||
(*ShareMachineRequest)(nil), // 14: headscale.v1.ShareMachineRequest
|
(*GetMachineRouteRequest)(nil), // 14: headscale.v1.GetMachineRouteRequest
|
||||||
(*UnshareMachineRequest)(nil), // 15: headscale.v1.UnshareMachineRequest
|
(*EnableMachineRoutesRequest)(nil), // 15: headscale.v1.EnableMachineRoutesRequest
|
||||||
(*GetMachineRouteRequest)(nil), // 16: headscale.v1.GetMachineRouteRequest
|
(*CreateApiKeyRequest)(nil), // 16: headscale.v1.CreateApiKeyRequest
|
||||||
(*EnableMachineRoutesRequest)(nil), // 17: headscale.v1.EnableMachineRoutesRequest
|
(*ExpireApiKeyRequest)(nil), // 17: headscale.v1.ExpireApiKeyRequest
|
||||||
(*CreateApiKeyRequest)(nil), // 18: headscale.v1.CreateApiKeyRequest
|
(*ListApiKeysRequest)(nil), // 18: headscale.v1.ListApiKeysRequest
|
||||||
(*ExpireApiKeyRequest)(nil), // 19: headscale.v1.ExpireApiKeyRequest
|
(*GetNamespaceResponse)(nil), // 19: headscale.v1.GetNamespaceResponse
|
||||||
(*ListApiKeysRequest)(nil), // 20: headscale.v1.ListApiKeysRequest
|
(*CreateNamespaceResponse)(nil), // 20: headscale.v1.CreateNamespaceResponse
|
||||||
(*GetNamespaceResponse)(nil), // 21: headscale.v1.GetNamespaceResponse
|
(*RenameNamespaceResponse)(nil), // 21: headscale.v1.RenameNamespaceResponse
|
||||||
(*CreateNamespaceResponse)(nil), // 22: headscale.v1.CreateNamespaceResponse
|
(*DeleteNamespaceResponse)(nil), // 22: headscale.v1.DeleteNamespaceResponse
|
||||||
(*RenameNamespaceResponse)(nil), // 23: headscale.v1.RenameNamespaceResponse
|
(*ListNamespacesResponse)(nil), // 23: headscale.v1.ListNamespacesResponse
|
||||||
(*DeleteNamespaceResponse)(nil), // 24: headscale.v1.DeleteNamespaceResponse
|
(*CreatePreAuthKeyResponse)(nil), // 24: headscale.v1.CreatePreAuthKeyResponse
|
||||||
(*ListNamespacesResponse)(nil), // 25: headscale.v1.ListNamespacesResponse
|
(*ExpirePreAuthKeyResponse)(nil), // 25: headscale.v1.ExpirePreAuthKeyResponse
|
||||||
(*CreatePreAuthKeyResponse)(nil), // 26: headscale.v1.CreatePreAuthKeyResponse
|
(*ListPreAuthKeysResponse)(nil), // 26: headscale.v1.ListPreAuthKeysResponse
|
||||||
(*ExpirePreAuthKeyResponse)(nil), // 27: headscale.v1.ExpirePreAuthKeyResponse
|
(*DebugCreateMachineResponse)(nil), // 27: headscale.v1.DebugCreateMachineResponse
|
||||||
(*ListPreAuthKeysResponse)(nil), // 28: headscale.v1.ListPreAuthKeysResponse
|
(*GetMachineResponse)(nil), // 28: headscale.v1.GetMachineResponse
|
||||||
(*DebugCreateMachineResponse)(nil), // 29: headscale.v1.DebugCreateMachineResponse
|
(*RegisterMachineResponse)(nil), // 29: headscale.v1.RegisterMachineResponse
|
||||||
(*GetMachineResponse)(nil), // 30: headscale.v1.GetMachineResponse
|
(*DeleteMachineResponse)(nil), // 30: headscale.v1.DeleteMachineResponse
|
||||||
(*RegisterMachineResponse)(nil), // 31: headscale.v1.RegisterMachineResponse
|
(*ExpireMachineResponse)(nil), // 31: headscale.v1.ExpireMachineResponse
|
||||||
(*DeleteMachineResponse)(nil), // 32: headscale.v1.DeleteMachineResponse
|
(*ListMachinesResponse)(nil), // 32: headscale.v1.ListMachinesResponse
|
||||||
(*ExpireMachineResponse)(nil), // 33: headscale.v1.ExpireMachineResponse
|
(*GetMachineRouteResponse)(nil), // 33: headscale.v1.GetMachineRouteResponse
|
||||||
(*ListMachinesResponse)(nil), // 34: headscale.v1.ListMachinesResponse
|
(*EnableMachineRoutesResponse)(nil), // 34: headscale.v1.EnableMachineRoutesResponse
|
||||||
(*ShareMachineResponse)(nil), // 35: headscale.v1.ShareMachineResponse
|
(*CreateApiKeyResponse)(nil), // 35: headscale.v1.CreateApiKeyResponse
|
||||||
(*UnshareMachineResponse)(nil), // 36: headscale.v1.UnshareMachineResponse
|
(*ExpireApiKeyResponse)(nil), // 36: headscale.v1.ExpireApiKeyResponse
|
||||||
(*GetMachineRouteResponse)(nil), // 37: headscale.v1.GetMachineRouteResponse
|
(*ListApiKeysResponse)(nil), // 37: headscale.v1.ListApiKeysResponse
|
||||||
(*EnableMachineRoutesResponse)(nil), // 38: headscale.v1.EnableMachineRoutesResponse
|
|
||||||
(*CreateApiKeyResponse)(nil), // 39: headscale.v1.CreateApiKeyResponse
|
|
||||||
(*ExpireApiKeyResponse)(nil), // 40: headscale.v1.ExpireApiKeyResponse
|
|
||||||
(*ListApiKeysResponse)(nil), // 41: headscale.v1.ListApiKeysResponse
|
|
||||||
}
|
}
|
||||||
var file_headscale_v1_headscale_proto_depIdxs = []int32{
|
var file_headscale_v1_headscale_proto_depIdxs = []int32{
|
||||||
0, // 0: headscale.v1.HeadscaleService.GetNamespace:input_type -> headscale.v1.GetNamespaceRequest
|
0, // 0: headscale.v1.HeadscaleService.GetNamespace:input_type -> headscale.v1.GetNamespaceRequest
|
||||||
|
@ -275,36 +252,32 @@ var file_headscale_v1_headscale_proto_depIdxs = []int32{
|
||||||
11, // 11: headscale.v1.HeadscaleService.DeleteMachine:input_type -> headscale.v1.DeleteMachineRequest
|
11, // 11: headscale.v1.HeadscaleService.DeleteMachine:input_type -> headscale.v1.DeleteMachineRequest
|
||||||
12, // 12: headscale.v1.HeadscaleService.ExpireMachine:input_type -> headscale.v1.ExpireMachineRequest
|
12, // 12: headscale.v1.HeadscaleService.ExpireMachine:input_type -> headscale.v1.ExpireMachineRequest
|
||||||
13, // 13: headscale.v1.HeadscaleService.ListMachines:input_type -> headscale.v1.ListMachinesRequest
|
13, // 13: headscale.v1.HeadscaleService.ListMachines:input_type -> headscale.v1.ListMachinesRequest
|
||||||
14, // 14: headscale.v1.HeadscaleService.ShareMachine:input_type -> headscale.v1.ShareMachineRequest
|
14, // 14: headscale.v1.HeadscaleService.GetMachineRoute:input_type -> headscale.v1.GetMachineRouteRequest
|
||||||
15, // 15: headscale.v1.HeadscaleService.UnshareMachine:input_type -> headscale.v1.UnshareMachineRequest
|
15, // 15: headscale.v1.HeadscaleService.EnableMachineRoutes:input_type -> headscale.v1.EnableMachineRoutesRequest
|
||||||
16, // 16: headscale.v1.HeadscaleService.GetMachineRoute:input_type -> headscale.v1.GetMachineRouteRequest
|
16, // 16: headscale.v1.HeadscaleService.CreateApiKey:input_type -> headscale.v1.CreateApiKeyRequest
|
||||||
17, // 17: headscale.v1.HeadscaleService.EnableMachineRoutes:input_type -> headscale.v1.EnableMachineRoutesRequest
|
17, // 17: headscale.v1.HeadscaleService.ExpireApiKey:input_type -> headscale.v1.ExpireApiKeyRequest
|
||||||
18, // 18: headscale.v1.HeadscaleService.CreateApiKey:input_type -> headscale.v1.CreateApiKeyRequest
|
18, // 18: headscale.v1.HeadscaleService.ListApiKeys:input_type -> headscale.v1.ListApiKeysRequest
|
||||||
19, // 19: headscale.v1.HeadscaleService.ExpireApiKey:input_type -> headscale.v1.ExpireApiKeyRequest
|
19, // 19: headscale.v1.HeadscaleService.GetNamespace:output_type -> headscale.v1.GetNamespaceResponse
|
||||||
20, // 20: headscale.v1.HeadscaleService.ListApiKeys:input_type -> headscale.v1.ListApiKeysRequest
|
20, // 20: headscale.v1.HeadscaleService.CreateNamespace:output_type -> headscale.v1.CreateNamespaceResponse
|
||||||
21, // 21: headscale.v1.HeadscaleService.GetNamespace:output_type -> headscale.v1.GetNamespaceResponse
|
21, // 21: headscale.v1.HeadscaleService.RenameNamespace:output_type -> headscale.v1.RenameNamespaceResponse
|
||||||
22, // 22: headscale.v1.HeadscaleService.CreateNamespace:output_type -> headscale.v1.CreateNamespaceResponse
|
22, // 22: headscale.v1.HeadscaleService.DeleteNamespace:output_type -> headscale.v1.DeleteNamespaceResponse
|
||||||
23, // 23: headscale.v1.HeadscaleService.RenameNamespace:output_type -> headscale.v1.RenameNamespaceResponse
|
23, // 23: headscale.v1.HeadscaleService.ListNamespaces:output_type -> headscale.v1.ListNamespacesResponse
|
||||||
24, // 24: headscale.v1.HeadscaleService.DeleteNamespace:output_type -> headscale.v1.DeleteNamespaceResponse
|
24, // 24: headscale.v1.HeadscaleService.CreatePreAuthKey:output_type -> headscale.v1.CreatePreAuthKeyResponse
|
||||||
25, // 25: headscale.v1.HeadscaleService.ListNamespaces:output_type -> headscale.v1.ListNamespacesResponse
|
25, // 25: headscale.v1.HeadscaleService.ExpirePreAuthKey:output_type -> headscale.v1.ExpirePreAuthKeyResponse
|
||||||
26, // 26: headscale.v1.HeadscaleService.CreatePreAuthKey:output_type -> headscale.v1.CreatePreAuthKeyResponse
|
26, // 26: headscale.v1.HeadscaleService.ListPreAuthKeys:output_type -> headscale.v1.ListPreAuthKeysResponse
|
||||||
27, // 27: headscale.v1.HeadscaleService.ExpirePreAuthKey:output_type -> headscale.v1.ExpirePreAuthKeyResponse
|
27, // 27: headscale.v1.HeadscaleService.DebugCreateMachine:output_type -> headscale.v1.DebugCreateMachineResponse
|
||||||
28, // 28: headscale.v1.HeadscaleService.ListPreAuthKeys:output_type -> headscale.v1.ListPreAuthKeysResponse
|
28, // 28: headscale.v1.HeadscaleService.GetMachine:output_type -> headscale.v1.GetMachineResponse
|
||||||
29, // 29: headscale.v1.HeadscaleService.DebugCreateMachine:output_type -> headscale.v1.DebugCreateMachineResponse
|
29, // 29: headscale.v1.HeadscaleService.RegisterMachine:output_type -> headscale.v1.RegisterMachineResponse
|
||||||
30, // 30: headscale.v1.HeadscaleService.GetMachine:output_type -> headscale.v1.GetMachineResponse
|
30, // 30: headscale.v1.HeadscaleService.DeleteMachine:output_type -> headscale.v1.DeleteMachineResponse
|
||||||
31, // 31: headscale.v1.HeadscaleService.RegisterMachine:output_type -> headscale.v1.RegisterMachineResponse
|
31, // 31: headscale.v1.HeadscaleService.ExpireMachine:output_type -> headscale.v1.ExpireMachineResponse
|
||||||
32, // 32: headscale.v1.HeadscaleService.DeleteMachine:output_type -> headscale.v1.DeleteMachineResponse
|
32, // 32: headscale.v1.HeadscaleService.ListMachines:output_type -> headscale.v1.ListMachinesResponse
|
||||||
33, // 33: headscale.v1.HeadscaleService.ExpireMachine:output_type -> headscale.v1.ExpireMachineResponse
|
33, // 33: headscale.v1.HeadscaleService.GetMachineRoute:output_type -> headscale.v1.GetMachineRouteResponse
|
||||||
34, // 34: headscale.v1.HeadscaleService.ListMachines:output_type -> headscale.v1.ListMachinesResponse
|
34, // 34: headscale.v1.HeadscaleService.EnableMachineRoutes:output_type -> headscale.v1.EnableMachineRoutesResponse
|
||||||
35, // 35: headscale.v1.HeadscaleService.ShareMachine:output_type -> headscale.v1.ShareMachineResponse
|
35, // 35: headscale.v1.HeadscaleService.CreateApiKey:output_type -> headscale.v1.CreateApiKeyResponse
|
||||||
36, // 36: headscale.v1.HeadscaleService.UnshareMachine:output_type -> headscale.v1.UnshareMachineResponse
|
36, // 36: headscale.v1.HeadscaleService.ExpireApiKey:output_type -> headscale.v1.ExpireApiKeyResponse
|
||||||
37, // 37: headscale.v1.HeadscaleService.GetMachineRoute:output_type -> headscale.v1.GetMachineRouteResponse
|
37, // 37: headscale.v1.HeadscaleService.ListApiKeys:output_type -> headscale.v1.ListApiKeysResponse
|
||||||
38, // 38: headscale.v1.HeadscaleService.EnableMachineRoutes:output_type -> headscale.v1.EnableMachineRoutesResponse
|
19, // [19:38] is the sub-list for method output_type
|
||||||
39, // 39: headscale.v1.HeadscaleService.CreateApiKey:output_type -> headscale.v1.CreateApiKeyResponse
|
0, // [0:19] is the sub-list for method input_type
|
||||||
40, // 40: headscale.v1.HeadscaleService.ExpireApiKey:output_type -> headscale.v1.ExpireApiKeyResponse
|
|
||||||
41, // 41: headscale.v1.HeadscaleService.ListApiKeys:output_type -> headscale.v1.ListApiKeysResponse
|
|
||||||
21, // [21:42] is the sub-list for method output_type
|
|
||||||
0, // [0:21] 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 type_name
|
||||||
0, // [0:0] is the sub-list for extension extendee
|
0, // [0:0] is the sub-list for extension extendee
|
||||||
0, // [0:0] is the sub-list for field type_name
|
0, // [0:0] is the sub-list for field type_name
|
||||||
|
|
|
@ -625,150 +625,6 @@ func local_request_HeadscaleService_ListMachines_0(ctx context.Context, marshale
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func request_HeadscaleService_ShareMachine_0(ctx context.Context, marshaler runtime.Marshaler, client HeadscaleServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
|
|
||||||
var protoReq ShareMachineRequest
|
|
||||||
var metadata runtime.ServerMetadata
|
|
||||||
|
|
||||||
var (
|
|
||||||
val string
|
|
||||||
ok bool
|
|
||||||
err error
|
|
||||||
_ = err
|
|
||||||
)
|
|
||||||
|
|
||||||
val, ok = pathParams["machine_id"]
|
|
||||||
if !ok {
|
|
||||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "machine_id")
|
|
||||||
}
|
|
||||||
|
|
||||||
protoReq.MachineId, err = runtime.Uint64(val)
|
|
||||||
if err != nil {
|
|
||||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "machine_id", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
val, ok = pathParams["namespace"]
|
|
||||||
if !ok {
|
|
||||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
|
|
||||||
}
|
|
||||||
|
|
||||||
protoReq.Namespace, err = runtime.String(val)
|
|
||||||
if err != nil {
|
|
||||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
msg, err := client.ShareMachine(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
|
|
||||||
return msg, metadata, err
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func local_request_HeadscaleService_ShareMachine_0(ctx context.Context, marshaler runtime.Marshaler, server HeadscaleServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
|
|
||||||
var protoReq ShareMachineRequest
|
|
||||||
var metadata runtime.ServerMetadata
|
|
||||||
|
|
||||||
var (
|
|
||||||
val string
|
|
||||||
ok bool
|
|
||||||
err error
|
|
||||||
_ = err
|
|
||||||
)
|
|
||||||
|
|
||||||
val, ok = pathParams["machine_id"]
|
|
||||||
if !ok {
|
|
||||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "machine_id")
|
|
||||||
}
|
|
||||||
|
|
||||||
protoReq.MachineId, err = runtime.Uint64(val)
|
|
||||||
if err != nil {
|
|
||||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "machine_id", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
val, ok = pathParams["namespace"]
|
|
||||||
if !ok {
|
|
||||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
|
|
||||||
}
|
|
||||||
|
|
||||||
protoReq.Namespace, err = runtime.String(val)
|
|
||||||
if err != nil {
|
|
||||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
msg, err := server.ShareMachine(ctx, &protoReq)
|
|
||||||
return msg, metadata, err
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func request_HeadscaleService_UnshareMachine_0(ctx context.Context, marshaler runtime.Marshaler, client HeadscaleServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
|
|
||||||
var protoReq UnshareMachineRequest
|
|
||||||
var metadata runtime.ServerMetadata
|
|
||||||
|
|
||||||
var (
|
|
||||||
val string
|
|
||||||
ok bool
|
|
||||||
err error
|
|
||||||
_ = err
|
|
||||||
)
|
|
||||||
|
|
||||||
val, ok = pathParams["machine_id"]
|
|
||||||
if !ok {
|
|
||||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "machine_id")
|
|
||||||
}
|
|
||||||
|
|
||||||
protoReq.MachineId, err = runtime.Uint64(val)
|
|
||||||
if err != nil {
|
|
||||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "machine_id", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
val, ok = pathParams["namespace"]
|
|
||||||
if !ok {
|
|
||||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
|
|
||||||
}
|
|
||||||
|
|
||||||
protoReq.Namespace, err = runtime.String(val)
|
|
||||||
if err != nil {
|
|
||||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
msg, err := client.UnshareMachine(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
|
|
||||||
return msg, metadata, err
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func local_request_HeadscaleService_UnshareMachine_0(ctx context.Context, marshaler runtime.Marshaler, server HeadscaleServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
|
|
||||||
var protoReq UnshareMachineRequest
|
|
||||||
var metadata runtime.ServerMetadata
|
|
||||||
|
|
||||||
var (
|
|
||||||
val string
|
|
||||||
ok bool
|
|
||||||
err error
|
|
||||||
_ = err
|
|
||||||
)
|
|
||||||
|
|
||||||
val, ok = pathParams["machine_id"]
|
|
||||||
if !ok {
|
|
||||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "machine_id")
|
|
||||||
}
|
|
||||||
|
|
||||||
protoReq.MachineId, err = runtime.Uint64(val)
|
|
||||||
if err != nil {
|
|
||||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "machine_id", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
val, ok = pathParams["namespace"]
|
|
||||||
if !ok {
|
|
||||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
|
|
||||||
}
|
|
||||||
|
|
||||||
protoReq.Namespace, err = runtime.String(val)
|
|
||||||
if err != nil {
|
|
||||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
msg, err := server.UnshareMachine(ctx, &protoReq)
|
|
||||||
return msg, metadata, err
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func request_HeadscaleService_GetMachineRoute_0(ctx context.Context, marshaler runtime.Marshaler, client HeadscaleServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
|
func request_HeadscaleService_GetMachineRoute_0(ctx context.Context, marshaler runtime.Marshaler, client HeadscaleServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
|
||||||
var protoReq GetMachineRouteRequest
|
var protoReq GetMachineRouteRequest
|
||||||
var metadata runtime.ServerMetadata
|
var metadata runtime.ServerMetadata
|
||||||
|
@ -1305,52 +1161,6 @@ func RegisterHeadscaleServiceHandlerServer(ctx context.Context, mux *runtime.Ser
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
mux.Handle("POST", pattern_HeadscaleService_ShareMachine_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
|
||||||
ctx, cancel := context.WithCancel(req.Context())
|
|
||||||
defer cancel()
|
|
||||||
var stream runtime.ServerTransportStream
|
|
||||||
ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
|
|
||||||
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
|
|
||||||
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/headscale.v1.HeadscaleService/ShareMachine", runtime.WithHTTPPathPattern("/api/v1/machine/{machine_id}/share/{namespace}"))
|
|
||||||
if err != nil {
|
|
||||||
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
resp, md, err := local_request_HeadscaleService_ShareMachine_0(rctx, inboundMarshaler, server, req, pathParams)
|
|
||||||
md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
|
|
||||||
ctx = runtime.NewServerMetadataContext(ctx, md)
|
|
||||||
if err != nil {
|
|
||||||
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
forward_HeadscaleService_ShareMachine_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
mux.Handle("POST", pattern_HeadscaleService_UnshareMachine_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
|
||||||
ctx, cancel := context.WithCancel(req.Context())
|
|
||||||
defer cancel()
|
|
||||||
var stream runtime.ServerTransportStream
|
|
||||||
ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
|
|
||||||
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
|
|
||||||
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/headscale.v1.HeadscaleService/UnshareMachine", runtime.WithHTTPPathPattern("/api/v1/machine/{machine_id}/unshare/{namespace}"))
|
|
||||||
if err != nil {
|
|
||||||
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
resp, md, err := local_request_HeadscaleService_UnshareMachine_0(rctx, inboundMarshaler, server, req, pathParams)
|
|
||||||
md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
|
|
||||||
ctx = runtime.NewServerMetadataContext(ctx, md)
|
|
||||||
if err != nil {
|
|
||||||
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
forward_HeadscaleService_UnshareMachine_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
mux.Handle("GET", pattern_HeadscaleService_GetMachineRoute_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
mux.Handle("GET", pattern_HeadscaleService_GetMachineRoute_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
||||||
ctx, cancel := context.WithCancel(req.Context())
|
ctx, cancel := context.WithCancel(req.Context())
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
@ -1787,46 +1597,6 @@ func RegisterHeadscaleServiceHandlerClient(ctx context.Context, mux *runtime.Ser
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
mux.Handle("POST", pattern_HeadscaleService_ShareMachine_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
|
||||||
ctx, cancel := context.WithCancel(req.Context())
|
|
||||||
defer cancel()
|
|
||||||
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
|
|
||||||
rctx, err := runtime.AnnotateContext(ctx, mux, req, "/headscale.v1.HeadscaleService/ShareMachine", runtime.WithHTTPPathPattern("/api/v1/machine/{machine_id}/share/{namespace}"))
|
|
||||||
if err != nil {
|
|
||||||
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
resp, md, err := request_HeadscaleService_ShareMachine_0(rctx, inboundMarshaler, client, req, pathParams)
|
|
||||||
ctx = runtime.NewServerMetadataContext(ctx, md)
|
|
||||||
if err != nil {
|
|
||||||
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
forward_HeadscaleService_ShareMachine_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
mux.Handle("POST", pattern_HeadscaleService_UnshareMachine_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
|
||||||
ctx, cancel := context.WithCancel(req.Context())
|
|
||||||
defer cancel()
|
|
||||||
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
|
|
||||||
rctx, err := runtime.AnnotateContext(ctx, mux, req, "/headscale.v1.HeadscaleService/UnshareMachine", runtime.WithHTTPPathPattern("/api/v1/machine/{machine_id}/unshare/{namespace}"))
|
|
||||||
if err != nil {
|
|
||||||
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
resp, md, err := request_HeadscaleService_UnshareMachine_0(rctx, inboundMarshaler, client, req, pathParams)
|
|
||||||
ctx = runtime.NewServerMetadataContext(ctx, md)
|
|
||||||
if err != nil {
|
|
||||||
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
forward_HeadscaleService_UnshareMachine_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
mux.Handle("GET", pattern_HeadscaleService_GetMachineRoute_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
mux.Handle("GET", pattern_HeadscaleService_GetMachineRoute_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
||||||
ctx, cancel := context.WithCancel(req.Context())
|
ctx, cancel := context.WithCancel(req.Context())
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
@ -1959,10 +1729,6 @@ var (
|
||||||
|
|
||||||
pattern_HeadscaleService_ListMachines_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "machine"}, ""))
|
pattern_HeadscaleService_ListMachines_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "machine"}, ""))
|
||||||
|
|
||||||
pattern_HeadscaleService_ShareMachine_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "machine", "machine_id", "share", "namespace"}, ""))
|
|
||||||
|
|
||||||
pattern_HeadscaleService_UnshareMachine_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"api", "v1", "machine", "machine_id", "unshare", "namespace"}, ""))
|
|
||||||
|
|
||||||
pattern_HeadscaleService_GetMachineRoute_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"api", "v1", "machine", "machine_id", "routes"}, ""))
|
pattern_HeadscaleService_GetMachineRoute_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"api", "v1", "machine", "machine_id", "routes"}, ""))
|
||||||
|
|
||||||
pattern_HeadscaleService_EnableMachineRoutes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"api", "v1", "machine", "machine_id", "routes"}, ""))
|
pattern_HeadscaleService_EnableMachineRoutes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"api", "v1", "machine", "machine_id", "routes"}, ""))
|
||||||
|
@ -2003,10 +1769,6 @@ var (
|
||||||
|
|
||||||
forward_HeadscaleService_ListMachines_0 = runtime.ForwardResponseMessage
|
forward_HeadscaleService_ListMachines_0 = runtime.ForwardResponseMessage
|
||||||
|
|
||||||
forward_HeadscaleService_ShareMachine_0 = runtime.ForwardResponseMessage
|
|
||||||
|
|
||||||
forward_HeadscaleService_UnshareMachine_0 = runtime.ForwardResponseMessage
|
|
||||||
|
|
||||||
forward_HeadscaleService_GetMachineRoute_0 = runtime.ForwardResponseMessage
|
forward_HeadscaleService_GetMachineRoute_0 = runtime.ForwardResponseMessage
|
||||||
|
|
||||||
forward_HeadscaleService_EnableMachineRoutes_0 = runtime.ForwardResponseMessage
|
forward_HeadscaleService_EnableMachineRoutes_0 = runtime.ForwardResponseMessage
|
||||||
|
|
|
@ -1,10 +1,13 @@
|
||||||
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
|
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// - protoc-gen-go-grpc v1.2.0
|
||||||
|
// - protoc (unknown)
|
||||||
|
// source: headscale/v1/headscale.proto
|
||||||
|
|
||||||
package v1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
context "context"
|
context "context"
|
||||||
|
|
||||||
grpc "google.golang.org/grpc"
|
grpc "google.golang.org/grpc"
|
||||||
codes "google.golang.org/grpc/codes"
|
codes "google.golang.org/grpc/codes"
|
||||||
status "google.golang.org/grpc/status"
|
status "google.golang.org/grpc/status"
|
||||||
|
@ -36,8 +39,6 @@ type HeadscaleServiceClient interface {
|
||||||
DeleteMachine(ctx context.Context, in *DeleteMachineRequest, opts ...grpc.CallOption) (*DeleteMachineResponse, error)
|
DeleteMachine(ctx context.Context, in *DeleteMachineRequest, opts ...grpc.CallOption) (*DeleteMachineResponse, error)
|
||||||
ExpireMachine(ctx context.Context, in *ExpireMachineRequest, opts ...grpc.CallOption) (*ExpireMachineResponse, error)
|
ExpireMachine(ctx context.Context, in *ExpireMachineRequest, opts ...grpc.CallOption) (*ExpireMachineResponse, error)
|
||||||
ListMachines(ctx context.Context, in *ListMachinesRequest, opts ...grpc.CallOption) (*ListMachinesResponse, error)
|
ListMachines(ctx context.Context, in *ListMachinesRequest, opts ...grpc.CallOption) (*ListMachinesResponse, error)
|
||||||
ShareMachine(ctx context.Context, in *ShareMachineRequest, opts ...grpc.CallOption) (*ShareMachineResponse, error)
|
|
||||||
UnshareMachine(ctx context.Context, in *UnshareMachineRequest, opts ...grpc.CallOption) (*UnshareMachineResponse, error)
|
|
||||||
// --- Route start ---
|
// --- Route start ---
|
||||||
GetMachineRoute(ctx context.Context, in *GetMachineRouteRequest, opts ...grpc.CallOption) (*GetMachineRouteResponse, error)
|
GetMachineRoute(ctx context.Context, in *GetMachineRouteRequest, opts ...grpc.CallOption) (*GetMachineRouteResponse, error)
|
||||||
EnableMachineRoutes(ctx context.Context, in *EnableMachineRoutesRequest, opts ...grpc.CallOption) (*EnableMachineRoutesResponse, error)
|
EnableMachineRoutes(ctx context.Context, in *EnableMachineRoutesRequest, opts ...grpc.CallOption) (*EnableMachineRoutesResponse, error)
|
||||||
|
@ -181,24 +182,6 @@ func (c *headscaleServiceClient) ListMachines(ctx context.Context, in *ListMachi
|
||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *headscaleServiceClient) ShareMachine(ctx context.Context, in *ShareMachineRequest, opts ...grpc.CallOption) (*ShareMachineResponse, error) {
|
|
||||||
out := new(ShareMachineResponse)
|
|
||||||
err := c.cc.Invoke(ctx, "/headscale.v1.HeadscaleService/ShareMachine", in, out, opts...)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return out, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *headscaleServiceClient) UnshareMachine(ctx context.Context, in *UnshareMachineRequest, opts ...grpc.CallOption) (*UnshareMachineResponse, error) {
|
|
||||||
out := new(UnshareMachineResponse)
|
|
||||||
err := c.cc.Invoke(ctx, "/headscale.v1.HeadscaleService/UnshareMachine", in, out, opts...)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return out, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *headscaleServiceClient) GetMachineRoute(ctx context.Context, in *GetMachineRouteRequest, opts ...grpc.CallOption) (*GetMachineRouteResponse, error) {
|
func (c *headscaleServiceClient) GetMachineRoute(ctx context.Context, in *GetMachineRouteRequest, opts ...grpc.CallOption) (*GetMachineRouteResponse, error) {
|
||||||
out := new(GetMachineRouteResponse)
|
out := new(GetMachineRouteResponse)
|
||||||
err := c.cc.Invoke(ctx, "/headscale.v1.HeadscaleService/GetMachineRoute", in, out, opts...)
|
err := c.cc.Invoke(ctx, "/headscale.v1.HeadscaleService/GetMachineRoute", in, out, opts...)
|
||||||
|
@ -265,8 +248,6 @@ type HeadscaleServiceServer interface {
|
||||||
DeleteMachine(context.Context, *DeleteMachineRequest) (*DeleteMachineResponse, error)
|
DeleteMachine(context.Context, *DeleteMachineRequest) (*DeleteMachineResponse, error)
|
||||||
ExpireMachine(context.Context, *ExpireMachineRequest) (*ExpireMachineResponse, error)
|
ExpireMachine(context.Context, *ExpireMachineRequest) (*ExpireMachineResponse, error)
|
||||||
ListMachines(context.Context, *ListMachinesRequest) (*ListMachinesResponse, error)
|
ListMachines(context.Context, *ListMachinesRequest) (*ListMachinesResponse, error)
|
||||||
ShareMachine(context.Context, *ShareMachineRequest) (*ShareMachineResponse, error)
|
|
||||||
UnshareMachine(context.Context, *UnshareMachineRequest) (*UnshareMachineResponse, error)
|
|
||||||
// --- Route start ---
|
// --- Route start ---
|
||||||
GetMachineRoute(context.Context, *GetMachineRouteRequest) (*GetMachineRouteResponse, error)
|
GetMachineRoute(context.Context, *GetMachineRouteRequest) (*GetMachineRouteResponse, error)
|
||||||
EnableMachineRoutes(context.Context, *EnableMachineRoutesRequest) (*EnableMachineRoutesResponse, error)
|
EnableMachineRoutes(context.Context, *EnableMachineRoutesRequest) (*EnableMachineRoutesResponse, error)
|
||||||
|
@ -323,12 +304,6 @@ func (UnimplementedHeadscaleServiceServer) ExpireMachine(context.Context, *Expir
|
||||||
func (UnimplementedHeadscaleServiceServer) ListMachines(context.Context, *ListMachinesRequest) (*ListMachinesResponse, error) {
|
func (UnimplementedHeadscaleServiceServer) ListMachines(context.Context, *ListMachinesRequest) (*ListMachinesResponse, error) {
|
||||||
return nil, status.Errorf(codes.Unimplemented, "method ListMachines not implemented")
|
return nil, status.Errorf(codes.Unimplemented, "method ListMachines not implemented")
|
||||||
}
|
}
|
||||||
func (UnimplementedHeadscaleServiceServer) ShareMachine(context.Context, *ShareMachineRequest) (*ShareMachineResponse, error) {
|
|
||||||
return nil, status.Errorf(codes.Unimplemented, "method ShareMachine not implemented")
|
|
||||||
}
|
|
||||||
func (UnimplementedHeadscaleServiceServer) UnshareMachine(context.Context, *UnshareMachineRequest) (*UnshareMachineResponse, error) {
|
|
||||||
return nil, status.Errorf(codes.Unimplemented, "method UnshareMachine not implemented")
|
|
||||||
}
|
|
||||||
func (UnimplementedHeadscaleServiceServer) GetMachineRoute(context.Context, *GetMachineRouteRequest) (*GetMachineRouteResponse, error) {
|
func (UnimplementedHeadscaleServiceServer) GetMachineRoute(context.Context, *GetMachineRouteRequest) (*GetMachineRouteResponse, error) {
|
||||||
return nil, status.Errorf(codes.Unimplemented, "method GetMachineRoute not implemented")
|
return nil, status.Errorf(codes.Unimplemented, "method GetMachineRoute not implemented")
|
||||||
}
|
}
|
||||||
|
@ -609,42 +584,6 @@ func _HeadscaleService_ListMachines_Handler(srv interface{}, ctx context.Context
|
||||||
return interceptor(ctx, in, info, handler)
|
return interceptor(ctx, in, info, handler)
|
||||||
}
|
}
|
||||||
|
|
||||||
func _HeadscaleService_ShareMachine_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
|
||||||
in := new(ShareMachineRequest)
|
|
||||||
if err := dec(in); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if interceptor == nil {
|
|
||||||
return srv.(HeadscaleServiceServer).ShareMachine(ctx, in)
|
|
||||||
}
|
|
||||||
info := &grpc.UnaryServerInfo{
|
|
||||||
Server: srv,
|
|
||||||
FullMethod: "/headscale.v1.HeadscaleService/ShareMachine",
|
|
||||||
}
|
|
||||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
|
||||||
return srv.(HeadscaleServiceServer).ShareMachine(ctx, req.(*ShareMachineRequest))
|
|
||||||
}
|
|
||||||
return interceptor(ctx, in, info, handler)
|
|
||||||
}
|
|
||||||
|
|
||||||
func _HeadscaleService_UnshareMachine_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
|
||||||
in := new(UnshareMachineRequest)
|
|
||||||
if err := dec(in); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if interceptor == nil {
|
|
||||||
return srv.(HeadscaleServiceServer).UnshareMachine(ctx, in)
|
|
||||||
}
|
|
||||||
info := &grpc.UnaryServerInfo{
|
|
||||||
Server: srv,
|
|
||||||
FullMethod: "/headscale.v1.HeadscaleService/UnshareMachine",
|
|
||||||
}
|
|
||||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
|
||||||
return srv.(HeadscaleServiceServer).UnshareMachine(ctx, req.(*UnshareMachineRequest))
|
|
||||||
}
|
|
||||||
return interceptor(ctx, in, info, handler)
|
|
||||||
}
|
|
||||||
|
|
||||||
func _HeadscaleService_GetMachineRoute_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
func _HeadscaleService_GetMachineRoute_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
in := new(GetMachineRouteRequest)
|
in := new(GetMachineRouteRequest)
|
||||||
if err := dec(in); err != nil {
|
if err := dec(in); err != nil {
|
||||||
|
@ -798,14 +737,6 @@ var HeadscaleService_ServiceDesc = grpc.ServiceDesc{
|
||||||
MethodName: "ListMachines",
|
MethodName: "ListMachines",
|
||||||
Handler: _HeadscaleService_ListMachines_Handler,
|
Handler: _HeadscaleService_ListMachines_Handler,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
MethodName: "ShareMachine",
|
|
||||||
Handler: _HeadscaleService_ShareMachine_Handler,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
MethodName: "UnshareMachine",
|
|
||||||
Handler: _HeadscaleService_UnshareMachine_Handler,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
MethodName: "GetMachineRoute",
|
MethodName: "GetMachineRoute",
|
||||||
Handler: _HeadscaleService_GetMachineRoute_Handler,
|
Handler: _HeadscaleService_GetMachineRoute_Handler,
|
||||||
|
|
|
@ -7,12 +7,11 @@
|
||||||
package v1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
reflect "reflect"
|
|
||||||
sync "sync"
|
|
||||||
|
|
||||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||||
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
|
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
|
||||||
|
reflect "reflect"
|
||||||
|
sync "sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -694,210 +693,6 @@ func (x *ListMachinesResponse) GetMachines() []*Machine {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type ShareMachineRequest 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"`
|
|
||||||
Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *ShareMachineRequest) Reset() {
|
|
||||||
*x = ShareMachineRequest{}
|
|
||||||
if protoimpl.UnsafeEnabled {
|
|
||||||
mi := &file_headscale_v1_machine_proto_msgTypes[11]
|
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *ShareMachineRequest) String() string {
|
|
||||||
return protoimpl.X.MessageStringOf(x)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*ShareMachineRequest) ProtoMessage() {}
|
|
||||||
|
|
||||||
func (x *ShareMachineRequest) ProtoReflect() protoreflect.Message {
|
|
||||||
mi := &file_headscale_v1_machine_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 ShareMachineRequest.ProtoReflect.Descriptor instead.
|
|
||||||
func (*ShareMachineRequest) Descriptor() ([]byte, []int) {
|
|
||||||
return file_headscale_v1_machine_proto_rawDescGZIP(), []int{11}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *ShareMachineRequest) GetMachineId() uint64 {
|
|
||||||
if x != nil {
|
|
||||||
return x.MachineId
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *ShareMachineRequest) GetNamespace() string {
|
|
||||||
if x != nil {
|
|
||||||
return x.Namespace
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
type ShareMachineResponse struct {
|
|
||||||
state protoimpl.MessageState
|
|
||||||
sizeCache protoimpl.SizeCache
|
|
||||||
unknownFields protoimpl.UnknownFields
|
|
||||||
|
|
||||||
Machine *Machine `protobuf:"bytes,1,opt,name=machine,proto3" json:"machine,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *ShareMachineResponse) Reset() {
|
|
||||||
*x = ShareMachineResponse{}
|
|
||||||
if protoimpl.UnsafeEnabled {
|
|
||||||
mi := &file_headscale_v1_machine_proto_msgTypes[12]
|
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *ShareMachineResponse) String() string {
|
|
||||||
return protoimpl.X.MessageStringOf(x)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*ShareMachineResponse) ProtoMessage() {}
|
|
||||||
|
|
||||||
func (x *ShareMachineResponse) ProtoReflect() protoreflect.Message {
|
|
||||||
mi := &file_headscale_v1_machine_proto_msgTypes[12]
|
|
||||||
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 ShareMachineResponse.ProtoReflect.Descriptor instead.
|
|
||||||
func (*ShareMachineResponse) Descriptor() ([]byte, []int) {
|
|
||||||
return file_headscale_v1_machine_proto_rawDescGZIP(), []int{12}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *ShareMachineResponse) GetMachine() *Machine {
|
|
||||||
if x != nil {
|
|
||||||
return x.Machine
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type UnshareMachineRequest 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"`
|
|
||||||
Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *UnshareMachineRequest) Reset() {
|
|
||||||
*x = UnshareMachineRequest{}
|
|
||||||
if protoimpl.UnsafeEnabled {
|
|
||||||
mi := &file_headscale_v1_machine_proto_msgTypes[13]
|
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *UnshareMachineRequest) String() string {
|
|
||||||
return protoimpl.X.MessageStringOf(x)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*UnshareMachineRequest) ProtoMessage() {}
|
|
||||||
|
|
||||||
func (x *UnshareMachineRequest) ProtoReflect() protoreflect.Message {
|
|
||||||
mi := &file_headscale_v1_machine_proto_msgTypes[13]
|
|
||||||
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 UnshareMachineRequest.ProtoReflect.Descriptor instead.
|
|
||||||
func (*UnshareMachineRequest) Descriptor() ([]byte, []int) {
|
|
||||||
return file_headscale_v1_machine_proto_rawDescGZIP(), []int{13}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *UnshareMachineRequest) GetMachineId() uint64 {
|
|
||||||
if x != nil {
|
|
||||||
return x.MachineId
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *UnshareMachineRequest) GetNamespace() string {
|
|
||||||
if x != nil {
|
|
||||||
return x.Namespace
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
type UnshareMachineResponse struct {
|
|
||||||
state protoimpl.MessageState
|
|
||||||
sizeCache protoimpl.SizeCache
|
|
||||||
unknownFields protoimpl.UnknownFields
|
|
||||||
|
|
||||||
Machine *Machine `protobuf:"bytes,1,opt,name=machine,proto3" json:"machine,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *UnshareMachineResponse) Reset() {
|
|
||||||
*x = UnshareMachineResponse{}
|
|
||||||
if protoimpl.UnsafeEnabled {
|
|
||||||
mi := &file_headscale_v1_machine_proto_msgTypes[14]
|
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *UnshareMachineResponse) String() string {
|
|
||||||
return protoimpl.X.MessageStringOf(x)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*UnshareMachineResponse) ProtoMessage() {}
|
|
||||||
|
|
||||||
func (x *UnshareMachineResponse) ProtoReflect() protoreflect.Message {
|
|
||||||
mi := &file_headscale_v1_machine_proto_msgTypes[14]
|
|
||||||
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 UnshareMachineResponse.ProtoReflect.Descriptor instead.
|
|
||||||
func (*UnshareMachineResponse) Descriptor() ([]byte, []int) {
|
|
||||||
return file_headscale_v1_machine_proto_rawDescGZIP(), []int{14}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *UnshareMachineResponse) GetMachine() *Machine {
|
|
||||||
if x != nil {
|
|
||||||
return x.Machine
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type DebugCreateMachineRequest struct {
|
type DebugCreateMachineRequest struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
|
@ -912,7 +707,7 @@ type DebugCreateMachineRequest struct {
|
||||||
func (x *DebugCreateMachineRequest) Reset() {
|
func (x *DebugCreateMachineRequest) Reset() {
|
||||||
*x = DebugCreateMachineRequest{}
|
*x = DebugCreateMachineRequest{}
|
||||||
if protoimpl.UnsafeEnabled {
|
if protoimpl.UnsafeEnabled {
|
||||||
mi := &file_headscale_v1_machine_proto_msgTypes[15]
|
mi := &file_headscale_v1_machine_proto_msgTypes[11]
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
}
|
}
|
||||||
|
@ -925,7 +720,7 @@ func (x *DebugCreateMachineRequest) String() string {
|
||||||
func (*DebugCreateMachineRequest) ProtoMessage() {}
|
func (*DebugCreateMachineRequest) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *DebugCreateMachineRequest) ProtoReflect() protoreflect.Message {
|
func (x *DebugCreateMachineRequest) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_headscale_v1_machine_proto_msgTypes[15]
|
mi := &file_headscale_v1_machine_proto_msgTypes[11]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
@ -938,7 +733,7 @@ func (x *DebugCreateMachineRequest) ProtoReflect() protoreflect.Message {
|
||||||
|
|
||||||
// Deprecated: Use DebugCreateMachineRequest.ProtoReflect.Descriptor instead.
|
// Deprecated: Use DebugCreateMachineRequest.ProtoReflect.Descriptor instead.
|
||||||
func (*DebugCreateMachineRequest) Descriptor() ([]byte, []int) {
|
func (*DebugCreateMachineRequest) Descriptor() ([]byte, []int) {
|
||||||
return file_headscale_v1_machine_proto_rawDescGZIP(), []int{15}
|
return file_headscale_v1_machine_proto_rawDescGZIP(), []int{11}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *DebugCreateMachineRequest) GetNamespace() string {
|
func (x *DebugCreateMachineRequest) GetNamespace() string {
|
||||||
|
@ -980,7 +775,7 @@ type DebugCreateMachineResponse struct {
|
||||||
func (x *DebugCreateMachineResponse) Reset() {
|
func (x *DebugCreateMachineResponse) Reset() {
|
||||||
*x = DebugCreateMachineResponse{}
|
*x = DebugCreateMachineResponse{}
|
||||||
if protoimpl.UnsafeEnabled {
|
if protoimpl.UnsafeEnabled {
|
||||||
mi := &file_headscale_v1_machine_proto_msgTypes[16]
|
mi := &file_headscale_v1_machine_proto_msgTypes[12]
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
}
|
}
|
||||||
|
@ -993,7 +788,7 @@ func (x *DebugCreateMachineResponse) String() string {
|
||||||
func (*DebugCreateMachineResponse) ProtoMessage() {}
|
func (*DebugCreateMachineResponse) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *DebugCreateMachineResponse) ProtoReflect() protoreflect.Message {
|
func (x *DebugCreateMachineResponse) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_headscale_v1_machine_proto_msgTypes[16]
|
mi := &file_headscale_v1_machine_proto_msgTypes[12]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
@ -1006,7 +801,7 @@ func (x *DebugCreateMachineResponse) ProtoReflect() protoreflect.Message {
|
||||||
|
|
||||||
// Deprecated: Use DebugCreateMachineResponse.ProtoReflect.Descriptor instead.
|
// Deprecated: Use DebugCreateMachineResponse.ProtoReflect.Descriptor instead.
|
||||||
func (*DebugCreateMachineResponse) Descriptor() ([]byte, []int) {
|
func (*DebugCreateMachineResponse) Descriptor() ([]byte, []int) {
|
||||||
return file_headscale_v1_machine_proto_rawDescGZIP(), []int{16}
|
return file_headscale_v1_machine_proto_rawDescGZIP(), []int{12}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *DebugCreateMachineResponse) GetMachine() *Machine {
|
func (x *DebugCreateMachineResponse) GetMachine() *Machine {
|
||||||
|
@ -1105,51 +900,31 @@ var file_headscale_v1_machine_proto_rawDesc = []byte{
|
||||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x08, 0x6d, 0x61, 0x63, 0x68, 0x69,
|
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x08, 0x6d, 0x61, 0x63, 0x68, 0x69,
|
||||||
0x6e, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x65, 0x61, 0x64,
|
0x6e, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x65, 0x61, 0x64,
|
||||||
0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65,
|
0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65,
|
||||||
0x52, 0x08, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x52, 0x0a, 0x13, 0x53, 0x68,
|
0x52, 0x08, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x77, 0x0a, 0x19, 0x44, 0x65,
|
||||||
0x61, 0x72, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
0x62, 0x75, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65,
|
||||||
0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5f, 0x69, 0x64, 0x18,
|
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73,
|
||||||
0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x49, 0x64,
|
0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65,
|
||||||
0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20,
|
0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01,
|
||||||
0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x47,
|
0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
|
||||||
0x0a, 0x14, 0x53, 0x68, 0x61, 0x72, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x65,
|
0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72,
|
||||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x07, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e,
|
0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x75,
|
||||||
0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63,
|
0x74, 0x65, 0x73, 0x22, 0x4d, 0x0a, 0x1a, 0x44, 0x65, 0x62, 0x75, 0x67, 0x43, 0x72, 0x65, 0x61,
|
||||||
0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x07,
|
0x74, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||||
0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x22, 0x54, 0x0a, 0x15, 0x55, 0x6e, 0x73, 0x68, 0x61,
|
0x65, 0x12, 0x2f, 0x0a, 0x07, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01,
|
||||||
0x72, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76,
|
||||||
0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01,
|
0x31, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x07, 0x6d, 0x61, 0x63, 0x68, 0x69,
|
||||||
0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x49, 0x64, 0x12,
|
0x6e, 0x65, 0x2a, 0x82, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4d,
|
||||||
0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01,
|
0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x1f, 0x0a, 0x1b, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x45,
|
||||||
0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x49, 0x0a,
|
0x52, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49,
|
||||||
0x16, 0x55, 0x6e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52,
|
0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54,
|
||||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x07, 0x6d, 0x61, 0x63, 0x68, 0x69,
|
0x45, 0x52, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x4b,
|
||||||
0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73,
|
0x45, 0x59, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x45, 0x52,
|
||||||
0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52,
|
0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x43, 0x4c, 0x49, 0x10, 0x02, 0x12, 0x18, 0x0a,
|
||||||
0x07, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x22, 0x77, 0x0a, 0x19, 0x44, 0x65, 0x62, 0x75,
|
0x14, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44,
|
||||||
0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x65,
|
0x5f, 0x4f, 0x49, 0x44, 0x43, 0x10, 0x03, 0x42, 0x29, 0x5a, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75,
|
||||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
|
0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6a, 0x75, 0x61, 0x6e, 0x66, 0x6f, 0x6e, 0x74, 0x2f, 0x68,
|
||||||
0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
|
0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f,
|
||||||
0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
|
0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20,
|
|
||||||
0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x6f, 0x75,
|
|
||||||
0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65,
|
|
||||||
0x73, 0x22, 0x4d, 0x0a, 0x1a, 0x44, 0x65, 0x62, 0x75, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
|
|
||||||
0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
|
|
||||||
0x2f, 0x0a, 0x07, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
|
|
||||||
0x32, 0x15, 0x2e, 0x68, 0x65, 0x61, 0x64, 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,
|
|
||||||
0x2a, 0x82, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4d, 0x65, 0x74,
|
|
||||||
0x68, 0x6f, 0x64, 0x12, 0x1f, 0x0a, 0x1b, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x45, 0x52, 0x5f,
|
|
||||||
0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49,
|
|
||||||
0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x45, 0x52,
|
|
||||||
0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x4b, 0x45, 0x59,
|
|
||||||
0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x4d,
|
|
||||||
0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x43, 0x4c, 0x49, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x52,
|
|
||||||
0x45, 0x47, 0x49, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x4f,
|
|
||||||
0x49, 0x44, 0x43, 0x10, 0x03, 0x42, 0x29, 0x5a, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
|
|
||||||
0x63, 0x6f, 0x6d, 0x2f, 0x6a, 0x75, 0x61, 0x6e, 0x66, 0x6f, 0x6e, 0x74, 0x2f, 0x68, 0x65, 0x61,
|
|
||||||
0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x31,
|
|
||||||
0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -1165,7 +940,7 @@ func file_headscale_v1_machine_proto_rawDescGZIP() []byte {
|
||||||
}
|
}
|
||||||
|
|
||||||
var file_headscale_v1_machine_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
|
var file_headscale_v1_machine_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
|
||||||
var file_headscale_v1_machine_proto_msgTypes = make([]protoimpl.MessageInfo, 17)
|
var file_headscale_v1_machine_proto_msgTypes = make([]protoimpl.MessageInfo, 13)
|
||||||
var file_headscale_v1_machine_proto_goTypes = []interface{}{
|
var file_headscale_v1_machine_proto_goTypes = []interface{}{
|
||||||
(RegisterMethod)(0), // 0: headscale.v1.RegisterMethod
|
(RegisterMethod)(0), // 0: headscale.v1.RegisterMethod
|
||||||
(*Machine)(nil), // 1: headscale.v1.Machine
|
(*Machine)(nil), // 1: headscale.v1.Machine
|
||||||
|
@ -1179,36 +954,30 @@ var file_headscale_v1_machine_proto_goTypes = []interface{}{
|
||||||
(*ExpireMachineResponse)(nil), // 9: headscale.v1.ExpireMachineResponse
|
(*ExpireMachineResponse)(nil), // 9: headscale.v1.ExpireMachineResponse
|
||||||
(*ListMachinesRequest)(nil), // 10: headscale.v1.ListMachinesRequest
|
(*ListMachinesRequest)(nil), // 10: headscale.v1.ListMachinesRequest
|
||||||
(*ListMachinesResponse)(nil), // 11: headscale.v1.ListMachinesResponse
|
(*ListMachinesResponse)(nil), // 11: headscale.v1.ListMachinesResponse
|
||||||
(*ShareMachineRequest)(nil), // 12: headscale.v1.ShareMachineRequest
|
(*DebugCreateMachineRequest)(nil), // 12: headscale.v1.DebugCreateMachineRequest
|
||||||
(*ShareMachineResponse)(nil), // 13: headscale.v1.ShareMachineResponse
|
(*DebugCreateMachineResponse)(nil), // 13: headscale.v1.DebugCreateMachineResponse
|
||||||
(*UnshareMachineRequest)(nil), // 14: headscale.v1.UnshareMachineRequest
|
(*Namespace)(nil), // 14: headscale.v1.Namespace
|
||||||
(*UnshareMachineResponse)(nil), // 15: headscale.v1.UnshareMachineResponse
|
(*timestamppb.Timestamp)(nil), // 15: google.protobuf.Timestamp
|
||||||
(*DebugCreateMachineRequest)(nil), // 16: headscale.v1.DebugCreateMachineRequest
|
(*PreAuthKey)(nil), // 16: headscale.v1.PreAuthKey
|
||||||
(*DebugCreateMachineResponse)(nil), // 17: headscale.v1.DebugCreateMachineResponse
|
|
||||||
(*Namespace)(nil), // 18: headscale.v1.Namespace
|
|
||||||
(*timestamppb.Timestamp)(nil), // 19: google.protobuf.Timestamp
|
|
||||||
(*PreAuthKey)(nil), // 20: headscale.v1.PreAuthKey
|
|
||||||
}
|
}
|
||||||
var file_headscale_v1_machine_proto_depIdxs = []int32{
|
var file_headscale_v1_machine_proto_depIdxs = []int32{
|
||||||
18, // 0: headscale.v1.Machine.namespace:type_name -> headscale.v1.Namespace
|
14, // 0: headscale.v1.Machine.namespace:type_name -> headscale.v1.Namespace
|
||||||
0, // 1: headscale.v1.Machine.register_method:type_name -> headscale.v1.RegisterMethod
|
0, // 1: headscale.v1.Machine.register_method:type_name -> headscale.v1.RegisterMethod
|
||||||
19, // 2: headscale.v1.Machine.last_seen:type_name -> google.protobuf.Timestamp
|
15, // 2: headscale.v1.Machine.last_seen:type_name -> google.protobuf.Timestamp
|
||||||
19, // 3: headscale.v1.Machine.last_successful_update:type_name -> google.protobuf.Timestamp
|
15, // 3: headscale.v1.Machine.last_successful_update:type_name -> google.protobuf.Timestamp
|
||||||
19, // 4: headscale.v1.Machine.expiry:type_name -> google.protobuf.Timestamp
|
15, // 4: headscale.v1.Machine.expiry:type_name -> google.protobuf.Timestamp
|
||||||
20, // 5: headscale.v1.Machine.pre_auth_key:type_name -> headscale.v1.PreAuthKey
|
16, // 5: headscale.v1.Machine.pre_auth_key:type_name -> headscale.v1.PreAuthKey
|
||||||
19, // 6: headscale.v1.Machine.created_at:type_name -> google.protobuf.Timestamp
|
15, // 6: headscale.v1.Machine.created_at:type_name -> google.protobuf.Timestamp
|
||||||
1, // 7: headscale.v1.RegisterMachineResponse.machine:type_name -> headscale.v1.Machine
|
1, // 7: headscale.v1.RegisterMachineResponse.machine:type_name -> headscale.v1.Machine
|
||||||
1, // 8: headscale.v1.GetMachineResponse.machine:type_name -> headscale.v1.Machine
|
1, // 8: headscale.v1.GetMachineResponse.machine:type_name -> headscale.v1.Machine
|
||||||
1, // 9: headscale.v1.ExpireMachineResponse.machine:type_name -> headscale.v1.Machine
|
1, // 9: headscale.v1.ExpireMachineResponse.machine:type_name -> headscale.v1.Machine
|
||||||
1, // 10: headscale.v1.ListMachinesResponse.machines:type_name -> headscale.v1.Machine
|
1, // 10: headscale.v1.ListMachinesResponse.machines:type_name -> headscale.v1.Machine
|
||||||
1, // 11: headscale.v1.ShareMachineResponse.machine:type_name -> headscale.v1.Machine
|
1, // 11: headscale.v1.DebugCreateMachineResponse.machine:type_name -> headscale.v1.Machine
|
||||||
1, // 12: headscale.v1.UnshareMachineResponse.machine:type_name -> headscale.v1.Machine
|
12, // [12:12] is the sub-list for method output_type
|
||||||
1, // 13: headscale.v1.DebugCreateMachineResponse.machine:type_name -> headscale.v1.Machine
|
12, // [12:12] is the sub-list for method input_type
|
||||||
14, // [14:14] is the sub-list for method output_type
|
12, // [12:12] is the sub-list for extension type_name
|
||||||
14, // [14:14] is the sub-list for method input_type
|
12, // [12:12] is the sub-list for extension extendee
|
||||||
14, // [14:14] is the sub-list for extension type_name
|
0, // [0:12] is the sub-list for field type_name
|
||||||
14, // [14:14] is the sub-list for extension extendee
|
|
||||||
0, // [0:14] is the sub-list for field type_name
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { file_headscale_v1_machine_proto_init() }
|
func init() { file_headscale_v1_machine_proto_init() }
|
||||||
|
@ -1352,54 +1121,6 @@ func file_headscale_v1_machine_proto_init() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
file_headscale_v1_machine_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
|
file_headscale_v1_machine_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
|
||||||
switch v := v.(*ShareMachineRequest); i {
|
|
||||||
case 0:
|
|
||||||
return &v.state
|
|
||||||
case 1:
|
|
||||||
return &v.sizeCache
|
|
||||||
case 2:
|
|
||||||
return &v.unknownFields
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
file_headscale_v1_machine_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
|
|
||||||
switch v := v.(*ShareMachineResponse); i {
|
|
||||||
case 0:
|
|
||||||
return &v.state
|
|
||||||
case 1:
|
|
||||||
return &v.sizeCache
|
|
||||||
case 2:
|
|
||||||
return &v.unknownFields
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
file_headscale_v1_machine_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
|
|
||||||
switch v := v.(*UnshareMachineRequest); i {
|
|
||||||
case 0:
|
|
||||||
return &v.state
|
|
||||||
case 1:
|
|
||||||
return &v.sizeCache
|
|
||||||
case 2:
|
|
||||||
return &v.unknownFields
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
file_headscale_v1_machine_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
|
|
||||||
switch v := v.(*UnshareMachineResponse); i {
|
|
||||||
case 0:
|
|
||||||
return &v.state
|
|
||||||
case 1:
|
|
||||||
return &v.sizeCache
|
|
||||||
case 2:
|
|
||||||
return &v.unknownFields
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
file_headscale_v1_machine_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
|
|
||||||
switch v := v.(*DebugCreateMachineRequest); i {
|
switch v := v.(*DebugCreateMachineRequest); i {
|
||||||
case 0:
|
case 0:
|
||||||
return &v.state
|
return &v.state
|
||||||
|
@ -1411,7 +1132,7 @@ func file_headscale_v1_machine_proto_init() {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
file_headscale_v1_machine_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
|
file_headscale_v1_machine_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
|
||||||
switch v := v.(*DebugCreateMachineResponse); i {
|
switch v := v.(*DebugCreateMachineResponse); i {
|
||||||
case 0:
|
case 0:
|
||||||
return &v.state
|
return &v.state
|
||||||
|
@ -1430,7 +1151,7 @@ func file_headscale_v1_machine_proto_init() {
|
||||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||||
RawDescriptor: file_headscale_v1_machine_proto_rawDesc,
|
RawDescriptor: file_headscale_v1_machine_proto_rawDesc,
|
||||||
NumEnums: 1,
|
NumEnums: 1,
|
||||||
NumMessages: 17,
|
NumMessages: 13,
|
||||||
NumExtensions: 0,
|
NumExtensions: 0,
|
||||||
NumServices: 0,
|
NumServices: 0,
|
||||||
},
|
},
|
||||||
|
|
|
@ -7,12 +7,11 @@
|
||||||
package v1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
reflect "reflect"
|
|
||||||
sync "sync"
|
|
||||||
|
|
||||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||||
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
|
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
|
||||||
|
reflect "reflect"
|
||||||
|
sync "sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -7,12 +7,11 @@
|
||||||
package v1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
reflect "reflect"
|
|
||||||
sync "sync"
|
|
||||||
|
|
||||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||||
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
|
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
|
||||||
|
reflect "reflect"
|
||||||
|
sync "sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -7,11 +7,10 @@
|
||||||
package v1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
reflect "reflect"
|
|
||||||
sync "sync"
|
|
||||||
|
|
||||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||||
|
reflect "reflect"
|
||||||
|
sync "sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -181,6 +181,20 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "namespace",
|
||||||
|
"in": "query",
|
||||||
|
"required": false,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "key",
|
||||||
|
"in": "query",
|
||||||
|
"required": false,
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
],
|
||||||
"tags": [
|
"tags": [
|
||||||
"HeadscaleService"
|
"HeadscaleService"
|
||||||
]
|
]
|
||||||
|
@ -324,37 +338,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"name": "machineId",
|
|
||||||
"in": "path",
|
|
||||||
"required": true,
|
|
||||||
"type": "string",
|
|
||||||
"format": "uint64"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"HeadscaleService"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"/api/v1/machine/{machineId}/share/{namespace}": {
|
|
||||||
"post": {
|
|
||||||
"operationId": "HeadscaleService_ShareMachine",
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"description": "A successful response.",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/v1ShareMachineResponse"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"default": {
|
|
||||||
"description": "An unexpected error response.",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/rpcStatus"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"name": "machineId",
|
"name": "machineId",
|
||||||
|
@ -364,47 +347,14 @@
|
||||||
"format": "uint64"
|
"format": "uint64"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "namespace",
|
"name": "routes",
|
||||||
"in": "path",
|
"in": "query",
|
||||||
"required": true,
|
"required": false,
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
}
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"HeadscaleService"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"/api/v1/machine/{machineId}/unshare/{namespace}": {
|
"collectionFormat": "multi"
|
||||||
"post": {
|
|
||||||
"operationId": "HeadscaleService_UnshareMachine",
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"description": "A successful response.",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/v1UnshareMachineResponse"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"default": {
|
|
||||||
"description": "An unexpected error response.",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/rpcStatus"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"parameters": [
|
|
||||||
{
|
|
||||||
"name": "machineId",
|
|
||||||
"in": "path",
|
|
||||||
"required": true,
|
|
||||||
"type": "string",
|
|
||||||
"format": "uint64"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "namespace",
|
|
||||||
"in": "path",
|
|
||||||
"required": true,
|
|
||||||
"type": "string"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"tags": [
|
"tags": [
|
||||||
|
@ -1050,22 +1000,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"v1ShareMachineResponse": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"machine": {
|
|
||||||
"$ref": "#/definitions/v1Machine"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"v1UnshareMachineResponse": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"machine": {
|
|
||||||
"$ref": "#/definitions/v1Machine"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
53
grpcv1.go
53
grpcv1.go
|
@ -232,15 +232,6 @@ func (api headscaleV1APIServer) ListMachines(
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
sharedMachines, err := api.h.ListSharedMachinesInNamespace(
|
|
||||||
request.GetNamespace(),
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
machines = append(machines, sharedMachines...)
|
|
||||||
|
|
||||||
response := make([]*v1.Machine, len(machines))
|
response := make([]*v1.Machine, len(machines))
|
||||||
for index, machine := range machines {
|
for index, machine := range machines {
|
||||||
response[index] = machine.toProto()
|
response[index] = machine.toProto()
|
||||||
|
@ -262,50 +253,6 @@ func (api headscaleV1APIServer) ListMachines(
|
||||||
return &v1.ListMachinesResponse{Machines: response}, nil
|
return &v1.ListMachinesResponse{Machines: response}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api headscaleV1APIServer) ShareMachine(
|
|
||||||
ctx context.Context,
|
|
||||||
request *v1.ShareMachineRequest,
|
|
||||||
) (*v1.ShareMachineResponse, error) {
|
|
||||||
destinationNamespace, err := api.h.GetNamespace(request.GetNamespace())
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
machine, err := api.h.GetMachineByID(request.GetMachineId())
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
err = api.h.AddSharedMachineToNamespace(machine, destinationNamespace)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return &v1.ShareMachineResponse{Machine: machine.toProto()}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (api headscaleV1APIServer) UnshareMachine(
|
|
||||||
ctx context.Context,
|
|
||||||
request *v1.UnshareMachineRequest,
|
|
||||||
) (*v1.UnshareMachineResponse, error) {
|
|
||||||
destinationNamespace, err := api.h.GetNamespace(request.GetNamespace())
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
machine, err := api.h.GetMachineByID(request.GetMachineId())
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
err = api.h.RemoveSharedMachineFromNamespace(machine, destinationNamespace)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return &v1.UnshareMachineResponse{Machine: machine.toProto()}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (api headscaleV1APIServer) GetMachineRoute(
|
func (api headscaleV1APIServer) GetMachineRoute(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
request *v1.GetMachineRouteRequest,
|
request *v1.GetMachineRouteRequest,
|
||||||
|
|
|
@ -529,7 +529,7 @@ func (s *IntegrationCLITestSuite) TestNodeCommand() {
|
||||||
namespace, err := s.createNamespace("machine-namespace")
|
namespace, err := s.createNamespace("machine-namespace")
|
||||||
assert.Nil(s.T(), err)
|
assert.Nil(s.T(), err)
|
||||||
|
|
||||||
sharedNamespace, err := s.createNamespace("shared-namespace")
|
secondNamespace, err := s.createNamespace("other-namespace")
|
||||||
assert.Nil(s.T(), err)
|
assert.Nil(s.T(), err)
|
||||||
|
|
||||||
// Randomly generated machine keys
|
// Randomly generated machine keys
|
||||||
|
@ -589,7 +589,7 @@ func (s *IntegrationCLITestSuite) TestNodeCommand() {
|
||||||
|
|
||||||
assert.Len(s.T(), machines, len(machineKeys))
|
assert.Len(s.T(), machines, len(machineKeys))
|
||||||
|
|
||||||
// Test list all nodes after added shared
|
// Test list all nodes after added seconds
|
||||||
listAllResult, err := ExecuteCommand(
|
listAllResult, err := ExecuteCommand(
|
||||||
&s.headscale,
|
&s.headscale,
|
||||||
[]string{
|
[]string{
|
||||||
|
@ -627,14 +627,14 @@ func (s *IntegrationCLITestSuite) TestNodeCommand() {
|
||||||
assert.True(s.T(), listAll[3].Registered)
|
assert.True(s.T(), listAll[3].Registered)
|
||||||
assert.True(s.T(), listAll[4].Registered)
|
assert.True(s.T(), listAll[4].Registered)
|
||||||
|
|
||||||
sharedMachineKeys := []string{
|
otherNamespaceMachineKeys := []string{
|
||||||
"b5b444774186d4217adcec407563a1223929465ee2c68a4da13af0d0185b4f8e",
|
"b5b444774186d4217adcec407563a1223929465ee2c68a4da13af0d0185b4f8e",
|
||||||
"dc721977ac7415aafa87f7d4574cbe07c6b171834a6d37375782bdc1fb6b3584",
|
"dc721977ac7415aafa87f7d4574cbe07c6b171834a6d37375782bdc1fb6b3584",
|
||||||
}
|
}
|
||||||
sharedMachines := make([]*v1.Machine, len(sharedMachineKeys))
|
otherNamespaceMachines := make([]*v1.Machine, len(otherNamespaceMachineKeys))
|
||||||
assert.Nil(s.T(), err)
|
assert.Nil(s.T(), err)
|
||||||
|
|
||||||
for index, machineKey := range sharedMachineKeys {
|
for index, machineKey := range otherNamespaceMachineKeys {
|
||||||
_, err := ExecuteCommand(
|
_, err := ExecuteCommand(
|
||||||
&s.headscale,
|
&s.headscale,
|
||||||
[]string{
|
[]string{
|
||||||
|
@ -642,9 +642,9 @@ func (s *IntegrationCLITestSuite) TestNodeCommand() {
|
||||||
"debug",
|
"debug",
|
||||||
"create-node",
|
"create-node",
|
||||||
"--name",
|
"--name",
|
||||||
fmt.Sprintf("shared-machine-%d", index+1),
|
fmt.Sprintf("otherNamespace-machine-%d", index+1),
|
||||||
"--namespace",
|
"--namespace",
|
||||||
sharedNamespace.Name,
|
secondNamespace.Name,
|
||||||
"--key",
|
"--key",
|
||||||
machineKey,
|
machineKey,
|
||||||
"--output",
|
"--output",
|
||||||
|
@ -660,7 +660,7 @@ func (s *IntegrationCLITestSuite) TestNodeCommand() {
|
||||||
"headscale",
|
"headscale",
|
||||||
"nodes",
|
"nodes",
|
||||||
"--namespace",
|
"--namespace",
|
||||||
sharedNamespace.Name,
|
secondNamespace.Name,
|
||||||
"register",
|
"register",
|
||||||
"--key",
|
"--key",
|
||||||
machineKey,
|
machineKey,
|
||||||
|
@ -675,13 +675,13 @@ func (s *IntegrationCLITestSuite) TestNodeCommand() {
|
||||||
err = json.Unmarshal([]byte(machineResult), &machine)
|
err = json.Unmarshal([]byte(machineResult), &machine)
|
||||||
assert.Nil(s.T(), err)
|
assert.Nil(s.T(), err)
|
||||||
|
|
||||||
sharedMachines[index] = &machine
|
otherNamespaceMachines[index] = &machine
|
||||||
}
|
}
|
||||||
|
|
||||||
assert.Len(s.T(), sharedMachines, len(sharedMachineKeys))
|
assert.Len(s.T(), otherNamespaceMachines, len(otherNamespaceMachineKeys))
|
||||||
|
|
||||||
// Test list all nodes after added shared
|
// Test list all nodes after added otherNamespace
|
||||||
listAllWithSharedResult, err := ExecuteCommand(
|
listAllWithotherNamespaceResult, err := ExecuteCommand(
|
||||||
&s.headscale,
|
&s.headscale,
|
||||||
[]string{
|
[]string{
|
||||||
"headscale",
|
"headscale",
|
||||||
|
@ -694,31 +694,34 @@ func (s *IntegrationCLITestSuite) TestNodeCommand() {
|
||||||
)
|
)
|
||||||
assert.Nil(s.T(), err)
|
assert.Nil(s.T(), err)
|
||||||
|
|
||||||
var listAllWithShared []v1.Machine
|
var listAllWithotherNamespace []v1.Machine
|
||||||
err = json.Unmarshal([]byte(listAllWithSharedResult), &listAllWithShared)
|
err = json.Unmarshal(
|
||||||
|
[]byte(listAllWithotherNamespaceResult),
|
||||||
|
&listAllWithotherNamespace,
|
||||||
|
)
|
||||||
assert.Nil(s.T(), err)
|
assert.Nil(s.T(), err)
|
||||||
|
|
||||||
// All nodes, machines + shared
|
// All nodes, machines + otherNamespace
|
||||||
assert.Len(s.T(), listAllWithShared, 7)
|
assert.Len(s.T(), listAllWithotherNamespace, 7)
|
||||||
|
|
||||||
assert.Equal(s.T(), uint64(6), listAllWithShared[5].Id)
|
assert.Equal(s.T(), uint64(6), listAllWithotherNamespace[5].Id)
|
||||||
assert.Equal(s.T(), uint64(7), listAllWithShared[6].Id)
|
assert.Equal(s.T(), uint64(7), listAllWithotherNamespace[6].Id)
|
||||||
|
|
||||||
assert.Equal(s.T(), "shared-machine-1", listAllWithShared[5].Name)
|
assert.Equal(s.T(), "otherNamespace-machine-1", listAllWithotherNamespace[5].Name)
|
||||||
assert.Equal(s.T(), "shared-machine-2", listAllWithShared[6].Name)
|
assert.Equal(s.T(), "otherNamespace-machine-2", listAllWithotherNamespace[6].Name)
|
||||||
|
|
||||||
assert.True(s.T(), listAllWithShared[5].Registered)
|
assert.True(s.T(), listAllWithotherNamespace[5].Registered)
|
||||||
assert.True(s.T(), listAllWithShared[6].Registered)
|
assert.True(s.T(), listAllWithotherNamespace[6].Registered)
|
||||||
|
|
||||||
// Test list all nodes after added shared
|
// Test list all nodes after added otherNamespace
|
||||||
listOnlySharedMachineNamespaceResult, err := ExecuteCommand(
|
listOnlyotherNamespaceMachineNamespaceResult, err := ExecuteCommand(
|
||||||
&s.headscale,
|
&s.headscale,
|
||||||
[]string{
|
[]string{
|
||||||
"headscale",
|
"headscale",
|
||||||
"nodes",
|
"nodes",
|
||||||
"list",
|
"list",
|
||||||
"--namespace",
|
"--namespace",
|
||||||
sharedNamespace.Name,
|
secondNamespace.Name,
|
||||||
"--output",
|
"--output",
|
||||||
"json",
|
"json",
|
||||||
},
|
},
|
||||||
|
@ -726,23 +729,31 @@ func (s *IntegrationCLITestSuite) TestNodeCommand() {
|
||||||
)
|
)
|
||||||
assert.Nil(s.T(), err)
|
assert.Nil(s.T(), err)
|
||||||
|
|
||||||
var listOnlySharedMachineNamespace []v1.Machine
|
var listOnlyotherNamespaceMachineNamespace []v1.Machine
|
||||||
err = json.Unmarshal(
|
err = json.Unmarshal(
|
||||||
[]byte(listOnlySharedMachineNamespaceResult),
|
[]byte(listOnlyotherNamespaceMachineNamespaceResult),
|
||||||
&listOnlySharedMachineNamespace,
|
&listOnlyotherNamespaceMachineNamespace,
|
||||||
)
|
)
|
||||||
assert.Nil(s.T(), err)
|
assert.Nil(s.T(), err)
|
||||||
|
|
||||||
assert.Len(s.T(), listOnlySharedMachineNamespace, 2)
|
assert.Len(s.T(), listOnlyotherNamespaceMachineNamespace, 2)
|
||||||
|
|
||||||
assert.Equal(s.T(), uint64(6), listOnlySharedMachineNamespace[0].Id)
|
assert.Equal(s.T(), uint64(6), listOnlyotherNamespaceMachineNamespace[0].Id)
|
||||||
assert.Equal(s.T(), uint64(7), listOnlySharedMachineNamespace[1].Id)
|
assert.Equal(s.T(), uint64(7), listOnlyotherNamespaceMachineNamespace[1].Id)
|
||||||
|
|
||||||
assert.Equal(s.T(), "shared-machine-1", listOnlySharedMachineNamespace[0].Name)
|
assert.Equal(
|
||||||
assert.Equal(s.T(), "shared-machine-2", listOnlySharedMachineNamespace[1].Name)
|
s.T(),
|
||||||
|
"otherNamespace-machine-1",
|
||||||
|
listOnlyotherNamespaceMachineNamespace[0].Name,
|
||||||
|
)
|
||||||
|
assert.Equal(
|
||||||
|
s.T(),
|
||||||
|
"otherNamespace-machine-2",
|
||||||
|
listOnlyotherNamespaceMachineNamespace[1].Name,
|
||||||
|
)
|
||||||
|
|
||||||
assert.True(s.T(), listOnlySharedMachineNamespace[0].Registered)
|
assert.True(s.T(), listOnlyotherNamespaceMachineNamespace[0].Registered)
|
||||||
assert.True(s.T(), listOnlySharedMachineNamespace[1].Registered)
|
assert.True(s.T(), listOnlyotherNamespaceMachineNamespace[1].Registered)
|
||||||
|
|
||||||
// Delete a machines
|
// Delete a machines
|
||||||
_, err = ExecuteCommand(
|
_, err = ExecuteCommand(
|
||||||
|
@ -786,120 +797,6 @@ func (s *IntegrationCLITestSuite) TestNodeCommand() {
|
||||||
assert.Nil(s.T(), err)
|
assert.Nil(s.T(), err)
|
||||||
|
|
||||||
assert.Len(s.T(), listOnlyMachineNamespaceAfterDelete, 4)
|
assert.Len(s.T(), listOnlyMachineNamespaceAfterDelete, 4)
|
||||||
|
|
||||||
// test: share node
|
|
||||||
|
|
||||||
shareMachineResult, err := ExecuteCommand(
|
|
||||||
&s.headscale,
|
|
||||||
[]string{
|
|
||||||
"headscale",
|
|
||||||
"nodes",
|
|
||||||
"share",
|
|
||||||
"--namespace",
|
|
||||||
namespace.Name,
|
|
||||||
"--identifier",
|
|
||||||
"7",
|
|
||||||
"--output",
|
|
||||||
"json",
|
|
||||||
},
|
|
||||||
[]string{},
|
|
||||||
)
|
|
||||||
assert.Nil(s.T(), err)
|
|
||||||
|
|
||||||
var shareMachine v1.Machine
|
|
||||||
err = json.Unmarshal([]byte(shareMachineResult), &shareMachine)
|
|
||||||
assert.Nil(s.T(), err)
|
|
||||||
|
|
||||||
assert.Equal(s.T(), uint64(7), shareMachine.Id)
|
|
||||||
|
|
||||||
assert.Equal(s.T(), "shared-machine-2", shareMachine.Name)
|
|
||||||
|
|
||||||
assert.True(s.T(), shareMachine.Registered)
|
|
||||||
|
|
||||||
// Test: list main namespace after machine has been shared
|
|
||||||
listOnlyMachineNamespaceAfterShareResult, err := ExecuteCommand(
|
|
||||||
&s.headscale,
|
|
||||||
[]string{
|
|
||||||
"headscale",
|
|
||||||
"nodes",
|
|
||||||
"list",
|
|
||||||
"--namespace",
|
|
||||||
namespace.Name,
|
|
||||||
"--output",
|
|
||||||
"json",
|
|
||||||
},
|
|
||||||
[]string{},
|
|
||||||
)
|
|
||||||
assert.Nil(s.T(), err)
|
|
||||||
|
|
||||||
var listOnlyMachineNamespaceAfterShare []v1.Machine
|
|
||||||
err = json.Unmarshal(
|
|
||||||
[]byte(listOnlyMachineNamespaceAfterShareResult),
|
|
||||||
&listOnlyMachineNamespaceAfterShare,
|
|
||||||
)
|
|
||||||
assert.Nil(s.T(), err)
|
|
||||||
|
|
||||||
assert.Len(s.T(), listOnlyMachineNamespaceAfterShare, 5)
|
|
||||||
|
|
||||||
assert.Equal(s.T(), uint64(7), listOnlyMachineNamespaceAfterShare[4].Id)
|
|
||||||
|
|
||||||
assert.Equal(s.T(), "shared-machine-2", listOnlyMachineNamespaceAfterShare[4].Name)
|
|
||||||
|
|
||||||
assert.True(s.T(), listOnlyMachineNamespaceAfterShare[4].Registered)
|
|
||||||
|
|
||||||
// test: unshare node
|
|
||||||
|
|
||||||
unshareMachineResult, err := ExecuteCommand(
|
|
||||||
&s.headscale,
|
|
||||||
[]string{
|
|
||||||
"headscale",
|
|
||||||
"nodes",
|
|
||||||
"unshare",
|
|
||||||
"--namespace",
|
|
||||||
namespace.Name,
|
|
||||||
"--identifier",
|
|
||||||
"7",
|
|
||||||
"--output",
|
|
||||||
"json",
|
|
||||||
},
|
|
||||||
[]string{},
|
|
||||||
)
|
|
||||||
assert.Nil(s.T(), err)
|
|
||||||
|
|
||||||
var unshareMachine v1.Machine
|
|
||||||
err = json.Unmarshal([]byte(unshareMachineResult), &unshareMachine)
|
|
||||||
assert.Nil(s.T(), err)
|
|
||||||
|
|
||||||
assert.Equal(s.T(), uint64(7), unshareMachine.Id)
|
|
||||||
|
|
||||||
assert.Equal(s.T(), "shared-machine-2", unshareMachine.Name)
|
|
||||||
|
|
||||||
assert.True(s.T(), unshareMachine.Registered)
|
|
||||||
|
|
||||||
// Test: list main namespace after machine has been shared
|
|
||||||
listOnlyMachineNamespaceAfterUnshareResult, err := ExecuteCommand(
|
|
||||||
&s.headscale,
|
|
||||||
[]string{
|
|
||||||
"headscale",
|
|
||||||
"nodes",
|
|
||||||
"list",
|
|
||||||
"--namespace",
|
|
||||||
namespace.Name,
|
|
||||||
"--output",
|
|
||||||
"json",
|
|
||||||
},
|
|
||||||
[]string{},
|
|
||||||
)
|
|
||||||
assert.Nil(s.T(), err)
|
|
||||||
|
|
||||||
var listOnlyMachineNamespaceAfterUnshare []v1.Machine
|
|
||||||
err = json.Unmarshal(
|
|
||||||
[]byte(listOnlyMachineNamespaceAfterUnshareResult),
|
|
||||||
&listOnlyMachineNamespaceAfterUnshare,
|
|
||||||
)
|
|
||||||
assert.Nil(s.T(), err)
|
|
||||||
|
|
||||||
assert.Len(s.T(), listOnlyMachineNamespaceAfterUnshare, 4)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *IntegrationCLITestSuite) TestNodeExpireCommand() {
|
func (s *IntegrationCLITestSuite) TestNodeExpireCommand() {
|
||||||
|
|
|
@ -53,11 +53,11 @@ func TestIntegrationTestSuite(t *testing.T) {
|
||||||
s := new(IntegrationTestSuite)
|
s := new(IntegrationTestSuite)
|
||||||
|
|
||||||
s.namespaces = map[string]TestNamespace{
|
s.namespaces = map[string]TestNamespace{
|
||||||
"main": {
|
"thisspace": {
|
||||||
count: 20,
|
count: 15,
|
||||||
tailscales: make(map[string]dockertest.Resource),
|
tailscales: make(map[string]dockertest.Resource),
|
||||||
},
|
},
|
||||||
"shared": {
|
"otherspace": {
|
||||||
count: 5,
|
count: 5,
|
||||||
tailscales: make(map[string]dockertest.Resource),
|
tailscales: make(map[string]dockertest.Resource),
|
||||||
},
|
},
|
||||||
|
@ -466,6 +466,7 @@ func getIPsfromIPNstate(status ipnstate.Status) []netaddr.IP {
|
||||||
return ips
|
return ips
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Adopt test for cross communication between namespaces
|
||||||
func (s *IntegrationTestSuite) TestPingAllPeersByAddress() {
|
func (s *IntegrationTestSuite) TestPingAllPeersByAddress() {
|
||||||
for _, scales := range s.namespaces {
|
for _, scales := range s.namespaces {
|
||||||
ips, err := getIPs(scales.tailscales)
|
ips, err := getIPs(scales.tailscales)
|
||||||
|
@ -511,111 +512,6 @@ func (s *IntegrationTestSuite) TestPingAllPeersByAddress() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *IntegrationTestSuite) TestSharedNodes() {
|
|
||||||
main := s.namespaces["main"]
|
|
||||||
shared := s.namespaces["shared"]
|
|
||||||
|
|
||||||
result, err := ExecuteCommand(
|
|
||||||
&s.headscale,
|
|
||||||
[]string{
|
|
||||||
"headscale",
|
|
||||||
"nodes",
|
|
||||||
"list",
|
|
||||||
"--output",
|
|
||||||
"json",
|
|
||||||
"--namespace",
|
|
||||||
"shared",
|
|
||||||
},
|
|
||||||
[]string{},
|
|
||||||
)
|
|
||||||
assert.Nil(s.T(), err)
|
|
||||||
|
|
||||||
var machineList []v1.Machine
|
|
||||||
err = json.Unmarshal([]byte(result), &machineList)
|
|
||||||
assert.Nil(s.T(), err)
|
|
||||||
|
|
||||||
for _, machine := range machineList {
|
|
||||||
result, err := ExecuteCommand(
|
|
||||||
&s.headscale,
|
|
||||||
[]string{
|
|
||||||
"headscale",
|
|
||||||
"nodes",
|
|
||||||
"share",
|
|
||||||
"--identifier", fmt.Sprint(machine.Id),
|
|
||||||
"--namespace", "main",
|
|
||||||
},
|
|
||||||
[]string{},
|
|
||||||
)
|
|
||||||
assert.Nil(s.T(), err)
|
|
||||||
|
|
||||||
log.Println("Shared node with result: ", result)
|
|
||||||
}
|
|
||||||
|
|
||||||
result, err = ExecuteCommand(
|
|
||||||
&s.headscale,
|
|
||||||
[]string{"headscale", "nodes", "list", "--namespace", "main"},
|
|
||||||
[]string{},
|
|
||||||
)
|
|
||||||
assert.Nil(s.T(), err)
|
|
||||||
log.Println("Nodelist after sharing", result)
|
|
||||||
|
|
||||||
// Chck that the correct count of host is present in node list
|
|
||||||
lines := strings.Split(result, "\n")
|
|
||||||
assert.Equal(s.T(), len(main.tailscales)+len(shared.tailscales), len(lines)-2)
|
|
||||||
|
|
||||||
for hostname := range main.tailscales {
|
|
||||||
assert.Contains(s.T(), result, hostname)
|
|
||||||
}
|
|
||||||
|
|
||||||
for hostname := range shared.tailscales {
|
|
||||||
assert.Contains(s.T(), result, hostname)
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO(juanfont): We have to find out why do we need to wait
|
|
||||||
time.Sleep(100 * time.Second) // Wait for the nodes to receive updates
|
|
||||||
|
|
||||||
sharedIps, err := getIPs(shared.tailscales)
|
|
||||||
assert.Nil(s.T(), err)
|
|
||||||
|
|
||||||
for hostname, tailscale := range main.tailscales {
|
|
||||||
for peername, peerIPs := range sharedIps {
|
|
||||||
for i, ip := range peerIPs {
|
|
||||||
// We currently cant ping ourselves, so skip that.
|
|
||||||
if peername == hostname {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
s.T().
|
|
||||||
Run(fmt.Sprintf("%s-%s-%d", hostname, peername, i), func(t *testing.T) {
|
|
||||||
// We are only interested in "direct ping" which means what we
|
|
||||||
// might need a couple of more attempts before reaching the node.
|
|
||||||
command := []string{
|
|
||||||
"tailscale", "ping",
|
|
||||||
"--timeout=15s",
|
|
||||||
"--c=20",
|
|
||||||
"--until-direct=true",
|
|
||||||
ip.String(),
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Printf(
|
|
||||||
"Pinging from %s to %s (%s)\n",
|
|
||||||
hostname,
|
|
||||||
peername,
|
|
||||||
ip,
|
|
||||||
)
|
|
||||||
result, err := ExecuteCommand(
|
|
||||||
&tailscale,
|
|
||||||
command,
|
|
||||||
[]string{},
|
|
||||||
)
|
|
||||||
assert.Nil(t, err)
|
|
||||||
log.Printf("Result for %s: %s\n", hostname, result)
|
|
||||||
assert.Contains(t, result, "pong")
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *IntegrationTestSuite) TestTailDrop() {
|
func (s *IntegrationTestSuite) TestTailDrop() {
|
||||||
for _, scales := range s.namespaces {
|
for _, scales := range s.namespaces {
|
||||||
ips, err := getIPs(scales.tailscales)
|
ips, err := getIPs(scales.tailscales)
|
||||||
|
|
107
machine.go
107
machine.go
|
@ -3,7 +3,6 @@ package headscale
|
||||||
import (
|
import (
|
||||||
"database/sql/driver"
|
"database/sql/driver"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
@ -240,68 +239,6 @@ func (h *Headscale) getDirectPeers(machine *Machine) (Machines, error) {
|
||||||
return machines, nil
|
return machines, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// getShared fetches machines that are shared to the `Namespace` of the machine we are getting peers for.
|
|
||||||
func (h *Headscale) getShared(machine *Machine) (Machines, error) {
|
|
||||||
log.Trace().
|
|
||||||
Caller().
|
|
||||||
Str("machine", machine.Name).
|
|
||||||
Msg("Finding shared peers")
|
|
||||||
|
|
||||||
sharedMachines := []SharedMachine{}
|
|
||||||
if err := h.db.Preload("Namespace").Preload("Machine").Preload("Machine.Namespace").Where("namespace_id = ?",
|
|
||||||
machine.NamespaceID).Find(&sharedMachines).Error; err != nil {
|
|
||||||
return Machines{}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
peers := make(Machines, 0)
|
|
||||||
for _, sharedMachine := range sharedMachines {
|
|
||||||
peers = append(peers, sharedMachine.Machine)
|
|
||||||
}
|
|
||||||
|
|
||||||
sort.Slice(peers, func(i, j int) bool { return peers[i].ID < peers[j].ID })
|
|
||||||
|
|
||||||
log.Trace().
|
|
||||||
Caller().
|
|
||||||
Str("machine", machine.Name).
|
|
||||||
Msgf("Found shared peers: %s", peers.String())
|
|
||||||
|
|
||||||
return peers, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// getSharedTo fetches the machines of the namespaces this machine is shared in.
|
|
||||||
func (h *Headscale) getSharedTo(machine *Machine) (Machines, error) {
|
|
||||||
log.Trace().
|
|
||||||
Caller().
|
|
||||||
Str("machine", machine.Name).
|
|
||||||
Msg("Finding peers in namespaces this machine is shared with")
|
|
||||||
|
|
||||||
sharedMachines := []SharedMachine{}
|
|
||||||
if err := h.db.Preload("Namespace").Preload("Machine").Preload("Machine.Namespace").Where("machine_id = ?",
|
|
||||||
machine.ID).Find(&sharedMachines).Error; err != nil {
|
|
||||||
return Machines{}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
peers := make(Machines, 0)
|
|
||||||
for _, sharedMachine := range sharedMachines {
|
|
||||||
namespaceMachines, err := h.ListMachinesInNamespace(
|
|
||||||
sharedMachine.Namespace.Name,
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
return Machines{}, err
|
|
||||||
}
|
|
||||||
peers = append(peers, namespaceMachines...)
|
|
||||||
}
|
|
||||||
|
|
||||||
sort.Slice(peers, func(i, j int) bool { return peers[i].ID < peers[j].ID })
|
|
||||||
|
|
||||||
log.Trace().
|
|
||||||
Caller().
|
|
||||||
Str("machine", machine.Name).
|
|
||||||
Msgf("Found peers we are shared with: %s", peers.String())
|
|
||||||
|
|
||||||
return peers, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *Headscale) getPeers(machine *Machine) (Machines, error) {
|
func (h *Headscale) getPeers(machine *Machine) (Machines, error) {
|
||||||
var peers Machines
|
var peers Machines
|
||||||
var err error
|
var err error
|
||||||
|
@ -318,7 +255,7 @@ func (h *Headscale) getPeers(machine *Machine) (Machines, error) {
|
||||||
}
|
}
|
||||||
peers = getFilteredByACLPeers(machines, h.aclRules, machine)
|
peers = getFilteredByACLPeers(machines, h.aclRules, machine)
|
||||||
} else {
|
} else {
|
||||||
direct, err := h.getDirectPeers(machine)
|
peers, err = h.getDirectPeers(machine)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().
|
log.Error().
|
||||||
Caller().
|
Caller().
|
||||||
|
@ -327,28 +264,6 @@ func (h *Headscale) getPeers(machine *Machine) (Machines, error) {
|
||||||
|
|
||||||
return Machines{}, err
|
return Machines{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
shared, err := h.getShared(machine)
|
|
||||||
if err != nil {
|
|
||||||
log.Error().
|
|
||||||
Caller().
|
|
||||||
Err(err).
|
|
||||||
Msg("Cannot fetch peers")
|
|
||||||
|
|
||||||
return Machines{}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
sharedTo, err := h.getSharedTo(machine)
|
|
||||||
if err != nil {
|
|
||||||
log.Error().
|
|
||||||
Caller().
|
|
||||||
Err(err).
|
|
||||||
Msg("Cannot fetch peers")
|
|
||||||
|
|
||||||
return Machines{}, err
|
|
||||||
}
|
|
||||||
peers = append(direct, shared...)
|
|
||||||
peers = append(peers, sharedTo...)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sort.Slice(peers, func(i, j int) bool { return peers[i].ID < peers[j].ID })
|
sort.Slice(peers, func(i, j int) bool { return peers[i].ID < peers[j].ID })
|
||||||
|
@ -459,11 +374,6 @@ func (h *Headscale) RefreshMachine(machine *Machine, expiry time.Time) {
|
||||||
|
|
||||||
// DeleteMachine softs deletes a Machine from the database.
|
// DeleteMachine softs deletes a Machine from the database.
|
||||||
func (h *Headscale) DeleteMachine(machine *Machine) error {
|
func (h *Headscale) DeleteMachine(machine *Machine) error {
|
||||||
err := h.RemoveSharedMachineFromAllNamespaces(machine)
|
|
||||||
if err != nil && errors.Is(err, errMachineNotShared) {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
machine.Registered = false
|
machine.Registered = false
|
||||||
h.db.Save(&machine) // we mark it as unregistered, just in case
|
h.db.Save(&machine) // we mark it as unregistered, just in case
|
||||||
if err := h.db.Delete(&machine).Error; err != nil {
|
if err := h.db.Delete(&machine).Error; err != nil {
|
||||||
|
@ -483,11 +393,6 @@ func (h *Headscale) TouchMachine(machine *Machine) error {
|
||||||
|
|
||||||
// HardDeleteMachine hard deletes a Machine from the database.
|
// HardDeleteMachine hard deletes a Machine from the database.
|
||||||
func (h *Headscale) HardDeleteMachine(machine *Machine) error {
|
func (h *Headscale) HardDeleteMachine(machine *Machine) error {
|
||||||
err := h.RemoveSharedMachineFromAllNamespaces(machine)
|
|
||||||
if err != nil && errors.Is(err, errMachineNotShared) {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := h.db.Unscoped().Delete(&machine).Error; err != nil {
|
if err := h.db.Unscoped().Delete(&machine).Error; err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -519,17 +424,9 @@ func (h *Headscale) isOutdated(machine *Machine) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
sharedMachines, _ := h.getShared(machine)
|
|
||||||
|
|
||||||
namespaceSet := set.New(set.ThreadSafe)
|
namespaceSet := set.New(set.ThreadSafe)
|
||||||
namespaceSet.Add(machine.Namespace.Name)
|
namespaceSet.Add(machine.Namespace.Name)
|
||||||
|
|
||||||
// Check if any of our shared namespaces has updates that we have
|
|
||||||
// not propagated.
|
|
||||||
for _, sharedMachine := range sharedMachines {
|
|
||||||
namespaceSet.Add(sharedMachine.Namespace.Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
namespaces := make([]string, namespaceSet.Size())
|
namespaces := make([]string, namespaceSet.Size())
|
||||||
for index, namespace := range namespaceSet.List() {
|
for index, namespace := range namespaceSet.List() {
|
||||||
if name, ok := namespace.(string); ok {
|
if name, ok := namespace.(string); ok {
|
||||||
|
@ -644,6 +541,8 @@ func (machine Machine) toNode(
|
||||||
[]netaddr.IPPrefix{},
|
[]netaddr.IPPrefix{},
|
||||||
addrs...) // we append the node own IP, as it is required by the clients
|
addrs...) // we append the node own IP, as it is required by the clients
|
||||||
|
|
||||||
|
// TODO(kradalby): Needs investigation, We probably dont need this condition
|
||||||
|
// now that we dont have shared nodes
|
||||||
if includeRoutes {
|
if includeRoutes {
|
||||||
routesStr := []string{}
|
routesStr := []string{}
|
||||||
if len(machine.EnabledRoutes) != 0 {
|
if len(machine.EnabledRoutes) != 0 {
|
||||||
|
|
|
@ -143,31 +143,6 @@ func (h *Headscale) ListMachinesInNamespace(name string) ([]Machine, error) {
|
||||||
return machines, nil
|
return machines, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListSharedMachinesInNamespace returns all the machines that are shared to the specified namespace.
|
|
||||||
func (h *Headscale) ListSharedMachinesInNamespace(name string) ([]Machine, error) {
|
|
||||||
namespace, err := h.GetNamespace(name)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
sharedMachines := []SharedMachine{}
|
|
||||||
if err := h.db.Preload("Namespace").Where(&SharedMachine{NamespaceID: namespace.ID}).Find(&sharedMachines).Error; err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
machines := []Machine{}
|
|
||||||
for _, sharedMachine := range sharedMachines {
|
|
||||||
machine, err := h.GetMachineByID(
|
|
||||||
sharedMachine.MachineID,
|
|
||||||
) // otherwise not everything comes filled
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
machines = append(machines, *machine)
|
|
||||||
}
|
|
||||||
|
|
||||||
return machines, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetMachineNamespace assigns a Machine to a namespace.
|
// SetMachineNamespace assigns a Machine to a namespace.
|
||||||
func (h *Headscale) SetMachineNamespace(machine *Machine, namespaceName string) error {
|
func (h *Headscale) SetMachineNamespace(machine *Machine, namespaceName string) error {
|
||||||
namespace, err := h.GetNamespace(namespaceName)
|
namespace, err := h.GetNamespace(namespaceName)
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package headscale
|
package headscale
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/rs/zerolog/log"
|
|
||||||
"gopkg.in/check.v1"
|
"gopkg.in/check.v1"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"inet.af/netaddr"
|
"inet.af/netaddr"
|
||||||
|
@ -206,36 +205,35 @@ func (s *Suite) TestGetMapResponseUserProfiles(c *check.C) {
|
||||||
}
|
}
|
||||||
app.db.Save(machine2InShared1)
|
app.db.Save(machine2InShared1)
|
||||||
|
|
||||||
err = app.AddSharedMachineToNamespace(machineInShared2, namespaceShared1)
|
// TODO: Remove comment out when we have all nodes available to every node
|
||||||
c.Assert(err, check.IsNil)
|
// peersOfMachine1InShared1, err := app.getPeers(machineInShared1)
|
||||||
peersOfMachine1InShared1, err := app.getPeers(machineInShared1)
|
// c.Assert(err, check.IsNil)
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
|
|
||||||
userProfiles := getMapResponseUserProfiles(
|
// userProfiles := getMapResponseUserProfiles(
|
||||||
*machineInShared1,
|
// *machineInShared1,
|
||||||
peersOfMachine1InShared1,
|
// peersOfMachine1InShared1,
|
||||||
)
|
// )
|
||||||
|
//
|
||||||
log.Trace().Msgf("userProfiles %#v", userProfiles)
|
// log.Trace().Msgf("userProfiles %#v", userProfiles)
|
||||||
c.Assert(len(userProfiles), check.Equals, 2)
|
// c.Assert(len(userProfiles), check.Equals, 2)
|
||||||
|
//
|
||||||
found := false
|
// found := false
|
||||||
for _, userProfiles := range userProfiles {
|
// for _, userProfiles := range userProfiles {
|
||||||
if userProfiles.DisplayName == namespaceShared1.Name {
|
// if userProfiles.DisplayName == namespaceShared1.Name {
|
||||||
found = true
|
// found = true
|
||||||
|
//
|
||||||
break
|
// break
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
c.Assert(found, check.Equals, true)
|
// c.Assert(found, check.Equals, true)
|
||||||
|
//
|
||||||
found = false
|
// found = false
|
||||||
for _, userProfile := range userProfiles {
|
// for _, userProfile := range userProfiles {
|
||||||
if userProfile.DisplayName == namespaceShared2.Name {
|
// if userProfile.DisplayName == namespaceShared2.Name {
|
||||||
found = true
|
// found = true
|
||||||
|
//
|
||||||
break
|
// break
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
c.Assert(found, check.Equals, true)
|
// c.Assert(found, check.Equals, true)
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,18 +104,6 @@ service HeadscaleService {
|
||||||
get: "/api/v1/machine"
|
get: "/api/v1/machine"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
rpc ShareMachine(ShareMachineRequest) returns (ShareMachineResponse) {
|
|
||||||
option (google.api.http) = {
|
|
||||||
post: "/api/v1/machine/{machine_id}/share/{namespace}"
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
rpc UnshareMachine(UnshareMachineRequest) returns (UnshareMachineResponse) {
|
|
||||||
option (google.api.http) = {
|
|
||||||
post: "/api/v1/machine/{machine_id}/unshare/{namespace}"
|
|
||||||
};
|
|
||||||
}
|
|
||||||
// --- Machine end ---
|
// --- Machine end ---
|
||||||
|
|
||||||
// --- Route start ---
|
// --- Route start ---
|
||||||
|
|
|
@ -80,24 +80,6 @@ message ListMachinesResponse {
|
||||||
repeated Machine machines = 1;
|
repeated Machine machines = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
message ShareMachineRequest {
|
|
||||||
uint64 machine_id = 1;
|
|
||||||
string namespace = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message ShareMachineResponse {
|
|
||||||
Machine machine = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
message UnshareMachineRequest {
|
|
||||||
uint64 machine_id = 1;
|
|
||||||
string namespace = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message UnshareMachineResponse {
|
|
||||||
Machine machine = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
message DebugCreateMachineRequest {
|
message DebugCreateMachineRequest {
|
||||||
string namespace = 1;
|
string namespace = 1;
|
||||||
string key = 2;
|
string key = 2;
|
||||||
|
|
81
sharing.go
81
sharing.go
|
@ -1,81 +0,0 @@
|
||||||
package headscale
|
|
||||||
|
|
||||||
import "gorm.io/gorm"
|
|
||||||
|
|
||||||
const (
|
|
||||||
errSameNamespace = Error("Destination namespace same as origin")
|
|
||||||
errMachineAlreadyShared = Error("Node already shared to this namespace")
|
|
||||||
errMachineNotShared = Error("Machine not shared to this namespace")
|
|
||||||
)
|
|
||||||
|
|
||||||
// SharedMachine is a join table to support sharing nodes between namespaces.
|
|
||||||
type SharedMachine struct {
|
|
||||||
gorm.Model
|
|
||||||
MachineID uint64
|
|
||||||
Machine Machine
|
|
||||||
NamespaceID uint
|
|
||||||
Namespace Namespace
|
|
||||||
}
|
|
||||||
|
|
||||||
// AddSharedMachineToNamespace adds a machine as a shared node to a namespace.
|
|
||||||
func (h *Headscale) AddSharedMachineToNamespace(
|
|
||||||
machine *Machine,
|
|
||||||
namespace *Namespace,
|
|
||||||
) error {
|
|
||||||
if machine.NamespaceID == namespace.ID {
|
|
||||||
return errSameNamespace
|
|
||||||
}
|
|
||||||
|
|
||||||
sharedMachines := []SharedMachine{}
|
|
||||||
if err := h.db.Where("machine_id = ? AND namespace_id = ?", machine.ID, namespace.ID).Find(&sharedMachines).Error; err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if len(sharedMachines) > 0 {
|
|
||||||
return errMachineAlreadyShared
|
|
||||||
}
|
|
||||||
|
|
||||||
sharedMachine := SharedMachine{
|
|
||||||
MachineID: machine.ID,
|
|
||||||
Machine: *machine,
|
|
||||||
NamespaceID: namespace.ID,
|
|
||||||
Namespace: *namespace,
|
|
||||||
}
|
|
||||||
h.db.Save(&sharedMachine)
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// RemoveSharedMachineFromNamespace removes a shared machine from a namespace.
|
|
||||||
func (h *Headscale) RemoveSharedMachineFromNamespace(
|
|
||||||
machine *Machine,
|
|
||||||
namespace *Namespace,
|
|
||||||
) error {
|
|
||||||
if machine.NamespaceID == namespace.ID {
|
|
||||||
// Can't unshare from primary namespace
|
|
||||||
return errMachineNotShared
|
|
||||||
}
|
|
||||||
|
|
||||||
sharedMachine := SharedMachine{}
|
|
||||||
result := h.db.Where("machine_id = ? AND namespace_id = ?", machine.ID, namespace.ID).
|
|
||||||
Unscoped().
|
|
||||||
Delete(&sharedMachine)
|
|
||||||
if result.Error != nil {
|
|
||||||
return result.Error
|
|
||||||
}
|
|
||||||
|
|
||||||
if result.RowsAffected == 0 {
|
|
||||||
return errMachineNotShared
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// RemoveSharedMachineFromAllNamespaces removes a machine as a shared node from all namespaces.
|
|
||||||
func (h *Headscale) RemoveSharedMachineFromAllNamespaces(machine *Machine) error {
|
|
||||||
sharedMachine := SharedMachine{}
|
|
||||||
if result := h.db.Where("machine_id = ?", machine.ID).Unscoped().Delete(&sharedMachine); result.Error != nil {
|
|
||||||
return result.Error
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
341
sharing_test.go
341
sharing_test.go
|
@ -1,341 +0,0 @@
|
||||||
package headscale
|
|
||||||
|
|
||||||
import (
|
|
||||||
"gopkg.in/check.v1"
|
|
||||||
"inet.af/netaddr"
|
|
||||||
)
|
|
||||||
|
|
||||||
func CreateNodeNamespace(
|
|
||||||
c *check.C,
|
|
||||||
namespaceName, node, key, ip string,
|
|
||||||
) (*Namespace, *Machine) {
|
|
||||||
namespace, err := app.CreateNamespace(namespaceName)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
|
|
||||||
pak1, err := app.CreatePreAuthKey(namespace.Name, false, false, nil)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
|
|
||||||
_, err = app.GetMachine(namespace.Name, node)
|
|
||||||
c.Assert(err, check.NotNil)
|
|
||||||
|
|
||||||
machine := &Machine{
|
|
||||||
ID: 0,
|
|
||||||
MachineKey: key,
|
|
||||||
NodeKey: key,
|
|
||||||
DiscoKey: key,
|
|
||||||
Name: node,
|
|
||||||
NamespaceID: namespace.ID,
|
|
||||||
Registered: true,
|
|
||||||
RegisterMethod: RegisterMethodAuthKey,
|
|
||||||
IPAddresses: []netaddr.IP{netaddr.MustParseIP("100.64.0.1")},
|
|
||||||
AuthKeyID: uint(pak1.ID),
|
|
||||||
}
|
|
||||||
app.db.Save(machine)
|
|
||||||
|
|
||||||
_, err = app.GetMachine(namespace.Name, machine.Name)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
|
|
||||||
return namespace, machine
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Suite) TestBasicSharedNodesInNamespace(c *check.C) {
|
|
||||||
namespace1, machine1 := CreateNodeNamespace(
|
|
||||||
c,
|
|
||||||
"shared1",
|
|
||||||
"test_get_shared_nodes_1",
|
|
||||||
"686824e749f3b7f2a5927ee6c1e422aee5292592d9179a271ed7b3e659b44a66",
|
|
||||||
"100.64.0.1",
|
|
||||||
)
|
|
||||||
_, machine2 := CreateNodeNamespace(
|
|
||||||
c,
|
|
||||||
"shared2",
|
|
||||||
"test_get_shared_nodes_2",
|
|
||||||
"dec46ef9dc45c7d2f03bfcd5a640d9e24e3cc68ce3d9da223867c9bc6d5e9863",
|
|
||||||
"100.64.0.2",
|
|
||||||
)
|
|
||||||
|
|
||||||
peersOfMachine1BeforeShared, err := app.getPeers(machine1)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
c.Assert(len(peersOfMachine1BeforeShared), check.Equals, 0)
|
|
||||||
|
|
||||||
err = app.AddSharedMachineToNamespace(machine2, namespace1)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
|
|
||||||
peersOfMachine1AfterShared, err := app.getPeers(machine1)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
c.Assert(len(peersOfMachine1AfterShared), check.Equals, 1)
|
|
||||||
c.Assert(peersOfMachine1AfterShared[0].ID, check.Equals, machine2.ID)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Suite) TestSameNamespace(c *check.C) {
|
|
||||||
namespace1, machine1 := CreateNodeNamespace(
|
|
||||||
c,
|
|
||||||
"shared1",
|
|
||||||
"test_get_shared_nodes_1",
|
|
||||||
"686824e749f3b7f2a5927ee6c1e422aee5292592d9179a271ed7b3e659b44a66",
|
|
||||||
"100.64.0.1",
|
|
||||||
)
|
|
||||||
|
|
||||||
peersOfMachine1BeforeShare, err := app.getPeers(machine1)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
c.Assert(len(peersOfMachine1BeforeShare), check.Equals, 0)
|
|
||||||
|
|
||||||
err = app.AddSharedMachineToNamespace(machine1, namespace1)
|
|
||||||
c.Assert(err, check.Equals, errSameNamespace)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Suite) TestUnshare(c *check.C) {
|
|
||||||
namespace1, machine1 := CreateNodeNamespace(
|
|
||||||
c,
|
|
||||||
"shared1",
|
|
||||||
"test_unshare_1",
|
|
||||||
"686824e749f3b7f2a5927ee6c1e422aee5292592d9179a271ed7b3e659b44a66",
|
|
||||||
"100.64.0.1",
|
|
||||||
)
|
|
||||||
_, machine2 := CreateNodeNamespace(
|
|
||||||
c,
|
|
||||||
"shared2",
|
|
||||||
"test_unshare_2",
|
|
||||||
"dec46ef9dc45c7d2f03bfcd5a640d9e24e3cc68ce3d9da223867c9bc6d5e9863",
|
|
||||||
"100.64.0.2",
|
|
||||||
)
|
|
||||||
|
|
||||||
peersOfMachine1BeforeShare, err := app.getPeers(machine1)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
c.Assert(len(peersOfMachine1BeforeShare), check.Equals, 0)
|
|
||||||
|
|
||||||
err = app.AddSharedMachineToNamespace(machine2, namespace1)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
|
|
||||||
peersOfMachine1BeforeShare, err = app.getShared(machine1)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
c.Assert(len(peersOfMachine1BeforeShare), check.Equals, 1)
|
|
||||||
|
|
||||||
err = app.RemoveSharedMachineFromNamespace(machine2, namespace1)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
|
|
||||||
peersOfMachine1BeforeShare, err = app.getShared(machine1)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
c.Assert(len(peersOfMachine1BeforeShare), check.Equals, 0)
|
|
||||||
|
|
||||||
err = app.RemoveSharedMachineFromNamespace(machine2, namespace1)
|
|
||||||
c.Assert(err, check.Equals, errMachineNotShared)
|
|
||||||
|
|
||||||
err = app.RemoveSharedMachineFromNamespace(machine1, namespace1)
|
|
||||||
c.Assert(err, check.Equals, errMachineNotShared)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Suite) TestAlreadyShared(c *check.C) {
|
|
||||||
namespace1, machine1 := CreateNodeNamespace(
|
|
||||||
c,
|
|
||||||
"shared1",
|
|
||||||
"test_get_shared_nodes_1",
|
|
||||||
"686824e749f3b7f2a5927ee6c1e422aee5292592d9179a271ed7b3e659b44a66",
|
|
||||||
"100.64.0.1",
|
|
||||||
)
|
|
||||||
_, machine2 := CreateNodeNamespace(
|
|
||||||
c,
|
|
||||||
"shared2",
|
|
||||||
"test_get_shared_nodes_2",
|
|
||||||
"dec46ef9dc45c7d2f03bfcd5a640d9e24e3cc68ce3d9da223867c9bc6d5e9863",
|
|
||||||
"100.64.0.2",
|
|
||||||
)
|
|
||||||
|
|
||||||
peersOfMachine1BeforeShare, err := app.getPeers(machine1)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
c.Assert(len(peersOfMachine1BeforeShare), check.Equals, 0)
|
|
||||||
|
|
||||||
err = app.AddSharedMachineToNamespace(machine2, namespace1)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
err = app.AddSharedMachineToNamespace(machine2, namespace1)
|
|
||||||
c.Assert(err, check.Equals, errMachineAlreadyShared)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Suite) TestDoNotIncludeRoutesOnShared(c *check.C) {
|
|
||||||
namespace1, machine1 := CreateNodeNamespace(
|
|
||||||
c,
|
|
||||||
"shared1",
|
|
||||||
"test_get_shared_nodes_1",
|
|
||||||
"686824e749f3b7f2a5927ee6c1e422aee5292592d9179a271ed7b3e659b44a66",
|
|
||||||
"100.64.0.1",
|
|
||||||
)
|
|
||||||
_, machine2 := CreateNodeNamespace(
|
|
||||||
c,
|
|
||||||
"shared2",
|
|
||||||
"test_get_shared_nodes_2",
|
|
||||||
"dec46ef9dc45c7d2f03bfcd5a640d9e24e3cc68ce3d9da223867c9bc6d5e9863",
|
|
||||||
"100.64.0.2",
|
|
||||||
)
|
|
||||||
|
|
||||||
peersOfMachine1BeforeShare, err := app.getPeers(machine1)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
c.Assert(len(peersOfMachine1BeforeShare), check.Equals, 0)
|
|
||||||
|
|
||||||
err = app.AddSharedMachineToNamespace(machine2, namespace1)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
|
|
||||||
peersOfMachine1AfterShare, err := app.getPeers(machine1)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
c.Assert(len(peersOfMachine1AfterShare), check.Equals, 1)
|
|
||||||
c.Assert(peersOfMachine1AfterShare[0].Name, check.Equals, "test_get_shared_nodes_2")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Suite) TestComplexSharingAcrossNamespaces(c *check.C) {
|
|
||||||
namespace1, machine1 := CreateNodeNamespace(
|
|
||||||
c,
|
|
||||||
"shared1",
|
|
||||||
"test_get_shared_nodes_1",
|
|
||||||
"686824e749f3b7f2a5927ee6c1e422aee5292592d9179a271ed7b3e659b44a66",
|
|
||||||
"100.64.0.1",
|
|
||||||
)
|
|
||||||
_, machine2 := CreateNodeNamespace(
|
|
||||||
c,
|
|
||||||
"shared2",
|
|
||||||
"test_get_shared_nodes_2",
|
|
||||||
"dec46ef9dc45c7d2f03bfcd5a640d9e24e3cc68ce3d9da223867c9bc6d5e9863",
|
|
||||||
"100.64.0.2",
|
|
||||||
)
|
|
||||||
_, machine3 := CreateNodeNamespace(
|
|
||||||
c,
|
|
||||||
"shared3",
|
|
||||||
"test_get_shared_nodes_3",
|
|
||||||
"6e704bee83eb93db6fc2c417d7882964cd3f8cc87082cbb645982e34020c76c8",
|
|
||||||
"100.64.0.3",
|
|
||||||
)
|
|
||||||
|
|
||||||
pak4, err := app.CreatePreAuthKey(namespace1.Name, false, false, nil)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
|
|
||||||
machine4 := &Machine{
|
|
||||||
ID: 4,
|
|
||||||
MachineKey: "4c3e07c3ecd40e9c945bb6797557c451850691c0409740578325e17009dd298f",
|
|
||||||
NodeKey: "4c3e07c3ecd40e9c945bb6797557c451850691c0409740578325e17009dd298f",
|
|
||||||
DiscoKey: "4c3e07c3ecd40e9c945bb6797557c451850691c0409740578325e17009dd298f",
|
|
||||||
Name: "test_get_shared_nodes_4",
|
|
||||||
NamespaceID: namespace1.ID,
|
|
||||||
Registered: true,
|
|
||||||
RegisterMethod: RegisterMethodAuthKey,
|
|
||||||
IPAddresses: []netaddr.IP{netaddr.MustParseIP("100.64.0.4")},
|
|
||||||
AuthKeyID: uint(pak4.ID),
|
|
||||||
}
|
|
||||||
app.db.Save(machine4)
|
|
||||||
|
|
||||||
_, err = app.GetMachine(namespace1.Name, machine4.Name)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
|
|
||||||
peersOfMachine1BeforeShare, err := app.getPeers(machine1)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
c.Assert(len(peersOfMachine1BeforeShare), check.Equals, 1) // node1 can see node4
|
|
||||||
c.Assert(peersOfMachine1BeforeShare[0].Name, check.Equals, machine4.Name)
|
|
||||||
|
|
||||||
err = app.AddSharedMachineToNamespace(machine2, namespace1)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
|
|
||||||
peersOfMachine1AfterShare, err := app.getPeers(machine1)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
c.Assert(
|
|
||||||
len(peersOfMachine1AfterShare),
|
|
||||||
check.Equals,
|
|
||||||
2,
|
|
||||||
) // node1 can see node2 (shared) and node4 (same namespace)
|
|
||||||
c.Assert(peersOfMachine1AfterShare[0].Name, check.Equals, machine2.Name)
|
|
||||||
c.Assert(peersOfMachine1AfterShare[1].Name, check.Equals, machine4.Name)
|
|
||||||
|
|
||||||
sharedOfMachine1, err := app.getShared(machine1)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
c.Assert(len(sharedOfMachine1), check.Equals, 1) // node1 can see node2 as shared
|
|
||||||
c.Assert(sharedOfMachine1[0].Name, check.Equals, machine2.Name)
|
|
||||||
|
|
||||||
peersOfMachine3, err := app.getPeers(machine3)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
c.Assert(len(peersOfMachine3), check.Equals, 0) // node3 is alone
|
|
||||||
|
|
||||||
peersOfMachine2, err := app.getPeers(machine2)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
c.Assert(
|
|
||||||
len(peersOfMachine2),
|
|
||||||
check.Equals,
|
|
||||||
2,
|
|
||||||
) // node2 should see node1 (sharedTo) and node4 (sharedTo), as is shared in namespace1
|
|
||||||
c.Assert(peersOfMachine2[0].Name, check.Equals, machine1.Name)
|
|
||||||
c.Assert(peersOfMachine2[1].Name, check.Equals, machine4.Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Suite) TestDeleteSharedMachine(c *check.C) {
|
|
||||||
namespace1, machine1 := CreateNodeNamespace(
|
|
||||||
c,
|
|
||||||
"shared1",
|
|
||||||
"test_get_shared_nodes_1",
|
|
||||||
"686824e749f3b7f2a5927ee6c1e422aee5292592d9179a271ed7b3e659b44a66",
|
|
||||||
"100.64.0.1",
|
|
||||||
)
|
|
||||||
_, machine2 := CreateNodeNamespace(
|
|
||||||
c,
|
|
||||||
"shared2",
|
|
||||||
"test_get_shared_nodes_2",
|
|
||||||
"dec46ef9dc45c7d2f03bfcd5a640d9e24e3cc68ce3d9da223867c9bc6d5e9863",
|
|
||||||
"100.64.0.2",
|
|
||||||
)
|
|
||||||
_, machine3 := CreateNodeNamespace(
|
|
||||||
c,
|
|
||||||
"shared3",
|
|
||||||
"test_get_shared_nodes_3",
|
|
||||||
"6e704bee83eb93db6fc2c417d7882964cd3f8cc87082cbb645982e34020c76c8",
|
|
||||||
"100.64.0.3",
|
|
||||||
)
|
|
||||||
|
|
||||||
pak4n1, err := app.CreatePreAuthKey(namespace1.Name, false, false, nil)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
machine4 := &Machine{
|
|
||||||
ID: 4,
|
|
||||||
MachineKey: "4c3e07c3ecd40e9c945bb6797557c451850691c0409740578325e17009dd298f",
|
|
||||||
NodeKey: "4c3e07c3ecd40e9c945bb6797557c451850691c0409740578325e17009dd298f",
|
|
||||||
DiscoKey: "4c3e07c3ecd40e9c945bb6797557c451850691c0409740578325e17009dd298f",
|
|
||||||
Name: "test_get_shared_nodes_4",
|
|
||||||
NamespaceID: namespace1.ID,
|
|
||||||
Registered: true,
|
|
||||||
RegisterMethod: RegisterMethodAuthKey,
|
|
||||||
IPAddresses: []netaddr.IP{netaddr.MustParseIP("100.64.0.4")},
|
|
||||||
AuthKeyID: uint(pak4n1.ID),
|
|
||||||
}
|
|
||||||
app.db.Save(machine4)
|
|
||||||
|
|
||||||
_, err = app.GetMachine(namespace1.Name, machine4.Name)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
|
|
||||||
peersOfMachine1BeforeShare, err := app.getPeers(machine1)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
c.Assert(len(peersOfMachine1BeforeShare), check.Equals, 1) // nodes 1 and 4
|
|
||||||
c.Assert(peersOfMachine1BeforeShare[0].Name, check.Equals, machine4.Name)
|
|
||||||
|
|
||||||
err = app.AddSharedMachineToNamespace(machine2, namespace1)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
|
|
||||||
peersOfMachine1AfterShare, err := app.getPeers(machine1)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
c.Assert(len(peersOfMachine1AfterShare), check.Equals, 2) // nodes 1, 2, 4
|
|
||||||
c.Assert(peersOfMachine1AfterShare[0].Name, check.Equals, machine2.Name)
|
|
||||||
c.Assert(peersOfMachine1AfterShare[1].Name, check.Equals, machine4.Name)
|
|
||||||
|
|
||||||
sharedOfMachine1, err := app.getShared(machine1)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
c.Assert(len(sharedOfMachine1), check.Equals, 1) // nodes 1, 2, 4
|
|
||||||
c.Assert(sharedOfMachine1[0].Name, check.Equals, machine2.Name)
|
|
||||||
|
|
||||||
peersOfMachine3, err := app.getPeers(machine3)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
c.Assert(len(peersOfMachine3), check.Equals, 0) // node 3 is alone
|
|
||||||
|
|
||||||
sharedMachinesInNamespace1, err := app.ListSharedMachinesInNamespace(
|
|
||||||
namespace1.Name,
|
|
||||||
)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
c.Assert(len(sharedMachinesInNamespace1), check.Equals, 1)
|
|
||||||
|
|
||||||
err = app.DeleteMachine(machine2)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
|
|
||||||
sharedMachinesInNamespace1, err = app.ListSharedMachinesInNamespace(namespace1.Name)
|
|
||||||
c.Assert(err, check.IsNil)
|
|
||||||
c.Assert(len(sharedMachinesInNamespace1), check.Equals, 0)
|
|
||||||
}
|
|
Loading…
Reference in New Issue