teraslice 3.17.2 → 3.18.0

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.
Files changed (259) hide show
  1. package/dist/src/index.d.ts +13 -0
  2. package/dist/src/index.d.ts.map +1 -0
  3. package/dist/src/index.js.map +1 -0
  4. package/dist/src/interfaces.d.ts +91 -0
  5. package/dist/src/interfaces.d.ts.map +1 -0
  6. package/dist/src/interfaces.js.map +1 -0
  7. package/dist/src/lib/cluster/cluster_master.d.ts +26 -0
  8. package/dist/src/lib/cluster/cluster_master.d.ts.map +1 -0
  9. package/dist/src/lib/cluster/cluster_master.js +246 -0
  10. package/dist/src/lib/cluster/cluster_master.js.map +1 -0
  11. package/dist/src/lib/cluster/node_master.d.ts +3 -0
  12. package/dist/src/lib/cluster/node_master.d.ts.map +1 -0
  13. package/dist/src/lib/cluster/node_master.js +355 -0
  14. package/dist/src/lib/cluster/node_master.js.map +1 -0
  15. package/dist/src/lib/cluster/services/api.d.ts +42 -0
  16. package/dist/src/lib/cluster/services/api.d.ts.map +1 -0
  17. package/dist/src/lib/cluster/services/api.js +673 -0
  18. package/dist/src/lib/cluster/services/api.js.map +1 -0
  19. package/dist/src/lib/cluster/services/assets.d.ts +20 -0
  20. package/dist/src/lib/cluster/services/assets.d.ts.map +1 -0
  21. package/dist/src/lib/cluster/services/assets.js +224 -0
  22. package/dist/src/lib/cluster/services/assets.js.map +1 -0
  23. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/index.d.ts +85 -0
  24. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/index.d.ts.map +1 -0
  25. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/index.js +193 -0
  26. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/index.js.map +1 -0
  27. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/interfaces.d.ts +148 -0
  28. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/interfaces.d.ts.map +1 -0
  29. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/interfaces.js +2 -0
  30. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/interfaces.js.map +1 -0
  31. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8s.d.ts +128 -0
  32. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8s.d.ts.map +1 -0
  33. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8s.js +419 -0
  34. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8s.js.map +1 -0
  35. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sDeploymentResource.d.ts +27 -0
  36. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sDeploymentResource.d.ts.map +1 -0
  37. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sDeploymentResource.js +60 -0
  38. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sDeploymentResource.js.map +1 -0
  39. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sJobResource.d.ts +23 -0
  40. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sJobResource.d.ts.map +1 -0
  41. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sJobResource.js +56 -0
  42. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sJobResource.js.map +1 -0
  43. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sResource.d.ts +69 -0
  44. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sResource.d.ts.map +1 -0
  45. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sResource.js +378 -0
  46. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sResource.js.map +1 -0
  47. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sServiceResource.d.ts +26 -0
  48. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sServiceResource.d.ts.map +1 -0
  49. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sServiceResource.js +37 -0
  50. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sServiceResource.js.map +1 -0
  51. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sState.d.ts +13 -0
  52. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sState.d.ts.map +1 -0
  53. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sState.js +60 -0
  54. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sState.js.map +1 -0
  55. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/utils.d.ts +42 -0
  56. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/utils.d.ts.map +1 -0
  57. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/utils.js +170 -0
  58. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/utils.js.map +1 -0
  59. package/dist/src/lib/cluster/services/cluster/backends/native/dispatch.d.ts +6 -0
  60. package/dist/src/lib/cluster/services/cluster/backends/native/dispatch.d.ts.map +1 -0
  61. package/dist/src/lib/cluster/services/cluster/backends/native/dispatch.js +13 -0
  62. package/dist/src/lib/cluster/services/cluster/backends/native/dispatch.js.map +1 -0
  63. package/dist/src/lib/cluster/services/cluster/backends/native/index.d.ts +59 -0
  64. package/dist/src/lib/cluster/services/cluster/backends/native/index.d.ts.map +1 -0
  65. package/dist/src/lib/cluster/services/cluster/backends/native/index.js +526 -0
  66. package/dist/src/lib/cluster/services/cluster/backends/native/index.js.map +1 -0
  67. package/dist/src/lib/cluster/services/cluster/backends/native/messaging.d.ts +70 -0
  68. package/dist/src/lib/cluster/services/cluster/backends/native/messaging.d.ts.map +1 -0
  69. package/dist/src/lib/cluster/services/cluster/backends/native/messaging.js +548 -0
  70. package/dist/src/lib/cluster/services/cluster/backends/native/messaging.js.map +1 -0
  71. package/dist/src/lib/cluster/services/cluster/backends/state-utils.d.ts +6 -0
  72. package/dist/src/lib/cluster/services/cluster/backends/state-utils.d.ts.map +1 -0
  73. package/dist/src/lib/cluster/services/cluster/backends/state-utils.js +26 -0
  74. package/dist/src/lib/cluster/services/cluster/backends/state-utils.js.map +1 -0
  75. package/dist/src/lib/cluster/services/cluster/index.d.ts +6 -0
  76. package/dist/src/lib/cluster/services/cluster/index.d.ts.map +1 -0
  77. package/dist/src/lib/cluster/services/cluster/index.js +13 -0
  78. package/dist/src/lib/cluster/services/cluster/index.js.map +1 -0
  79. package/dist/src/lib/cluster/services/execution.d.ts +98 -0
  80. package/dist/src/lib/cluster/services/execution.d.ts.map +1 -0
  81. package/dist/src/lib/cluster/services/execution.js +449 -0
  82. package/dist/src/lib/cluster/services/execution.js.map +1 -0
  83. package/dist/src/lib/cluster/services/index.d.ts +6 -0
  84. package/dist/src/lib/cluster/services/index.d.ts.map +1 -0
  85. package/dist/src/lib/cluster/services/index.js +6 -0
  86. package/dist/src/lib/cluster/services/index.js.map +1 -0
  87. package/dist/src/lib/cluster/services/interfaces.d.ts +6 -0
  88. package/dist/src/lib/cluster/services/interfaces.d.ts.map +1 -0
  89. package/dist/src/lib/cluster/services/interfaces.js +2 -0
  90. package/dist/src/lib/cluster/services/interfaces.js.map +1 -0
  91. package/dist/src/lib/cluster/services/jobs.d.ts +155 -0
  92. package/dist/src/lib/cluster/services/jobs.d.ts.map +1 -0
  93. package/dist/src/lib/cluster/services/jobs.js +482 -0
  94. package/dist/src/lib/cluster/services/jobs.js.map +1 -0
  95. package/dist/src/lib/config/default-sysconfig.d.ts +11 -0
  96. package/dist/src/lib/config/default-sysconfig.d.ts.map +1 -0
  97. package/dist/src/lib/config/default-sysconfig.js +25 -0
  98. package/dist/src/lib/config/default-sysconfig.js.map +1 -0
  99. package/dist/src/lib/config/index.d.ts +6 -0
  100. package/dist/src/lib/config/index.d.ts.map +1 -0
  101. package/dist/src/lib/config/index.js +20 -0
  102. package/dist/src/lib/config/index.js.map +1 -0
  103. package/dist/src/lib/config/schemas/system.d.ts +548 -0
  104. package/dist/src/lib/config/schemas/system.d.ts.map +1 -0
  105. package/dist/src/lib/config/schemas/system.js +360 -0
  106. package/dist/src/lib/config/schemas/system.js.map +1 -0
  107. package/dist/src/lib/storage/analytics.d.ts +23 -0
  108. package/dist/src/lib/storage/analytics.d.ts.map +1 -0
  109. package/dist/src/lib/storage/analytics.js +86 -0
  110. package/dist/src/lib/storage/analytics.js.map +1 -0
  111. package/dist/src/lib/storage/assets.d.ts +47 -0
  112. package/dist/src/lib/storage/assets.d.ts.map +1 -0
  113. package/dist/src/lib/storage/assets.js +400 -0
  114. package/dist/src/lib/storage/assets.js.map +1 -0
  115. package/dist/src/lib/storage/backends/elasticsearch_store.d.ts +63 -0
  116. package/dist/src/lib/storage/backends/elasticsearch_store.d.ts.map +1 -0
  117. package/dist/src/lib/storage/backends/elasticsearch_store.js +495 -0
  118. package/dist/src/lib/storage/backends/elasticsearch_store.js.map +1 -0
  119. package/dist/src/lib/storage/backends/mappings/analytics.d.ts +4 -0
  120. package/dist/src/lib/storage/backends/mappings/analytics.d.ts.map +1 -0
  121. package/dist/src/lib/storage/backends/mappings/analytics.js +20 -0
  122. package/dist/src/lib/storage/backends/mappings/analytics.js.map +1 -0
  123. package/dist/src/lib/storage/backends/mappings/asset.d.ts +3 -0
  124. package/dist/src/lib/storage/backends/mappings/asset.d.ts.map +1 -0
  125. package/dist/src/lib/storage/backends/mappings/asset.js +16 -0
  126. package/dist/src/lib/storage/backends/mappings/asset.js.map +1 -0
  127. package/dist/src/lib/storage/backends/mappings/ex.d.ts +3 -0
  128. package/dist/src/lib/storage/backends/mappings/ex.d.ts.map +1 -0
  129. package/dist/src/lib/storage/backends/mappings/ex.js +53 -0
  130. package/dist/src/lib/storage/backends/mappings/ex.js.map +1 -0
  131. package/dist/src/lib/storage/backends/mappings/job.d.ts +3 -0
  132. package/dist/src/lib/storage/backends/mappings/job.d.ts.map +1 -0
  133. package/dist/src/lib/storage/backends/mappings/job.js +41 -0
  134. package/dist/src/lib/storage/backends/mappings/job.js.map +1 -0
  135. package/dist/src/lib/storage/backends/mappings/state.d.ts +4 -0
  136. package/dist/src/lib/storage/backends/mappings/state.d.ts.map +1 -0
  137. package/dist/src/lib/storage/backends/mappings/state.js +16 -0
  138. package/dist/src/lib/storage/backends/mappings/state.js.map +1 -0
  139. package/dist/src/lib/storage/backends/s3_store.d.ts +30 -0
  140. package/dist/src/lib/storage/backends/s3_store.d.ts.map +1 -0
  141. package/dist/src/lib/storage/backends/s3_store.js +237 -0
  142. package/dist/src/lib/storage/backends/s3_store.js.map +1 -0
  143. package/dist/src/lib/storage/execution.d.ts +73 -0
  144. package/dist/src/lib/storage/execution.d.ts.map +1 -0
  145. package/dist/src/lib/storage/execution.js +302 -0
  146. package/dist/src/lib/storage/execution.js.map +1 -0
  147. package/dist/src/lib/storage/index.d.ts +7 -0
  148. package/dist/src/lib/storage/index.d.ts.map +1 -0
  149. package/dist/src/lib/storage/index.js +7 -0
  150. package/dist/src/lib/storage/index.js.map +1 -0
  151. package/dist/src/lib/storage/jobs.d.ts +19 -0
  152. package/dist/src/lib/storage/jobs.d.ts.map +1 -0
  153. package/dist/src/lib/storage/jobs.js +81 -0
  154. package/dist/src/lib/storage/jobs.js.map +1 -0
  155. package/dist/src/lib/storage/state.d.ts +64 -0
  156. package/dist/src/lib/storage/state.d.ts.map +1 -0
  157. package/dist/src/lib/storage/state.js +257 -0
  158. package/dist/src/lib/storage/state.js.map +1 -0
  159. package/dist/src/lib/utils/api_utils.d.ts +21 -0
  160. package/dist/src/lib/utils/api_utils.d.ts.map +1 -0
  161. package/dist/src/lib/utils/api_utils.js +128 -0
  162. package/dist/src/lib/utils/api_utils.js.map +1 -0
  163. package/dist/src/lib/utils/asset_utils.d.ts +8 -0
  164. package/dist/src/lib/utils/asset_utils.d.ts.map +1 -0
  165. package/dist/src/lib/utils/asset_utils.js +94 -0
  166. package/dist/src/lib/utils/asset_utils.js.map +1 -0
  167. package/dist/src/lib/utils/date_utils.d.ts +7 -0
  168. package/dist/src/lib/utils/date_utils.d.ts.map +1 -0
  169. package/dist/src/lib/utils/date_utils.js +52 -0
  170. package/dist/src/lib/utils/date_utils.js.map +1 -0
  171. package/dist/src/lib/utils/encoding_utils.d.ts +3 -0
  172. package/dist/src/lib/utils/encoding_utils.d.ts.map +1 -0
  173. package/dist/src/lib/utils/encoding_utils.js +27 -0
  174. package/dist/src/lib/utils/encoding_utils.js.map +1 -0
  175. package/dist/src/lib/utils/events.d.ts +4 -0
  176. package/dist/src/lib/utils/events.d.ts.map +1 -0
  177. package/dist/src/lib/utils/events.js +4 -0
  178. package/dist/src/lib/utils/events.js.map +1 -0
  179. package/dist/src/lib/utils/file_utils.d.ts +44 -0
  180. package/dist/src/lib/utils/file_utils.d.ts.map +1 -0
  181. package/dist/src/lib/utils/file_utils.js +124 -0
  182. package/dist/src/lib/utils/file_utils.js.map +1 -0
  183. package/dist/src/lib/utils/id_utils.d.ts +2 -0
  184. package/dist/src/lib/utils/id_utils.d.ts.map +1 -0
  185. package/dist/src/lib/utils/id_utils.js +15 -0
  186. package/dist/src/lib/utils/id_utils.js.map +1 -0
  187. package/dist/src/lib/utils/port_utils.d.ts +20 -0
  188. package/dist/src/lib/utils/port_utils.d.ts.map +1 -0
  189. package/dist/src/lib/utils/port_utils.js +32 -0
  190. package/dist/src/lib/utils/port_utils.js.map +1 -0
  191. package/dist/src/lib/workers/assets/index.d.ts +3 -0
  192. package/dist/src/lib/workers/assets/index.d.ts.map +1 -0
  193. package/dist/src/lib/workers/assets/index.js +3 -0
  194. package/dist/src/lib/workers/assets/index.js.map +1 -0
  195. package/dist/src/lib/workers/assets/loader-executable.d.ts +2 -0
  196. package/dist/src/lib/workers/assets/loader-executable.d.ts.map +1 -0
  197. package/dist/src/lib/workers/assets/loader-executable.js +40 -0
  198. package/dist/src/lib/workers/assets/loader-executable.js.map +1 -0
  199. package/dist/src/lib/workers/assets/loader.d.ts +14 -0
  200. package/dist/src/lib/workers/assets/loader.d.ts.map +1 -0
  201. package/dist/src/lib/workers/assets/loader.js +73 -0
  202. package/dist/src/lib/workers/assets/loader.js.map +1 -0
  203. package/dist/src/lib/workers/assets/spawn.d.ts +3 -0
  204. package/dist/src/lib/workers/assets/spawn.d.ts.map +1 -0
  205. package/dist/src/lib/workers/assets/spawn.js +55 -0
  206. package/dist/src/lib/workers/assets/spawn.js.map +1 -0
  207. package/dist/src/lib/workers/context/execution-context.d.ts +3 -0
  208. package/dist/src/lib/workers/context/execution-context.d.ts.map +1 -0
  209. package/dist/src/lib/workers/context/execution-context.js +12 -0
  210. package/dist/src/lib/workers/context/execution-context.js.map +1 -0
  211. package/dist/src/lib/workers/context/terafoundation-context.d.ts +3 -0
  212. package/dist/src/lib/workers/context/terafoundation-context.d.ts.map +1 -0
  213. package/dist/src/lib/workers/context/terafoundation-context.js +22 -0
  214. package/dist/src/lib/workers/context/terafoundation-context.js.map +1 -0
  215. package/dist/src/lib/workers/execution-controller/execution-analytics.d.ts +53 -0
  216. package/dist/src/lib/workers/execution-controller/execution-analytics.d.ts.map +1 -0
  217. package/dist/src/lib/workers/execution-controller/execution-analytics.js +188 -0
  218. package/dist/src/lib/workers/execution-controller/execution-analytics.js.map +1 -0
  219. package/dist/src/lib/workers/execution-controller/index.d.ts +93 -0
  220. package/dist/src/lib/workers/execution-controller/index.d.ts.map +1 -0
  221. package/dist/src/lib/workers/execution-controller/index.js +1023 -0
  222. package/dist/src/lib/workers/execution-controller/index.js.map +1 -0
  223. package/dist/src/lib/workers/execution-controller/recovery.d.ts +42 -0
  224. package/dist/src/lib/workers/execution-controller/recovery.d.ts.map +1 -0
  225. package/dist/src/lib/workers/execution-controller/recovery.js +151 -0
  226. package/dist/src/lib/workers/execution-controller/recovery.js.map +1 -0
  227. package/dist/src/lib/workers/execution-controller/scheduler.d.ts +66 -0
  228. package/dist/src/lib/workers/execution-controller/scheduler.d.ts.map +1 -0
  229. package/dist/src/lib/workers/execution-controller/scheduler.js +390 -0
  230. package/dist/src/lib/workers/execution-controller/scheduler.js.map +1 -0
  231. package/dist/src/lib/workers/execution-controller/slice-analytics.d.ts +31 -0
  232. package/dist/src/lib/workers/execution-controller/slice-analytics.d.ts.map +1 -0
  233. package/dist/src/lib/workers/execution-controller/slice-analytics.js +96 -0
  234. package/dist/src/lib/workers/execution-controller/slice-analytics.js.map +1 -0
  235. package/dist/src/lib/workers/helpers/job.d.ts +27 -0
  236. package/dist/src/lib/workers/helpers/job.d.ts.map +1 -0
  237. package/dist/src/lib/workers/helpers/job.js +81 -0
  238. package/dist/src/lib/workers/helpers/job.js.map +1 -0
  239. package/dist/src/lib/workers/helpers/op-analytics.d.ts +4 -0
  240. package/dist/src/lib/workers/helpers/op-analytics.d.ts.map +1 -0
  241. package/dist/src/lib/workers/helpers/op-analytics.js +22 -0
  242. package/dist/src/lib/workers/helpers/op-analytics.js.map +1 -0
  243. package/dist/src/lib/workers/helpers/terafoundation.d.ts +5 -0
  244. package/dist/src/lib/workers/helpers/terafoundation.d.ts.map +1 -0
  245. package/dist/src/lib/workers/helpers/terafoundation.js +20 -0
  246. package/dist/src/lib/workers/helpers/terafoundation.js.map +1 -0
  247. package/dist/src/lib/workers/helpers/worker-shutdown.d.ts +7 -0
  248. package/dist/src/lib/workers/helpers/worker-shutdown.d.ts.map +1 -0
  249. package/dist/src/lib/workers/helpers/worker-shutdown.js +149 -0
  250. package/dist/src/lib/workers/helpers/worker-shutdown.js.map +1 -0
  251. package/dist/src/lib/workers/worker/index.d.ts +44 -0
  252. package/dist/src/lib/workers/worker/index.d.ts.map +1 -0
  253. package/dist/src/lib/workers/worker/index.js +391 -0
  254. package/dist/src/lib/workers/worker/index.js.map +1 -0
  255. package/dist/src/lib/workers/worker/slice.d.ts +26 -0
  256. package/dist/src/lib/workers/worker/slice.d.ts.map +1 -0
  257. package/dist/src/lib/workers/worker/slice.js +125 -0
  258. package/dist/src/lib/workers/worker/slice.js.map +1 -0
  259. package/package.json +12 -13
