Skip to content

Commit 82eff49

Browse files
authored
Merge pull request #8939 from Fedosin/clusterctl_context
⚠️ Improve Context handling in clusterctl
2 parents 10e8e4f + dae1103 commit 82eff49

File tree

115 files changed

+1250
-926
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

115 files changed

+1250
-926
lines changed

cmd/clusterctl/client/alpha/client.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,6 @@ limitations under the License.
1616

1717
package alpha
1818

19-
import "context"
20-
21-
var (
22-
ctx = context.TODO()
23-
)
24-
2519
// Client is the alpha client.
2620
type Client interface {
2721
Rollout() Rollout

cmd/clusterctl/client/alpha/kubeadmcontrolplane.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package alpha
1818

1919
import (
20+
"context"
2021
"fmt"
2122
"time"
2223

@@ -29,7 +30,7 @@ import (
2930
)
3031

3132
// getKubeadmControlPlane retrieves the KubeadmControlPlane object corresponding to the name and namespace specified.
32-
func getKubeadmControlPlane(proxy cluster.Proxy, name, namespace string) (*controlplanev1.KubeadmControlPlane, error) {
33+
func getKubeadmControlPlane(ctx context.Context, proxy cluster.Proxy, name, namespace string) (*controlplanev1.KubeadmControlPlane, error) {
3334
kcpObj := &controlplanev1.KubeadmControlPlane{}
3435
c, err := proxy.NewClient()
3536
if err != nil {
@@ -47,13 +48,13 @@ func getKubeadmControlPlane(proxy cluster.Proxy, name, namespace string) (*contr
4748
}
4849

4950
// setRolloutAfterOnKCP sets KubeadmControlPlane.spec.rolloutAfter.
50-
func setRolloutAfterOnKCP(proxy cluster.Proxy, name, namespace string) error {
51+
func setRolloutAfterOnKCP(ctx context.Context, proxy cluster.Proxy, name, namespace string) error {
5152
patch := client.RawPatch(types.MergePatchType, []byte(fmt.Sprintf(`{"spec":{"rolloutAfter":"%v"}}`, time.Now().Format(time.RFC3339))))
52-
return patchKubeadmControlPlane(proxy, name, namespace, patch)
53+
return patchKubeadmControlPlane(ctx, proxy, name, namespace, patch)
5354
}
5455

5556
// patchKubeadmControlPlane applies a patch to a KubeadmControlPlane.
56-
func patchKubeadmControlPlane(proxy cluster.Proxy, name, namespace string, patch client.Patch) error {
57+
func patchKubeadmControlPlane(ctx context.Context, proxy cluster.Proxy, name, namespace string, patch client.Patch) error {
5758
cFrom, err := proxy.NewClient()
5859
if err != nil {
5960
return err

cmd/clusterctl/client/alpha/machinedeployment.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package alpha
1818

1919
import (
20+
"context"
2021
"fmt"
2122
"strconv"
2223
"time"
@@ -35,7 +36,7 @@ import (
3536
)
3637

3738
// getMachineDeployment retrieves the MachineDeployment object corresponding to the name and namespace specified.
38-
func getMachineDeployment(proxy cluster.Proxy, name, namespace string) (*clusterv1.MachineDeployment, error) {
39+
func getMachineDeployment(ctx context.Context, proxy cluster.Proxy, name, namespace string) (*clusterv1.MachineDeployment, error) {
3940
mdObj := &clusterv1.MachineDeployment{}
4041
c, err := proxy.NewClient()
4142
if err != nil {
@@ -53,13 +54,13 @@ func getMachineDeployment(proxy cluster.Proxy, name, namespace string) (*cluster
5354
}
5455

5556
// setRolloutAfterOnMachineDeployment sets MachineDeployment.spec.rolloutAfter.
56-
func setRolloutAfterOnMachineDeployment(proxy cluster.Proxy, name, namespace string) error {
57+
func setRolloutAfterOnMachineDeployment(ctx context.Context, proxy cluster.Proxy, name, namespace string) error {
5758
patch := client.RawPatch(types.MergePatchType, []byte(fmt.Sprintf(`{"spec":{"rolloutAfter":"%v"}}`, time.Now().Format(time.RFC3339))))
58-
return patchMachineDeployment(proxy, name, namespace, patch)
59+
return patchMachineDeployment(ctx, proxy, name, namespace, patch)
5960
}
6061

6162
// patchMachineDeployment applies a patch to a machinedeployment.
62-
func patchMachineDeployment(proxy cluster.Proxy, name, namespace string, patch client.Patch) error {
63+
func patchMachineDeployment(ctx context.Context, proxy cluster.Proxy, name, namespace string, patch client.Patch) error {
6364
cFrom, err := proxy.NewClient()
6465
if err != nil {
6566
return err
@@ -118,7 +119,7 @@ func findMachineDeploymentRevision(toRevision int64, allMSs []*clusterv1.Machine
118119
}
119120

120121
// getMachineSetsForDeployment returns a list of MachineSets associated with a MachineDeployment.
121-
func getMachineSetsForDeployment(proxy cluster.Proxy, md *clusterv1.MachineDeployment) ([]*clusterv1.MachineSet, error) {
122+
func getMachineSetsForDeployment(ctx context.Context, proxy cluster.Proxy, md *clusterv1.MachineDeployment) ([]*clusterv1.MachineSet, error) {
122123
log := logf.Log
123124
c, err := proxy.NewClient()
124125
if err != nil {

cmd/clusterctl/client/alpha/rollout.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ limitations under the License.
1717
package alpha
1818

1919
import (
20+
"context"
21+
2022
corev1 "k8s.io/api/core/v1"
2123

2224
"sigs.k8s.io/cluster-api/cmd/clusterctl/client/cluster"
@@ -40,10 +42,10 @@ var validRollbackResourceTypes = []string{
4042

4143
// Rollout defines the behavior of a rollout implementation.
4244
type Rollout interface {
43-
ObjectRestarter(cluster.Proxy, corev1.ObjectReference) error
44-
ObjectPauser(cluster.Proxy, corev1.ObjectReference) error
45-
ObjectResumer(cluster.Proxy, corev1.ObjectReference) error
46-
ObjectRollbacker(cluster.Proxy, corev1.ObjectReference, int64) error
45+
ObjectRestarter(context.Context, cluster.Proxy, corev1.ObjectReference) error
46+
ObjectPauser(context.Context, cluster.Proxy, corev1.ObjectReference) error
47+
ObjectResumer(context.Context, cluster.Proxy, corev1.ObjectReference) error
48+
ObjectRollbacker(context.Context, cluster.Proxy, corev1.ObjectReference, int64) error
4749
}
4850

4951
var _ Rollout = &rollout{}

cmd/clusterctl/client/alpha/rollout_pauser.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package alpha
1818

1919
import (
20+
"context"
2021
"fmt"
2122

2223
"github.com/pkg/errors"
@@ -30,28 +31,28 @@ import (
3031
)
3132

3233
// ObjectPauser will issue a pause on the specified cluster-api resource.
33-
func (r *rollout) ObjectPauser(proxy cluster.Proxy, ref corev1.ObjectReference) error {
34+
func (r *rollout) ObjectPauser(ctx context.Context, proxy cluster.Proxy, ref corev1.ObjectReference) error {
3435
switch ref.Kind {
3536
case MachineDeployment:
36-
deployment, err := getMachineDeployment(proxy, ref.Name, ref.Namespace)
37+
deployment, err := getMachineDeployment(ctx, proxy, ref.Name, ref.Namespace)
3738
if err != nil || deployment == nil {
3839
return errors.Wrapf(err, "failed to fetch %v/%v", ref.Kind, ref.Name)
3940
}
4041
if deployment.Spec.Paused {
4142
return errors.Errorf("MachineDeployment is already paused: %v/%v\n", ref.Kind, ref.Name) //nolint:revive // MachineDeployment is intentionally capitalized.
4243
}
43-
if err := pauseMachineDeployment(proxy, ref.Name, ref.Namespace); err != nil {
44+
if err := pauseMachineDeployment(ctx, proxy, ref.Name, ref.Namespace); err != nil {
4445
return err
4546
}
4647
case KubeadmControlPlane:
47-
kcp, err := getKubeadmControlPlane(proxy, ref.Name, ref.Namespace)
48+
kcp, err := getKubeadmControlPlane(ctx, proxy, ref.Name, ref.Namespace)
4849
if err != nil || kcp == nil {
4950
return errors.Wrapf(err, "failed to fetch %v/%v", ref.Kind, ref.Name)
5051
}
5152
if annotations.HasPaused(kcp.GetObjectMeta()) {
5253
return errors.Errorf("KubeadmControlPlane is already paused: %v/%v\n", ref.Kind, ref.Name) //nolint:revive // KubeadmControlPlane is intentionally capitalized.
5354
}
54-
if err := pauseKubeadmControlPlane(proxy, ref.Name, ref.Namespace); err != nil {
55+
if err := pauseKubeadmControlPlane(ctx, proxy, ref.Name, ref.Namespace); err != nil {
5556
return err
5657
}
5758
default:
@@ -61,13 +62,13 @@ func (r *rollout) ObjectPauser(proxy cluster.Proxy, ref corev1.ObjectReference)
6162
}
6263

6364
// pauseMachineDeployment sets Paused to true in the MachineDeployment's spec.
64-
func pauseMachineDeployment(proxy cluster.Proxy, name, namespace string) error {
65+
func pauseMachineDeployment(ctx context.Context, proxy cluster.Proxy, name, namespace string) error {
6566
patch := client.RawPatch(types.MergePatchType, []byte(fmt.Sprintf("{\"spec\":{\"paused\":%t}}", true)))
66-
return patchMachineDeployment(proxy, name, namespace, patch)
67+
return patchMachineDeployment(ctx, proxy, name, namespace, patch)
6768
}
6869

6970
// pauseKubeadmControlPlane sets paused annotation to true.
70-
func pauseKubeadmControlPlane(proxy cluster.Proxy, name, namespace string) error {
71+
func pauseKubeadmControlPlane(ctx context.Context, proxy cluster.Proxy, name, namespace string) error {
7172
patch := client.RawPatch(types.MergePatchType, []byte(fmt.Sprintf("{\"metadata\":{\"annotations\":{%q: \"%t\"}}}", clusterv1.PausedAnnotation, true)))
72-
return patchKubeadmControlPlane(proxy, name, namespace, patch)
73+
return patchKubeadmControlPlane(ctx, proxy, name, namespace, patch)
7374
}

cmd/clusterctl/client/alpha/rollout_pauser_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ func Test_ObjectPauser(t *testing.T) {
146146
g := NewWithT(t)
147147
r := newRolloutClient()
148148
proxy := test.NewFakeProxy().WithObjs(tt.fields.objs...)
149-
err := r.ObjectPauser(proxy, tt.fields.ref)
149+
err := r.ObjectPauser(context.Background(), proxy, tt.fields.ref)
150150
if tt.wantErr {
151151
g.Expect(err).To(HaveOccurred())
152152
return

cmd/clusterctl/client/alpha/rollout_restarter.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package alpha
1818

1919
import (
20+
"context"
2021
"time"
2122

2223
"github.com/pkg/errors"
@@ -27,10 +28,10 @@ import (
2728
)
2829

2930
// ObjectRestarter will issue a restart on the specified cluster-api resource.
30-
func (r *rollout) ObjectRestarter(proxy cluster.Proxy, ref corev1.ObjectReference) error {
31+
func (r *rollout) ObjectRestarter(ctx context.Context, proxy cluster.Proxy, ref corev1.ObjectReference) error {
3132
switch ref.Kind {
3233
case MachineDeployment:
33-
deployment, err := getMachineDeployment(proxy, ref.Name, ref.Namespace)
34+
deployment, err := getMachineDeployment(ctx, proxy, ref.Name, ref.Namespace)
3435
if err != nil || deployment == nil {
3536
return errors.Wrapf(err, "failed to fetch %v/%v", ref.Kind, ref.Name)
3637
}
@@ -40,11 +41,11 @@ func (r *rollout) ObjectRestarter(proxy cluster.Proxy, ref corev1.ObjectReferenc
4041
if deployment.Spec.RolloutAfter != nil && deployment.Spec.RolloutAfter.After(time.Now()) {
4142
return errors.Errorf("can't update MachineDeployment (remove 'spec.rolloutAfter' first): %v/%v", ref.Kind, ref.Name)
4243
}
43-
if err := setRolloutAfterOnMachineDeployment(proxy, ref.Name, ref.Namespace); err != nil {
44+
if err := setRolloutAfterOnMachineDeployment(ctx, proxy, ref.Name, ref.Namespace); err != nil {
4445
return err
4546
}
4647
case KubeadmControlPlane:
47-
kcp, err := getKubeadmControlPlane(proxy, ref.Name, ref.Namespace)
48+
kcp, err := getKubeadmControlPlane(ctx, proxy, ref.Name, ref.Namespace)
4849
if err != nil || kcp == nil {
4950
return errors.Wrapf(err, "failed to fetch %v/%v", ref.Kind, ref.Name)
5051
}
@@ -54,7 +55,7 @@ func (r *rollout) ObjectRestarter(proxy cluster.Proxy, ref corev1.ObjectReferenc
5455
if kcp.Spec.RolloutAfter != nil && kcp.Spec.RolloutAfter.After(time.Now()) {
5556
return errors.Errorf("can't update KubeadmControlPlane (remove 'spec.rolloutAfter' first): %v/%v", ref.Kind, ref.Name)
5657
}
57-
if err := setRolloutAfterOnKCP(proxy, ref.Name, ref.Namespace); err != nil {
58+
if err := setRolloutAfterOnKCP(ctx, proxy, ref.Name, ref.Namespace); err != nil {
5859
return err
5960
}
6061
default:

cmd/clusterctl/client/alpha/rollout_restarter_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ func Test_ObjectRestarter(t *testing.T) {
204204
g := NewWithT(t)
205205
r := newRolloutClient()
206206
proxy := test.NewFakeProxy().WithObjs(tt.fields.objs...)
207-
err := r.ObjectRestarter(proxy, tt.fields.ref)
207+
err := r.ObjectRestarter(context.Background(), proxy, tt.fields.ref)
208208
if tt.wantErr {
209209
g.Expect(err).To(HaveOccurred())
210210
return

cmd/clusterctl/client/alpha/rollout_resumer.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package alpha
1818

1919
import (
20+
"context"
2021
"fmt"
2122
"strings"
2223

@@ -31,28 +32,28 @@ import (
3132
)
3233

3334
// ObjectResumer will issue a resume on the specified cluster-api resource.
34-
func (r *rollout) ObjectResumer(proxy cluster.Proxy, ref corev1.ObjectReference) error {
35+
func (r *rollout) ObjectResumer(ctx context.Context, proxy cluster.Proxy, ref corev1.ObjectReference) error {
3536
switch ref.Kind {
3637
case MachineDeployment:
37-
deployment, err := getMachineDeployment(proxy, ref.Name, ref.Namespace)
38+
deployment, err := getMachineDeployment(ctx, proxy, ref.Name, ref.Namespace)
3839
if err != nil || deployment == nil {
3940
return errors.Wrapf(err, "failed to fetch %v/%v", ref.Kind, ref.Name)
4041
}
4142
if !deployment.Spec.Paused {
4243
return errors.Errorf("MachineDeployment is not currently paused: %v/%v\n", ref.Kind, ref.Name) //nolint:revive // MachineDeployment is intentionally capitalized.
4344
}
44-
if err := resumeMachineDeployment(proxy, ref.Name, ref.Namespace); err != nil {
45+
if err := resumeMachineDeployment(ctx, proxy, ref.Name, ref.Namespace); err != nil {
4546
return err
4647
}
4748
case KubeadmControlPlane:
48-
kcp, err := getKubeadmControlPlane(proxy, ref.Name, ref.Namespace)
49+
kcp, err := getKubeadmControlPlane(ctx, proxy, ref.Name, ref.Namespace)
4950
if err != nil || kcp == nil {
5051
return errors.Wrapf(err, "failed to fetch %v/%v", ref.Kind, ref.Name)
5152
}
5253
if !annotations.HasPaused(kcp.GetObjectMeta()) {
5354
return errors.Errorf("KubeadmControlPlane is not currently paused: %v/%v\n", ref.Kind, ref.Name) //nolint:revive // KubeadmControlPlane is intentionally capitalized.
5455
}
55-
if err := resumeKubeadmControlPlane(proxy, ref.Name, ref.Namespace); err != nil {
56+
if err := resumeKubeadmControlPlane(ctx, proxy, ref.Name, ref.Namespace); err != nil {
5657
return err
5758
}
5859
default:
@@ -62,17 +63,17 @@ func (r *rollout) ObjectResumer(proxy cluster.Proxy, ref corev1.ObjectReference)
6263
}
6364

6465
// resumeMachineDeployment sets Paused to true in the MachineDeployment's spec.
65-
func resumeMachineDeployment(proxy cluster.Proxy, name, namespace string) error {
66+
func resumeMachineDeployment(ctx context.Context, proxy cluster.Proxy, name, namespace string) error {
6667
patch := client.RawPatch(types.MergePatchType, []byte(fmt.Sprintf("{\"spec\":{\"paused\":%t}}", false)))
6768

68-
return patchMachineDeployment(proxy, name, namespace, patch)
69+
return patchMachineDeployment(ctx, proxy, name, namespace, patch)
6970
}
7071

7172
// resumeKubeadmControlPlane removes paused annotation.
72-
func resumeKubeadmControlPlane(proxy cluster.Proxy, name, namespace string) error {
73+
func resumeKubeadmControlPlane(ctx context.Context, proxy cluster.Proxy, name, namespace string) error {
7374
// In the paused annotation we must replace slashes to ~1, see https://datatracker.ietf.org/doc/html/rfc6901#section-3.
7475
pausedAnnotation := strings.Replace(clusterv1.PausedAnnotation, "/", "~1", -1)
7576
patch := client.RawPatch(types.JSONPatchType, []byte(fmt.Sprintf("[{\"op\": \"remove\", \"path\": \"/metadata/annotations/%s\"}]", pausedAnnotation)))
7677

77-
return patchKubeadmControlPlane(proxy, name, namespace, patch)
78+
return patchKubeadmControlPlane(ctx, proxy, name, namespace, patch)
7879
}

cmd/clusterctl/client/alpha/rollout_resumer_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ func Test_ObjectResumer(t *testing.T) {
149149
g := NewWithT(t)
150150
r := newRolloutClient()
151151
proxy := test.NewFakeProxy().WithObjs(tt.fields.objs...)
152-
err := r.ObjectResumer(proxy, tt.fields.ref)
152+
err := r.ObjectResumer(context.Background(), proxy, tt.fields.ref)
153153
if tt.wantErr {
154154
g.Expect(err).To(HaveOccurred())
155155
return

cmd/clusterctl/client/alpha/rollout_rollbacker.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ limitations under the License.
1717
package alpha
1818

1919
import (
20+
"context"
21+
2022
"github.com/pkg/errors"
2123
corev1 "k8s.io/api/core/v1"
2224

@@ -27,17 +29,17 @@ import (
2729
)
2830

2931
// ObjectRollbacker will issue a rollback on the specified cluster-api resource.
30-
func (r *rollout) ObjectRollbacker(proxy cluster.Proxy, ref corev1.ObjectReference, toRevision int64) error {
32+
func (r *rollout) ObjectRollbacker(ctx context.Context, proxy cluster.Proxy, ref corev1.ObjectReference, toRevision int64) error {
3133
switch ref.Kind {
3234
case MachineDeployment:
33-
deployment, err := getMachineDeployment(proxy, ref.Name, ref.Namespace)
35+
deployment, err := getMachineDeployment(ctx, proxy, ref.Name, ref.Namespace)
3436
if err != nil || deployment == nil {
3537
return errors.Wrapf(err, "failed to get %v/%v", ref.Kind, ref.Name)
3638
}
3739
if deployment.Spec.Paused {
3840
return errors.Errorf("can't rollback a paused MachineDeployment: please run 'clusterctl rollout resume %v/%v' first", ref.Kind, ref.Name)
3941
}
40-
if err := rollbackMachineDeployment(proxy, deployment, toRevision); err != nil {
42+
if err := rollbackMachineDeployment(ctx, proxy, deployment, toRevision); err != nil {
4143
return err
4244
}
4345
default:
@@ -47,7 +49,7 @@ func (r *rollout) ObjectRollbacker(proxy cluster.Proxy, ref corev1.ObjectReferen
4749
}
4850

4951
// rollbackMachineDeployment will rollback to a previous MachineSet revision used by this MachineDeployment.
50-
func rollbackMachineDeployment(proxy cluster.Proxy, md *clusterv1.MachineDeployment, toRevision int64) error {
52+
func rollbackMachineDeployment(ctx context.Context, proxy cluster.Proxy, md *clusterv1.MachineDeployment, toRevision int64) error {
5153
log := logf.Log
5254
c, err := proxy.NewClient()
5355
if err != nil {
@@ -57,7 +59,7 @@ func rollbackMachineDeployment(proxy cluster.Proxy, md *clusterv1.MachineDeploym
5759
if toRevision < 0 {
5860
return errors.Errorf("revision number cannot be negative: %v", toRevision)
5961
}
60-
msList, err := getMachineSetsForDeployment(proxy, md)
62+
msList, err := getMachineSetsForDeployment(ctx, proxy, md)
6163
if err != nil {
6264
return err
6365
}

cmd/clusterctl/client/alpha/rollout_rollbacker_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ func Test_ObjectRollbacker(t *testing.T) {
241241
g := NewWithT(t)
242242
r := newRolloutClient()
243243
proxy := test.NewFakeProxy().WithObjs(tt.fields.objs...)
244-
err := r.ObjectRollbacker(proxy, tt.fields.ref, tt.fields.toRevision)
244+
err := r.ObjectRollbacker(context.Background(), proxy, tt.fields.ref, tt.fields.toRevision)
245245
if tt.wantErr {
246246
g.Expect(err).To(HaveOccurred())
247247
return

0 commit comments

Comments
 (0)