Skip to content

Commit aa85cc8

Browse files
authored
Merge branch 'main' into operator-defaults
2 parents f16765b + 5f7cfe5 commit aa85cc8

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

internal/service/client/v1/client_service.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,29 @@ func (s *ClientService) UpdateLease(ctx context.Context, req *cpb.UpdateLeaseReq
244244
jlease.Spec.EndTime = desired.Spec.EndTime
245245
}
246246

247+
// Transfer lease to a new client if specified
248+
if req.Lease.Client != nil && *req.Lease.Client != "" {
249+
// Only active leases can be transferred (has exporter, not ended)
250+
if jlease.Status.ExporterRef == nil {
251+
return nil, fmt.Errorf("cannot transfer lease: lease has not started yet")
252+
}
253+
if jlease.Status.Ended {
254+
return nil, fmt.Errorf("cannot transfer lease: lease has already ended")
255+
}
256+
newClientKey, err := utils.ParseClientIdentifier(*req.Lease.Client)
257+
if err != nil {
258+
return nil, err
259+
}
260+
if newClientKey.Namespace != key.Namespace {
261+
return nil, fmt.Errorf("cannot transfer lease to client in different namespace")
262+
}
263+
var newClient jumpstarterdevv1alpha1.Client
264+
if err := s.Get(ctx, *newClientKey, &newClient); err != nil {
265+
return nil, fmt.Errorf("target client not found: %w", err)
266+
}
267+
jlease.Spec.ClientRef.Name = newClientKey.Name
268+
}
269+
247270
// Recalculate missing field or validate consistency
248271
if err := jumpstarterdevv1alpha1.ReconcileLeaseTimeFields(&jlease.Spec.BeginTime, &jlease.Spec.EndTime, &jlease.Spec.Duration); err != nil {
249272
return nil, err

internal/service/utils/identifier.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,7 @@ func ParseLeaseIdentifier(identifier string) (key *kclient.ObjectKey, err error)
8989
func UnparseLeaseIdentifier(key kclient.ObjectKey) string {
9090
return UnparseObjectIdentifier(key, "leases")
9191
}
92+
93+
func ParseClientIdentifier(identifier string) (key *kclient.ObjectKey, err error) {
94+
return ParseObjectIdentifier(identifier, "clients")
95+
}

0 commit comments

Comments
 (0)