diff --git a/upgrade/v16xto170/upgrade.go b/upgrade/v16xto170/upgrade.go index f6c8484713..0f7493dfe6 100644 --- a/upgrade/v16xto170/upgrade.go +++ b/upgrade/v16xto170/upgrade.go @@ -28,7 +28,11 @@ func UpgradeResources(namespace string, lhClient *lhclientset.Clientset, kubeCli return err } - return upgradeNodes(namespace, lhClient, resourceMaps) + if err := upgradeNodes(namespace, lhClient, resourceMaps); err != nil { + return err + } + + return upgradeInstanceManagers(namespace, lhClient, resourceMaps) } func UpgradeResourcesStatus(namespace string, lhClient *lhclientset.Clientset, kubeClient *clientset.Clientset, resourceMaps map[string]interface{}) error { @@ -116,7 +120,7 @@ func upgradeEngineStatus(namespace string, lhClient *lhclientset.Clientset, reso func upgradeNodes(namespace string, lhClient *lhclientset.Clientset, resourceMaps map[string]interface{}) (err error) { defer func() { - err = errors.Wrapf(err, upgradeLogPrefix+"upgrade node failed") + err = errors.Wrapf(err, upgradeLogPrefix+"upgrade nodes failed") }() nodeMap, err := upgradeutil.ListAndUpdateNodesInProvidedCache(namespace, lhClient, resourceMaps) @@ -142,3 +146,23 @@ func upgradeNodes(namespace string, lhClient *lhclientset.Clientset, resourceMap return nil } + +func upgradeInstanceManagers(namespace string, lhClient *lhclientset.Clientset, resourceMaps map[string]interface{}) (err error) { + defer func() { + err = errors.Wrapf(err, upgradeLogPrefix+"upgrade instance managers failed") + }() + + imMap, err := upgradeutil.ListAndUpdateInstanceManagersInProvidedCache(namespace, lhClient, resourceMaps) + if err != nil { + if apierrors.IsNotFound(err) { + return nil + } + return errors.Wrapf(err, "failed to list all existing Longhorn instance managers during the instance manager upgrade") + } + + for _, im := range imMap { + im.Spec.DesireState = longhorn.InstanceManagerStateRunning + } + + return nil +}