From 0869bb9cb2740832db48eff8baf1e7d2b72bc8d8 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Tue, 11 Aug 2020 10:58:18 -0400 Subject: [PATCH] add cluster icon migration code Signed-off-by: Sebastian Malton --- src/migrations/cluster-store/3.6.0-beta.1.ts | 55 +++++++++++++------ .../components/cluster-icon-setting.tsx | 2 +- 2 files changed, 40 insertions(+), 17 deletions(-) diff --git a/src/migrations/cluster-store/3.6.0-beta.1.ts b/src/migrations/cluster-store/3.6.0-beta.1.ts index adc354d9ef..5f9f4cf64d 100644 --- a/src/migrations/cluster-store/3.6.0-beta.1.ts +++ b/src/migrations/cluster-store/3.6.0-beta.1.ts @@ -1,34 +1,57 @@ // Move embedded kubeconfig into separate file and add reference to it to cluster settings +// convert file path cluster icons to their base64 encoded versions import path from "path" import { app, remote } from "electron" import { migration } from "../migration-wrapper"; -import { ensureDirSync } from "fs-extra" +import fse from "fs-extra" import { ClusterModel } from "../../common/cluster-store"; import { loadConfig, saveConfigToAppFiles } from "../../common/kube-helpers"; export default migration({ version: "3.6.0-beta.1", run(store, printLog) { - const migratedClusters: ClusterModel[] = [] - const storedClusters: ClusterModel[] = store.get("clusters"); const kubeConfigBase = path.join((app || remote.app).getPath("userData"), "kubeconfigs") + const storedClusters: ClusterModel[] = store.get("clusters") || []; - if (!storedClusters) return; - ensureDirSync(kubeConfigBase); + if (!storedClusters?.length) return; + fse.ensureDirSync(kubeConfigBase); printLog("Number of clusters to migrate: ", storedClusters.length) - for (const cluster of storedClusters) { - try { - // take the embedded kubeconfig and dump it into a file - cluster.kubeConfigPath = saveConfigToAppFiles(cluster.id, cluster.kubeConfig) - cluster.contextName = loadConfig(cluster.kubeConfigPath).getCurrentContext(); - delete cluster.kubeConfig; - migratedClusters.push(cluster) - } catch (error) { - printLog(`Failed to migrate Kubeconfig for cluster "${cluster.id}"`, error) - } - } + const migratedClusters = storedClusters + .map(cluster => { + /** + * migrate kubeconfig + */ + try { + // take the embedded kubeconfig and dump it into a file + cluster.kubeConfigPath = saveConfigToAppFiles(cluster.id, cluster.kubeConfig) + cluster.contextName = loadConfig(cluster.kubeConfigPath).getCurrentContext(); + delete cluster.kubeConfig; + + } catch (error) { + printLog(`Failed to migrate Kubeconfig for cluster "${cluster.id}"`, error) + return undefined; + } + + /** + * migrate cluster icon + */ + try { + if (cluster.preferences.icon) { + const fileData = fse.readFileSync(cluster.preferences.icon); + cluster.preferences.icon = `data:image;base64, ${fileData.toString('base64')}`; + } else { + delete cluster.preferences.icon; + } + } catch (error) { + printLog(`Failed to migrate cluster icon for cluster "${cluster.id}"`, error) + return undefined; + } + + return cluster; + }) + .filter(c => c); // "overwrite" the cluster configs if (migratedClusters.length > 0) { diff --git a/src/renderer/components/+cluster-settings/components/cluster-icon-setting.tsx b/src/renderer/components/+cluster-settings/components/cluster-icon-setting.tsx index 20b4e6d6d5..d638a1ab09 100644 --- a/src/renderer/components/+cluster-settings/components/cluster-icon-setting.tsx +++ b/src/renderer/components/+cluster-settings/components/cluster-icon-setting.tsx @@ -28,7 +28,7 @@ export class ClusterIconSetting extends React.Component { try { if (file) { const buf = Buffer.from(await file.arrayBuffer()); - cluster.preferences.icon = `data:image/jpeg;base64, ${buf.toString('base64')}`; + cluster.preferences.icon = `data:image;base64, ${buf.toString('base64')}`; } else { // this has to be done as a seperate branch (and not always) because `cluster` // is observable and triggers an update loop.