diff --git a/src/renderer/lib/kubernetes-client/kubernetes-client.js b/src/renderer/lib/kubernetes-client/kubernetes-client.js index db02c87..41eb4fd 100644 --- a/src/renderer/lib/kubernetes-client/kubernetes-client.js +++ b/src/renderer/lib/kubernetes-client/kubernetes-client.js @@ -8,23 +8,30 @@ import { V1PodTemplateSpec } from '@kubernetes/client-node'; import { get, mapValues } from 'lodash'; +import log from 'electron-log'; import KubernetesError from './kubernetes-error'; +const logger = log.scope('kubernetes-client'); let kubeConfig; export default { listContexts: async () => mapErrorToKubernetesError(() => { + logger.debug('listing-contexts'); return getKubeConfig().getContexts() .map(context => context.name); }), getContext: async () => mapErrorToKubernetesError(() => { + logger.debug('getting-current-context'); return getKubeConfig().getCurrentContext(); }), setContext: async context => mapErrorToKubernetesError(() => { + logger.debug('setting-context', { context }); getKubeConfig().setCurrentContext(context); }), listNamespaces: async () => mapErrorToKubernetesError(async () => { + logger.debug('listing-namespaces'); const { body } = await getCoreApiClient().listNamespace(); + logger.debug('namespaces-listed'); return body.items .filter(item => item.status.phase === 'Active') @@ -32,7 +39,9 @@ export default { }), listSecrets: async (namespace) => mapErrorToKubernetesError(async () => { + logger.debug('listing-secrets', { namespace }); const { body } = await getCoreApiClient().listNamespacedSecret(namespace); + logger.debug('secrets-listed', { namespace }); return body.items .filter(item => !item.metadata.name.startsWith('default-token') && @@ -43,20 +52,25 @@ export default { }), loadSecret: async (namespace, name) => mapErrorToKubernetesError(async () => { + logger.debug('loading-secret', { namespace, name }); const { body } = await getCoreApiClient().readNamespacedSecret(name, namespace); + logger.debug('secret-loaded', { namespace, name }); return mapValues(body.data, value => Buffer.from(value, 'base64').toString()); }), saveSecret: async (namespace, name, secret) => mapErrorToKubernetesError(async () => { + logger.debug('saving-secret', { namespace, name }); const secretConfig = { stringData: secret, metadata: { name } }; await getCoreApiClient().replaceNamespacedSecret(name, namespace, secretConfig); + logger.debug('secret-saved', { namespace, name }); }), patchDeployments: async (namespace, name) => mapErrorToKubernetesError(async () => { + logger.debug('pathing-deployment', { namespace, name }); const labelSelector = `applicationName=${name}`; const deploymentListResponse = await getAppsApiClient().listNamespacedDeployment( namespace, @@ -66,6 +80,7 @@ export default { undefined, labelSelector ); + logger.debug('deployments-listed', { namespace, name }); const deploymentList = get(deploymentListResponse, 'body.items', []); for await (const deployment of deploymentList) { @@ -84,6 +99,7 @@ export default { undefined, { headers: { 'Content-Type': 'application/merge-patch+json' } } ); + logger.debug('deployment-patched', { namespace, name, deploymentName }); } }) }; @@ -91,6 +107,7 @@ export default { const getKubeConfig = () => { if (!kubeConfig) { kubeConfig = new KubeConfig(); + logger.debug('loading-default-config'); kubeConfig.loadFromDefault(); } return kubeConfig; @@ -108,11 +125,21 @@ const generateDeploymentPatch = () => { }; const getCoreApiClient = () => { - return getKubeConfig().makeApiClient(CoreV1Api); + logger.debug('retrieving-core-api-client'); + const config = getKubeConfig(); + logger.debug('config-retrieved'); + const client = config.makeApiClient(CoreV1Api); + logger.debug('client-created'); + return client; }; const getAppsApiClient = () => { - return getKubeConfig().makeApiClient(AppsV1Api); + logger.debug('retrieving-apps-api-client'); + const config = getKubeConfig(); + logger.debug('config-retrieved'); + const client = config.makeApiClient(AppsV1Api); + logger.debug('client-created'); + return client; }; const mapErrorToKubernetesError = async func => {