@reyemtech/nimbus 0.1.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 (363) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +399 -0
  3. package/dist/cjs/aws/cluster.d.ts +32 -0
  4. package/dist/cjs/aws/cluster.d.ts.map +1 -0
  5. package/dist/cjs/aws/cluster.js +214 -0
  6. package/dist/cjs/aws/cluster.js.map +1 -0
  7. package/dist/cjs/aws/dns.d.ts +22 -0
  8. package/dist/cjs/aws/dns.d.ts.map +1 -0
  9. package/dist/cjs/aws/dns.js +95 -0
  10. package/dist/cjs/aws/dns.js.map +1 -0
  11. package/dist/cjs/aws/index.d.ts +10 -0
  12. package/dist/cjs/aws/index.d.ts.map +1 -0
  13. package/dist/cjs/aws/index.js +17 -0
  14. package/dist/cjs/aws/index.js.map +1 -0
  15. package/dist/cjs/aws/network.d.ts +27 -0
  16. package/dist/cjs/aws/network.d.ts.map +1 -0
  17. package/dist/cjs/aws/network.js +262 -0
  18. package/dist/cjs/aws/network.js.map +1 -0
  19. package/dist/cjs/aws/secrets.d.ts +26 -0
  20. package/dist/cjs/aws/secrets.d.ts.map +1 -0
  21. package/dist/cjs/aws/secrets.js +127 -0
  22. package/dist/cjs/aws/secrets.js.map +1 -0
  23. package/dist/cjs/azure/cluster.d.ts +44 -0
  24. package/dist/cjs/azure/cluster.d.ts.map +1 -0
  25. package/dist/cjs/azure/cluster.js +143 -0
  26. package/dist/cjs/azure/cluster.js.map +1 -0
  27. package/dist/cjs/azure/dns.d.ts +28 -0
  28. package/dist/cjs/azure/dns.d.ts.map +1 -0
  29. package/dist/cjs/azure/dns.js +169 -0
  30. package/dist/cjs/azure/dns.js.map +1 -0
  31. package/dist/cjs/azure/index.d.ts +10 -0
  32. package/dist/cjs/azure/index.d.ts.map +1 -0
  33. package/dist/cjs/azure/index.js +17 -0
  34. package/dist/cjs/azure/index.js.map +1 -0
  35. package/dist/cjs/azure/network.d.ts +28 -0
  36. package/dist/cjs/azure/network.d.ts.map +1 -0
  37. package/dist/cjs/azure/network.js +176 -0
  38. package/dist/cjs/azure/network.js.map +1 -0
  39. package/dist/cjs/azure/secrets.d.ts +37 -0
  40. package/dist/cjs/azure/secrets.d.ts.map +1 -0
  41. package/dist/cjs/azure/secrets.js +150 -0
  42. package/dist/cjs/azure/secrets.js.map +1 -0
  43. package/dist/cjs/cache/index.d.ts +7 -0
  44. package/dist/cjs/cache/index.d.ts.map +1 -0
  45. package/dist/cjs/cache/index.js +8 -0
  46. package/dist/cjs/cache/index.js.map +1 -0
  47. package/dist/cjs/cache/interfaces.d.ts +60 -0
  48. package/dist/cjs/cache/interfaces.d.ts.map +1 -0
  49. package/dist/cjs/cache/interfaces.js +11 -0
  50. package/dist/cjs/cache/interfaces.js.map +1 -0
  51. package/dist/cjs/cluster/index.d.ts +7 -0
  52. package/dist/cjs/cluster/index.d.ts.map +1 -0
  53. package/dist/cjs/cluster/index.js +8 -0
  54. package/dist/cjs/cluster/index.js.map +1 -0
  55. package/dist/cjs/cluster/interfaces.d.ts +120 -0
  56. package/dist/cjs/cluster/interfaces.d.ts.map +1 -0
  57. package/dist/cjs/cluster/interfaces.js +12 -0
  58. package/dist/cjs/cluster/interfaces.js.map +1 -0
  59. package/dist/cjs/database/index.d.ts +7 -0
  60. package/dist/cjs/database/index.d.ts.map +1 -0
  61. package/dist/cjs/database/index.js +8 -0
  62. package/dist/cjs/database/index.js.map +1 -0
  63. package/dist/cjs/database/interfaces.d.ts +93 -0
  64. package/dist/cjs/database/interfaces.d.ts.map +1 -0
  65. package/dist/cjs/database/interfaces.js +12 -0
  66. package/dist/cjs/database/interfaces.js.map +1 -0
  67. package/dist/cjs/dns/index.d.ts +7 -0
  68. package/dist/cjs/dns/index.d.ts.map +1 -0
  69. package/dist/cjs/dns/index.js +8 -0
  70. package/dist/cjs/dns/index.js.map +1 -0
  71. package/dist/cjs/dns/interfaces.d.ts +55 -0
  72. package/dist/cjs/dns/interfaces.d.ts.map +1 -0
  73. package/dist/cjs/dns/interfaces.js +11 -0
  74. package/dist/cjs/dns/interfaces.js.map +1 -0
  75. package/dist/cjs/factories/cluster.d.ts +45 -0
  76. package/dist/cjs/factories/cluster.d.ts.map +1 -0
  77. package/dist/cjs/factories/cluster.js +90 -0
  78. package/dist/cjs/factories/cluster.js.map +1 -0
  79. package/dist/cjs/factories/dns.d.ts +30 -0
  80. package/dist/cjs/factories/dns.d.ts.map +1 -0
  81. package/dist/cjs/factories/dns.js +56 -0
  82. package/dist/cjs/factories/dns.js.map +1 -0
  83. package/dist/cjs/factories/index.d.ts +15 -0
  84. package/dist/cjs/factories/index.d.ts.map +1 -0
  85. package/dist/cjs/factories/index.js +23 -0
  86. package/dist/cjs/factories/index.js.map +1 -0
  87. package/dist/cjs/factories/network.d.ts +40 -0
  88. package/dist/cjs/factories/network.d.ts.map +1 -0
  89. package/dist/cjs/factories/network.js +85 -0
  90. package/dist/cjs/factories/network.js.map +1 -0
  91. package/dist/cjs/factories/secrets.d.ts +38 -0
  92. package/dist/cjs/factories/secrets.d.ts.map +1 -0
  93. package/dist/cjs/factories/secrets.js +67 -0
  94. package/dist/cjs/factories/secrets.js.map +1 -0
  95. package/dist/cjs/factories/types.d.ts +75 -0
  96. package/dist/cjs/factories/types.d.ts.map +1 -0
  97. package/dist/cjs/factories/types.js +28 -0
  98. package/dist/cjs/factories/types.js.map +1 -0
  99. package/dist/cjs/global-lb/glb.d.ts +29 -0
  100. package/dist/cjs/global-lb/glb.d.ts.map +1 -0
  101. package/dist/cjs/global-lb/glb.js +220 -0
  102. package/dist/cjs/global-lb/glb.js.map +1 -0
  103. package/dist/cjs/global-lb/index.d.ts +8 -0
  104. package/dist/cjs/global-lb/index.d.ts.map +1 -0
  105. package/dist/cjs/global-lb/index.js +11 -0
  106. package/dist/cjs/global-lb/index.js.map +1 -0
  107. package/dist/cjs/global-lb/interfaces.d.ts +62 -0
  108. package/dist/cjs/global-lb/interfaces.d.ts.map +1 -0
  109. package/dist/cjs/global-lb/interfaces.js +11 -0
  110. package/dist/cjs/global-lb/interfaces.js.map +1 -0
  111. package/dist/cjs/index.d.ts +28 -0
  112. package/dist/cjs/index.d.ts.map +1 -0
  113. package/dist/cjs/index.js +72 -0
  114. package/dist/cjs/index.js.map +1 -0
  115. package/dist/cjs/network/cidr.d.ts +92 -0
  116. package/dist/cjs/network/cidr.d.ts.map +1 -0
  117. package/dist/cjs/network/cidr.js +189 -0
  118. package/dist/cjs/network/cidr.js.map +1 -0
  119. package/dist/cjs/network/index.d.ts +8 -0
  120. package/dist/cjs/network/index.d.ts.map +1 -0
  121. package/dist/cjs/network/index.js +17 -0
  122. package/dist/cjs/network/index.js.map +1 -0
  123. package/dist/cjs/network/interfaces.d.ts +60 -0
  124. package/dist/cjs/network/interfaces.d.ts.map +1 -0
  125. package/dist/cjs/network/interfaces.js +12 -0
  126. package/dist/cjs/network/interfaces.js.map +1 -0
  127. package/dist/cjs/platform/index.d.ts +8 -0
  128. package/dist/cjs/platform/index.d.ts.map +1 -0
  129. package/dist/cjs/platform/index.js +11 -0
  130. package/dist/cjs/platform/index.js.map +1 -0
  131. package/dist/cjs/platform/interfaces.d.ts +86 -0
  132. package/dist/cjs/platform/interfaces.d.ts.map +1 -0
  133. package/dist/cjs/platform/interfaces.js +12 -0
  134. package/dist/cjs/platform/interfaces.js.map +1 -0
  135. package/dist/cjs/platform/stack.d.ts +32 -0
  136. package/dist/cjs/platform/stack.d.ts.map +1 -0
  137. package/dist/cjs/platform/stack.js +258 -0
  138. package/dist/cjs/platform/stack.js.map +1 -0
  139. package/dist/cjs/queue/index.d.ts +7 -0
  140. package/dist/cjs/queue/index.d.ts.map +1 -0
  141. package/dist/cjs/queue/index.js +8 -0
  142. package/dist/cjs/queue/index.js.map +1 -0
  143. package/dist/cjs/queue/interfaces.d.ts +46 -0
  144. package/dist/cjs/queue/interfaces.d.ts.map +1 -0
  145. package/dist/cjs/queue/interfaces.js +11 -0
  146. package/dist/cjs/queue/interfaces.js.map +1 -0
  147. package/dist/cjs/secrets/index.d.ts +7 -0
  148. package/dist/cjs/secrets/index.d.ts.map +1 -0
  149. package/dist/cjs/secrets/index.js +8 -0
  150. package/dist/cjs/secrets/index.js.map +1 -0
  151. package/dist/cjs/secrets/interfaces.d.ts +73 -0
  152. package/dist/cjs/secrets/interfaces.d.ts.map +1 -0
  153. package/dist/cjs/secrets/interfaces.js +11 -0
  154. package/dist/cjs/secrets/interfaces.js.map +1 -0
  155. package/dist/cjs/storage/index.d.ts +7 -0
  156. package/dist/cjs/storage/index.d.ts.map +1 -0
  157. package/dist/cjs/storage/index.js +8 -0
  158. package/dist/cjs/storage/index.js.map +1 -0
  159. package/dist/cjs/storage/interfaces.d.ts +63 -0
  160. package/dist/cjs/storage/interfaces.d.ts.map +1 -0
  161. package/dist/cjs/storage/interfaces.js +11 -0
  162. package/dist/cjs/storage/interfaces.js.map +1 -0
  163. package/dist/cjs/types/cloud-target.d.ts +89 -0
  164. package/dist/cjs/types/cloud-target.d.ts.map +1 -0
  165. package/dist/cjs/types/cloud-target.js +73 -0
  166. package/dist/cjs/types/cloud-target.js.map +1 -0
  167. package/dist/cjs/types/errors.d.ts +96 -0
  168. package/dist/cjs/types/errors.d.ts.map +1 -0
  169. package/dist/cjs/types/errors.js +127 -0
  170. package/dist/cjs/types/errors.js.map +1 -0
  171. package/dist/cjs/types/index.d.ts +10 -0
  172. package/dist/cjs/types/index.d.ts.map +1 -0
  173. package/dist/cjs/types/index.js +33 -0
  174. package/dist/cjs/types/index.js.map +1 -0
  175. package/dist/cjs/types/tags.d.ts +53 -0
  176. package/dist/cjs/types/tags.d.ts.map +1 -0
  177. package/dist/cjs/types/tags.js +110 -0
  178. package/dist/cjs/types/tags.js.map +1 -0
  179. package/dist/cjs/types/validation.d.ts +63 -0
  180. package/dist/cjs/types/validation.d.ts.map +1 -0
  181. package/dist/cjs/types/validation.js +158 -0
  182. package/dist/cjs/types/validation.js.map +1 -0
  183. package/dist/esm/aws/cluster.d.ts +32 -0
  184. package/dist/esm/aws/cluster.d.ts.map +1 -0
  185. package/dist/esm/aws/cluster.js +214 -0
  186. package/dist/esm/aws/cluster.js.map +1 -0
  187. package/dist/esm/aws/dns.d.ts +22 -0
  188. package/dist/esm/aws/dns.d.ts.map +1 -0
  189. package/dist/esm/aws/dns.js +95 -0
  190. package/dist/esm/aws/dns.js.map +1 -0
  191. package/dist/esm/aws/index.d.ts +10 -0
  192. package/dist/esm/aws/index.d.ts.map +1 -0
  193. package/dist/esm/aws/index.js +17 -0
  194. package/dist/esm/aws/index.js.map +1 -0
  195. package/dist/esm/aws/network.d.ts +27 -0
  196. package/dist/esm/aws/network.d.ts.map +1 -0
  197. package/dist/esm/aws/network.js +262 -0
  198. package/dist/esm/aws/network.js.map +1 -0
  199. package/dist/esm/aws/secrets.d.ts +26 -0
  200. package/dist/esm/aws/secrets.d.ts.map +1 -0
  201. package/dist/esm/aws/secrets.js +127 -0
  202. package/dist/esm/aws/secrets.js.map +1 -0
  203. package/dist/esm/azure/cluster.d.ts +44 -0
  204. package/dist/esm/azure/cluster.d.ts.map +1 -0
  205. package/dist/esm/azure/cluster.js +143 -0
  206. package/dist/esm/azure/cluster.js.map +1 -0
  207. package/dist/esm/azure/dns.d.ts +28 -0
  208. package/dist/esm/azure/dns.d.ts.map +1 -0
  209. package/dist/esm/azure/dns.js +169 -0
  210. package/dist/esm/azure/dns.js.map +1 -0
  211. package/dist/esm/azure/index.d.ts +10 -0
  212. package/dist/esm/azure/index.d.ts.map +1 -0
  213. package/dist/esm/azure/index.js +17 -0
  214. package/dist/esm/azure/index.js.map +1 -0
  215. package/dist/esm/azure/network.d.ts +28 -0
  216. package/dist/esm/azure/network.d.ts.map +1 -0
  217. package/dist/esm/azure/network.js +176 -0
  218. package/dist/esm/azure/network.js.map +1 -0
  219. package/dist/esm/azure/secrets.d.ts +37 -0
  220. package/dist/esm/azure/secrets.d.ts.map +1 -0
  221. package/dist/esm/azure/secrets.js +150 -0
  222. package/dist/esm/azure/secrets.js.map +1 -0
  223. package/dist/esm/cache/index.d.ts +7 -0
  224. package/dist/esm/cache/index.d.ts.map +1 -0
  225. package/dist/esm/cache/index.js +8 -0
  226. package/dist/esm/cache/index.js.map +1 -0
  227. package/dist/esm/cache/interfaces.d.ts +60 -0
  228. package/dist/esm/cache/interfaces.d.ts.map +1 -0
  229. package/dist/esm/cache/interfaces.js +11 -0
  230. package/dist/esm/cache/interfaces.js.map +1 -0
  231. package/dist/esm/cluster/index.d.ts +7 -0
  232. package/dist/esm/cluster/index.d.ts.map +1 -0
  233. package/dist/esm/cluster/index.js +8 -0
  234. package/dist/esm/cluster/index.js.map +1 -0
  235. package/dist/esm/cluster/interfaces.d.ts +120 -0
  236. package/dist/esm/cluster/interfaces.d.ts.map +1 -0
  237. package/dist/esm/cluster/interfaces.js +12 -0
  238. package/dist/esm/cluster/interfaces.js.map +1 -0
  239. package/dist/esm/database/index.d.ts +7 -0
  240. package/dist/esm/database/index.d.ts.map +1 -0
  241. package/dist/esm/database/index.js +8 -0
  242. package/dist/esm/database/index.js.map +1 -0
  243. package/dist/esm/database/interfaces.d.ts +93 -0
  244. package/dist/esm/database/interfaces.d.ts.map +1 -0
  245. package/dist/esm/database/interfaces.js +12 -0
  246. package/dist/esm/database/interfaces.js.map +1 -0
  247. package/dist/esm/dns/index.d.ts +7 -0
  248. package/dist/esm/dns/index.d.ts.map +1 -0
  249. package/dist/esm/dns/index.js +8 -0
  250. package/dist/esm/dns/index.js.map +1 -0
  251. package/dist/esm/dns/interfaces.d.ts +55 -0
  252. package/dist/esm/dns/interfaces.d.ts.map +1 -0
  253. package/dist/esm/dns/interfaces.js +11 -0
  254. package/dist/esm/dns/interfaces.js.map +1 -0
  255. package/dist/esm/factories/cluster.d.ts +45 -0
  256. package/dist/esm/factories/cluster.d.ts.map +1 -0
  257. package/dist/esm/factories/cluster.js +90 -0
  258. package/dist/esm/factories/cluster.js.map +1 -0
  259. package/dist/esm/factories/dns.d.ts +30 -0
  260. package/dist/esm/factories/dns.d.ts.map +1 -0
  261. package/dist/esm/factories/dns.js +56 -0
  262. package/dist/esm/factories/dns.js.map +1 -0
  263. package/dist/esm/factories/index.d.ts +15 -0
  264. package/dist/esm/factories/index.d.ts.map +1 -0
  265. package/dist/esm/factories/index.js +23 -0
  266. package/dist/esm/factories/index.js.map +1 -0
  267. package/dist/esm/factories/network.d.ts +40 -0
  268. package/dist/esm/factories/network.d.ts.map +1 -0
  269. package/dist/esm/factories/network.js +85 -0
  270. package/dist/esm/factories/network.js.map +1 -0
  271. package/dist/esm/factories/secrets.d.ts +38 -0
  272. package/dist/esm/factories/secrets.d.ts.map +1 -0
  273. package/dist/esm/factories/secrets.js +67 -0
  274. package/dist/esm/factories/secrets.js.map +1 -0
  275. package/dist/esm/factories/types.d.ts +75 -0
  276. package/dist/esm/factories/types.d.ts.map +1 -0
  277. package/dist/esm/factories/types.js +28 -0
  278. package/dist/esm/factories/types.js.map +1 -0
  279. package/dist/esm/global-lb/glb.d.ts +29 -0
  280. package/dist/esm/global-lb/glb.d.ts.map +1 -0
  281. package/dist/esm/global-lb/glb.js +220 -0
  282. package/dist/esm/global-lb/glb.js.map +1 -0
  283. package/dist/esm/global-lb/index.d.ts +8 -0
  284. package/dist/esm/global-lb/index.d.ts.map +1 -0
  285. package/dist/esm/global-lb/index.js +11 -0
  286. package/dist/esm/global-lb/index.js.map +1 -0
  287. package/dist/esm/global-lb/interfaces.d.ts +62 -0
  288. package/dist/esm/global-lb/interfaces.d.ts.map +1 -0
  289. package/dist/esm/global-lb/interfaces.js +11 -0
  290. package/dist/esm/global-lb/interfaces.js.map +1 -0
  291. package/dist/esm/index.d.ts +28 -0
  292. package/dist/esm/index.d.ts.map +1 -0
  293. package/dist/esm/index.js +72 -0
  294. package/dist/esm/index.js.map +1 -0
  295. package/dist/esm/network/cidr.d.ts +92 -0
  296. package/dist/esm/network/cidr.d.ts.map +1 -0
  297. package/dist/esm/network/cidr.js +189 -0
  298. package/dist/esm/network/cidr.js.map +1 -0
  299. package/dist/esm/network/index.d.ts +8 -0
  300. package/dist/esm/network/index.d.ts.map +1 -0
  301. package/dist/esm/network/index.js +17 -0
  302. package/dist/esm/network/index.js.map +1 -0
  303. package/dist/esm/network/interfaces.d.ts +60 -0
  304. package/dist/esm/network/interfaces.d.ts.map +1 -0
  305. package/dist/esm/network/interfaces.js +12 -0
  306. package/dist/esm/network/interfaces.js.map +1 -0
  307. package/dist/esm/platform/index.d.ts +8 -0
  308. package/dist/esm/platform/index.d.ts.map +1 -0
  309. package/dist/esm/platform/index.js +11 -0
  310. package/dist/esm/platform/index.js.map +1 -0
  311. package/dist/esm/platform/interfaces.d.ts +86 -0
  312. package/dist/esm/platform/interfaces.d.ts.map +1 -0
  313. package/dist/esm/platform/interfaces.js +12 -0
  314. package/dist/esm/platform/interfaces.js.map +1 -0
  315. package/dist/esm/platform/stack.d.ts +32 -0
  316. package/dist/esm/platform/stack.d.ts.map +1 -0
  317. package/dist/esm/platform/stack.js +258 -0
  318. package/dist/esm/platform/stack.js.map +1 -0
  319. package/dist/esm/queue/index.d.ts +7 -0
  320. package/dist/esm/queue/index.d.ts.map +1 -0
  321. package/dist/esm/queue/index.js +8 -0
  322. package/dist/esm/queue/index.js.map +1 -0
  323. package/dist/esm/queue/interfaces.d.ts +46 -0
  324. package/dist/esm/queue/interfaces.d.ts.map +1 -0
  325. package/dist/esm/queue/interfaces.js +11 -0
  326. package/dist/esm/queue/interfaces.js.map +1 -0
  327. package/dist/esm/secrets/index.d.ts +7 -0
  328. package/dist/esm/secrets/index.d.ts.map +1 -0
  329. package/dist/esm/secrets/index.js +8 -0
  330. package/dist/esm/secrets/index.js.map +1 -0
  331. package/dist/esm/secrets/interfaces.d.ts +73 -0
  332. package/dist/esm/secrets/interfaces.d.ts.map +1 -0
  333. package/dist/esm/secrets/interfaces.js +11 -0
  334. package/dist/esm/secrets/interfaces.js.map +1 -0
  335. package/dist/esm/storage/index.d.ts +7 -0
  336. package/dist/esm/storage/index.d.ts.map +1 -0
  337. package/dist/esm/storage/index.js +8 -0
  338. package/dist/esm/storage/index.js.map +1 -0
  339. package/dist/esm/storage/interfaces.d.ts +63 -0
  340. package/dist/esm/storage/interfaces.d.ts.map +1 -0
  341. package/dist/esm/storage/interfaces.js +11 -0
  342. package/dist/esm/storage/interfaces.js.map +1 -0
  343. package/dist/esm/types/cloud-target.d.ts +89 -0
  344. package/dist/esm/types/cloud-target.d.ts.map +1 -0
  345. package/dist/esm/types/cloud-target.js +73 -0
  346. package/dist/esm/types/cloud-target.js.map +1 -0
  347. package/dist/esm/types/errors.d.ts +96 -0
  348. package/dist/esm/types/errors.d.ts.map +1 -0
  349. package/dist/esm/types/errors.js +127 -0
  350. package/dist/esm/types/errors.js.map +1 -0
  351. package/dist/esm/types/index.d.ts +10 -0
  352. package/dist/esm/types/index.d.ts.map +1 -0
  353. package/dist/esm/types/index.js +33 -0
  354. package/dist/esm/types/index.js.map +1 -0
  355. package/dist/esm/types/tags.d.ts +53 -0
  356. package/dist/esm/types/tags.d.ts.map +1 -0
  357. package/dist/esm/types/tags.js +110 -0
  358. package/dist/esm/types/tags.js.map +1 -0
  359. package/dist/esm/types/validation.d.ts +63 -0
  360. package/dist/esm/types/validation.d.ts.map +1 -0
  361. package/dist/esm/types/validation.js +158 -0
  362. package/dist/esm/types/validation.js.map +1 -0
  363. package/package.json +88 -0
