2022-02-01 02:31:20 +00:00
|
|
|
import { CoreV1Api } from '@kubernetes/client-node';
|
2023-03-27 11:14:23 +00:00
|
|
|
import CloudRunnerSecret from '../../options/cloud-runner-secret';
|
2022-02-01 02:31:20 +00:00
|
|
|
import * as k8s from '@kubernetes/client-node';
|
2023-03-27 11:14:23 +00:00
|
|
|
import CloudRunnerLogger from '../../services/core/cloud-runner-logger';
|
2023-03-04 00:25:40 +00:00
|
|
|
import * as base64 from 'base-64';
|
2022-02-01 02:31:20 +00:00
|
|
|
|
|
|
|
|
class KubernetesSecret {
|
|
|
|
|
static async createSecret(
|
|
|
|
|
secrets: CloudRunnerSecret[],
|
|
|
|
|
secretName: string,
|
|
|
|
|
namespace: string,
|
|
|
|
|
kubeClient: CoreV1Api,
|
|
|
|
|
) {
|
2022-11-07 20:41:00 +00:00
|
|
|
try {
|
|
|
|
|
const secret = new k8s.V1Secret();
|
|
|
|
|
secret.apiVersion = 'v1';
|
|
|
|
|
secret.kind = 'Secret';
|
|
|
|
|
secret.type = 'Opaque';
|
|
|
|
|
secret.metadata = {
|
|
|
|
|
name: secretName,
|
|
|
|
|
};
|
|
|
|
|
secret.data = {};
|
|
|
|
|
for (const buildSecret of secrets) {
|
|
|
|
|
secret.data[buildSecret.ParameterKey] = base64.encode(buildSecret.ParameterValue);
|
|
|
|
|
}
|
|
|
|
|
CloudRunnerLogger.log(`Creating secret: ${secretName}`);
|
|
|
|
|
const existingSecrets = await kubeClient.listNamespacedSecret(namespace);
|
|
|
|
|
const mappedSecrets = existingSecrets.body.items.map((x) => {
|
|
|
|
|
return x.metadata?.name || `no name`;
|
|
|
|
|
});
|
2022-04-11 22:43:41 +00:00
|
|
|
|
2022-11-07 20:41:00 +00:00
|
|
|
CloudRunnerLogger.log(
|
|
|
|
|
`ExistsAlready: ${mappedSecrets.includes(secretName)} SecretsCount: ${mappedSecrets.length}`,
|
|
|
|
|
);
|
|
|
|
|
await new Promise((promise) => setTimeout(promise, 15000));
|
|
|
|
|
await kubeClient.createNamespacedSecret(namespace, secret);
|
|
|
|
|
CloudRunnerLogger.log('Created secret');
|
|
|
|
|
} catch (error) {
|
|
|
|
|
CloudRunnerLogger.log(`Created secret failed ${error}`);
|
|
|
|
|
throw new Error(`Failed to create kubernetes secret`);
|
|
|
|
|
}
|
2022-02-01 02:31:20 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default KubernetesSecret;
|