Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
Signed-off-by: David VIEJO <[email protected]>
  • Loading branch information
dviejokfs committed Jan 25, 2024
1 parent c4210a9 commit 5f376fd
Show file tree
Hide file tree
Showing 3 changed files with 119 additions and 34 deletions.
85 changes: 57 additions & 28 deletions controllers/ca/ca_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -933,6 +933,32 @@ func Reconcile(
// it doesn't exist
return ctrl.Result{}, err
}
} else if exists && helmStatus.Info.Status == release.StatusPendingRollback {
historyAction := action.NewHistory(cfg)
history, err := historyAction.Run(releaseName)
if err != nil {
return ctrl.Result{}, err
}
if len(history) > 0 {
// find the last deployed revision
// and rollback to it
// sort history by revision number descending using raw go
sort.Slice(history, func(i, j int) bool {
return history[i].Version > history[j].Version
})
for _, historyItem := range history {
if historyItem.Info.Status == release.StatusDeployed {
rollbackStatus := action.NewRollback(cfg)
rollbackStatus.Version = historyItem.Version
err = rollbackStatus.Run(releaseName)
if err != nil {
// it doesn't exist
return ctrl.Result{}, err
}
break
}
}
}
}
log.Debugf("Release %s exists=%v", releaseName, exists)
clientSet, err := utils.GetClientKubeWithConf(r.Config)
Expand Down Expand Up @@ -969,35 +995,38 @@ func Reconcile(
Status: "True",
LastTransitionTime: v1.Time{},
})
c, err := GetConfig(hlf, clientSet, releaseName, req.Namespace)
if err != nil {
return ctrl.Result{}, err
}
inrec, err := json.Marshal(c)
if err != nil {
return ctrl.Result{}, err
}
var inInterface map[string]interface{}
err = json.Unmarshal(inrec, &inInterface)
if err != nil {
return ctrl.Result{}, err
}
cmd := action.NewUpgrade(cfg)
cmd.Timeout = r.Timeout
cmd.Wait = r.Wait
cmd.MaxHistory = r.MaxHistory
settings := cli.New()
chartPath, err := cmd.LocateChart(r.ChartPath, settings)
ch, err := loader.Load(chartPath)
if err != nil {
return ctrl.Result{}, err
}
release, err := cmd.Run(releaseName, ch, inInterface)
if err != nil {
setConditionStatus(hlf, hlfv1alpha1.FailedStatus, false, err, false)
return r.updateCRStatusOrFailReconcile(ctx, r.Log, hlf)
if helmStatus.Info.Status != release.StatusPendingUpgrade {
c, err := GetConfig(hlf, clientSet, releaseName, req.Namespace)
if err != nil {
return ctrl.Result{}, err
}
inrec, err := json.Marshal(c)
if err != nil {
return ctrl.Result{}, err
}
var inInterface map[string]interface{}
err = json.Unmarshal(inrec, &inInterface)
if err != nil {
return ctrl.Result{}, err
}
cmd := action.NewUpgrade(cfg)
cmd.Timeout = r.Timeout
cmd.Wait = r.Wait
cmd.MaxHistory = r.MaxHistory

settings := cli.New()
chartPath, err := cmd.LocateChart(r.ChartPath, settings)
ch, err := loader.Load(chartPath)
if err != nil {
return ctrl.Result{}, err
}
release, err := cmd.Run(releaseName, ch, inInterface)
if err != nil {
setConditionStatus(hlf, hlfv1alpha1.FailedStatus, false, err, false)
return r.updateCRStatusOrFailReconcile(ctx, r.Log, hlf)
}
log.Debugf("Chart upgraded %s", release.Name)
}
log.Debugf("Chart upgraded %s", release.Name)
if !reflect.DeepEqual(fca.Status, hlf.Status) {
if err := r.Status().Update(ctx, fca); err != nil {
log.Debugf("Error updating the status: %v", err)
Expand Down
30 changes: 29 additions & 1 deletion controllers/ordnode/ordnode_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"helm.sh/helm/v3/pkg/release"
"os"
"reflect"
"sort"
"strings"
"time"

Expand Down Expand Up @@ -162,6 +163,32 @@ func (r *FabricOrdererNodeReconciler) Reconcile(ctx context.Context, req ctrl.Re
// it doesn't exist
return ctrl.Result{}, err
}
} else if exists && helmStatus.Info.Status == release.StatusPendingRollback {
historyAction := action.NewHistory(cfg)
history, err := historyAction.Run(releaseName)
if err != nil {
return ctrl.Result{}, err
}
if len(history) > 0 {
// find the last deployed revision
// and rollback to it
// sort history by revision number descending using raw go
sort.Slice(history, func(i, j int) bool {
return history[i].Version > history[j].Version
})
for _, historyItem := range history {
if historyItem.Info.Status == release.StatusDeployed {
rollbackStatus := action.NewRollback(cfg)
rollbackStatus.Version = historyItem.Version
err = rollbackStatus.Run(releaseName)
if err != nil {
// it doesn't exist
return ctrl.Result{}, err
}
break
}
}
}
}
log.Printf("Release %s exists=%v", releaseName, exists)
clientSet, err := utils.GetClientKubeWithConf(r.Config)
Expand Down Expand Up @@ -216,7 +243,7 @@ func (r *FabricOrdererNodeReconciler) Reconcile(ctx context.Context, req ctrl.Re
lastTimeCertsRenewed = &newTime
log.Infof("Certs updated, last time updated: %v", lastTimeCertsRenewed)
requeueAfter = time.Minute * 1
} else {
} else if helmStatus.Info.Status != release.StatusPendingUpgrade {
c, err := getConfig(fabricOrdererNode, clientSet, releaseName, req.Namespace, false)
if err != nil {
return ctrl.Result{}, err
Expand Down Expand Up @@ -478,6 +505,7 @@ func (r *FabricOrdererNodeReconciler) upgradeChart(
cmd.Wait = r.Wait
cmd.Timeout = r.Timeout
cmd.MaxHistory = r.MaxHistory

release, err := cmd.Run(releaseName, ch, inInterface)
if err != nil {
return err
Expand Down
38 changes: 33 additions & 5 deletions controllers/peer/peer_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"helm.sh/helm/v3/pkg/release"
"os"
"reflect"
"sort"
"strings"
"time"

Expand Down Expand Up @@ -378,6 +379,32 @@ func (r *FabricPeerReconciler) Reconcile(ctx context.Context, req ctrl.Request)
// it doesn't exist
return ctrl.Result{}, err
}
} else if exists && helmStatus.Info.Status == release.StatusPendingRollback {
historyAction := action.NewHistory(cfg)
history, err := historyAction.Run(releaseName)
if err != nil {
return ctrl.Result{}, err
}
if len(history) > 0 {
// find the last deployed revision
// and rollback to it
// sort history by revision number descending using raw go
sort.Slice(history, func(i, j int) bool {
return history[i].Version > history[j].Version
})
for _, historyItem := range history {
if historyItem.Info.Status == release.StatusDeployed {
rollbackStatus := action.NewRollback(cfg)
rollbackStatus.Version = historyItem.Version
err = rollbackStatus.Run(releaseName)
if err != nil {
// it doesn't exist
return ctrl.Result{}, err
}
break
}
}
}
}
log.Debugf("Release %s exists=%v", releaseName, exists)
clientSet, err := utils.GetClientKubeWithConf(r.Config)
Expand Down Expand Up @@ -449,11 +476,12 @@ func (r *FabricPeerReconciler) Reconcile(ctx context.Context, req ctrl.Request)
r.setConditionStatus(ctx, fabricPeer, hlfv1alpha1.FailedStatus, false, err, false)
return r.updateCRStatusOrFailReconcile(ctx, r.Log, fabricPeer)
}

err = r.upgradeChart(cfg, err, ns, releaseName, c)
if err != nil {
r.setConditionStatus(ctx, fabricPeer, hlfv1alpha1.FailedStatus, false, err, false)
return r.updateCRStatusOrFailReconcile(ctx, r.Log, fabricPeer)
if helmStatus.Info.Status != release.StatusPendingUpgrade {
err = r.upgradeChart(cfg, err, ns, releaseName, c)
if err != nil {
r.setConditionStatus(ctx, fabricPeer, hlfv1alpha1.FailedStatus, false, err, false)
return r.updateCRStatusOrFailReconcile(ctx, r.Log, fabricPeer)
}
}
requeueAfter = time.Minute * 10
}
Expand Down

0 comments on commit 5f376fd

Please sign in to comment.