@@ -0,0 +1,27 @@
1
+ /**
2
+ * AWS network implementation — VPC, subnets, NAT (managed or fck-nat).
3
+ *
4
+ * @module aws/network
5
+ */
6
+ import type { INetwork, INetworkConfig } from "../network";
7
+ /** AWS-specific network options beyond the base config. */
8
+ export interface IAwsNetworkOptions {
9
+ /** fck-nat instance type. Default: "t4g.nano". */
10
+ readonly fckNatInstanceType?: string;
11
+ /** Number of AZs to use. Default: 2. */
12
+ readonly availabilityZoneCount?: number;
13
+ }
14
+ /**
15
+ * Create an AWS VPC with public/private subnets and optional NAT.
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const network = createAwsNetwork("prod", {
20
+ * cloud: "aws",
21
+ * cidr: "10.0.0.0/16",
22
+ * natStrategy: "fck-nat",
23
+ * });
24
+ * ```
25
+ */
26
+ export declare function createAwsNetwork(name: string, config: INetworkConfig, options?: IAwsNetworkOptions): INetwork;
27
+ //# sourceMappingURL=network.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../../src/aws/network.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAe,MAAM,YAAY,CAAC;AAGxE,2DAA2D;AAC3D,MAAM,WAAW,kBAAkB;IACjC,kDAAkD;IAClD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,wCAAwC;IACxC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;CACzC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,QAAQ,CAmHV"}
@@ -0,0 +1,262 @@
1
+ "use strict";
2
+ /**
3
+ * AWS network implementation — VPC, subnets, NAT (managed or fck-nat).
4
+ *
5
+ * @module aws/network
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.createAwsNetwork = createAwsNetwork;
42
+ const aws = __importStar(require("@pulumi/aws"));
43
+ const pulumi = __importStar(require("@pulumi/pulumi"));
44
+ const types_1 = require("../types");
45
+ /**
46
+ * Create an AWS VPC with public/private subnets and optional NAT.
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * const network = createAwsNetwork("prod", {
51
+ * cloud: "aws",
52
+ * cidr: "10.0.0.0/16",
53
+ * natStrategy: "fck-nat",
54
+ * });
55
+ * ```
56
+ */
57
+ function createAwsNetwork(name, config, options) {
58
+ const cloud = Array.isArray(config.cloud) ? (config.cloud[0] ?? "aws") : config.cloud;
59
+ const target = (0, types_1.resolveCloudTarget)(cloud);
60
+ const cidr = config.cidr ?? "10.0.0.0/16";
61
+ const azCount = options?.availabilityZoneCount ?? 2;
62
+ const natStrategy = config.natStrategy ?? "managed";
63
+ const tags = config.tags ?? {};
64
+ const vpc = new aws.ec2.Vpc(`${name}-vpc`, {
65
+ cidrBlock: cidr,
66
+ enableDnsHostnames: config.enableDnsHostnames ?? true,
67
+ enableDnsSupport: config.enableDnsSupport ?? true,
68
+ tags: { ...tags, Name: `${name}-vpc` },
69
+ });
70
+ const igw = new aws.ec2.InternetGateway(`${name}-igw`, {
71
+ vpcId: vpc.id,
72
+ tags: { ...tags, Name: `${name}-igw` },
73
+ });
74
+ const azs = aws.getAvailabilityZonesOutput({ state: "available" });
75
+ const azNames = azs.names.apply((names) => names.slice(0, azCount));
76
+ // Public subnets
77
+ const publicSubnets = azNames.apply((names) => names.map((az, i) => new aws.ec2.Subnet(`${name}-public-${i}`, {
78
+ vpcId: vpc.id,
79
+ cidrBlock: `${cidr.split(".").slice(0, 2).join(".")}.${i + 1}.0/24`,
80
+ availabilityZone: az,
81
+ mapPublicIpOnLaunch: true,
82
+ tags: {
83
+ ...tags,
84
+ Name: `${name}-public-${az}`,
85
+ "kubernetes.io/role/elb": "1",
86
+ },
87
+ })));
88
+ // Private subnets
89
+ const privateSubnets = azNames.apply((names) => names.map((az, i) => new aws.ec2.Subnet(`${name}-private-${i}`, {
90
+ vpcId: vpc.id,
91
+ cidrBlock: `${cidr.split(".").slice(0, 2).join(".")}.${i + 10}.0/24`,
92
+ availabilityZone: az,
93
+ tags: {
94
+ ...tags,
95
+ Name: `${name}-private-${az}`,
96
+ "kubernetes.io/role/internal-elb": "1",
97
+ },
98
+ })));
99
+ // Public route table
100
+ const publicRt = new aws.ec2.RouteTable(`${name}-public-rt`, {
101
+ vpcId: vpc.id,
102
+ routes: [{ cidrBlock: "0.0.0.0/0", gatewayId: igw.id }],
103
+ tags: { ...tags, Name: `${name}-public-rt` },
104
+ });
105
+ publicSubnets.apply((subnets) => subnets.map((subnet, i) => new aws.ec2.RouteTableAssociation(`${name}-public-rta-${i}`, {
106
+ subnetId: subnet.id,
107
+ routeTableId: publicRt.id,
108
+ })));
109
+ // NAT setup
110
+ let natGatewayId;
111
+ if (natStrategy === "fck-nat") {
112
+ natGatewayId = createFckNat(name, vpc, publicSubnets, privateSubnets, cidr, tags, options);
113
+ }
114
+ else if (natStrategy === "managed") {
115
+ natGatewayId = createManagedNat(name, vpc, igw, publicSubnets, privateSubnets, tags);
116
+ }
117
+ else {
118
+ // natStrategy === "none" — no NAT, private subnets have no internet
119
+ const privateRt = new aws.ec2.RouteTable(`${name}-private-rt`, {
120
+ vpcId: vpc.id,
121
+ tags: { ...tags, Name: `${name}-private-rt` },
122
+ });
123
+ privateSubnets.apply((subnets) => subnets.map((subnet, i) => new aws.ec2.RouteTableAssociation(`${name}-private-rta-${i}`, {
124
+ subnetId: subnet.id,
125
+ routeTableId: privateRt.id,
126
+ })));
127
+ }
128
+ return {
129
+ name,
130
+ cloud: target,
131
+ vpcId: vpc.id,
132
+ cidr,
133
+ publicSubnetIds: publicSubnets.apply((s) => pulumi.all(s.map((sub) => sub.id))),
134
+ privateSubnetIds: privateSubnets.apply((s) => pulumi.all(s.map((sub) => sub.id))),
135
+ natGatewayId,
136
+ nativeResource: vpc,
137
+ };
138
+ }
139
+ function createFckNat(name, vpc, publicSubnets, privateSubnets, cidr, tags, options) {
140
+ const instanceType = options?.fckNatInstanceType ?? "t4g.nano";
141
+ const fckNatAmi = aws.ec2.getAmiOutput({
142
+ mostRecent: true,
143
+ owners: ["568608671756"],
144
+ filters: [
145
+ { name: "name", values: ["fck-nat-al2023-*-arm64-ebs"] },
146
+ { name: "architecture", values: ["arm64"] },
147
+ ],
148
+ });
149
+ const sg = new aws.ec2.SecurityGroup(`${name}-fck-nat-sg`, {
150
+ namePrefix: `${name}-fck-nat`,
151
+ vpcId: vpc.id,
152
+ description: "fck-nat instance security group",
153
+ ingress: [{ fromPort: 0, toPort: 0, protocol: "-1", cidrBlocks: [cidr] }],
154
+ egress: [{ fromPort: 0, toPort: 0, protocol: "-1", cidrBlocks: ["0.0.0.0/0"] }],
155
+ tags: { ...tags, Name: `${name}-fck-nat-sg` },
156
+ });
157
+ const eni = new aws.ec2.NetworkInterface(`${name}-fck-nat-eni`, {
158
+ subnetId: publicSubnets.apply((s) => s[0].id),
159
+ securityGroups: [sg.id],
160
+ sourceDestCheck: false,
161
+ tags: { ...tags, Name: `${name}-fck-nat-eni` },
162
+ });
163
+ new aws.ec2.Eip(`${name}-fck-nat-eip`, {
164
+ domain: "vpc",
165
+ networkInterface: eni.id,
166
+ tags: { ...tags, Name: `${name}-fck-nat-eip` },
167
+ });
168
+ const role = new aws.iam.Role(`${name}-fck-nat-role`, {
169
+ namePrefix: `${name}-fck-nat`,
170
+ assumeRolePolicy: JSON.stringify({
171
+ Version: "2012-10-17",
172
+ Statement: [
173
+ {
174
+ Action: "sts:AssumeRole",
175
+ Effect: "Allow",
176
+ Principal: { Service: "ec2.amazonaws.com" },
177
+ },
178
+ ],
179
+ }),
180
+ inlinePolicies: [
181
+ {
182
+ name: "fck-nat-eni",
183
+ policy: JSON.stringify({
184
+ Version: "2012-10-17",
185
+ Statement: [
186
+ {
187
+ Effect: "Allow",
188
+ Action: [
189
+ "ec2:AttachNetworkInterface",
190
+ "ec2:ModifyNetworkInterfaceAttribute",
191
+ "ec2:AssociateAddress",
192
+ "ec2:DisassociateAddress",
193
+ ],
194
+ Resource: "*",
195
+ },
196
+ ],
197
+ }),
198
+ },
199
+ ],
200
+ tags,
201
+ });
202
+ const instanceProfile = new aws.iam.InstanceProfile(`${name}-fck-nat-profile`, {
203
+ namePrefix: `${name}-fck-nat`,
204
+ role: role.name,
205
+ });
206
+ const lt = new aws.ec2.LaunchTemplate(`${name}-fck-nat-lt`, {
207
+ namePrefix: `${name}-fck-nat`,
208
+ imageId: fckNatAmi.id,
209
+ instanceType,
210
+ vpcSecurityGroupIds: [sg.id],
211
+ iamInstanceProfile: { name: instanceProfile.name },
212
+ userData: eni.id.apply((eniId) => Buffer.from(`#!/bin/bash\necho "eni_id=${eniId}" >> /etc/fck-nat.conf\nservice fck-nat restart\n`).toString("base64")),
213
+ tagSpecifications: [
214
+ {
215
+ resourceType: "instance",
216
+ tags: { ...tags, Name: `${name}-fck-nat` },
217
+ },
218
+ ],
219
+ tags,
220
+ });
221
+ new aws.autoscaling.Group(`${name}-fck-nat-asg`, {
222
+ name: `${name}-fck-nat-asg`,
223
+ vpcZoneIdentifiers: [publicSubnets.apply((s) => s[0].id)],
224
+ minSize: 1,
225
+ maxSize: 1,
226
+ desiredCapacity: 1,
227
+ launchTemplate: { id: lt.id, version: "$Latest" },
228
+ });
229
+ // Private route table through fck-nat ENI
230
+ const privateRt = new aws.ec2.RouteTable(`${name}-private-rt`, {
231
+ vpcId: vpc.id,
232
+ routes: [{ cidrBlock: "0.0.0.0/0", networkInterfaceId: eni.id }],
233
+ tags: { ...tags, Name: `${name}-private-rt` },
234
+ });
235
+ privateSubnets.apply((subnets) => subnets.map((subnet, i) => new aws.ec2.RouteTableAssociation(`${name}-private-rta-${i}`, {
236
+ subnetId: subnet.id,
237
+ routeTableId: privateRt.id,
238
+ })));
239
+ return eni.id;
240
+ }
241
+ function createManagedNat(name, _vpc, igw, publicSubnets, privateSubnets, tags) {
242
+ const eip = new aws.ec2.Eip(`${name}-nat-eip`, {
243
+ domain: "vpc",
244
+ tags: { ...tags, Name: `${name}-nat-eip` },
245
+ }, { dependsOn: [igw] });
246
+ const natGw = new aws.ec2.NatGateway(`${name}-nat`, {
247
+ allocationId: eip.id,
248
+ subnetId: publicSubnets.apply((s) => s[0].id),
249
+ tags: { ...tags, Name: `${name}-nat` },
250
+ });
251
+ const privateRt = new aws.ec2.RouteTable(`${name}-private-rt`, {
252
+ vpcId: _vpc.id,
253
+ routes: [{ cidrBlock: "0.0.0.0/0", natGatewayId: natGw.id }],
254
+ tags: { ...tags, Name: `${name}-private-rt` },
255
+ });
256
+ privateSubnets.apply((subnets) => subnets.map((subnet, i) => new aws.ec2.RouteTableAssociation(`${name}-private-rta-${i}`, {
257
+ subnetId: subnet.id,
258
+ routeTableId: privateRt.id,
259
+ })));
260
+ return natGw.id;
261
+ }
262
+ //# sourceMappingURL=network.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../../../src/aws/network.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * AWS Secrets Manager implementation.
3
+ *
4
+ * @module aws/secrets
5
+ */
6
+ import type { ISecrets, ISecretsConfig } from "../secrets";
7
+ /**
8
+ * Create an AWS Secrets Manager store.
9
+ *
10
+ * Each `putSecret(path, data)` call creates a Secret resource with
11
+ * JSON-encoded key-value pairs. `getSecretRef(ref)` retrieves a
12
+ * specific key from a stored secret.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const secrets = createAwsSecrets("prod", {
17
+ * cloud: "aws",
18
+ * backend: "aws-secrets-manager",
19
+ * });
20
+ *
21
+ * secrets.putSecret("database", { host: "db.example.com", password: dbPassword });
22
+ * const pw = secrets.getSecretRef({ path: "database", key: "password" });
23
+ * ```
24
+ */
25
+ export declare function createAwsSecrets(name: string, config: ISecretsConfig): ISecrets;
26
+ //# sourceMappingURL=secrets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../../src/aws/secrets.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAc,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGvE;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,QAAQ,CA6E/E"}
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ /**
3
+ * AWS Secrets Manager implementation.
4
+ *
5
+ * @module aws/secrets
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.createAwsSecrets = createAwsSecrets;
42
+ const aws = __importStar(require("@pulumi/aws"));
43
+ const pulumi = __importStar(require("@pulumi/pulumi"));
44
+ const types_1 = require("../types");
45
+ /**
46
+ * Create an AWS Secrets Manager store.
47
+ *
48
+ * Each `putSecret(path, data)` call creates a Secret resource with
49
+ * JSON-encoded key-value pairs. `getSecretRef(ref)` retrieves a
50
+ * specific key from a stored secret.
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * const secrets = createAwsSecrets("prod", {
55
+ * cloud: "aws",
56
+ * backend: "aws-secrets-manager",
57
+ * });
58
+ *
59
+ * secrets.putSecret("database", { host: "db.example.com", password: dbPassword });
60
+ * const pw = secrets.getSecretRef({ path: "database", key: "password" });
61
+ * ```
62
+ */
63
+ function createAwsSecrets(name, config) {
64
+ const cloud = Array.isArray(config.cloud) ? (config.cloud[0] ?? "aws") : config.cloud;
65
+ const target = (0, types_1.resolveCloudTarget)(cloud);
66
+ const tags = config.tags ?? {};
67
+ // Track created secrets so getSecretRef can resolve them
68
+ const secretResources = new Map();
69
+ // A "store" resource to serve as the nativeResource escape hatch.
70
+ // We use a dummy SSM parameter to represent the store itself.
71
+ const store = new aws.ssm.Parameter(`${name}-secrets-store`, {
72
+ name: `/${name}/secrets-store`,
73
+ type: aws.ssm.ParameterType.String,
74
+ value: "managed-by-nimbus",
75
+ tags: { ...tags, Name: `${name}-secrets-store` },
76
+ });
77
+ return {
78
+ name,
79
+ cloud: target,
80
+ backend: "aws-secrets-manager",
81
+ nativeResource: store,
82
+ putSecret(path, data) {
83
+ const secretName = `${name}/${path}`;
84
+ const resourceName = `${name}-${path.replace(/\//g, "-")}`;
85
+ const secret = new aws.secretsmanager.Secret(resourceName, {
86
+ namePrefix: secretName,
87
+ tags: { ...tags, Name: secretName },
88
+ });
89
+ // Store data as JSON
90
+ const secretString = pulumi.all(data).apply((resolved) => JSON.stringify(resolved));
91
+ new aws.secretsmanager.SecretVersion(`${resourceName}-v`, {
92
+ secretId: secret.id,
93
+ secretString,
94
+ });
95
+ secretResources.set(path, secret);
96
+ },
97
+ getSecretRef(ref) {
98
+ const secret = secretResources.get(ref.path);
99
+ const { key } = ref;
100
+ if (!secret) {
101
+ // Secret not created via putSecret — look up by name convention
102
+ const lookup = aws.secretsmanager.getSecretVersionOutput({
103
+ secretId: `${name}/${ref.path}`,
104
+ });
105
+ if (key) {
106
+ return lookup.secretString.apply((s) => {
107
+ const parsed = JSON.parse(s);
108
+ return parsed[key] ?? "";
109
+ });
110
+ }
111
+ return lookup.secretString;
112
+ }
113
+ // Get the current version of the secret
114
+ const version = aws.secretsmanager.getSecretVersionOutput({
115
+ secretId: secret.id,
116
+ });
117
+ if (key) {
118
+ return version.secretString.apply((s) => {
119
+ const parsed = JSON.parse(s);
120
+ return parsed[key] ?? "";
121
+ });
122
+ }
123
+ return version.secretString;
124
+ },
125
+ };
126
+ }
127
+ //# sourceMappingURL=secrets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../../src/aws/secrets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Azure AKS cluster implementation.
3
+ *
4
+ * Supports system + user node pools, spot instances, and
5
+ * Azure Container Instances virtual node.
6
+ *
7
+ * @module azure/cluster
8
+ */
9
+ import type * as pulumi from "@pulumi/pulumi";
10
+ import type { ICluster, IClusterConfig } from "../cluster";
11
+ import type { INetwork } from "../network";
12
+ /** Azure-specific AKS options beyond the base config. */
13
+ export interface IAksOptions {
14
+ /** Resource group name. Required for Azure. */
15
+ readonly resourceGroupName: pulumi.Input<string>;
16
+ /** Enable Azure CNI networking (vs kubenet). Default: true. */
17
+ readonly azureCni?: boolean;
18
+ /** Enable virtual node (ACI). Default: false. */
19
+ readonly virtualNodes?: boolean;
20
+ /** Azure AD tenant ID for RBAC integration. */
21
+ readonly aadTenantId?: string;
22
+ /** DNS prefix for the cluster FQDN. Default: cluster name. */
23
+ readonly dnsPrefix?: string;
24
+ }
25
+ /**
26
+ * Create an AKS cluster with system + user node pools.
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * const cluster = createAksCluster("prod", {
31
+ * cloud: "azure",
32
+ * version: "1.32",
33
+ * nodePools: [
34
+ * { name: "system", instanceType: "Standard_D2pds_v6", minNodes: 2, maxNodes: 5, mode: "system" },
35
+ * { name: "workers", instanceType: "Standard_D2pds_v6", minNodes: 2, maxNodes: 8, spot: true },
36
+ * ],
37
+ * }, network, {
38
+ * resourceGroupName: "my-rg",
39
+ * virtualNodes: true,
40
+ * });
41
+ * ```
42
+ */
43
+ export declare function createAksCluster(name: string, config: IClusterConfig, network: INetwork, options: IAksOptions): ICluster;
44
+ //# sourceMappingURL=cluster.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cluster.d.ts","sourceRoot":"","sources":["../../../src/azure/cluster.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,KAAK,MAAM,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,yDAAyD;AACzD,MAAM,WAAW,WAAW;IAC1B,+CAA+C;IAC/C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACjD,+DAA+D;IAC/D,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,iDAAiD;IACjD,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,+CAA+C;IAC/C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,8DAA8D;IAC9D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,WAAW,GACnB,QAAQ,CAqFV"}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ /**
3
+ * Azure AKS cluster implementation.
4
+ *
5
+ * Supports system + user node pools, spot instances, and
6
+ * Azure Container Instances virtual node.
7
+ *
8
+ * @module azure/cluster
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
23
+ }) : function(o, v) {
24
+ o["default"] = v;
25
+ });
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.createAksCluster = createAksCluster;
45
+ const azure = __importStar(require("@pulumi/azure-native"));
46
+ const k8s = __importStar(require("@pulumi/kubernetes"));
47
+ const types_1 = require("../types");
48
+ /**
49
+ * Create an AKS cluster with system + user node pools.
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * const cluster = createAksCluster("prod", {
54
+ * cloud: "azure",
55
+ * version: "1.32",
56
+ * nodePools: [
57
+ * { name: "system", instanceType: "Standard_D2pds_v6", minNodes: 2, maxNodes: 5, mode: "system" },
58
+ * { name: "workers", instanceType: "Standard_D2pds_v6", minNodes: 2, maxNodes: 8, spot: true },
59
+ * ],
60
+ * }, network, {
61
+ * resourceGroupName: "my-rg",
62
+ * virtualNodes: true,
63
+ * });
64
+ * ```
65
+ */
66
+ function createAksCluster(name, config, network, options) {
67
+ const cloud = Array.isArray(config.cloud) ? (config.cloud[0] ?? "azure") : config.cloud;
68
+ const target = (0, types_1.resolveCloudTarget)(cloud);
69
+ const tags = config.tags ?? {};
70
+ const rgName = options.resourceGroupName;
71
+ const dnsPrefix = options.dnsPrefix ?? name;
72
+ const enableVirtualNodes = options.virtualNodes ?? config.virtualNodes ?? false;
73
+ // Build agent pool profiles from node pool config
74
+ const agentPoolProfiles = config.nodePools.map((np) => ({
75
+ name: np.name.substring(0, 12), // AKS pool names max 12 chars
76
+ vmSize: np.instanceType,
77
+ count: np.desiredNodes ?? np.minNodes,
78
+ minCount: np.minNodes,
79
+ maxCount: np.maxNodes,
80
+ enableAutoScaling: true,
81
+ mode: (np.mode ?? "User"),
82
+ osType: "Linux",
83
+ osDiskSizeGB: 128,
84
+ vnetSubnetId: network.privateSubnetIds.apply((ids) => ids[0] ?? ""),
85
+ scaleSetPriority: np.spot ? "Spot" : "Regular",
86
+ scaleSetEvictionPolicy: np.spot ? "Delete" : undefined,
87
+ spotMaxPrice: np.spot ? -1 : undefined,
88
+ nodeTaints: np.taints?.map((t) => `${t.key}=${t.value}:${t.effect}`) ?? [],
89
+ nodeLabels: np.labels ?? {},
90
+ type: "VirtualMachineScaleSets",
91
+ }));
92
+ // AKS add-on profiles
93
+ const addonProfiles = {};
94
+ if (enableVirtualNodes) {
95
+ addonProfiles["aciConnectorLinux"] = {
96
+ enabled: true,
97
+ config: {
98
+ SubnetName: "aci-subnet",
99
+ },
100
+ };
101
+ }
102
+ const cluster = new azure.containerservice.ManagedCluster(`${name}-aks`, {
103
+ resourceName: name,
104
+ resourceGroupName: rgName,
105
+ dnsPrefix,
106
+ kubernetesVersion: config.version,
107
+ agentPoolProfiles,
108
+ identity: { type: "SystemAssigned" },
109
+ networkProfile: {
110
+ networkPlugin: options.azureCni !== false ? "azure" : "kubenet",
111
+ serviceCidr: "10.240.0.0/16",
112
+ dnsServiceIP: "10.240.0.10",
113
+ },
114
+ addonProfiles,
115
+ tags: { ...tags, Name: name },
116
+ });
117
+ // Build kubeconfig from AKS cluster credentials
118
+ const creds = azure.containerservice.listManagedClusterUserCredentialsOutput({
119
+ resourceGroupName: rgName,
120
+ resourceName: cluster.name,
121
+ });
122
+ const kubeconfig = creds.kubeconfigs.apply((configs) => {
123
+ const kc = configs[0];
124
+ if (!kc?.value) {
125
+ return "";
126
+ }
127
+ return Buffer.from(kc.value, "base64").toString("utf-8");
128
+ });
129
+ const provider = new k8s.Provider(`${name}-k8s`, {
130
+ kubeconfig,
131
+ });
132
+ return {
133
+ name,
134
+ cloud: target,
135
+ endpoint: cluster.fqdn.apply((fqdn) => `https://${fqdn ?? ""}`),
136
+ kubeconfig,
137
+ version: cluster.kubernetesVersion.apply((v) => v ?? ""),
138
+ nodePools: config.nodePools,
139
+ nativeResource: cluster,
140
+ provider,
141
+ };
142
+ }
143
+ //# sourceMappingURL=cluster.js.map