|
|
@ -69,46 +69,46 @@ func (s *ReleaseServer) prepareRollback(req *services.RollbackReleaseRequest) (*
|
|
|
|
return nil, nil, errInvalidRevision
|
|
|
|
return nil, nil, errInvalidRevision
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
crls, err := s.env.Releases.Last(req.Name)
|
|
|
|
currentRelease, err := s.env.Releases.Last(req.Name)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
return nil, nil, err
|
|
|
|
return nil, nil, err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
rbv := req.Version
|
|
|
|
previousVersion := req.Version
|
|
|
|
if req.Version == 0 {
|
|
|
|
if req.Version == 0 {
|
|
|
|
rbv = crls.Version - 1
|
|
|
|
previousVersion = currentRelease.Version - 1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
s.Log("rolling back %s (current: v%d, target: v%d)", req.Name, crls.Version, rbv)
|
|
|
|
s.Log("rolling back %s (current: v%d, target: v%d)", req.Name, currentRelease.Version, previousVersion)
|
|
|
|
|
|
|
|
|
|
|
|
prls, err := s.env.Releases.Get(req.Name, rbv)
|
|
|
|
previousRelease, err := s.env.Releases.Get(req.Name, previousVersion)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
return nil, nil, err
|
|
|
|
return nil, nil, err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Store a new release object with previous release's configuration
|
|
|
|
// Store a new release object with previous release's configuration
|
|
|
|
target := &release.Release{
|
|
|
|
targetRelease := &release.Release{
|
|
|
|
Name: req.Name,
|
|
|
|
Name: req.Name,
|
|
|
|
Namespace: crls.Namespace,
|
|
|
|
Namespace: currentRelease.Namespace,
|
|
|
|
Chart: prls.Chart,
|
|
|
|
Chart: previousRelease.Chart,
|
|
|
|
Config: prls.Config,
|
|
|
|
Config: previousRelease.Config,
|
|
|
|
Info: &release.Info{
|
|
|
|
Info: &release.Info{
|
|
|
|
FirstDeployed: crls.Info.FirstDeployed,
|
|
|
|
FirstDeployed: currentRelease.Info.FirstDeployed,
|
|
|
|
LastDeployed: timeconv.Now(),
|
|
|
|
LastDeployed: timeconv.Now(),
|
|
|
|
Status: &release.Status{
|
|
|
|
Status: &release.Status{
|
|
|
|
Code: release.Status_PENDING_ROLLBACK,
|
|
|
|
Code: release.Status_PENDING_ROLLBACK,
|
|
|
|
Notes: prls.Info.Status.Notes,
|
|
|
|
Notes: previousRelease.Info.Status.Notes,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
// Because we lose the reference to rbv elsewhere, we set the
|
|
|
|
// Because we lose the reference to previous version elsewhere, we set the
|
|
|
|
// message here, and only override it later if we experience failure.
|
|
|
|
// message here, and only override it later if we experience failure.
|
|
|
|
Description: fmt.Sprintf("Rollback to %d", rbv),
|
|
|
|
Description: fmt.Sprintf("Rollback to %d", previousVersion),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
Version: crls.Version + 1,
|
|
|
|
Version: currentRelease.Version + 1,
|
|
|
|
Manifest: prls.Manifest,
|
|
|
|
Manifest: previousRelease.Manifest,
|
|
|
|
Hooks: prls.Hooks,
|
|
|
|
Hooks: previousRelease.Hooks,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return crls, target, nil
|
|
|
|
return currentRelease, targetRelease, nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (s *ReleaseServer) performRollback(currentRelease, targetRelease *release.Release, req *services.RollbackReleaseRequest) (*services.RollbackReleaseResponse, error) {
|
|
|
|
func (s *ReleaseServer) performRollback(currentRelease, targetRelease *release.Release, req *services.RollbackReleaseRequest) (*services.RollbackReleaseResponse, error) {
|
|
|
|