Skip to content

Commit f9a35a6

Browse files
committed
Move status condition helpers to API
1 parent 2bbcd91 commit f9a35a6

File tree

5 files changed

+127
-142
lines changed

5 files changed

+127
-142
lines changed

api/v1alpha1/gitrepository_types.go

+45
Original file line numberDiff line numberDiff line change
@@ -108,3 +108,48 @@ const (
108108
GitOperationSucceedReason string = "GitOperationSucceed"
109109
GitOperationFailedReason string = "GitOperationFailed"
110110
)
111+
112+
func GitRepositoryReady(repository GitRepository, artifact Artifact, url, reason, message string) GitRepository {
113+
repository.Status.Conditions = []SourceCondition{
114+
{
115+
Type: ReadyCondition,
116+
Status: corev1.ConditionTrue,
117+
LastTransitionTime: metav1.Now(),
118+
Reason: reason,
119+
Message: message,
120+
},
121+
}
122+
repository.Status.URL = url
123+
124+
if repository.Status.Artifact != nil {
125+
if repository.Status.Artifact.Path != artifact.Path {
126+
repository.Status.Artifact = &artifact
127+
}
128+
} else {
129+
repository.Status.Artifact = &artifact
130+
}
131+
132+
return repository
133+
}
134+
135+
func GitRepositoryNotReady(repository GitRepository, reason, message string) GitRepository {
136+
repository.Status.Conditions = []SourceCondition{
137+
{
138+
Type: ReadyCondition,
139+
Status: corev1.ConditionFalse,
140+
LastTransitionTime: metav1.Now(),
141+
Reason: reason,
142+
Message: message,
143+
},
144+
}
145+
return repository
146+
}
147+
148+
func GitRepositoryReadyMessage(repository GitRepository) string {
149+
for _, condition := range repository.Status.Conditions {
150+
if condition.Type == ReadyCondition {
151+
return condition.Message
152+
}
153+
}
154+
return ""
155+
}

api/v1alpha1/helmrepository_types.go

+46
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package v1alpha1
1818

1919
import (
20+
corev1 "k8s.io/api/core/v1"
2021
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2122
)
2223

@@ -83,3 +84,48 @@ const (
8384
// of the given Helm repository succeeded.
8485
IndexationSucceededReason string = "IndexationSucceed"
8586
)
87+
88+
func HelmRepositoryReady(repository HelmRepository, artifact Artifact, url, reason, message string) HelmRepository {
89+
repository.Status.Conditions = []SourceCondition{
90+
{
91+
Type: ReadyCondition,
92+
Status: corev1.ConditionTrue,
93+
LastTransitionTime: metav1.Now(),
94+
Reason: reason,
95+
Message: message,
96+
},
97+
}
98+
repository.Status.URL = url
99+
100+
if repository.Status.Artifact != nil {
101+
if repository.Status.Artifact.Path != artifact.Path {
102+
repository.Status.Artifact = &artifact
103+
}
104+
} else {
105+
repository.Status.Artifact = &artifact
106+
}
107+
108+
return repository
109+
}
110+
111+
func HelmRepositoryNotReady(repository HelmRepository, reason, message string) HelmRepository {
112+
repository.Status.Conditions = []SourceCondition{
113+
{
114+
Type: ReadyCondition,
115+
Status: corev1.ConditionFalse,
116+
LastTransitionTime: metav1.Now(),
117+
Reason: reason,
118+
Message: message,
119+
},
120+
}
121+
return repository
122+
}
123+
124+
func HelmRepositoryReadyMessage(repository HelmRepository) string {
125+
for _, condition := range repository.Status.Conditions {
126+
if condition.Type == ReadyCondition {
127+
return condition.Message
128+
}
129+
}
130+
return ""
131+
}

controllers/conditions.go

-102
This file was deleted.

controllers/gitrepository_controller.go

+21-23
Original file line numberDiff line numberDiff line change
@@ -67,15 +67,13 @@ func (r *GitRepositoryReconciler) Reconcile(req ctrl.Request) (ctrl.Result, erro
6767
return ctrl.Result{}, client.IgnoreNotFound(err)
6868
}
6969

70-
result := ctrl.Result{RequeueAfter: repo.Spec.Interval.Duration}
71-
7270
// set initial status
7371
if reset, status := r.shouldResetStatus(repo); reset {
7472
log.Info("Initializing repository")
7573
repo.Status = status
7674
if err := r.Status().Update(ctx, &repo); err != nil {
7775
log.Error(err, "unable to update GitRepository status")
78-
return result, err
76+
return ctrl.Result{Requeue: true}, err
7977
}
8078
}
8179

