Skip to content

Commit 1a2429e

Browse files
committed
use new join service for bot joins
1 parent eb97b4e commit 1a2429e

File tree

4 files changed

+31
-14
lines changed

4 files changed

+31
-14
lines changed

lib/join/joinclient/join.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,12 @@ import (
3535
"github.com/gravitational/teleport/lib/join/joinv1"
3636
)
3737

38-
type JoinParams = authjoin.RegisterParams
39-
type JoinResult = authjoin.RegisterResult
38+
type (
39+
JoinParams = authjoin.RegisterParams
40+
JoinResult = authjoin.RegisterResult
41+
AzureParams = authjoin.AzureParams
42+
GitlabParams = authjoin.GitlabParams
43+
)
4044

4145
// Join is used to join a cluster. A host or bot calls this with the name of a
4246
// provision token to get its initial certificates.
@@ -126,7 +130,7 @@ func joinWithClient(ctx context.Context, params JoinParams, client *joinv1.Clien
126130
switch params.JoinMethod {
127131
case types.JoinMethodUnspecified:
128132
// leave joinMethodPtr nil to let the server pick based on the token
129-
case types.JoinMethodToken:
133+
case types.JoinMethodToken, types.JoinMethodBoundKeypair:
130134
joinMethod := string(params.JoinMethod)
131135
joinMethodPtr = &joinMethod
132136
default:

lib/join/joinv1/server.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,21 @@ import (
2727
"github.com/gravitational/teleport"
2828
joinv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/join/v1"
2929
"github.com/gravitational/teleport/api/metadata"
30-
"github.com/gravitational/teleport/lib/join"
3130
"github.com/gravitational/teleport/lib/join/internal/diagnostic"
3231
"github.com/gravitational/teleport/lib/join/internal/messages"
3332
logutils "github.com/gravitational/teleport/lib/utils/log"
3433
)
3534

3635
var log = logutils.NewPackageLogger(teleport.ComponentKey, "joinv1")
3736

37+
// messageServer describes the protocol-agnostic join server, referenced in
38+
// this package as an interface so that it doesn't need to import lib/join.
39+
type messageServer interface {
40+
Join(messages.ServerStream) error
41+
}
42+
3843
// RegisterJoinServiceServer registers the Join gRPC service.
39-
func RegisterJoinServiceServer(s grpc.ServiceRegistrar, server *join.Server) {
44+
func RegisterJoinServiceServer(s grpc.ServiceRegistrar, server messageServer) {
4045
joinv1.RegisterJoinServiceServer(s, &joinServer{
4146
server: server,
4247
})
@@ -50,7 +55,7 @@ func RegisterJoinServiceServer(s grpc.ServiceRegistrar, server *join.Server) {
5055
type joinServer struct {
5156
joinv1.UnsafeJoinServiceServer
5257

53-
server *join.Server
58+
server messageServer
5459
}
5560

5661
// Join is a bidirectional streaming RPC that implements all join methods.

lib/join/server.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ func (s *Server) Join(stream messages.ServerStream) (err error) {
146146
// Set any diagnostic info we can get from the token.
147147
diag.Set(func(i *diagnostic.Info) {
148148
i.SafeTokenName = provisionToken.GetSafeName()
149-
i.TokenJoinMethod = string(provisionToken.GetJoinMethod())
149+
i.TokenJoinMethod = string(configuredJoinMethod(provisionToken))
150150
i.TokenExpires = provisionToken.Expiry()
151151
i.BotName = provisionToken.GetBotName()
152152
})
@@ -281,7 +281,7 @@ func (s *Server) authenticate(ctx context.Context, diag *diagnostic.Diagnostic,
281281
}
282282

283283
func checkJoinMethod(provisionToken types.ProvisionToken, requestedJoinMethod *string) (types.JoinMethod, error) {
284-
tokenJoinMethod := provisionToken.GetJoinMethod()
284+
tokenJoinMethod := configuredJoinMethod(provisionToken)
285285
if requestedJoinMethod == nil {
286286
// Auto join method mode, the client didn't specify so use whatever is on the token.
287287
return tokenJoinMethod, nil
@@ -347,7 +347,7 @@ func (s *Server) makeHostResult(
347347
hostParams *messages.HostParams,
348348
provisionToken types.ProvisionToken,
349349
) (*messages.HostResult, error) {
350-
certsParams, err := makeHostCertsParams(ctx, diag, authCtx, hostParams, provisionToken.GetJoinMethod())
350+
certsParams, err := makeHostCertsParams(ctx, diag, authCtx, hostParams, configuredJoinMethod(provisionToken))
351351
if err != nil {
352352
return nil, trace.Wrap(err)
353353
}
@@ -601,3 +601,11 @@ func makeAuditEvent(d *diagnostic.Diagnostic) apievents.AuditEvent {
601601
NodeName: info.NodeName,
602602
}
603603
}
604+
605+
func configuredJoinMethod(token types.ProvisionToken) types.JoinMethod {
606+
method := token.GetJoinMethod()
607+
if method == types.JoinMethodUnspecified {
608+
return types.JoinMethodToken
609+
}
610+
return method
611+
}

lib/tbot/internal/identity/service.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,12 @@ import (
3737
"github.com/gravitational/teleport/api/types"
3838
"github.com/gravitational/teleport/api/utils/keys"
3939
"github.com/gravitational/teleport/api/utils/retryutils"
40-
"github.com/gravitational/teleport/lib/auth/join"
4140
"github.com/gravitational/teleport/lib/auth/join/boundkeypair"
4241
"github.com/gravitational/teleport/lib/auth/state"
4342
libclient "github.com/gravitational/teleport/lib/client"
4443
"github.com/gravitational/teleport/lib/cryptosuites"
4544
"github.com/gravitational/teleport/lib/defaults"
45+
"github.com/gravitational/teleport/lib/join/joinclient"
4646
"github.com/gravitational/teleport/lib/tbot/bot/connection"
4747
"github.com/gravitational/teleport/lib/tbot/bot/destination"
4848
"github.com/gravitational/teleport/lib/tbot/bot/onboarding"
@@ -672,7 +672,7 @@ func botIdentityFromToken(
672672
}
673673

674674
expires := time.Now().Add(cfg.TTL)
675-
params := join.RegisterParams{
675+
params := joinclient.JoinParams{
676676
Token: token,
677677
ID: state.IdentityID{
678678
Role: types.RoleBot,
@@ -714,13 +714,13 @@ func botIdentityFromToken(
714714

715715
switch params.JoinMethod {
716716
case types.JoinMethodAzure:
717-
params.AzureParams = join.AzureParams{
717+
params.AzureParams = joinclient.AzureParams{
718718
ClientID: cfg.Onboarding.Azure.ClientID,
719719
}
720720
case types.JoinMethodTerraformCloud:
721721
params.TerraformCloudAudienceTag = cfg.Onboarding.Terraform.AudienceTag
722722
case types.JoinMethodGitLab:
723-
params.GitlabParams = join.GitlabParams{
723+
params.GitlabParams = joinclient.GitlabParams{
724724
EnvVarName: cfg.Onboarding.Gitlab.TokenEnvVarName,
725725
}
726726
case types.JoinMethodBoundKeypair:
@@ -745,7 +745,7 @@ func botIdentityFromToken(
745745
params.BoundKeypairParams = boundKeypairState.ToJoinParams(joinSecret)
746746
}
747747

748-
result, err := join.Register(ctx, params)
748+
result, err := joinclient.Join(ctx, params)
749749
if err != nil {
750750
return nil, trace.Wrap(err)
751751
}

0 commit comments

Comments
 (0)