Add Scope Namespacing support for SSH Servers (Nodes) (#69213)

Consume New SSHServer funcs (#69215)
This commit is contained in:
williamong-tel
2026-08-07 22:49:04 +00:00
committed by GitHub
parent b887107e7f
commit c64bb4c71e
49 changed files with 3216 additions and 664 deletions
@@ -25,7 +25,7 @@ import (
kclient "sigs.k8s.io/controller-runtime/pkg/client"
"github.com/gravitational/teleport/api/client"
"github.com/gravitational/teleport/api/defaults"
presencev1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/presence/v1"
"github.com/gravitational/teleport/api/types"
resourcesv1 "github.com/gravitational/teleport/integrations/operator/apis/resources/v1"
"github.com/gravitational/teleport/integrations/operator/controllers"
@@ -40,7 +40,7 @@ type openSSHEICEServerClient struct {
// Get gets the Teleport OpenSSHEICE server of a given name.
func (r openSSHEICEServerClient) Get(ctx context.Context, key reconcilers.ResourceKey) (types.Server, error) {
server, err := r.teleportClient.GetNode(ctx, defaults.Namespace, key.Name)
server, err := r.teleportClient.GetSSHServer(ctx, presencev1.GetSSHServerRequest_builder{Name: key.Name, Scope: key.Scope}.Build())
if err != nil {
return server, trace.Wrap(err)
}
@@ -68,7 +68,7 @@ func (r openSSHEICEServerClient) Update(ctx context.Context, server types.Server
// Delete deletes a Teleport OpenSSHEICE server.
func (r openSSHEICEServerClient) Delete(ctx context.Context, key reconcilers.ResourceKey) error {
return trace.Wrap(r.teleportClient.DeleteNode(ctx, defaults.Namespace, key.Name))
return trace.Wrap(r.teleportClient.DeleteSSHServer(ctx, presencev1.DeleteSSHServerRequest_builder{Name: key.Name, Scope: key.Scope}.Build()))
}
// NewOpenSSHEICEServerV2Reconciler instantiates a new Kubernetes controller
@@ -27,7 +27,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
kclient "sigs.k8s.io/controller-runtime/pkg/client"
"github.com/gravitational/teleport/api/defaults"
presencev1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/presence/v1"
"github.com/gravitational/teleport/api/types"
resourcesv1 "github.com/gravitational/teleport/integrations/operator/apis/resources/v1"
"github.com/gravitational/teleport/integrations/operator/controllers/reconcilers"
@@ -72,11 +72,11 @@ func (g *opensshEICEServerV2TestingPrimitives) CreateTeleportResource(ctx contex
}
func (g *opensshEICEServerV2TestingPrimitives) GetTeleportResource(ctx context.Context, name string) (types.Server, error) {
return g.setup.TeleportClient.GetNode(ctx, defaults.Namespace, name)
return g.setup.TeleportClient.GetSSHServer(ctx, presencev1.GetSSHServerRequest_builder{Name: name}.Build())
}
func (g *opensshEICEServerV2TestingPrimitives) DeleteTeleportResource(ctx context.Context, name string) error {
return trace.Wrap(g.setup.TeleportClient.DeleteNode(ctx, defaults.Namespace, name))
return trace.Wrap(g.setup.TeleportClient.DeleteSSHServer(ctx, presencev1.DeleteSSHServerRequest_builder{Name: name}.Build()))
}
func (g *opensshEICEServerV2TestingPrimitives) CreateKubernetesResource(ctx context.Context, name string) error {
@@ -25,7 +25,7 @@ import (
kclient "sigs.k8s.io/controller-runtime/pkg/client"
"github.com/gravitational/teleport/api/client"
"github.com/gravitational/teleport/api/defaults"
presencev1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/presence/v1"
"github.com/gravitational/teleport/api/types"
resourcesv1 "github.com/gravitational/teleport/integrations/operator/apis/resources/v1"
"github.com/gravitational/teleport/integrations/operator/controllers"
@@ -40,7 +40,7 @@ type openSSHServerClient struct {
// Get gets the Teleport OpenSSH server of a given name.
func (r openSSHServerClient) Get(ctx context.Context, key reconcilers.ResourceKey) (types.Server, error) {
server, err := r.teleportClient.GetNode(ctx, defaults.Namespace, key.Name)
server, err := r.teleportClient.GetSSHServer(ctx, presencev1.GetSSHServerRequest_builder{Name: key.Name, Scope: key.Scope}.Build())
if err != nil {
return server, trace.Wrap(err)
}
@@ -68,7 +68,7 @@ func (r openSSHServerClient) Update(ctx context.Context, server types.Server) er
// Delete deletes a Teleport OpenSSH server.
func (r openSSHServerClient) Delete(ctx context.Context, key reconcilers.ResourceKey) error {
return trace.Wrap(r.teleportClient.DeleteNode(ctx, defaults.Namespace, key.Name))
return trace.Wrap(r.teleportClient.DeleteSSHServer(ctx, presencev1.DeleteSSHServerRequest_builder{Name: key.Name, Scope: key.Scope}.Build()))
}
// NewOpenSSHServerV2Reconciler instantiates a new Kubernetes controller
@@ -27,7 +27,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
kclient "sigs.k8s.io/controller-runtime/pkg/client"
"github.com/gravitational/teleport/api/defaults"
presencev1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/presence/v1"
"github.com/gravitational/teleport/api/types"
resourcesv1 "github.com/gravitational/teleport/integrations/operator/apis/resources/v1"
"github.com/gravitational/teleport/integrations/operator/controllers/reconcilers"
@@ -64,11 +64,11 @@ func (g *opensshServerV2TestingPrimitives) CreateTeleportResource(ctx context.Co
}
func (g *opensshServerV2TestingPrimitives) GetTeleportResource(ctx context.Context, name string) (types.Server, error) {
return g.setup.TeleportClient.GetNode(ctx, defaults.Namespace, name)
return g.setup.TeleportClient.GetSSHServer(ctx, presencev1.GetSSHServerRequest_builder{Name: name}.Build())
}
func (g *opensshServerV2TestingPrimitives) DeleteTeleportResource(ctx context.Context, name string) error {
return trace.Wrap(g.setup.TeleportClient.DeleteNode(ctx, defaults.Namespace, name))
return trace.Wrap(g.setup.TeleportClient.DeleteSSHServer(ctx, presencev1.DeleteSSHServerRequest_builder{Name: name}.Build()))
}
func (g *opensshServerV2TestingPrimitives) CreateKubernetesResource(ctx context.Context, name string) error {
@@ -25,7 +25,7 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
"github.com/stretchr/testify/require"
"github.com/gravitational/teleport/api/defaults"
presencev1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/presence/v1"
"github.com/gravitational/teleport/api/types"
)
@@ -34,7 +34,7 @@ func (s *TerraformSuiteOSS) TestOpenSSHServer() {
s.T().Cleanup(cancel)
checkServerDestroyed := func(state *terraform.State) error {
_, err := s.client.GetNode(ctx, defaults.Namespace, "test")
_, err := s.client.GetSSHServer(ctx, presencev1.GetSSHServerRequest_builder{Name: "test"}.Build())
if trace.IsNotFound(err) {
return nil
}
@@ -86,7 +86,7 @@ func (s *TerraformSuiteOSS) TestOpenSSHServerNameless() {
checkServerDestroyed := func(state *terraform.State) error {
// The name is a UUID but we can lookup by hostname as well.
_, err := s.client.GetNode(ctx, defaults.Namespace, "test.local")
_, err := s.client.GetSSHServer(ctx, presencev1.GetSSHServerRequest_builder{Name: "test.local"}.Build())
if trace.IsNotFound(err) {
return nil
}
@@ -159,7 +159,7 @@ func (s *TerraformSuiteOSS) TestImportOpenSSHServer() {
require.NoError(s.T(), err)
require.Eventually(s.T(), func() bool {
_, err = s.client.GetNode(ctx, defaults.Namespace, server.GetName())
_, err = s.client.GetSSHServer(ctx, presencev1.GetSSHServerRequest_builder{Name: server.GetName(), Scope: server.GetScope()}.Build())
if trace.IsNotFound(err) {
return false
}
@@ -193,7 +193,7 @@ func (s *TerraformSuiteOSS) TestOpenSSHEICEServer() {
s.T().Cleanup(cancel)
checkServerDestroyed := func(state *terraform.State) error {
_, err := s.client.GetNode(ctx, defaults.Namespace, "test")
_, err := s.client.GetSSHServer(ctx, presencev1.GetSSHServerRequest_builder{Name: "test"}.Build())
if trace.IsNotFound(err) {
return nil
}
@@ -288,7 +288,7 @@ func (s *TerraformSuiteOSS) TestImportOpenSSHEICEServer() {
require.NoError(s.T(), err)
require.Eventually(s.T(), func() bool {
_, err = s.client.GetNode(ctx, defaults.Namespace, server.GetName())
_, err = s.client.GetSSHServer(ctx, presencev1.GetSSHServerRequest_builder{Name: server.GetName(), Scope: server.GetScope()}.Build())
if trace.IsNotFound(err) {
return false
}