@@ -0,0 +1,69 @@
1
+ import { V1Deployment, V1Job, V1Service } from '@kubernetes/client-node';
2
+ import { Logger } from '@terascope/core-utils';
3
+ import type { Config, ExecutionConfig } from '@terascope/types';
4
+ import { K8sConfig, NodeType, TSDeployment, TSJob, TSService } from './interfaces.js';
5
+ export declare abstract class K8sResource<T extends TSService | TSDeployment | TSJob> {
6
+ execution: ExecutionConfig;
7
+ jobLabelPrefix: string;
8
+ jobPropertyLabelPrefix: string;
9
+ logger: Logger;
10
+ terasliceConfig: Config;
11
+ abstract nodeType: NodeType;
12
+ abstract nameInfix: string;
13
+ abstract templateGenerator: (config: K8sConfig) => V1Deployment | V1Job | V1Service;
14
+ abstract templateConfig: K8sConfig;
15
+ abstract resource: T;
16
+ /**
17
+ * K8sResource allows the generation of k8s resources based on templates.
18
+ * After creating the object, the k8s resource is accessible on the objects
19
+ * .resource property.
20
+ *
21
+ * @param {Object} terasliceConfig - teraslice cluster config from context
22
+ * @param {Object} execution - teraslice execution
23
+ * @param {Logger} logger - teraslice logger
24
+ */
25
+ constructor(terasliceConfig: Config, execution: ExecutionConfig, logger: Logger);
26
+ _setEnvVariables(): void;
27
+ _mountLocalTeraslice(resource: TSJob | TSDeployment): void;
28
+ _makeConfig(nameInfix: string, exName?: string, exUid?: string): K8sConfig;
29
+ _setWorkerAntiAffinity(resource: TSJob | TSDeployment): void;
30
+ /**
31
+ * Execution Controllers get tolerations and required affinities
32
+ *
33
+ * NOTE: We considered changing `execution_controller_targets` to be an
34
+ * object but the inconsistency with `targets` made this awkward. See the
35
+ * `teraslice config with execution_controller_targets and job targets set`
36
+ * test for an example. If the syntax for this were to change, we should
37
+ * also consider changing `execution.targets`, which is a change on the job.
38
+ */
39
+ _setExecutionControllerTargets(resource: TSJob | TSDeployment): void;
40
+ _setEphemeralStorage(resource: TSJob | TSDeployment): void;
41
+ _setExternalPorts(resource: TSJob | TSDeployment): void;
42
+ _setImagePullSecret(resource: TSJob | TSDeployment): void;
43
+ _setPriorityClassName(resource: TSJob | TSDeployment): void;
44
+ _setAssetsVolume(resource: TSJob | TSDeployment): void;
45
+ _setRelocatableLabel(resource: TSJob | TSDeployment, relocatable: boolean): void;
46
+ _setJobLabels(resource: TSJob | TSDeployment): void;
47
+ _setVolumes(resource: TSJob | TSDeployment): void;
48
+ _setResources(resource: TSJob | TSDeployment): void;
49
+ _setTargets(resource: TSJob | TSDeployment): void;
50
+ _setTargetRequired(target: any, resource: TSJob | TSDeployment): void;
51
+ _setTargetPreferred(target: any, resource: TSJob | TSDeployment): void;
52
+ _setTargetAccepted(target: any, resource: TSJob | TSDeployment): void;
53
+ /**
54
+ * _mergePodSpecOverlay - allows the author of the job to override anything
55
+ * in the pod .spec for both the execution controller and the worker pods
56
+ * created in Kubernetes. This can be useful in many ways including these:
57
+ *
58
+ * * add `initContainers` to the pods
59
+ * * add `hostAliases` to the pods
60
+ *
61
+ * Note that this happens at the end of the process, so anything added by
62
+ * this overlay will overwrite any other setting set on the job or by the
63
+ * config.
64
+ *
65
+ * Job setting: `pod_spec_override`
66
+ */
67
+ _mergePodSpecOverlay(resource: TSJob | TSDeployment): void;
68
+ }
69
+ //# sourceMappingURL=k8sResource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"k8sResource.d.ts","sourceRoot":"","sources":["../../../../../../../../src/lib/cluster/services/cluster/backends/kubernetesV2/k8sResource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EACO,MAAM,EAEnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGhE,OAAO,EACH,SAAS,EAAE,QAAQ,EAAE,YAAY,EACjC,KAAK,EAAE,SAAS,EACnB,MAAM,iBAAiB,CAAC;AAEzB,8BAAsB,WAAW,CAAC,CAAC,SAAS,SAAS,GAAG,YAAY,GAAG,KAAK;IACxE,SAAS,EAAE,eAAe,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,iBAAiB,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,YAAY,GAAG,KAAK,GAAG,SAAS,CAAC;IACpF,QAAQ,CAAC,cAAc,EAAE,SAAS,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IAErB;;;;;;;;OAQG;gBAEC,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,eAAe,EAC1B,MAAM,EAAE,MAAM;IASlB,gBAAgB;IAGhB,oBAAoB,CAAC,QAAQ,EAAE,KAAK,GAAG,YAAY,GAAG,IAAI;IAa1D,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS;IA4C1E,sBAAsB,CAAC,QAAQ,EAAE,KAAK,GAAG,YAAY;IAqCrD;;;;;;;;OAQG;IACH,8BAA8B,CAAC,QAAQ,EAAE,KAAK,GAAG,YAAY;IAS7D,oBAAoB,CAAC,QAAQ,EAAE,KAAK,GAAG,YAAY;IAanD,iBAAiB,CAAC,QAAQ,EAAE,KAAK,GAAG,YAAY;IAmBhD,mBAAmB,CAAC,QAAQ,EAAE,KAAK,GAAG,YAAY;IAclD,qBAAqB,CAAC,QAAQ,EAAE,KAAK,GAAG,YAAY;IAiBpD,gBAAgB,CAAC,QAAQ,EAAE,KAAK,GAAG,YAAY;IA8B/C,oBAAoB,CAAC,QAAQ,EAAE,KAAK,GAAG,YAAY,EAAE,WAAW,EAAE,OAAO;IAOzE,aAAa,CAAC,QAAQ,EAAE,KAAK,GAAG,YAAY;IAY5C,WAAW,CAAC,QAAQ,EAAE,KAAK,GAAG,YAAY;IAe1C,aAAa,CAAC,QAAQ,EAAE,KAAK,GAAG,YAAY;IA6D5C,WAAW,CAAC,QAAQ,EAAE,KAAK,GAAG,YAAY;IAoB1C,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,GAAG,YAAY;IAkB9D,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,GAAG,YAAY;IAmB/D,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,GAAG,YAAY;IAc9D;;;;;;;;;;;;;OAaG;IACH,oBAAoB,CAAC,QAAQ,EAAE,KAAK,GAAG,YAAY;CAMtD"}
@@ -0,0 +1,378 @@
1
+ import { isNumber, get, set, has, isEmpty, merge } from '@terascope/core-utils';
2
+ import { safeEncode } from '../../../../../utils/encoding_utils.js';
3
+ import { setMaxOldSpaceViaEnv } from './utils.js';
4
+ export class K8sResource {
5
+ execution;
6
+ jobLabelPrefix;
7
+ jobPropertyLabelPrefix;
8
+ logger;
9
+ terasliceConfig;
10
+ /**
11
+ * K8sResource allows the generation of k8s resources based on templates.
12
+ * After creating the object, the k8s resource is accessible on the objects
13
+ * .resource property.
14
+ *
15
+ * @param {Object} terasliceConfig - teraslice cluster config from context
16
+ * @param {Object} execution - teraslice execution
17
+ * @param {Logger} logger - teraslice logger
18
+ */
19
+ constructor(terasliceConfig, execution, logger) {
20
+ this.execution = execution;
21
+ this.jobLabelPrefix = 'job.teraslice.terascope.io';
22
+ this.jobPropertyLabelPrefix = 'job-property.teraslice.terascope.io';
23
+ this.logger = logger;
24
+ this.terasliceConfig = terasliceConfig;
25
+ }
26
+ _setEnvVariables() {
27
+ }
28
+ _mountLocalTeraslice(resource) {
29
+ const devMounts = JSON.parse(Buffer.from(process.env.MOUNT_LOCAL_TERASLICE, 'base64').toString('utf-8'));
30
+ resource.spec.template.spec.containers[0].volumeMounts.push(...devMounts.volumeMounts);
31
+ resource.spec.template.spec.volumes.push(...devMounts.volumes);
32
+ if (resource.spec.template.spec.containers[0]) {
33
+ resource.spec.template.spec.containers[0].args = [
34
+ 'node',
35
+ 'service.js'
36
+ ];
37
+ }
38
+ }
39
+ _makeConfig(nameInfix, exName, exUid) {
40
+ const clusterName = get(this.terasliceConfig, 'name');
41
+ const clusterNameLabel = clusterName.replace(/[^a-zA-Z0-9_\-.]/g, '_').substring(0, 63);
42
+ const configMapName = get(this.terasliceConfig, 'kubernetes_config_map_name', `${this.terasliceConfig.name}-worker`);
43
+ const dockerImage = this.execution.kubernetes_image
44
+ || this.terasliceConfig.kubernetes_image;
45
+ // name needs to be a valid DNS name since it is used in the svc name,
46
+ // so we can only permit alphanumeric and - characters. _ is forbidden.
47
+ // -> regex used for validation is '[a-z]([-a-z0-9]*[a-z0-9])?'
48
+ const jobNameLabel = this.execution.name
49
+ .toLowerCase()
50
+ .replace(/[^a-zA-Z0-9\-.]/g, '-')
51
+ .replace(/^[^a-z]/, 'a')
52
+ .replace(/[^a-z0-9]$/, '0')
53
+ .substring(0, 63);
54
+ const name = `ts-${nameInfix}-${jobNameLabel.substring(0, 35)}-${this.execution.job_id.substring(0, 13)}`;
55
+ const shutdownTimeoutMs = get(this.terasliceConfig, 'shutdown_timeout', 60000);
56
+ const shutdownTimeoutSeconds = Math.round(shutdownTimeoutMs / 1000);
57
+ const config = {
58
+ clusterName,
59
+ clusterNameLabel,
60
+ configMapName,
61
+ dockerImage,
62
+ execution: safeEncode(this.execution),
63
+ exId: this.execution.ex_id,
64
+ exName: exName,
65
+ exUid: exUid,
66
+ jobId: this.execution.job_id,
67
+ jobNameLabel,
68
+ name,
69
+ namespace: get(this.terasliceConfig, 'kubernetes_namespace', 'default'),
70
+ nodeType: this.nodeType,
71
+ replicas: this.execution.workers,
72
+ shutdownTimeout: shutdownTimeoutSeconds
73
+ };
74
+ return config;
75
+ }
76
+ _setWorkerAntiAffinity(resource) {
77
+ if (this.terasliceConfig.kubernetes_worker_antiaffinity) {
78
+ const targetKey = 'spec.template.spec.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution';
79
+ if (!has(this.resource, targetKey)) {
80
+ set(this.resource, targetKey, []);
81
+ }
82
+ resource.spec.template.spec.affinity?.podAntiAffinity
83
+ ?.preferredDuringSchedulingIgnoredDuringExecution?.push({
84
+ weight: 1,
85
+ podAffinityTerm: {
86
+ labelSelector: {
87
+ matchExpressions: [
88
+ {
89
+ key: 'app.kubernetes.io/name',
90
+ operator: 'In',
91
+ values: [
92
+ 'teraslice'
93
+ ]
94
+ },
95
+ {
96
+ key: 'app.kubernetes.io/instance',
97
+ operator: 'In',
98
+ values: [
99
+ this.templateConfig.clusterNameLabel
100
+ ]
101
+ }
102
+ ]
103
+ },
104
+ topologyKey: 'kubernetes.io/hostname'
105
+ }
106
+ });
107
+ }
108
+ }
109
+ /**
110
+ * Execution Controllers get tolerations and required affinities
111
+ *
112
+ * NOTE: We considered changing `execution_controller_targets` to be an
113
+ * object but the inconsistency with `targets` made this awkward. See the
114
+ * `teraslice config with execution_controller_targets and job targets set`
115
+ * test for an example. If the syntax for this were to change, we should
116
+ * also consider changing `execution.targets`, which is a change on the job.
117
+ */
118
+ _setExecutionControllerTargets(resource) {
119
+ if (this.terasliceConfig.execution_controller_targets) {
120
+ this.terasliceConfig.execution_controller_targets.forEach((target) => {
121
+ this._setTargetRequired(target, resource);
122
+ this._setTargetAccepted(target, resource);
123
+ });
124
+ }
125
+ }
126
+ _setEphemeralStorage(resource) {
127
+ if (this.execution.ephemeral_storage) {
128
+ resource.spec.template.spec.containers[0].volumeMounts.push({
129
+ name: 'ephemeral-volume',
130
+ mountPath: '/ephemeral0'
131
+ });
132
+ resource.spec.template.spec.volumes.push({
133
+ name: 'ephemeral-volume',
134
+ emptyDir: {}
135
+ });
136
+ }
137
+ }
138
+ _setExternalPorts(resource) {
139
+ if (this.execution.external_ports) {
140
+ this.execution.external_ports.forEach((portValue) => {
141
+ if (isNumber(portValue)) {
142
+ resource.spec.template.spec.containers[0].ports
143
+ .push({ containerPort: portValue });
144
+ }
145
+ else {
146
+ resource.spec.template.spec.containers[0].ports
147
+ .push({
148
+ name: portValue.name,
149
+ containerPort: portValue.port
150
+ });
151
+ }
152
+ });
153
+ }
154
+ }
155
+ _setImagePullSecret(resource) {
156
+ if (this.terasliceConfig.kubernetes_image_pull_secret) {
157
+ if (resource.spec.template.spec.imagePullSecrets) {
158
+ resource.spec.template.spec.imagePullSecrets.push({ name: this.terasliceConfig.kubernetes_image_pull_secret });
159
+ }
160
+ else {
161
+ resource.spec.template.spec.imagePullSecrets = [
162
+ { name: this.terasliceConfig.kubernetes_image_pull_secret }
163
+ ];
164
+ }
165
+ }
166
+ }
167
+ _setPriorityClassName(resource) {
168
+ if (this.terasliceConfig.kubernetes_priority_class_name) {
169
+ const className = this.terasliceConfig.kubernetes_priority_class_name;
170
+ if (this.nodeType === 'execution_controller') {
171
+ resource.spec.template.spec.priorityClassName = className;
172
+ if (this.execution.stateful) {
173
+ resource.spec.template.metadata.labels[`${this.jobPropertyLabelPrefix}/stateful`] = 'true';
174
+ }
175
+ }
176
+ if (this.nodeType === 'worker' && this.execution.stateful) {
177
+ resource.spec.template.spec.priorityClassName = className;
178
+ resource.spec.template.metadata.labels[`${this.jobPropertyLabelPrefix}/stateful`] = 'true';
179
+ }
180
+ }
181
+ }
182
+ _setAssetsVolume(resource) {
183
+ if (this.terasliceConfig.assets_directory
184
+ && typeof this.terasliceConfig.assets_directory === 'string') {
185
+ if (this.terasliceConfig.assets_volume) {
186
+ // A shared asset volume (PVC) was configured: mount it at assets_directory.
187
+ resource.spec.template.spec.volumes.push({
188
+ name: this.terasliceConfig.assets_volume,
189
+ persistentVolumeClaim: { claimName: this.terasliceConfig.assets_volume }
190
+ });
191
+ resource.spec.template.spec.containers[0].volumeMounts.push({
192
+ name: this.terasliceConfig.assets_volume,
193
+ mountPath: this.terasliceConfig.assets_directory
194
+ });
195
+ }
196
+ else {
197
+ // No shared volume: mount an emptyDir so downloaded assets can still be
198
+ // written while the pod runs with a read-only root filesystem. This is
199
+ // ephemeral per-pod, matching the previous (image root filesystem) behavior.
200
+ resource.spec.template.spec.volumes.push({
201
+ name: 'assets',
202
+ emptyDir: {}
203
+ });
204
+ resource.spec.template.spec.containers[0].volumeMounts.push({
205
+ name: 'assets',
206
+ mountPath: this.terasliceConfig.assets_directory
207
+ });
208
+ }
209
+ }
210
+ }
211
+ _setRelocatableLabel(resource, relocatable) {
212
+ const key = `${this.jobLabelPrefix}/relocatable`;
213
+ const value = String(relocatable);
214
+ resource.metadata.labels[key] = value;
215
+ resource.spec.template.metadata.labels[key] = value;
216
+ }
217
+ _setJobLabels(resource) {
218
+ if (this.execution.labels != null) {
219
+ Object.entries(this.execution.labels).forEach(([k, v]) => {
220
+ const key = `${this.jobLabelPrefix}/${k.replace(/[^a-zA-Z0-9\-._]/g, '-').substring(0, 63)}`;
221
+ const value = v.replace(/[^a-zA-Z0-9\-._]/g, '-').substring(0, 63);
222
+ resource.metadata.labels[key] = value;
223
+ resource.spec.template.metadata.labels[key] = value;
224
+ });
225
+ }
226
+ }
227
+ _setVolumes(resource) {
228
+ if (this.execution.volumes != null) {
229
+ this.execution.volumes.forEach((volume) => {
230
+ resource.spec.template.spec.volumes.push({
231
+ name: volume.name,
232
+ persistentVolumeClaim: { claimName: volume.name }
233
+ });
234
+ resource.spec.template.spec.containers[0].volumeMounts.push({
235
+ name: volume.name,
236
+ mountPath: volume.path
237
+ });
238
+ });
239
+ }
240
+ }
241
+ _setResources(resource) {
242
+ let cpu;
243
+ let memory;
244
+ let maxMemory;
245
+ const container = resource.spec.template.spec.containers[0];
246
+ // use teraslice config as defaults and execution config will override it
247
+ const envVars = Object.assign({}, this.terasliceConfig.env_vars, this.execution.env_vars);
248
+ if (this.nodeType === 'worker') {
249
+ if (this.execution.resources_requests_cpu
250
+ || this.execution.resources_limits_cpu) {
251
+ if (this.execution.resources_requests_cpu) {
252
+ set(container, 'resources.requests.cpu', this.execution.resources_requests_cpu);
253
+ }
254
+ if (this.execution.resources_limits_cpu) {
255
+ set(container, 'resources.limits.cpu', this.execution.resources_limits_cpu);
256
+ }
257
+ }
258
+ else if (this.execution.cpu || this.terasliceConfig.cpu) {
259
+ // The settings on the executions override the cluster configs
260
+ cpu = this.execution.cpu || this.terasliceConfig.cpu || -1;
261
+ set(container, 'resources.requests.cpu', cpu);
262
+ set(container, 'resources.limits.cpu', cpu);
263
+ }
264
+ if (this.execution.resources_requests_memory
265
+ || this.execution.resources_limits_memory) {
266
+ set(container, 'resources.requests.memory', this.execution.resources_requests_memory);
267
+ set(container, 'resources.limits.memory', this.execution.resources_limits_memory);
268
+ maxMemory = this.execution.resources_limits_memory;
269
+ }
270
+ else if (this.execution.memory || this.terasliceConfig.memory) {
271
+ // The settings on the executions override the cluster configs
272
+ memory = this.execution.memory || this.terasliceConfig.memory || -1;
273
+ set(container, 'resources.requests.memory', memory);
274
+ set(container, 'resources.limits.memory', memory);
275
+ maxMemory = memory;
276
+ }
277
+ }
278
+ if (this.nodeType === 'execution_controller') {
279
+ // The settings on the executions override the cluster configs
280
+ cpu = this.execution.cpu_execution_controller
281
+ || this.terasliceConfig.cpu_execution_controller || -1;
282
+ memory = this.execution.memory_execution_controller
283
+ || this.terasliceConfig.memory_execution_controller || -1;
284
+ set(container, 'resources.requests.cpu', cpu);
285
+ set(container, 'resources.limits.cpu', cpu);
286
+ set(container, 'resources.requests.memory', memory);
287
+ set(container, 'resources.limits.memory', memory);
288
+ maxMemory = memory;
289
+ }
290
+ // NOTE: This sucks, this manages the memory env var but it ALSO is
291
+ // responsible for doing the config and execution env var merge, which
292
+ // should NOT be in this function
293
+ if (container.env === undefined) {
294
+ throw new Error('Resource container V1EnvVar[] undefined while setting resources.');
295
+ }
296
+ setMaxOldSpaceViaEnv(container.env, envVars, maxMemory);
297
+ }
298
+ _setTargets(resource) {
299
+ if (this.execution.targets && !isEmpty(this.execution.targets)) {
300
+ this.execution.targets?.forEach((target) => {
301
+ // `required` is the default if no `constraint` is provided for
302
+ // backwards compatibility and as the most likely case
303
+ if (target.constraint === 'required' || !has(target, 'constraint')) {
304
+ this._setTargetRequired(target, resource);
305
+ }
306
+ if (target.constraint === 'preferred') {
307
+ this._setTargetPreferred(target, resource);
308
+ }
309
+ if (target.constraint === 'accepted') {
310
+ this._setTargetAccepted(target, resource);
311
+ }
312
+ });
313
+ }
314
+ }
315
+ _setTargetRequired(target, resource) {
316
+ const targetKey = 'spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution';
317
+ if (!has(this.resource, targetKey)) {
318
+ const nodeSelectorObj = {
319
+ nodeSelectorTerms: [{ matchExpressions: [] }]
320
+ };
321
+ set(this.resource, targetKey, nodeSelectorObj);
322
+ }
323
+ resource.spec.template.spec.affinity?.nodeAffinity
324
+ ?.requiredDuringSchedulingIgnoredDuringExecution
325
+ ?.nodeSelectorTerms[0].matchExpressions?.push({
326
+ key: target.key,
327
+ operator: 'In',
328
+ values: [target.value]
329
+ });
330
+ }
331
+ _setTargetPreferred(target, resource) {
332
+ const targetKey = 'spec.template.spec.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution';
333
+ if (!has(this.resource, targetKey)) {
334
+ set(this.resource, targetKey, []);
335
+ }
336
+ resource.spec.template.spec.affinity?.nodeAffinity
337
+ ?.preferredDuringSchedulingIgnoredDuringExecution?.push({
338
+ weight: 1,
339
+ preference: {
340
+ matchExpressions: [{
341
+ key: target.key,
342
+ operator: 'In',
343
+ values: [target.value]
344
+ }]
345
+ }
346
+ });
347
+ }
348
+ _setTargetAccepted(target, resource) {
349
+ const targetKey = 'spec.template.spec.tolerations';
350
+ if (!has(this.resource, targetKey)) {
351
+ set(this.resource, targetKey, []);
352
+ }
353
+ resource.spec.template.spec.tolerations?.push({
354
+ key: target.key,
355
+ operator: 'Equal',
356
+ value: target.value,
357
+ effect: 'NoSchedule'
358
+ });
359
+ }
360
+ /**
361
+ * _mergePodSpecOverlay - allows the author of the job to override anything
362
+ * in the pod .spec for both the execution controller and the worker pods
363
+ * created in Kubernetes. This can be useful in many ways including these:
364
+ *
365
+ * * add `initContainers` to the pods
366
+ * * add `hostAliases` to the pods
367
+ *
368
+ * Note that this happens at the end of the process, so anything added by
369
+ * this overlay will overwrite any other setting set on the job or by the
370
+ * config.
371
+ *
372
+ * Job setting: `pod_spec_override`
373
+ */
374
+ _mergePodSpecOverlay(resource) {
375
+ resource.spec.template.spec = merge(resource.spec.template.spec, this.execution.pod_spec_override);
376
+ }
377
+ }
378
+ //# sourceMappingURL=k8sResource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"k8sResource.js","sourceRoot":"","sources":["../../../../../../../../src/lib/cluster/services/cluster/backends/kubernetesV2/k8sResource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { Logger } from '@terascope/core-utils';
2
+ import type { Config, ExecutionConfig } from '@terascope/types';
3
+ import { K8sConfig, NodeType, TSService } from './interfaces.js';
4
+ import { K8sResource } from './k8sResource.js';
5
+ export declare class K8sServiceResource extends K8sResource<TSService> {
6
+ nodeType: NodeType;
7
+ nameInfix: string;
8
+ templateGenerator: (config: K8sConfig) => TSService;
9
+ templateConfig: K8sConfig;
10
+ resource: TSService;
11
+ exName: string;
12
+ exUid: string;
13
+ /**
14
+ * K8sServiceResource allows the generation of a k8s service based on a template.
15
+ * After creating the object, the k8s service is accessible on the objects
16
+ * .resource property.
17
+ *
18
+ * @param {Object} terasliceConfig - teraslice cluster config from context
19
+ * @param {Object} execution - teraslice execution
20
+ * @param {Logger} logger - teraslice logger
21
+ * @param {String} exName - name from execution resource
22
+ * @param {String} exUid - uid from execution resource
23
+ */
24
+ constructor(terasliceConfig: Config, execution: ExecutionConfig, logger: Logger, exName: string, exUid: string);
25
+ }
26
+ //# sourceMappingURL=k8sServiceResource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"k8sServiceResource.d.ts","sourceRoot":"","sources":["../../../../../../../../src/lib/cluster/services/cluster/backends/kubernetesV2/k8sServiceResource.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEhE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,kBAAmB,SAAQ,WAAW,CAAC,SAAS,CAAC;IAC1D,QAAQ,EAAE,QAAQ,CAA0B;IAC5C,SAAS,SAAS;IAClB,iBAAiB,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,SAAS,CAAC;IACpD,cAAc,YAAC;IACf,QAAQ,YAAC;IACT,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IAEd;;;;;;;;;;OAUG;gBAEC,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,eAAe,EAC1B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM;CAgBpB"}
@@ -0,0 +1,37 @@
1
+ import { V1Service } from '@kubernetes/client-node';
2
+ import { convertToTSResource, makeTemplate } from './utils.js';
3
+ import { K8sResource } from './k8sResource.js';
4
+ export class K8sServiceResource extends K8sResource {
5
+ nodeType = 'execution_controller';
6
+ nameInfix = 'exc';
7
+ templateGenerator;
8
+ templateConfig;
9
+ resource;
10
+ exName;
11
+ exUid;
12
+ /**
13
+ * K8sServiceResource allows the generation of a k8s service based on a template.
14
+ * After creating the object, the k8s service is accessible on the objects
15
+ * .resource property.
16
+ *
17
+ * @param {Object} terasliceConfig - teraslice cluster config from context
18
+ * @param {Object} execution - teraslice execution
19
+ * @param {Logger} logger - teraslice logger
20
+ * @param {String} exName - name from execution resource
21
+ * @param {String} exUid - uid from execution resource
22
+ */
23
+ constructor(terasliceConfig, execution, logger, exName, exUid) {
24
+ super(terasliceConfig, execution, logger);
25
+ this.execution = execution;
26
+ this.logger = logger;
27
+ this.terasliceConfig = terasliceConfig;
28
+ this.exName = exName;
29
+ this.exUid = exUid;
30
+ this.templateGenerator = makeTemplate('services', this.nodeType);
31
+ this.templateConfig = this._makeConfig(this.nameInfix, exName, exUid);
32
+ const k8sService = new V1Service();
33
+ Object.assign(k8sService, this.templateGenerator(this.templateConfig));
34
+ this.resource = convertToTSResource(k8sService);
35
+ }
36
+ }
37
+ //# sourceMappingURL=k8sServiceResource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"k8sServiceResource.js","sourceRoot":"","sources":["../../../../../../../../src/lib/cluster/services/cluster/backends/kubernetesV2/k8sServiceResource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGpD,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,OAAO,kBAAmB,SAAQ,WAAsB;IAC1D,QAAQ,GAAa,sBAAsB,CAAC;IAC5C,SAAS,GAAG,KAAK,CAAC;IAClB,iBAAiB,CAAmC;IACpD,cAAc,CAAC;IACf,QAAQ,CAAC;IACT,MAAM,CAAS;IACf,KAAK,CAAS;IAEd;;;;;;;;;;OAUG;IACH,YACI,eAAuB,EACvB,SAA0B,EAC1B,MAAc,EACd,MAAc,EACd,KAAa;QAGb,KAAK,CAAC,eAAe,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,iBAAiB,GAAG,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAEtE,MAAM,UAAU,GAAG,IAAI,SAAS,EAAE,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,QAAQ,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACpD,CAAC;CACJ"}
@@ -0,0 +1,13 @@
1
+ import { ClusterState } from '@terascope/types';
2
+ import { TSPodList } from './interfaces.js';
3
+ /**
4
+ * Given the k8s Pods API output generates the appropriate Teraslice cluster
5
+ * state. NOTE: This assumes the pods have already been filtered to ensure they
6
+ * are teraslice pods and match the cluster in question.
7
+ * @param {TSPodList} k8sPods k8s pods API object (k8s v1.10+)
8
+ * @param {Object} clusterState Teraslice Cluster State
9
+ * @param {String} clusterNameLabel k8s label containing clusterName
10
+ * @param {Logger} logger Teraslice logger
11
+ */
12
+ export declare function gen(k8sPods: TSPodList, clusterState: ClusterState): void;
13
+ //# sourceMappingURL=k8sState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"k8sState.d.ts","sourceRoot":"","sources":["../../../../../../../../src/lib/cluster/services/cluster/backends/kubernetesV2/k8sState.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAqB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;;;;;;GAQG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,QAqDjE"}
@@ -0,0 +1,60 @@
1
+ import { get, has, uniq, difference } from '@terascope/core-utils';
2
+ /**
3
+ * Given the k8s Pods API output generates the appropriate Teraslice cluster
4
+ * state. NOTE: This assumes the pods have already been filtered to ensure they
5
+ * are teraslice pods and match the cluster in question.
6
+ * @param {TSPodList} k8sPods k8s pods API object (k8s v1.10+)
7
+ * @param {Object} clusterState Teraslice Cluster State
8
+ * @param {String} clusterNameLabel k8s label containing clusterName
9
+ * @param {Logger} logger Teraslice logger
10
+ */
11
+ export function gen(k8sPods, clusterState) {
12
+ // Make sure we clean up the old
13
+ const hostIPs = uniq(k8sPods.items.map((item) => get(item, 'status.hostIP')));
14
+ const oldHostIps = difference(Object.keys(clusterState), hostIPs);
15
+ oldHostIps.forEach((ip) => {
16
+ delete clusterState[ip];
17
+ });
18
+ // Loop over the nodes in clusterState and set active = [] so we can append
19
+ // later
20
+ Object.keys(clusterState).forEach((nodeId) => {
21
+ clusterState[nodeId].active = [];
22
+ });
23
+ // add a worker for each pod
24
+ k8sPods.items.forEach((pod) => {
25
+ if (!has(clusterState, pod.status.hostIP)) {
26
+ // If the node isn't in clusterState, add it
27
+ clusterState[pod.status.hostIP] = {
28
+ node_id: pod.status.hostIP,
29
+ hostname: pod.status.hostIP,
30
+ pid: 'N/A',
31
+ node_version: 'N/A',
32
+ teraslice_version: 'N/A',
33
+ total: 'N/A',
34
+ state: 'connected',
35
+ available: 'N/A',
36
+ active: []
37
+ };
38
+ }
39
+ const worker = {
40
+ assets: [],
41
+ assignment: pod.metadata.labels['app.kubernetes.io/component'],
42
+ ex_id: pod.metadata.labels['teraslice.terascope.io/exId'],
43
+ // WARNING: This makes the assumption that the first container
44
+ // in the pod is the teraslice container. Currently it is the
45
+ // only container, so this assumption is safe for now.
46
+ image: pod.spec.containers[0].image,
47
+ job_id: pod.metadata.labels['teraslice.terascope.io/jobId'],
48
+ pod_name: pod.metadata.name,
49
+ pod_ip: pod.status.podIP,
50
+ worker_id: pod.metadata.name,
51
+ };
52
+ // k8s pods can have status.phase = `Pending`, `Running`, `Succeeded`,
53
+ // `Failed`, `Unknown`. We will only add `Running` pods to the
54
+ // Teraslice cluster state.
55
+ if (pod.status.phase === 'Running') {
56
+ clusterState[pod.status.hostIP].active.push(worker);
57
+ }
58
+ });
59
+ }
60
+ //# sourceMappingURL=k8sState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"k8sState.js","sourceRoot":"","sources":["../../../../../../../../src/lib/cluster/services/cluster/backends/kubernetesV2/k8sState.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAC7B,MAAM,uBAAuB,CAAC;AAI/B;;;;;;;;GAQG;AACH,MAAM,UAAU,GAAG,CAAC,OAAkB,EAAE,YAA0B;IAC9D,gCAAgC;IAChC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IAC9E,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;IAElE,UAAU,CAAC,OAAO,CAAC,CAAC,EAAU,EAAE,EAAE;QAC9B,OAAO,YAAY,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,2EAA2E;IAC3E,QAAQ;IACR,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACzC,YAAY,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,4BAA4B;IAC5B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAC1B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACxC,4CAA4C;YAC5C,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG;gBAC9B,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM;gBAC1B,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM;gBAC3B,GAAG,EAAE,KAAK;gBACV,YAAY,EAAE,KAAK;gBACnB,iBAAiB,EAAE,KAAK;gBACxB,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,WAAW;gBAClB,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,EAAE;aACb,CAAC;QACN,CAAC;QAED,MAAM,MAAM,GAAG;YACX,MAAM,EAAE,EAAE;YACV,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,6BAA6B,CAAsB;YACnF,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,6BAA6B,CAAC;YACzD,8DAA8D;YAC9D,8DAA8D;YAC9D,sDAAsD;YACtD,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK;YACnC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,8BAA8B,CAAC;YAC3D,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI;YAC3B,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK;YACxB,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI;SAC/B,CAAC;QAEF,sEAAsE;QACtE,+DAA+D;QAC/D,2BAA2B;QAC3B,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACjC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxD,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}