@ask-ell/k8s 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/package.json +15 -0
- package/src/index.d.ts +4 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.js +6 -0
- package/src/k8s.cluster.d.ts +36 -0
- package/src/k8s.cluster.d.ts.map +1 -0
- package/src/k8s.cluster.interface.d.ts +28 -0
- package/src/k8s.cluster.interface.d.ts.map +1 -0
- package/src/k8s.cluster.interface.js +2 -0
- package/src/k8s.cluster.js +157 -0
- package/src/k8s.config.d.ts +4 -0
- package/src/k8s.config.d.ts.map +1 -0
- package/src/k8s.config.js +14 -0
- package/src/types.d.ts +74 -0
- package/src/types.d.ts.map +1 -0
- package/src/types.js +2 -0
- package/src/utils.d.ts +3 -0
- package/src/utils.d.ts.map +1 -0
- package/src/utils.js +7 -0
package/README.md
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ask-ell/k8s",
|
|
3
|
+
"version": "0.0.4",
|
|
4
|
+
"private": false,
|
|
5
|
+
"type": "commonjs",
|
|
6
|
+
"main": "./src/index.js",
|
|
7
|
+
"types": "./src/index.d.ts",
|
|
8
|
+
"dependencies": {
|
|
9
|
+
"@kubernetes/client-node": "^0.21.0"
|
|
10
|
+
},
|
|
11
|
+
"peerDependencies": {
|
|
12
|
+
"@ask-ell/core": "^1.3.1",
|
|
13
|
+
"tslib": "^2.3.0"
|
|
14
|
+
}
|
|
15
|
+
}
|
package/src/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/k8s/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAA;AACvC,cAAc,SAAS,CAAA"}
|
package/src/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./k8s.cluster"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./k8s.cluster.interface"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./types"), exports);
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { K8SClusterParams, PersistClusterCustomObjectDTO, K8SSecret, K8SService, K8SCustomResource, DeleteClusterCustomObjectDTO, K8SCustomResourceDefinition, K8SNamespace, CreateDeploymentDTO, CreateServiceDTO, DeleteComponentDTO, K8SDeployment, K8SServiceAccount, CreateServiceAccountDTO, CreateServiceAccountTokenDTO, GetRolesDTO, K8SRole, CreateRoleDTO, K8SRoleBinding, GetRoleBindingsDTO, CreateRoleBindingDTO } from "./types";
|
|
2
|
+
import { IK8SCluster } from "./k8s.cluster.interface";
|
|
3
|
+
export declare class K8SCluster implements IK8SCluster {
|
|
4
|
+
private logger;
|
|
5
|
+
private coreV1Api;
|
|
6
|
+
private appsV1Api;
|
|
7
|
+
private customObjectsApi;
|
|
8
|
+
private apiextensionsV1Api;
|
|
9
|
+
private rbacAuthorizationV1Api;
|
|
10
|
+
constructor({ configFilePath, logger }: K8SClusterParams);
|
|
11
|
+
getAllNamespaces(): Promise<K8SNamespace[]>;
|
|
12
|
+
isNamespacePersisted(name: string): Promise<boolean>;
|
|
13
|
+
createNamespace(name: string): Promise<void>;
|
|
14
|
+
deleteNamespace(namespace: string): Promise<void>;
|
|
15
|
+
getDeploymentsFromNamespace(namespace: string): Promise<K8SDeployment[]>;
|
|
16
|
+
createDeployment({ namespace, dto }: CreateDeploymentDTO): Promise<void>;
|
|
17
|
+
deleteDeployment({ name, namespace }: DeleteComponentDTO): Promise<void>;
|
|
18
|
+
getServicesFromNamespace(namespace: string): Promise<K8SService[]>;
|
|
19
|
+
getServiceAccountsFromNamespace(namespace: string): Promise<K8SServiceAccount[]>;
|
|
20
|
+
createServiceAccount({ name, namespace }: CreateServiceAccountDTO): Promise<void>;
|
|
21
|
+
createServiceAccountToken({ namespace, name }: CreateServiceAccountTokenDTO): Promise<void>;
|
|
22
|
+
createService({ namespace, dto }: CreateServiceDTO): Promise<void>;
|
|
23
|
+
deleteService({ name, namespace }: DeleteComponentDTO): Promise<void>;
|
|
24
|
+
getSecretsFromNamespace(namespace: string): Promise<K8SSecret[]>;
|
|
25
|
+
getRoles({ name, namespace }: GetRolesDTO): Promise<K8SRole[]>;
|
|
26
|
+
createRole({ metadata: { name, namespace }, rules }: CreateRoleDTO): Promise<void>;
|
|
27
|
+
getRoleBindings({ name, namespace }: GetRoleBindingsDTO): Promise<K8SRoleBinding[]>;
|
|
28
|
+
createRoleBinding({ name, namespace, subjects }: CreateRoleBindingDTO): Promise<void>;
|
|
29
|
+
getAllCustomResourceDefinitions(): Promise<K8SCustomResourceDefinition[]>;
|
|
30
|
+
createCustomResourceDefinition(dto: K8SCustomResourceDefinition): Promise<void>;
|
|
31
|
+
getAllClusterCustomObjectsFromResourceDefinition<CustomResource extends K8SCustomResource>(dto: K8SCustomResourceDefinition): Promise<CustomResource[]>;
|
|
32
|
+
createClusterCustomObject<CustomResource extends K8SCustomResource>({ resourceDefinition, metadata, spec }: PersistClusterCustomObjectDTO<CustomResource>): Promise<void>;
|
|
33
|
+
patchClusterCustomObject<CustomResource extends K8SCustomResource>({ resourceDefinition, metadata, spec }: PersistClusterCustomObjectDTO<CustomResource>): Promise<void>;
|
|
34
|
+
deleteClusterCustomObject<CustomResource extends K8SCustomResource>({ resourceDefinition, metadata }: DeleteClusterCustomObjectDTO<CustomResource>): Promise<void>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=k8s.cluster.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"k8s.cluster.d.ts","sourceRoot":"","sources":["../../../../packages/k8s/src/k8s.cluster.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { PersistClusterCustomObjectDTO, K8SSecret, K8SService, K8SCustomResource, DeleteClusterCustomObjectDTO, K8SCustomResourceDefinition, K8SNamespace, CreateDeploymentDTO, CreateServiceDTO, DeleteComponentDTO, K8SDeployment, K8SServiceAccount, CreateServiceAccountDTO, CreateServiceAccountTokenDTO, GetRolesDTO, K8SRole, CreateRoleDTO, K8SRoleBinding, GetRoleBindingsDTO, CreateRoleBindingDTO } from "./types";
|
|
2
|
+
export interface IK8SCluster {
|
|
3
|
+
getAllNamespaces(): Promise<K8SNamespace[]>;
|
|
4
|
+
isNamespacePersisted(name: string): Promise<boolean>;
|
|
5
|
+
createNamespace(name: string): Promise<void>;
|
|
6
|
+
deleteNamespace(namespace: string): Promise<void>;
|
|
7
|
+
getDeploymentsFromNamespace(namespace: string): Promise<K8SDeployment[]>;
|
|
8
|
+
createDeployment(dto: CreateDeploymentDTO): Promise<void>;
|
|
9
|
+
deleteDeployment(dto: DeleteComponentDTO): Promise<void>;
|
|
10
|
+
getServicesFromNamespace(namespace: string): Promise<K8SService[]>;
|
|
11
|
+
createService(dto: CreateServiceDTO): Promise<void>;
|
|
12
|
+
deleteService(dto: DeleteComponentDTO): Promise<void>;
|
|
13
|
+
getServiceAccountsFromNamespace(namespace: string): Promise<K8SServiceAccount[]>;
|
|
14
|
+
createServiceAccount(dto: CreateServiceAccountDTO): Promise<void>;
|
|
15
|
+
createServiceAccountToken(dto: CreateServiceAccountTokenDTO): Promise<void>;
|
|
16
|
+
getSecretsFromNamespace(namespace: string): Promise<K8SSecret[]>;
|
|
17
|
+
getRoles(dto: GetRolesDTO): Promise<K8SRole[]>;
|
|
18
|
+
createRole(dto: CreateRoleDTO): Promise<void>;
|
|
19
|
+
getRoleBindings(dto: GetRoleBindingsDTO): Promise<K8SRoleBinding[]>;
|
|
20
|
+
createRoleBinding(dto: CreateRoleBindingDTO): Promise<void>;
|
|
21
|
+
getAllCustomResourceDefinitions(): Promise<K8SCustomResourceDefinition[]>;
|
|
22
|
+
createCustomResourceDefinition(dto: K8SCustomResourceDefinition): Promise<void>;
|
|
23
|
+
getAllClusterCustomObjectsFromResourceDefinition<CustomResource extends K8SCustomResource>(dto: K8SCustomResourceDefinition): Promise<CustomResource[]>;
|
|
24
|
+
createClusterCustomObject<CustomResource extends K8SCustomResource>(dto: PersistClusterCustomObjectDTO<CustomResource>): Promise<void>;
|
|
25
|
+
patchClusterCustomObject<CustomResource extends K8SCustomResource>(dto: PersistClusterCustomObjectDTO<CustomResource>): Promise<void>;
|
|
26
|
+
deleteClusterCustomObject<CustomResource extends K8SCustomResource>(dto: DeleteClusterCustomObjectDTO<CustomResource>): Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=k8s.cluster.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"k8s.cluster.interface.d.ts","sourceRoot":"","sources":["../../../../packages/k8s/src/k8s.cluster.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,SAAS,EAAE,UAAU,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,2BAA2B,EAAE,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,aAAa,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAE9Z,MAAM,WAAW,WAAW;IACxB,gBAAgB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5C,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACzE,gBAAgB,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,gBAAgB,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACnE,aAAa,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,aAAa,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,+BAA+B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACjF,oBAAoB,CAAC,GAAG,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,yBAAyB,CAAC,GAAG,EAAE,4BAA4B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACjE,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/C,UAAU,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,eAAe,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACpE,iBAAiB,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,+BAA+B,IAAI,OAAO,CAAC,2BAA2B,EAAE,CAAC,CAAC;IAC1E,8BAA8B,CAAC,GAAG,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,gDAAgD,CAAC,cAAc,SAAS,iBAAiB,EAAE,GAAG,EAAE,2BAA2B,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACxJ,yBAAyB,CAAC,cAAc,SAAS,iBAAiB,EAAE,GAAG,EAAE,6BAA6B,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvI,wBAAwB,CAAC,cAAc,SAAS,iBAAiB,EAAE,GAAG,EAAE,6BAA6B,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtI,yBAAyB,CAAC,cAAc,SAAS,iBAAiB,EAAE,GAAG,EAAE,4BAA4B,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzI"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.K8SCluster = void 0;
|
|
4
|
+
const client_node_1 = require("@kubernetes/client-node");
|
|
5
|
+
const k8s_config_1 = require("./k8s.config");
|
|
6
|
+
const utils_1 = require("./utils");
|
|
7
|
+
class K8SCluster {
|
|
8
|
+
logger;
|
|
9
|
+
coreV1Api;
|
|
10
|
+
appsV1Api;
|
|
11
|
+
customObjectsApi;
|
|
12
|
+
apiextensionsV1Api;
|
|
13
|
+
rbacAuthorizationV1Api;
|
|
14
|
+
constructor({ configFilePath, logger }) {
|
|
15
|
+
this.logger = logger;
|
|
16
|
+
const config = (0, k8s_config_1.getK8SConfig)(configFilePath);
|
|
17
|
+
this.coreV1Api = config.makeApiClient(client_node_1.CoreV1Api);
|
|
18
|
+
this.appsV1Api = config.makeApiClient(client_node_1.AppsV1Api);
|
|
19
|
+
this.customObjectsApi = config.makeApiClient(client_node_1.CustomObjectsApi);
|
|
20
|
+
this.apiextensionsV1Api = config.makeApiClient(client_node_1.ApiextensionsV1Api);
|
|
21
|
+
this.rbacAuthorizationV1Api = config.makeApiClient(client_node_1.RbacAuthorizationV1Api);
|
|
22
|
+
}
|
|
23
|
+
getAllNamespaces() {
|
|
24
|
+
return (0, utils_1.getItems)(this.coreV1Api.listNamespace());
|
|
25
|
+
}
|
|
26
|
+
async isNamespacePersisted(name) {
|
|
27
|
+
const allNamespaces = await this.getAllNamespaces();
|
|
28
|
+
return allNamespaces.some((namespace) => namespace.metadata?.name === name);
|
|
29
|
+
}
|
|
30
|
+
async createNamespace(name) {
|
|
31
|
+
await this.coreV1Api.createNamespace({
|
|
32
|
+
apiVersion: 'v1',
|
|
33
|
+
kind: 'Namespace',
|
|
34
|
+
metadata: {
|
|
35
|
+
name
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
async deleteNamespace(namespace) {
|
|
40
|
+
await this.coreV1Api.deleteNamespace(namespace);
|
|
41
|
+
}
|
|
42
|
+
getDeploymentsFromNamespace(namespace) {
|
|
43
|
+
return (0, utils_1.getItems)(this.appsV1Api.listNamespacedDeployment(namespace));
|
|
44
|
+
}
|
|
45
|
+
async createDeployment({ namespace, dto }) {
|
|
46
|
+
await this.appsV1Api.createNamespacedDeployment(namespace, dto);
|
|
47
|
+
}
|
|
48
|
+
async deleteDeployment({ name, namespace }) {
|
|
49
|
+
await this.appsV1Api.deleteNamespacedDeployment(name, namespace);
|
|
50
|
+
}
|
|
51
|
+
getServicesFromNamespace(namespace) {
|
|
52
|
+
return (0, utils_1.getItems)(this.coreV1Api.listNamespacedService(namespace));
|
|
53
|
+
}
|
|
54
|
+
async getServiceAccountsFromNamespace(namespace) {
|
|
55
|
+
return (0, utils_1.getItems)(this.coreV1Api.listNamespacedServiceAccount(namespace));
|
|
56
|
+
}
|
|
57
|
+
async createServiceAccount({ name, namespace }) {
|
|
58
|
+
await this.coreV1Api.createNamespacedServiceAccount(namespace, {
|
|
59
|
+
apiVersion: 'v1',
|
|
60
|
+
kind: 'ServiceAccount',
|
|
61
|
+
metadata: {
|
|
62
|
+
name,
|
|
63
|
+
namespace
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
async createServiceAccountToken({ namespace, name }) {
|
|
68
|
+
await this.coreV1Api.createNamespacedSecret(namespace, {
|
|
69
|
+
apiVersion: 'v1',
|
|
70
|
+
kind: 'Secret',
|
|
71
|
+
metadata: {
|
|
72
|
+
annotations: {
|
|
73
|
+
'kubernetes.io/service-account.name': namespace
|
|
74
|
+
},
|
|
75
|
+
name,
|
|
76
|
+
namespace
|
|
77
|
+
},
|
|
78
|
+
type: 'kubernetes.io/service-account-token'
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
async createService({ namespace, dto }) {
|
|
82
|
+
await this.coreV1Api.createNamespacedService(namespace, dto);
|
|
83
|
+
}
|
|
84
|
+
async deleteService({ name, namespace }) {
|
|
85
|
+
await this.coreV1Api.deleteNamespacedService(name, namespace);
|
|
86
|
+
}
|
|
87
|
+
getSecretsFromNamespace(namespace) {
|
|
88
|
+
return (0, utils_1.getItems)(this.coreV1Api.listNamespacedSecret(namespace));
|
|
89
|
+
}
|
|
90
|
+
async getRoles({ name, namespace }) {
|
|
91
|
+
return (0, utils_1.getItems)(this.rbacAuthorizationV1Api.listNamespacedRole(name, namespace));
|
|
92
|
+
}
|
|
93
|
+
async createRole({ metadata: { name, namespace }, rules }) {
|
|
94
|
+
await this.rbacAuthorizationV1Api.createNamespacedRole(namespace, {
|
|
95
|
+
apiVersion: 'rbac.authorization.k8s.io/v1',
|
|
96
|
+
kind: 'Role',
|
|
97
|
+
metadata: {
|
|
98
|
+
name,
|
|
99
|
+
namespace
|
|
100
|
+
},
|
|
101
|
+
rules
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
async getRoleBindings({ name, namespace }) {
|
|
105
|
+
return (0, utils_1.getItems)(this.rbacAuthorizationV1Api.listNamespacedRoleBinding(name, namespace));
|
|
106
|
+
}
|
|
107
|
+
async createRoleBinding({ name, namespace, subjects }) {
|
|
108
|
+
await this.rbacAuthorizationV1Api.createNamespacedRoleBinding(namespace, {
|
|
109
|
+
apiVersion: 'rbac.authorization.k8s.io/v1',
|
|
110
|
+
kind: 'RoleBinding',
|
|
111
|
+
metadata: {
|
|
112
|
+
name,
|
|
113
|
+
namespace
|
|
114
|
+
},
|
|
115
|
+
roleRef: {
|
|
116
|
+
apiGroup: 'rbac.authorization.k8s.io',
|
|
117
|
+
kind: 'Role',
|
|
118
|
+
name
|
|
119
|
+
},
|
|
120
|
+
subjects
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
async getAllCustomResourceDefinitions() {
|
|
124
|
+
return (0, utils_1.getItems)(this.apiextensionsV1Api.listCustomResourceDefinition());
|
|
125
|
+
}
|
|
126
|
+
async createCustomResourceDefinition(dto) {
|
|
127
|
+
await this.apiextensionsV1Api.createCustomResourceDefinition(dto).catch(this.logger.error);
|
|
128
|
+
}
|
|
129
|
+
async getAllClusterCustomObjectsFromResourceDefinition(dto) {
|
|
130
|
+
const { body } = await this.customObjectsApi.listClusterCustomObject(dto.spec.group, dto.spec.versions[0].name, dto.spec.names.plural);
|
|
131
|
+
return body['items'];
|
|
132
|
+
}
|
|
133
|
+
async createClusterCustomObject({ resourceDefinition, metadata, spec }) {
|
|
134
|
+
await this.customObjectsApi.createClusterCustomObject(resourceDefinition.spec.group, resourceDefinition.spec.versions[0].name, resourceDefinition.spec.names.plural, {
|
|
135
|
+
apiVersion: `${resourceDefinition.spec.group}/${resourceDefinition.spec.versions[0].name}`,
|
|
136
|
+
kind: resourceDefinition.spec.names.kind,
|
|
137
|
+
metadata,
|
|
138
|
+
spec
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
async patchClusterCustomObject({ resourceDefinition, metadata, spec }) {
|
|
142
|
+
await this.customObjectsApi.patchClusterCustomObject(resourceDefinition.spec.group, resourceDefinition.spec.versions[0].name, resourceDefinition.spec.names.plural, metadata.name, {
|
|
143
|
+
apiVersion: `${resourceDefinition.spec.group}/${resourceDefinition.spec.versions[0].name}`,
|
|
144
|
+
kind: resourceDefinition.spec.names.kind,
|
|
145
|
+
metadata,
|
|
146
|
+
spec
|
|
147
|
+
}, undefined, undefined, undefined, {
|
|
148
|
+
headers: {
|
|
149
|
+
'Content-Type': 'application/merge-patch+json'
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
async deleteClusterCustomObject({ resourceDefinition, metadata }) {
|
|
154
|
+
await this.customObjectsApi.deleteClusterCustomObject(resourceDefinition.spec.group, resourceDefinition.spec.versions[0].name, resourceDefinition.spec.names.plural, metadata.name);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
exports.K8SCluster = K8SCluster;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"k8s.config.d.ts","sourceRoot":"","sources":["../../../../packages/k8s/src/k8s.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,wBAAgB,YAAY,CAAC,cAAc,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,UAAU,CAQ/E"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getK8SConfig = getK8SConfig;
|
|
4
|
+
const client_node_1 = require("@kubernetes/client-node");
|
|
5
|
+
function getK8SConfig(configFilePath) {
|
|
6
|
+
const config = new client_node_1.KubeConfig();
|
|
7
|
+
if (configFilePath) {
|
|
8
|
+
config.loadFromFile(configFilePath);
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
config.loadFromDefault();
|
|
12
|
+
}
|
|
13
|
+
return config;
|
|
14
|
+
}
|
package/src/types.d.ts
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { ILogger, MaybeUndefined } from "@ask-ell/core";
|
|
2
|
+
import { RbacV1Subject, V1CustomResourceDefinition, V1Deployment, V1Namespace, V1PolicyRule, V1Role, V1RoleBinding, V1Secret, V1Service, V1ServiceAccount, V1ServicePort } from "@kubernetes/client-node";
|
|
3
|
+
export type K8SClusterParams = {
|
|
4
|
+
configFilePath: MaybeUndefined<string>;
|
|
5
|
+
logger: ILogger;
|
|
6
|
+
};
|
|
7
|
+
export type ComponentsFetchingResponse<Item> = {
|
|
8
|
+
body: {
|
|
9
|
+
items: Item[];
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
type CreateComponentDTOWrapper<DTO> = {
|
|
13
|
+
namespace: string;
|
|
14
|
+
dto: DTO;
|
|
15
|
+
};
|
|
16
|
+
export type DeleteComponentDTO = {
|
|
17
|
+
namespace: string;
|
|
18
|
+
name: string;
|
|
19
|
+
};
|
|
20
|
+
export type K8SNamespace = V1Namespace;
|
|
21
|
+
export type K8SDeployment = V1Deployment;
|
|
22
|
+
export type CreateDeploymentDTO = CreateComponentDTOWrapper<K8SDeployment>;
|
|
23
|
+
export type K8SService = V1Service;
|
|
24
|
+
export type CreateServiceDTO = CreateComponentDTOWrapper<K8SService>;
|
|
25
|
+
export type K8SServicePort = V1ServicePort;
|
|
26
|
+
export type K8SServiceAccount = V1ServiceAccount;
|
|
27
|
+
export type CreateServiceAccountDTO = {
|
|
28
|
+
name: string;
|
|
29
|
+
namespace: string;
|
|
30
|
+
};
|
|
31
|
+
export type CreateServiceAccountTokenDTO = {
|
|
32
|
+
name: string;
|
|
33
|
+
namespace: string;
|
|
34
|
+
};
|
|
35
|
+
export type K8SSecret = V1Secret;
|
|
36
|
+
export type K8SRole = V1Role;
|
|
37
|
+
export type GetRolesDTO = {
|
|
38
|
+
name: string;
|
|
39
|
+
namespace: string;
|
|
40
|
+
};
|
|
41
|
+
export type CreateRoleDTO = {
|
|
42
|
+
metadata: {
|
|
43
|
+
name: string;
|
|
44
|
+
namespace: string;
|
|
45
|
+
};
|
|
46
|
+
rules: V1PolicyRule[];
|
|
47
|
+
};
|
|
48
|
+
export type K8SRoleBinding = V1RoleBinding;
|
|
49
|
+
export type GetRoleBindingsDTO = {
|
|
50
|
+
name: string;
|
|
51
|
+
namespace: string;
|
|
52
|
+
};
|
|
53
|
+
export type CreateRoleBindingDTO = {
|
|
54
|
+
name: string;
|
|
55
|
+
namespace: string;
|
|
56
|
+
subjects: RbacV1Subject[];
|
|
57
|
+
};
|
|
58
|
+
export type K8SCustomResourceDefinition = V1CustomResourceDefinition;
|
|
59
|
+
export type K8SCustomResource<Spec = any> = {
|
|
60
|
+
apiVersion: string;
|
|
61
|
+
kind: string;
|
|
62
|
+
metadata: {
|
|
63
|
+
name: string;
|
|
64
|
+
};
|
|
65
|
+
spec: Spec;
|
|
66
|
+
};
|
|
67
|
+
export type PersistClusterCustomObjectDTO<CustomResource extends K8SCustomResource> = {
|
|
68
|
+
resourceDefinition: K8SCustomResourceDefinition;
|
|
69
|
+
metadata: CustomResource['metadata'];
|
|
70
|
+
spec: CustomResource['spec'];
|
|
71
|
+
};
|
|
72
|
+
export type DeleteClusterCustomObjectDTO<CustomResource extends K8SCustomResource> = Omit<PersistClusterCustomObjectDTO<CustomResource>, 'spec'>;
|
|
73
|
+
export {};
|
|
74
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../packages/k8s/src/types.ts"],"names":[],"mappings":"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"}
|
package/src/types.js
ADDED
package/src/utils.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../packages/k8s/src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAErD,wBAAsB,QAAQ,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAGpG"}
|