Wrap errors in git controller

This commit is contained in:
stefanprodan 2020-04-12 16:46:12 +03:00
parent 12d25ca47a
commit 41d36f54ae
1 changed files with 24 additions and 22 deletions

View File

@ -158,21 +158,21 @@ func (r *GitRepositoryReconciler) sync(repository sourcev1.GitRepository) (sourc
// create tmp dir for SSH known_hosts // create tmp dir for SSH known_hosts
tmpSSH, err := ioutil.TempDir("", repository.Name) tmpSSH, err := ioutil.TempDir("", repository.Name)
if err != nil { if err != nil {
err = fmt.Errorf("tmp dir error %w", err) err = fmt.Errorf("tmp dir error: %w", err)
return NotReadyCondition(sourcev1.StorageOperationFailedReason, err.Error()), "", err return NotReadyCondition(sourcev1.StorageOperationFailedReason, err.Error()), "", err
} }
defer os.RemoveAll(tmpSSH) defer os.RemoveAll(tmpSSH)
auth, err := r.auth(repository, tmpSSH) auth, err := r.auth(repository, tmpSSH)
if err != nil { if err != nil {
err = fmt.Errorf("auth error %w", err) err = fmt.Errorf("auth error: %w", err)
return NotReadyCondition(sourcev1.AuthenticationFailedReason, err.Error()), "", err return NotReadyCondition(sourcev1.AuthenticationFailedReason, err.Error()), "", err
} }
// create tmp dir for the Git clone // create tmp dir for the Git clone
tmpGit, err := ioutil.TempDir("", repository.Name) tmpGit, err := ioutil.TempDir("", repository.Name)
if err != nil { if err != nil {
err = fmt.Errorf("tmp dir error %w", err) err = fmt.Errorf("tmp dir error: %w", err)
return NotReadyCondition(sourcev1.StorageOperationFailedReason, err.Error()), "", err return NotReadyCondition(sourcev1.StorageOperationFailedReason, err.Error()), "", err
} }
defer os.RemoveAll(tmpGit) defer os.RemoveAll(tmpGit)
@ -191,7 +191,7 @@ func (r *GitRepositoryReconciler) sync(repository sourcev1.GitRepository) (sourc
Tags: tagMode, Tags: tagMode,
}) })
if err != nil { if err != nil {
err = fmt.Errorf("git clone error %w", err) err = fmt.Errorf("git clone error: %w", err)
return NotReadyCondition(sourcev1.GitOperationFailedReason, err.Error()), "", err return NotReadyCondition(sourcev1.GitOperationFailedReason, err.Error()), "", err
} }
@ -200,7 +200,7 @@ func (r *GitRepositoryReconciler) sync(repository sourcev1.GitRepository) (sourc
if commit := repository.Spec.Reference.Commit; commit != "" { if commit := repository.Spec.Reference.Commit; commit != "" {
w, err := repo.Worktree() w, err := repo.Worktree()
if err != nil { if err != nil {
err = fmt.Errorf("git worktree error %w", err) err = fmt.Errorf("git worktree error: %w", err)
return NotReadyCondition(sourcev1.GitOperationFailedReason, err.Error()), "", err return NotReadyCondition(sourcev1.GitOperationFailedReason, err.Error()), "", err
} }
@ -209,19 +209,19 @@ func (r *GitRepositoryReconciler) sync(repository sourcev1.GitRepository) (sourc
Force: true, Force: true,
}) })
if err != nil { if err != nil {
err = fmt.Errorf("git checkout %s for %s error %w", commit, branch, err) err = fmt.Errorf("git checkout %s for %s error: %w", commit, branch, err)
return NotReadyCondition(sourcev1.GitOperationFailedReason, err.Error()), "", err return NotReadyCondition(sourcev1.GitOperationFailedReason, err.Error()), "", err
} }
} else if exp := repository.Spec.Reference.SemVer; exp != "" { } else if exp := repository.Spec.Reference.SemVer; exp != "" {
rng, err := semver.ParseRange(exp) rng, err := semver.ParseRange(exp)
if err != nil { if err != nil {
err = fmt.Errorf("semver parse range error %w", err) err = fmt.Errorf("semver parse range error: %w", err)
return NotReadyCondition(sourcev1.GitOperationFailedReason, err.Error()), "", err return NotReadyCondition(sourcev1.GitOperationFailedReason, err.Error()), "", err
} }
repoTags, err := repo.Tags() repoTags, err := repo.Tags()
if err != nil { if err != nil {
err = fmt.Errorf("git list tags error %w", err) err = fmt.Errorf("git list tags error: %w", err)
return NotReadyCondition(sourcev1.GitOperationFailedReason, err.Error()), "", err return NotReadyCondition(sourcev1.GitOperationFailedReason, err.Error()), "", err
} }
@ -249,7 +249,7 @@ func (r *GitRepositoryReconciler) sync(repository sourcev1.GitRepository) (sourc
w, err := repo.Worktree() w, err := repo.Worktree()
if err != nil { if err != nil {
err = fmt.Errorf("git worktree error %w", err) err = fmt.Errorf("git worktree error: %w", err)
return NotReadyCondition(sourcev1.GitOperationFailedReason, err.Error()), "", err return NotReadyCondition(sourcev1.GitOperationFailedReason, err.Error()), "", err
} }
@ -257,11 +257,11 @@ func (r *GitRepositoryReconciler) sync(repository sourcev1.GitRepository) (sourc
Hash: plumbing.NewHash(commit), Hash: plumbing.NewHash(commit),
}) })
if err != nil { if err != nil {
err = fmt.Errorf("git checkout error %w", err) err = fmt.Errorf("git checkout error: %w", err)
return NotReadyCondition(sourcev1.GitOperationFailedReason, err.Error()), "", err return NotReadyCondition(sourcev1.GitOperationFailedReason, err.Error()), "", err
} }
} else { } else {
err = fmt.Errorf("no match found for semver %s", repository.Spec.Reference.SemVer) err = fmt.Errorf("no match found for semver: %s", repository.Spec.Reference.SemVer)
return NotReadyCondition(sourcev1.GitOperationFailedReason, err.Error()), "", err return NotReadyCondition(sourcev1.GitOperationFailedReason, err.Error()), "", err
} }
} }
@ -270,7 +270,7 @@ func (r *GitRepositoryReconciler) sync(repository sourcev1.GitRepository) (sourc
// read commit hash // read commit hash
ref, err := repo.Head() ref, err := repo.Head()
if err != nil { if err != nil {
err = fmt.Errorf("git resolve HEAD error %w", err) err = fmt.Errorf("git resolve HEAD error: %w", err)
return NotReadyCondition(sourcev1.GitOperationFailedReason, err.Error()), "", err return NotReadyCondition(sourcev1.GitOperationFailedReason, err.Error()), "", err
} }
@ -280,7 +280,7 @@ func (r *GitRepositoryReconciler) sync(repository sourcev1.GitRepository) (sourc
// create artifact dir // create artifact dir
err = r.Storage.MkdirAll(artifact) err = r.Storage.MkdirAll(artifact)
if err != nil { if err != nil {
err = fmt.Errorf("mkdir dir error %w", err) err = fmt.Errorf("mkdir dir error: %w", err)
return NotReadyCondition(sourcev1.StorageOperationFailedReason, err.Error()), "", err return NotReadyCondition(sourcev1.StorageOperationFailedReason, err.Error()), "", err
} }
@ -295,18 +295,18 @@ func (r *GitRepositoryReconciler) sync(repository sourcev1.GitRepository) (sourc
// archive artifact // archive artifact
err = r.Storage.Archive(artifact, tmpGit, "") err = r.Storage.Archive(artifact, tmpGit, "")
if err != nil { if err != nil {
err = fmt.Errorf("storage error %w", err) err = fmt.Errorf("storage archive error: %w", err)
return NotReadyCondition(sourcev1.StorageOperationFailedReason, err.Error()), "", err return NotReadyCondition(sourcev1.StorageOperationFailedReason, err.Error()), "", err
} }
// update latest symlink // update latest symlink
err = r.Storage.Symlink(artifact, "latest.tar.gz") err = r.Storage.Symlink(artifact, "latest.tar.gz")
if err != nil { if err != nil {
err = fmt.Errorf("storage error %w", err) err = fmt.Errorf("storage lock error: %w", err)
return NotReadyCondition(sourcev1.StorageOperationFailedReason, err.Error()), "", err return NotReadyCondition(sourcev1.StorageOperationFailedReason, err.Error()), "", err
} }
message := fmt.Sprintf("Artifact is available at %s", artifact.Path) message := fmt.Sprintf("Artifact is available at: %s", artifact.Path)
return ReadyCondition(sourcev1.GitOperationSucceedReason, message), artifact.URL, nil return ReadyCondition(sourcev1.GitOperationSucceedReason, message), artifact.URL, nil
} }
@ -370,14 +370,16 @@ func (r *GitRepositoryReconciler) auth(repository sourcev1.GitRepository, tmp st
auth := &http.BasicAuth{} auth := &http.BasicAuth{}
if username, ok := credentials["username"]; ok { if username, ok := credentials["username"]; ok {
auth.Username = string(username) auth.Username = string(username)
} else {
return nil, fmt.Errorf("%s secret does not contain username", repository.Spec.SecretRef.Name)
} }
if password, ok := credentials["password"]; ok { if password, ok := credentials["password"]; ok {
auth.Password = string(password) auth.Password = string(password)
} else {
return nil, fmt.Errorf("%s secret does not contain password", repository.Spec.SecretRef.Name)
} }
if auth.Username == "" || auth.Password == "" {
return nil, fmt.Errorf("invalid '%s' secret data: required fields username and password",
repository.Spec.SecretRef.Name)
}
return auth, nil return auth, nil
} }
@ -387,7 +389,7 @@ func (r *GitRepositoryReconciler) auth(repository sourcev1.GitRepository, tmp st
if identity, ok := credentials["identity"]; ok { if identity, ok := credentials["identity"]; ok {
privateKey = identity privateKey = identity
} else { } else {
return nil, fmt.Errorf("%s secret does not contain identity", repository.Spec.SecretRef.Name) return nil, fmt.Errorf("invalid '%s' secret data: required field identity", repository.Spec.SecretRef.Name)
} }
pk, err := ssh.NewPublicKeys("git", privateKey, "") pk, err := ssh.NewPublicKeys("git", privateKey, "")
@ -401,7 +403,7 @@ func (r *GitRepositoryReconciler) auth(repository sourcev1.GitRepository, tmp st
return nil, err return nil, err
} }
} else { } else {
return nil, fmt.Errorf("%s secret does not contain known_hosts", repository.Spec.SecretRef.Name) return nil, fmt.Errorf("invalid '%s' secret data: required field known_hosts", repository.Spec.SecretRef.Name)
} }
callback, err := ssh.NewKnownHostsCallback(known_hosts) callback, err := ssh.NewKnownHostsCallback(known_hosts)