Skip to content
This repository was archived by the owner on Jul 18, 2025. It is now read-only.

Commit 55f5e29

Browse files
committed
refactoring
1 parent cc7ffcb commit 55f5e29

File tree

11 files changed

+198
-242
lines changed

11 files changed

+198
-242
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ CAPI_KIND_CLUSTER_NAME ?= capi-test
232232

233233
# It is set by Prow GIT_TAG, a git-based tag of the form vYYYYMMDD-hash, e.g., v20210120-v0.3.10-308-gc61521971
234234

235-
TAG ?= v0.2.6-preview
235+
TAG ?= v0.2.7-preview
236236
ARCH ?= $(shell go env GOARCH)
237237
ALL_ARCH = amd64 arm arm64
238238

config/default/manager_image_patch.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ spec:
77
template:
88
spec:
99
containers:
10-
- image: ghcr.io/patricklaabs/cluster-api-addon-provider-cdk8s/cluster-api-cdk8s-controller:v0.2.6-preview
10+
- image: ghcr.io/patricklaabs/cluster-api-addon-provider-cdk8s/cluster-api-cdk8s-controller:v0.2.7-preview
1111
name: manager

config/default/manager_image_patch.yaml-e

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ spec:
77
template:
88
spec:
99
containers:
10-
- image: ghcr.io/patricklaabs/cluster-api-addon-provider-cdk8s/cluster-api-cdk8s-controller:v0.2.6-preview
10+
- image: ghcr.io/patricklaabs/cluster-api-addon-provider-cdk8s/cluster-api-cdk8s-controller:v0.2.7-preview
1111
name: manager

controllers/cdk8sappproxy/cdk8sappproxy_controller.go

Lines changed: 50 additions & 162 deletions
Large diffs are not rendered by default.
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package cdk8sappproxy
2+
3+
import (
4+
"context"
5+
addonsv1alpha1 "github.com/PatrickLaabs/cluster-api-addon-provider-cdk8s/api/v1alpha1"
6+
"github.com/go-git/go-git/v5"
7+
plumbingtransport "github.com/go-git/go-git/v5/plumbing/transport"
8+
"github.com/go-git/go-git/v5/plumbing/transport/http"
9+
"github.com/go-logr/logr"
10+
"github.com/pkg/errors"
11+
corev1 "k8s.io/api/core/v1"
12+
"sigs.k8s.io/controller-runtime/pkg/client"
13+
"strings"
14+
)
15+
16+
func (r *Reconciler) getGitAuth(ctx context.Context, cdk8sAppProxy *addonsv1alpha1.Cdk8sAppProxy, authSecretRef *corev1.LocalObjectReference, logger logr.Logger, operation string) (*http.BasicAuth, error) {
17+
if authSecretRef == nil {
18+
return &http.BasicAuth{}, nil
19+
}
20+
21+
logger.Info("AuthSecretRef specified, attempting to fetch secret", "secretName", authSecretRef.Name, "operation", operation)
22+
23+
authSecret := &corev1.Secret{}
24+
secretKey := client.ObjectKey{Namespace: cdk8sAppProxy.Namespace, Name: authSecretRef.Name}
25+
if err := r.Get(ctx, secretKey, authSecret); err != nil {
26+
logger.Error(err, "Failed to get auth secret", "secretName", secretKey.String(), "operation", operation)
27+
28+
return nil, err
29+
}
30+
31+
username, okUser := authSecret.Data["username"]
32+
password, okPass := authSecret.Data["password"]
33+
34+
if !okUser || !okPass {
35+
err := errors.New("auth secret missing username or password fields")
36+
logger.Error(err, "Invalid auth secret", "secretName", secretKey.String(), "operation", operation)
37+
38+
return nil, err
39+
}
40+
41+
logger.Info("Successfully fetched auth secret", "operation", operation)
42+
43+
return &http.BasicAuth{
44+
Username: string(username),
45+
Password: string(password),
46+
}, nil
47+
}
48+
49+
func (r *Reconciler) cloneGitRepository(ctx context.Context, cdk8sAppProxy *addonsv1alpha1.Cdk8sAppProxy, gitSpec *addonsv1alpha1.GitRepositorySpec, tempDir string, logger logr.Logger, operation string) error {
50+
cloneOptions := &git.CloneOptions{
51+
URL: gitSpec.URL,
52+
Progress: &gitProgressLogger{logger: logger.WithName("git-clone")},
53+
}
54+
55+
// Handle authentication if needed
56+
if gitSpec.AuthSecretRef != nil {
57+
auth, err := r.getGitAuth(ctx, cdk8sAppProxy, gitSpec.AuthSecretRef, logger, operation)
58+
if err != nil {
59+
return err
60+
}
61+
cloneOptions.Auth = auth
62+
}
63+
64+
logger.Info("Executing git clone with go-git", "url", gitSpec.URL, "targetDir", tempDir, "operation", operation)
65+
66+
_, err := git.PlainCloneContext(ctx, tempDir, false, cloneOptions)
67+
if err != nil {
68+
logger.Error(err, "go-git PlainCloneContext failed", "operation", operation)
69+
reason := addonsv1alpha1.GitCloneFailedReason
70+
if errors.Is(err, plumbingtransport.ErrAuthenticationRequired) || strings.Contains(err.Error(), "authentication required") {
71+
reason = addonsv1alpha1.GitAuthenticationFailedReason
72+
}
73+
74+
// Only call handleError if we have a valid cdk8sAppProxy (not during deletion cleanup)
75+
if cdk8sAppProxy != nil {
76+
return r.handleError(ctx, cdk8sAppProxy, reason, "go-git clone failed during "+operation, err)
77+
}
78+
79+
return err
80+
}
81+
logger.Info("Successfully cloned git repository with go-git", "operation", operation)
82+
83+
return nil
84+
}

controllers/cdk8sappproxy/cdk8sappproxy_reconciler.go

Lines changed: 29 additions & 75 deletions
Large diffs are not rendered by default.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package cdk8sappproxy
2+
3+
const Finalizer = "cdk8sappproxy.addons.cluster.x-k8s.io/finalizer"
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package cdk8sappproxy
2+
3+
import "github.com/go-logr/logr"
4+
5+
// gitProgressLogger buffers git progress messages and logs them line by line.
6+
type gitProgressLogger struct {
7+
logger logr.Logger
8+
buffer []byte
9+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package cdk8sappproxy
2+
3+
import (
4+
"context"
5+
"k8s.io/apimachinery/pkg/runtime"
6+
"k8s.io/apimachinery/pkg/types"
7+
"k8s.io/client-go/tools/record"
8+
"sigs.k8s.io/controller-runtime/pkg/client"
9+
)
10+
11+
// Reconciler reconciles a Cdk8sAppProxy object.
12+
type Reconciler struct {
13+
client.Client
14+
Scheme *runtime.Scheme
15+
Recorder record.EventRecorder
16+
ActiveWatches map[types.NamespacedName]map[string]context.CancelFunc
17+
activeGitPollers map[types.NamespacedName]context.CancelFunc
18+
}

controllers/suite_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ var _ = BeforeSuite(func() {
9999
Expect(k8sClient).NotTo(BeNil())
100100

101101
// Setup Cdk8sAppProxyReconciler
102-
err = (&caapccontroller.Cdk8sAppProxyReconciler{
102+
err = (&caapccontroller.Reconciler{
103103
Client: k8sManager.GetClient(),
104104
Scheme: k8sManager.GetScheme(),
105105
}).SetupWithManager(k8sManager, crcontroller.Options{})

0 commit comments

Comments
 (0)