Skip to content

Commit c7b714d

Browse files
authored
Merge pull request #67 from SovereignCloudStack/syself/github-client-fix
🌱 create github client only if required
2 parents adb648c + 6d3984c commit c7b714d

File tree

2 files changed

+41
-43
lines changed

2 files changed

+41
-43
lines changed

internal/controller/clusterstack_controller.go

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -109,33 +109,36 @@ func (r *ClusterStackReconciler) Reconcile(ctx context.Context, req reconcile.Re
109109
return reconcile.Result{}, fmt.Errorf("failed to get latest ready ClusterStackRelease: %w", err)
110110
}
111111

112-
gc, err := r.GitHubClientFactory.NewClient(ctx)
113-
if err != nil {
114-
conditions.MarkFalse(clusterStack,
115-
csov1alpha1.GitAPIAvailableCondition,
116-
csov1alpha1.GitTokenOrEnvVariableNotSetReason,
117-
clusterv1.ConditionSeverityError,
118-
err.Error(),
119-
)
120-
record.Warnf(clusterStack, "GitTokenOrEnvVariableNotSet", err.Error())
121-
return reconcile.Result{}, fmt.Errorf("failed to create Github client: %w", err)
122-
}
112+
var latest *string
123113

124-
conditions.MarkTrue(clusterStack, csov1alpha1.GitAPIAvailableCondition)
114+
if clusterStack.Spec.AutoSubscribe {
115+
gc, err := r.GitHubClientFactory.NewClient(ctx)
116+
if err != nil {
117+
conditions.MarkFalse(clusterStack,
118+
csov1alpha1.GitAPIAvailableCondition,
119+
csov1alpha1.GitTokenOrEnvVariableNotSetReason,
120+
clusterv1.ConditionSeverityError,
121+
err.Error(),
122+
)
123+
record.Warnf(clusterStack, "GitTokenOrEnvVariableNotSet", err.Error())
124+
return reconcile.Result{}, fmt.Errorf("failed to create Github client: %w", err)
125+
}
125126

126-
latest, err := getLatestReleaseFromRemoteRepository(ctx, clusterStack, gc)
127-
if err != nil {
128-
// only log error and mark condition as false, but continue
129-
conditions.MarkFalse(clusterStack,
130-
csov1alpha1.GitReleasesSyncedCondition,
131-
csov1alpha1.FailedToSyncReason,
132-
clusterv1.ConditionSeverityWarning,
133-
err.Error(),
134-
)
135-
logger.Error(err, "failed to get latest release from remote repository")
136-
}
127+
conditions.MarkTrue(clusterStack, csov1alpha1.GitAPIAvailableCondition)
128+
latest, err = getLatestReleaseFromRemoteRepository(ctx, clusterStack, gc)
129+
if err != nil {
130+
// only log error and mark condition as false, but continue
131+
conditions.MarkFalse(clusterStack,
132+
csov1alpha1.GitReleasesSyncedCondition,
133+
csov1alpha1.FailedToSyncReason,
134+
clusterv1.ConditionSeverityWarning,
135+
err.Error(),
136+
)
137+
logger.Error(err, "failed to get latest release from remote repository")
138+
}
137139

138-
conditions.MarkTrue(clusterStack, csov1alpha1.GitReleasesSyncedCondition)
140+
conditions.MarkTrue(clusterStack, csov1alpha1.GitReleasesSyncedCondition)
141+
}
139142

140143
inUse, err := r.getClusterStackReleasesInUse(ctx, req.Namespace)
141144
if err != nil {
@@ -534,11 +537,6 @@ func getLatestReadyClusterStackRelease(clusterStackReleases []*csov1alpha1.Clust
534537
}
535538

536539
func getLatestReleaseFromRemoteRepository(ctx context.Context, clusterStack *csov1alpha1.ClusterStack, gc githubclient.Client) (*string, error) {
537-
// nothing to do if autoSubscribe is not activated
538-
if !clusterStack.Spec.AutoSubscribe {
539-
return nil, nil
540-
}
541-
542540
ghReleases, resp, err := gc.ListRelease(ctx)
543541
if err != nil {
544542
return nil, fmt.Errorf("failed to list releases on remote Git repository: %w", err)

internal/controller/clusterstackrelease_controller.go

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -96,20 +96,6 @@ func (r *ClusterStackReleaseReconciler) Reconcile(ctx context.Context, req recon
9696

9797
controllerutil.AddFinalizer(clusterStackRelease, csov1alpha1.ClusterStackReleaseFinalizer)
9898

99-
gc, err := r.GitHubClientFactory.NewClient(ctx)
100-
if err != nil {
101-
conditions.MarkFalse(clusterStackRelease,
102-
csov1alpha1.GitAPIAvailableCondition,
103-
csov1alpha1.GitTokenOrEnvVariableNotSetReason,
104-
clusterv1.ConditionSeverityError,
105-
err.Error(),
106-
)
107-
record.Warnf(clusterStackRelease, "GitTokenOrEnvVariableNotSet", err.Error())
108-
return reconcile.Result{}, fmt.Errorf("failed to create Github client: %w", err)
109-
}
110-
111-
conditions.MarkTrue(clusterStackRelease, csov1alpha1.GitAPIAvailableCondition)
112-
11399
// name of ClusterStackRelease object is same as the release tag
114100
releaseTag := clusterStackRelease.Name
115101

@@ -127,6 +113,20 @@ func (r *ClusterStackReleaseReconciler) Reconcile(ctx context.Context, req recon
127113
// acquire lock so that only one reconcile loop can download the release
128114
r.clusterStackRelDownloadDirectoryMutex.Lock()
129115

116+
gc, err := r.GitHubClientFactory.NewClient(ctx)
117+
if err != nil {
118+
conditions.MarkFalse(clusterStackRelease,
119+
csov1alpha1.GitAPIAvailableCondition,
120+
csov1alpha1.GitTokenOrEnvVariableNotSetReason,
121+
clusterv1.ConditionSeverityError,
122+
err.Error(),
123+
)
124+
record.Warnf(clusterStackRelease, "GitTokenOrEnvVariableNotSet", err.Error())
125+
return reconcile.Result{}, fmt.Errorf("failed to create Github client: %w", err)
126+
}
127+
128+
conditions.MarkTrue(clusterStackRelease, csov1alpha1.GitAPIAvailableCondition)
129+
130130
if err := downloadReleaseAssets(ctx, releaseTag, releaseAssets.LocalDownloadPath, gc); err != nil {
131131
return reconcile.Result{}, fmt.Errorf("failed to download release assets: %w", err)
132132
}

0 commit comments

Comments
 (0)