diff --git a/console/src/modules/system/plugins/composables/use-plugin.ts b/console/src/modules/system/plugins/composables/use-plugin.ts index cc4e46549d..9408e7247e 100644 --- a/console/src/modules/system/plugins/composables/use-plugin.ts +++ b/console/src/modules/system/plugins/composables/use-plugin.ts @@ -49,10 +49,16 @@ export function usePluginLifeCycle( }); pluginToUpdate.spec.enabled = !pluginToUpdate.spec.enabled; - await apiClient.extension.plugin.updatepluginHaloRunV1alpha1Plugin({ - name: pluginToUpdate.metadata.name, - plugin: pluginToUpdate, - }); + + const { data: newPlugin } = + await apiClient.extension.plugin.updatepluginHaloRunV1alpha1Plugin({ + name: pluginToUpdate.metadata.name, + plugin: pluginToUpdate, + }); + + await checkStatus(newPlugin); + + return newPlugin; }, retry: 3, retryDelay: 1000, @@ -61,6 +67,38 @@ export function usePluginLifeCycle( }, }); + function checkStatus(plugin: Plugin) { + const maxRetry = 5; + let retryCount = 0; + return new Promise((resolve, reject) => { + const check = () => { + if (retryCount >= maxRetry) { + reject(false); + return; + } + apiClient.extension.plugin + .getpluginHaloRunV1alpha1Plugin({ name: plugin.metadata.name }) + .then((response) => { + const { enabled } = response.data.spec; + const { phase } = response.data.status || {}; + if ( + (enabled && phase === "STARTED") || + (!enabled && phase !== "STARTED") + ) { + resolve(true); + } else { + setTimeout(check, 1000); + retryCount++; + } + }) + .catch(() => { + reject(false); + }); + }; + check(); + }); + } + const uninstall = (deleteExtensions?: boolean) => { if (!plugin?.value) return;