-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathutils.ts
More file actions
77 lines (68 loc) · 2.27 KB
/
utils.ts
File metadata and controls
77 lines (68 loc) · 2.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import { removeTrailingSlash, requiredEnv } from '@cpn-console/shared'
import { CoreV1Api, CustomObjectsApi, KubeConfig } from '@kubernetes/client-node'
const config: {
grafanaUrl?: string
kubeconfigPath?: string
kubeconfigCtx?: string
keycloakProtocol?: string
keycloakDomain?: string
keycloakRealm?: string
keycloakToken?: string
keycloakUser?: string
} = {
grafanaUrl: undefined,
kubeconfigPath: undefined,
kubeconfigCtx: undefined,
keycloakProtocol: undefined,
keycloakDomain: undefined,
keycloakRealm: undefined,
keycloakToken: undefined,
keycloakUser: undefined,
}
export function getConfig(): Required<typeof config> {
config.grafanaUrl = config.grafanaUrl ? removeTrailingSlash(config.grafanaUrl) : removeTrailingSlash(requiredEnv('GRAFANA_URL'))
config.keycloakProtocol = config.keycloakProtocol ?? requiredEnv('KEYCLOAK_PROTOCOL')
config.keycloakDomain = config.keycloakDomain ?? requiredEnv('KEYCLOAK_DOMAIN')
config.keycloakRealm = config.keycloakRealm ?? requiredEnv('KEYCLOAK_REALM')
config.keycloakToken = config.keycloakToken ?? requiredEnv('KEYCLOAK_ADMIN_PASSWORD')
config.keycloakUser = config.keycloakUser ?? requiredEnv('KEYCLOAK_ADMIN')
// @ts-ignore
return config
}
function getClient() {
const kubeconfigCtx = process.env.KUBECONFIG_CTX
const kubeconfigPath = process.env.KUBECONFIG_PATH
const kc = new KubeConfig()
if (kubeconfigPath) {
kc.loadFromFile(kubeconfigPath)
if (kubeconfigCtx) {
kc.setCurrentContext(kubeconfigCtx)
}
return kc
}
kc.loadFromCluster()
return kc
}
let k8sApi: CoreV1Api | undefined
let customK8sApi: CustomObjectsApi | undefined
export function getK8sApi(): CoreV1Api {
k8sApi = k8sApi ?? getClient().makeApiClient(CoreV1Api)
return k8sApi
}
export function getCustomK8sApi(): CustomObjectsApi {
customK8sApi = customK8sApi ?? getClient().makeApiClient(CustomObjectsApi)
return customK8sApi
}
export type Stage = 'prod' | 'hprod'
export interface TenantInfo {
groups: string[]
type: 'prod' | 'hprod'
name: string // tenant name, short-uuid or slug
}
export interface TenantKeycloakMapper {
[x: string]: TenantInfo // fullName, type + (short-uuid or slug)
}
const re = /[a-z0-9]{25}--[a-z0-9]{25}/
export function isNewNsName(ns: string) {
return re.test(ns)
}