@@ -91,13 +89,13 @@ func (r *GitRepositoryReconciler) Reconcile(req ctrl.Request) (ctrl.Result, erro
9189
// update status
9290
if err := r.Status().Update(ctx, &syncedRepo); err != nil {
9391
log.Error(err, "unable to update GitRepository status")
94-
return result, err
92+
return ctrl.Result{Requeue: true}, err
9593
}
9694

97-
log.Info("Repository sync succeeded", "msg", GitRepositoryReadyMessage(syncedRepo))
95+
log.Info("Repository sync succeeded", "msg", sourcev1.GitRepositoryReadyMessage(syncedRepo))
9896

9997
// requeue repository
100-
return result, nil
98+
return ctrl.Result{RequeueAfter: repo.Spec.Interval.Duration}, nil
10199
}
102100

103101
func (r *GitRepositoryReconciler) SetupWithManager(mgr ctrl.Manager) error {
@@ -151,21 +149,21 @@ func (r *GitRepositoryReconciler) sync(repository sourcev1.GitRepository) (sourc
151149
tmpSSH, err := ioutil.TempDir("", repository.Name)
152150
if err != nil {
153151
err = fmt.Errorf("tmp dir error: %w", err)
154-
return NotReadyGitRepository(repository, sourcev1.StorageOperationFailedReason, err.Error()), err
152+
return sourcev1.GitRepositoryNotReady(repository, sourcev1.StorageOperationFailedReason, err.Error()), err
155153
}
156154
defer os.RemoveAll(tmpSSH)
157155

158156
auth, err := r.auth(repository, tmpSSH)
159157
if err != nil {
160158
err = fmt.Errorf("auth error: %w", err)
161-
return NotReadyGitRepository(repository, sourcev1.StorageOperationFailedReason, err.Error()), err
159+
return sourcev1.GitRepositoryNotReady(repository, sourcev1.StorageOperationFailedReason, err.Error()), err
162160
}
163161

164162
// create tmp dir for the Git clone
165163
tmpGit, err := ioutil.TempDir("", repository.Name)
166164
if err != nil {
167165
err = fmt.Errorf("tmp dir error: %w", err)
168-
return NotReadyGitRepository(repository, sourcev1.StorageOperationFailedReason, err.Error()), err
166+
return sourcev1.GitRepositoryNotReady(repository, sourcev1.StorageOperationFailedReason, err.Error()), err
169167
}
170168
defer os.RemoveAll(tmpGit)
171169

@@ -184,7 +182,7 @@ func (r *GitRepositoryReconciler) sync(repository sourcev1.GitRepository) (sourc
184182
})
185183
if err != nil {
186184
err = fmt.Errorf("git clone error: %w", err)
187-
return NotReadyGitRepository(repository, sourcev1.GitOperationFailedReason, err.Error()), err
185+
return sourcev1.GitRepositoryNotReady(repository, sourcev1.GitOperationFailedReason, err.Error()), err
188186
}
189187

190188
// checkout commit or tag
@@ -193,7 +191,7 @@ func (r *GitRepositoryReconciler) sync(repository sourcev1.GitRepository) (sourc
193191
w, err := repo.Worktree()
194192
if err != nil {
195193
err = fmt.Errorf("git worktree error: %w", err)
196-
return NotReadyGitRepository(repository, sourcev1.GitOperationFailedReason, err.Error()), err
194+
return sourcev1.GitRepositoryNotReady(repository, sourcev1.GitOperationFailedReason, err.Error()), err
197195
}
198196

199197
err = w.Checkout(&git.CheckoutOptions{
@@ -202,19 +200,19 @@ func (r *GitRepositoryReconciler) sync(repository sourcev1.GitRepository) (sourc
202200
})
203201
if err != nil {
204202
err = fmt.Errorf("git checkout %s for %s error: %w", commit, branch, err)
205-
return NotReadyGitRepository(repository, sourcev1.GitOperationFailedReason, err.Error()), err
203+
return sourcev1.GitRepositoryNotReady(repository, sourcev1.GitOperationFailedReason, err.Error()), err
206204
}
207205
} else if exp := repository.Spec.Reference.SemVer; exp != "" {
208206
rng, err := semver.ParseRange(exp)
209207
if err != nil {
210208
err = fmt.Errorf("semver parse range error: %w", err)
211-
return NotReadyGitRepository(repository, sourcev1.GitOperationFailedReason, err.Error()), err
209+
return sourcev1.GitRepositoryNotReady(repository, sourcev1.GitOperationFailedReason, err.Error()), err
212210
}
213211

214212
repoTags, err := repo.Tags()
215213
if err != nil {
216214
err = fmt.Errorf("git list tags error: %w", err)
217-
return NotReadyGitRepository(repository, sourcev1.GitOperationFailedReason, err.Error()), err
215+
return sourcev1.GitRepositoryNotReady(repository, sourcev1.GitOperationFailedReason, err.Error()), err
218216
}
219217

220218
tags := make(map[string]string)
@@ -243,19 +241,19 @@ func (r *GitRepositoryReconciler) sync(repository sourcev1.GitRepository) (sourc
243241
w, err := repo.Worktree()
244242
if err != nil {
245243
err = fmt.Errorf("git worktree error: %w", err)
246-
return NotReadyGitRepository(repository, sourcev1.GitOperationFailedReason, err.Error()), err
244+
return sourcev1.GitRepositoryNotReady(repository, sourcev1.GitOperationFailedReason, err.Error()), err
247245
}
248246

249247
err = w.Checkout(&git.CheckoutOptions{
250248
Hash: plumbing.NewHash(commit),
251249
})
252250
if err != nil {
253251
err = fmt.Errorf("git checkout error: %w", err)
254-
return NotReadyGitRepository(repository, sourcev1.GitOperationFailedReason, err.Error()), err
252+
return sourcev1.GitRepositoryNotReady(repository, sourcev1.GitOperationFailedReason, err.Error()), err
255253
}
256254
} else {
257255
err = fmt.Errorf("no match found for semver: %s", repository.Spec.Reference.SemVer)
258-
return NotReadyGitRepository(repository, sourcev1.GitOperationFailedReason, err.Error()), err
256+
return sourcev1.GitRepositoryNotReady(repository, sourcev1.GitOperationFailedReason, err.Error()), err
259257
}
260258
}
261259
}
@@ -264,7 +262,7 @@ func (r *GitRepositoryReconciler) sync(repository sourcev1.GitRepository) (sourc
264262
ref, err := repo.Head()
265263
if err != nil {
266264
err = fmt.Errorf("git resolve HEAD error: %w", err)
267-
return NotReadyGitRepository(repository, sourcev1.GitOperationFailedReason, err.Error()), err
265+
return sourcev1.GitRepositoryNotReady(repository, sourcev1.GitOperationFailedReason, err.Error()), err
268266
}
269267

270268
if revision == "" {
@@ -278,33 +276,33 @@ func (r *GitRepositoryReconciler) sync(repository sourcev1.GitRepository) (sourc
278276
err = r.Storage.MkdirAll(artifact)
279277
if err != nil {
280278
err = fmt.Errorf("mkdir dir error: %w", err)
281-
return NotReadyGitRepository(repository, sourcev1.StorageOperationFailedReason, err.Error()), err
279+
return sourcev1.GitRepositoryNotReady(repository, sourcev1.StorageOperationFailedReason, err.Error()), err
282280
}
283281

284282
// acquire lock
285283
unlock, err := r.Storage.Lock(artifact)
286284
if err != nil {
287285
err = fmt.Errorf("unable to acquire lock: %w", err)
288-
return NotReadyGitRepository(repository, sourcev1.StorageOperationFailedReason, err.Error()), err
286+
return sourcev1.GitRepositoryNotReady(repository, sourcev1.StorageOperationFailedReason, err.Error()), err
289287
}
290288
defer unlock()
291289

292290
// archive artifact
293291
err = r.Storage.Archive(artifact, tmpGit, "")
294292
if err != nil {
295293
err = fmt.Errorf("storage archive error: %w", err)
296-
return NotReadyGitRepository(repository, sourcev1.StorageOperationFailedReason, err.Error()), err
294+
return sourcev1.GitRepositoryNotReady(repository, sourcev1.StorageOperationFailedReason, err.Error()), err
297295
}
298296

299297
// update latest symlink
300298
url, err := r.Storage.Symlink(artifact, "latest.tar.gz")
301299
if err != nil {
302300
err = fmt.Errorf("storage lock error: %w", err)
303-
return NotReadyGitRepository(repository, sourcev1.StorageOperationFailedReason, err.Error()), err
301+
return sourcev1.GitRepositoryNotReady(repository, sourcev1.StorageOperationFailedReason, err.Error()), err
304302
}
305303

306304
message := fmt.Sprintf("Artifact is available at: %s", artifact.Path)
307-
return ReadyGitRepository(repository, artifact, url, sourcev1.GitOperationSucceedReason, message), nil
305+
return sourcev1.GitRepositoryReady(repository, artifact, url, sourcev1.GitOperationSucceedReason, message), nil
308306
}
309307

310308
func (r *GitRepositoryReconciler) shouldResetStatus(repository sourcev1.GitRepository) (bool, sourcev1.GitRepositoryStatus) {

0 commit comments

Comments
 (0)