terraconstructs 0.0.10 → 0.0.12

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 (410) hide show
  1. package/.jsii +104486 -34582
  2. package/lib/aws/arn.js +1 -1
  3. package/lib/aws/aws-construct.d.ts +1 -1
  4. package/lib/aws/aws-construct.js +28 -2
  5. package/lib/aws/aws-stack.d.ts +2 -4
  6. package/lib/aws/aws-stack.js +21 -8
  7. package/lib/aws/aws-tags.d.ts +58 -0
  8. package/lib/aws/aws-tags.js +77 -0
  9. package/lib/aws/cloudwatch/actions/ec2.js +1 -1
  10. package/lib/aws/cloudwatch/actions/lambda.js +1 -1
  11. package/lib/aws/cloudwatch/alarm-base.js +1 -1
  12. package/lib/aws/cloudwatch/alarm-rule.js +1 -1
  13. package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
  14. package/lib/aws/cloudwatch/alarm.js +1 -1
  15. package/lib/aws/cloudwatch/composite-alarm.js +1 -1
  16. package/lib/aws/cloudwatch/dashboard.js +1 -1
  17. package/lib/aws/cloudwatch/data-protection-policy.js +3 -3
  18. package/lib/aws/cloudwatch/graph.js +8 -8
  19. package/lib/aws/cloudwatch/layout.js +3 -3
  20. package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
  21. package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
  22. package/lib/aws/cloudwatch/log-group.js +1 -1
  23. package/lib/aws/cloudwatch/log-query.js +1 -1
  24. package/lib/aws/cloudwatch/log-stream.js +1 -1
  25. package/lib/aws/cloudwatch/metric-filter.d.ts +1 -1
  26. package/lib/aws/cloudwatch/metric-filter.js +4 -4
  27. package/lib/aws/cloudwatch/metric.js +2 -2
  28. package/lib/aws/cloudwatch/pattern.js +3 -3
  29. package/lib/aws/cloudwatch/policy.js +1 -1
  30. package/lib/aws/cloudwatch/private/env-tokens.js +5 -6
  31. package/lib/aws/cloudwatch/private/metric-util.js +4 -5
  32. package/lib/aws/cloudwatch/private/object.js +2 -3
  33. package/lib/aws/cloudwatch/private/rendering.js +3 -3
  34. package/lib/aws/cloudwatch/private/statistic.js +6 -7
  35. package/lib/aws/cloudwatch/query-definition.js +2 -2
  36. package/lib/aws/cloudwatch/stats.js +1 -1
  37. package/lib/aws/cloudwatch/subscription-filter.d.ts +1 -1
  38. package/lib/aws/cloudwatch/subscription-filter.js +4 -4
  39. package/lib/aws/cloudwatch/text.js +1 -1
  40. package/lib/aws/cloudwatch/variable.js +3 -3
  41. package/lib/aws/cloudwatch/widget.d.ts +1 -1
  42. package/lib/aws/cloudwatch/widget.js +4 -4
  43. package/lib/aws/compute/activity.js +3 -2
  44. package/lib/aws/compute/alb/application-listener-action.d.ts +334 -0
  45. package/lib/aws/compute/alb/application-listener-action.js +281 -0
  46. package/lib/aws/compute/alb/application-listener-certificate.d.ts +35 -0
  47. package/lib/aws/compute/alb/application-listener-certificate.js +35 -0
  48. package/lib/aws/compute/alb/application-listener-rule.d.ts +233 -0
  49. package/lib/aws/compute/alb/application-listener-rule.js +220 -0
  50. package/lib/aws/compute/alb/application-listener.d.ts +574 -0
  51. package/lib/aws/compute/alb/application-listener.js +538 -0
  52. package/lib/aws/compute/alb/application-load-balancer.d.ts +715 -0
  53. package/lib/aws/compute/alb/application-load-balancer.js +780 -0
  54. package/lib/aws/compute/alb/application-target-group.d.ts +339 -0
  55. package/lib/aws/compute/alb/application-target-group.js +427 -0
  56. package/lib/aws/compute/alb/conditions.d.ts +61 -0
  57. package/lib/aws/compute/alb/conditions.js +164 -0
  58. package/lib/aws/compute/alb/trust-store-revocation.d.ts +59 -0
  59. package/lib/aws/compute/alb/trust-store-revocation.js +46 -0
  60. package/lib/aws/compute/alb/trust-store.d.ts +86 -0
  61. package/lib/aws/compute/alb/trust-store.js +79 -0
  62. package/lib/aws/compute/architecture.js +1 -1
  63. package/lib/aws/compute/aspects/require-imdsv2-aspect.d.ts +75 -0
  64. package/lib/aws/compute/aspects/require-imdsv2-aspect.js +106 -0
  65. package/lib/aws/compute/bastion-host.d.ts +172 -0
  66. package/lib/aws/compute/bastion-host.js +114 -0
  67. package/lib/aws/compute/chain.js +1 -1
  68. package/lib/aws/compute/cidr-splits.d.ts +49 -0
  69. package/lib/aws/compute/cidr-splits.js +59 -0
  70. package/lib/aws/compute/client-vpn-authorization-rule.d.ts +43 -0
  71. package/lib/aws/compute/client-vpn-authorization-rule.js +30 -0
  72. package/lib/aws/compute/client-vpn-endpoint-types.d.ts +62 -0
  73. package/lib/aws/compute/client-vpn-endpoint-types.js +25 -0
  74. package/lib/aws/compute/client-vpn-endpoint.d.ts +239 -0
  75. package/lib/aws/compute/client-vpn-endpoint.js +259 -0
  76. package/lib/aws/compute/client-vpn-route.d.ts +67 -0
  77. package/lib/aws/compute/client-vpn-route.js +57 -0
  78. package/lib/aws/compute/condition.js +1 -1
  79. package/lib/aws/compute/connections.d.ts +137 -0
  80. package/lib/aws/compute/connections.js +208 -0
  81. package/lib/aws/compute/ec2-augmentations.generated.d.ts +53 -0
  82. package/lib/aws/compute/ec2-augmentations.generated.js +35 -0
  83. package/lib/aws/compute/ec2-canned-metrics.generated.d.ts +555 -0
  84. package/lib/aws/compute/ec2-canned-metrics.generated.js +681 -0
  85. package/lib/aws/compute/ec2-util-v2.d.ts +141 -0
  86. package/lib/aws/compute/ec2-util-v2.js +286 -0
  87. package/lib/aws/compute/ec2-util.d.ts +52 -0
  88. package/lib/aws/compute/ec2-util.js +138 -0
  89. package/lib/aws/compute/elasticloadbalancing-canned-metrics.generated.d.ts +176 -0
  90. package/lib/aws/compute/elasticloadbalancing-canned-metrics.generated.js +119 -0
  91. package/lib/aws/compute/elasticloadbalancingv2-canned-metrics.generated.d.ts +860 -0
  92. package/lib/aws/compute/elasticloadbalancingv2-canned-metrics.generated.js +597 -0
  93. package/lib/aws/compute/event-invoke-config.js +1 -1
  94. package/lib/aws/compute/event-source-filter.js +2 -2
  95. package/lib/aws/compute/event-source-mapping.js +1 -1
  96. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
  97. package/lib/aws/compute/event-sources/s3.js +1 -1
  98. package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
  99. package/lib/aws/compute/event-sources/sqs.js +1 -1
  100. package/lib/aws/compute/fields.js +4 -4
  101. package/lib/aws/compute/function-alias.js +1 -1
  102. package/lib/aws/compute/function-base.js +2 -2
  103. package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
  104. package/lib/aws/compute/function-destinations/function.js +1 -1
  105. package/lib/aws/compute/function-destinations/sqs.js +1 -1
  106. package/lib/aws/compute/function-nodejs.js +1 -1
  107. package/lib/aws/compute/function-url.js +1 -1
  108. package/lib/aws/compute/function-vpc-config.generated.d.ts +3 -3
  109. package/lib/aws/compute/function-vpc-config.generated.js +1 -1
  110. package/lib/aws/compute/function.d.ts +1 -1
  111. package/lib/aws/compute/function.js +5 -5
  112. package/lib/aws/compute/index-alpha.d.ts +5 -0
  113. package/lib/aws/compute/index-alpha.js +22 -0
  114. package/lib/aws/compute/index.d.ts +60 -0
  115. package/lib/aws/compute/index.js +70 -2
  116. package/lib/aws/compute/instance-types.d.ts +1354 -0
  117. package/lib/aws/compute/instance-types.js +1683 -0
  118. package/lib/aws/compute/instance.d.ts +436 -0
  119. package/lib/aws/compute/instance.js +262 -0
  120. package/lib/aws/compute/ip-addresses.d.ts +249 -0
  121. package/lib/aws/compute/ip-addresses.js +248 -0
  122. package/lib/aws/compute/ipam.d.ts +309 -0
  123. package/lib/aws/compute/ipam.js +306 -0
  124. package/lib/aws/compute/key-pair.d.ts +178 -0
  125. package/lib/aws/compute/key-pair.js +194 -0
  126. package/lib/aws/compute/lambda-augmentations.generated.d.ts +65 -0
  127. package/lib/aws/compute/lambda-augmentations.generated.js +41 -0
  128. package/lib/aws/compute/lambda-canned-metrics.generated.d.ts +316 -0
  129. package/lib/aws/compute/lambda-canned-metrics.generated.js +119 -0
  130. package/lib/aws/compute/launch-template.d.ts +540 -0
  131. package/lib/aws/compute/launch-template.js +468 -0
  132. package/lib/aws/compute/lb-shared/access-logs-accounts.d.ts +7 -0
  133. package/lib/aws/compute/lb-shared/access-logs-accounts.js +46 -0
  134. package/lib/aws/compute/lb-shared/base-listener.d.ts +113 -0
  135. package/lib/aws/compute/lb-shared/base-listener.js +181 -0
  136. package/lib/aws/compute/lb-shared/base-load-balancer.d.ts +212 -0
  137. package/lib/aws/compute/lb-shared/base-load-balancer.js +290 -0
  138. package/lib/aws/compute/lb-shared/base-target-group.d.ts +382 -0
  139. package/lib/aws/compute/lb-shared/base-target-group.js +364 -0
  140. package/lib/aws/compute/lb-shared/enums.d.ts +282 -0
  141. package/lib/aws/compute/lb-shared/enums.js +301 -0
  142. package/lib/aws/compute/lb-shared/grid-lookup-types.d.ts +42 -0
  143. package/lib/aws/compute/lb-shared/grid-lookup-types.js +53 -0
  144. package/lib/aws/compute/lb-shared/imported.d.ts +24 -0
  145. package/lib/aws/compute/lb-shared/imported.js +27 -0
  146. package/lib/aws/compute/lb-shared/lb-listener-config.generated.d.ts +194 -0
  147. package/lib/aws/compute/lb-shared/lb-listener-config.generated.js +3 -0
  148. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.d.ts +56 -0
  149. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.js +3 -0
  150. package/lib/aws/compute/lb-shared/listener-action.d.ts +14 -0
  151. package/lib/aws/compute/lb-shared/listener-action.js +4 -0
  152. package/lib/aws/compute/lb-shared/listener-certificate.d.ts +28 -0
  153. package/lib/aws/compute/lb-shared/listener-certificate.js +29 -0
  154. package/lib/aws/compute/lb-shared/load-balancer-targets.d.ts +93 -0
  155. package/lib/aws/compute/lb-shared/load-balancer-targets.js +127 -0
  156. package/lib/aws/compute/lb-shared/util.d.ts +113 -0
  157. package/lib/aws/compute/lb-shared/util.js +264 -0
  158. package/lib/aws/compute/lb-targets/alb-target.d.ts +67 -0
  159. package/lib/aws/compute/lb-targets/alb-target.js +100 -0
  160. package/lib/aws/compute/lb-targets/index.d.ts +4 -0
  161. package/lib/aws/compute/lb-targets/index.js +22 -0
  162. package/lib/aws/compute/lb-targets/instance-target.d.ts +42 -0
  163. package/lib/aws/compute/lb-targets/instance-target.js +67 -0
  164. package/lib/aws/compute/lb-targets/ip-target.d.ts +55 -0
  165. package/lib/aws/compute/lb-targets/ip-target.js +79 -0
  166. package/lib/aws/compute/lb-targets/lambda-target.d.ts +25 -0
  167. package/lib/aws/compute/lb-targets/lambda-target.js +50 -0
  168. package/lib/aws/compute/load-balancer.d.ts +336 -0
  169. package/lib/aws/compute/load-balancer.js +287 -0
  170. package/lib/aws/compute/machine-image/amazon-linux-2022.d.ts +63 -0
  171. package/lib/aws/compute/machine-image/amazon-linux-2022.js +84 -0
  172. package/lib/aws/compute/machine-image/amazon-linux-2023.d.ts +63 -0
  173. package/lib/aws/compute/machine-image/amazon-linux-2023.js +84 -0
  174. package/lib/aws/compute/machine-image/amazon-linux2.d.ts +76 -0
  175. package/lib/aws/compute/machine-image/amazon-linux2.js +87 -0
  176. package/lib/aws/compute/machine-image/common.d.ts +181 -0
  177. package/lib/aws/compute/machine-image/common.js +122 -0
  178. package/lib/aws/compute/machine-image/index.d.ts +5 -0
  179. package/lib/aws/compute/machine-image/index.js +22 -0
  180. package/lib/aws/compute/machine-image/machine-image.d.ts +463 -0
  181. package/lib/aws/compute/machine-image/machine-image.js +566 -0
  182. package/lib/aws/compute/machine-image/utils.d.ts +2 -0
  183. package/lib/aws/compute/machine-image/utils.js +17 -0
  184. package/lib/aws/compute/nat.d.ts +325 -0
  185. package/lib/aws/compute/nat.js +455 -0
  186. package/lib/aws/compute/network-acl-types.d.ts +152 -0
  187. package/lib/aws/compute/network-acl-types.js +156 -0
  188. package/lib/aws/compute/network-acl.d.ts +285 -0
  189. package/lib/aws/compute/network-acl.js +207 -0
  190. package/lib/aws/compute/network-util.d.ts +116 -0
  191. package/lib/aws/compute/network-util.js +241 -0
  192. package/lib/aws/compute/nlb/network-listener-action.d.ts +92 -0
  193. package/lib/aws/compute/nlb/network-listener-action.js +146 -0
  194. package/lib/aws/compute/nlb/network-listener-certificate.d.ts +24 -0
  195. package/lib/aws/compute/nlb/network-listener-certificate.js +25 -0
  196. package/lib/aws/compute/nlb/network-listener.d.ts +248 -0
  197. package/lib/aws/compute/nlb/network-listener.js +217 -0
  198. package/lib/aws/compute/nlb/network-load-balancer.d.ts +315 -0
  199. package/lib/aws/compute/nlb/network-load-balancer.js +360 -0
  200. package/lib/aws/compute/nlb/network-target-group.d.ts +153 -0
  201. package/lib/aws/compute/nlb/network-target-group.js +223 -0
  202. package/lib/aws/compute/peer.d.ts +64 -0
  203. package/lib/aws/compute/peer.js +235 -0
  204. package/lib/aws/compute/placement-group.d.ts +161 -0
  205. package/lib/aws/compute/placement-group.js +133 -0
  206. package/lib/aws/compute/port.d.ts +287 -0
  207. package/lib/aws/compute/port.js +390 -0
  208. package/lib/aws/compute/prefix-list.d.ts +131 -0
  209. package/lib/aws/compute/prefix-list.js +114 -0
  210. package/lib/aws/compute/private/context-stub.d.ts +7 -0
  211. package/lib/aws/compute/private/context-stub.js +43 -0
  212. package/lib/aws/compute/private/ebs-util.d.ts +14 -0
  213. package/lib/aws/compute/private/ebs-util.js +145 -0
  214. package/lib/aws/compute/private/intrinstics.js +2 -1
  215. package/lib/aws/compute/private/json-path.js +8 -8
  216. package/lib/aws/compute/private/util.js +2 -3
  217. package/lib/aws/compute/route.d.ts +547 -0
  218. package/lib/aws/compute/route.js +469 -0
  219. package/lib/aws/compute/security-group.d.ts +414 -0
  220. package/lib/aws/compute/security-group.js +538 -0
  221. package/lib/aws/compute/state-graph.js +1 -1
  222. package/lib/aws/compute/state-machine-fragment.js +1 -1
  223. package/lib/aws/compute/state-machine.d.ts +2 -2
  224. package/lib/aws/compute/state-machine.js +14 -12
  225. package/lib/aws/compute/states/choice.js +1 -1
  226. package/lib/aws/compute/states/custom-state.js +1 -1
  227. package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
  228. package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
  229. package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
  230. package/lib/aws/compute/states/distributed-map.js +1 -1
  231. package/lib/aws/compute/states/fail.js +1 -1
  232. package/lib/aws/compute/states/map-base.js +1 -1
  233. package/lib/aws/compute/states/map.js +1 -1
  234. package/lib/aws/compute/states/parallel.js +1 -1
  235. package/lib/aws/compute/states/pass.js +2 -2
  236. package/lib/aws/compute/states/state.js +5 -5
  237. package/lib/aws/compute/states/succeed.js +1 -1
  238. package/lib/aws/compute/states/task-base.js +2 -2
  239. package/lib/aws/compute/states/task.js +1 -1
  240. package/lib/aws/compute/states/wait.js +2 -2
  241. package/lib/aws/compute/stepfunctions-canned-metrics.generated.d.ts +83 -0
  242. package/lib/aws/compute/stepfunctions-canned-metrics.generated.js +127 -0
  243. package/lib/aws/compute/subnet-v2.d.ts +213 -0
  244. package/lib/aws/compute/subnet-v2.js +405 -0
  245. package/lib/aws/compute/subnet.d.ts +37 -0
  246. package/lib/aws/compute/subnet.js +181 -0
  247. package/lib/aws/compute/task-credentials.js +1 -1
  248. package/lib/aws/compute/task-input.js +1 -1
  249. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
  250. package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
  251. package/lib/aws/compute/tasks/http/invoke.js +1 -1
  252. package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
  253. package/lib/aws/compute/tasks/private/task-utils.js +3 -4
  254. package/lib/aws/compute/tasks/resource-arn-suffix.js +2 -3
  255. package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
  256. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
  257. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
  258. package/lib/aws/compute/types.js +2 -2
  259. package/lib/aws/compute/user-data.d.ts +270 -0
  260. package/lib/aws/compute/user-data.js +487 -0
  261. package/lib/aws/compute/util.d.ts +1 -1
  262. package/lib/aws/compute/util.js +4 -5
  263. package/lib/aws/compute/volume.d.ts +480 -0
  264. package/lib/aws/compute/volume.js +426 -0
  265. package/lib/aws/compute/vpc-endpoint-service.d.ts +149 -0
  266. package/lib/aws/compute/vpc-endpoint-service.js +90 -0
  267. package/lib/aws/compute/vpc-endpoint.d.ts +742 -0
  268. package/lib/aws/compute/vpc-endpoint.js +811 -0
  269. package/lib/aws/compute/vpc-flow-logs.d.ts +551 -0
  270. package/lib/aws/compute/vpc-flow-logs.js +693 -0
  271. package/lib/aws/compute/vpc-lookup.d.ts +73 -0
  272. package/lib/aws/compute/vpc-lookup.js +3 -0
  273. package/lib/aws/compute/vpc-v2-base.d.ts +353 -0
  274. package/lib/aws/compute/vpc-v2-base.js +493 -0
  275. package/lib/aws/compute/vpc-v2.d.ts +385 -0
  276. package/lib/aws/compute/vpc-v2.js +408 -0
  277. package/lib/aws/compute/vpc.d.ts +1448 -0
  278. package/lib/aws/compute/vpc.js +1495 -0
  279. package/lib/aws/compute/vpn.d.ts +443 -0
  280. package/lib/aws/compute/vpn.js +397 -0
  281. package/lib/aws/compute/windows-versions.d.ts +418 -0
  282. package/lib/aws/compute/windows-versions.js +426 -0
  283. package/lib/aws/edge/certificate-base.d.ts +20 -0
  284. package/lib/aws/edge/certificate-base.js +28 -0
  285. package/lib/aws/edge/certificate.d.ts +23 -2
  286. package/lib/aws/edge/certificate.js +54 -4
  287. package/lib/aws/edge/distribution.js +3 -3
  288. package/lib/aws/edge/dns-alias-record-targets.js +2 -2
  289. package/lib/aws/edge/dns-record.js +16 -16
  290. package/lib/aws/edge/dns-zone.d.ts +20 -2
  291. package/lib/aws/edge/dns-zone.js +25 -10
  292. package/lib/aws/edge/function.js +2 -2
  293. package/lib/aws/edge/index.d.ts +1 -0
  294. package/lib/aws/edge/index.js +2 -1
  295. package/lib/aws/edge/key-value-store.js +4 -4
  296. package/lib/aws/edge/origin.js +8 -6
  297. package/lib/aws/edge/response-headers-policy.js +1 -1
  298. package/lib/aws/encryption/alias.js +1 -1
  299. package/lib/aws/encryption/key.js +1 -1
  300. package/lib/aws/encryption/via-service-principal.js +1 -1
  301. package/lib/aws/iam/grant.js +2 -2
  302. package/lib/aws/iam/index.d.ts +1 -0
  303. package/lib/aws/iam/index.js +2 -1
  304. package/lib/aws/iam/instance-profile.d.ts +155 -0
  305. package/lib/aws/iam/instance-profile.js +124 -0
  306. package/lib/aws/iam/managed-policy.js +1 -1
  307. package/lib/aws/iam/oidc-provider.js +1 -1
  308. package/lib/aws/iam/policy-document-config.generated.d.ts +8 -8
  309. package/lib/aws/iam/policy-document-config.generated.js +1 -1
  310. package/lib/aws/iam/policy-document.js +1 -1
  311. package/lib/aws/iam/policy-statement-props.generated.d.ts +8 -8
  312. package/lib/aws/iam/policy-statement-props.generated.js +1 -1
  313. package/lib/aws/iam/policy-statement.js +9 -9
  314. package/lib/aws/iam/policy.js +1 -1
  315. package/lib/aws/iam/principals.js +26 -26
  316. package/lib/aws/iam/private/assume-role-policy.js +2 -3
  317. package/lib/aws/iam/private/comparable-principal.js +2 -3
  318. package/lib/aws/iam/private/immutable-role.d.ts +2 -1
  319. package/lib/aws/iam/private/immutable-role.js +3 -3
  320. package/lib/aws/iam/private/imported-role.d.ts +1 -1
  321. package/lib/aws/iam/private/imported-role.js +3 -3
  322. package/lib/aws/iam/private/merge-statements.js +2 -3
  323. package/lib/aws/iam/private/util.js +4 -4
  324. package/lib/aws/iam/role.js +1 -1
  325. package/lib/aws/iam/saml-provider.d.ts +1 -1
  326. package/lib/aws/iam/saml-provider.js +6 -6
  327. package/lib/aws/iam/unknown-principal.js +1 -1
  328. package/lib/aws/iam/utils.js +2 -3
  329. package/lib/aws/index.d.ts +1 -0
  330. package/lib/aws/index.js +4 -1
  331. package/lib/aws/network/simple-ipv4-vpc.js +5 -5
  332. package/lib/aws/network/subnet-group.js +3 -3
  333. package/lib/aws/network/subnet.d.ts +1 -1
  334. package/lib/aws/network/subnet.js +7 -7
  335. package/lib/aws/notify/archive.js +3 -2
  336. package/lib/aws/notify/connection.js +5 -4
  337. package/lib/aws/notify/event-bus.js +5 -4
  338. package/lib/aws/notify/event-pattern.js +3 -3
  339. package/lib/aws/notify/index.js +3 -1
  340. package/lib/aws/notify/input.js +4 -3
  341. package/lib/aws/notify/kinesis-stream.js +3 -2
  342. package/lib/aws/notify/on-event-options.js +2 -1
  343. package/lib/aws/notify/queue-config.generated.d.ts +18 -11
  344. package/lib/aws/notify/queue-config.generated.js +1 -1
  345. package/lib/aws/notify/queue-policy.js +1 -1
  346. package/lib/aws/notify/queue.js +1 -1
  347. package/lib/aws/notify/resource-policy.js +1 -1
  348. package/lib/aws/notify/rule.js +3 -2
  349. package/lib/aws/notify/schedule.js +2 -2
  350. package/lib/aws/notify/sqs-augmentations.generated.d.ts +125 -0
  351. package/lib/aws/notify/sqs-augmentations.generated.js +74 -0
  352. package/lib/aws/notify/target.js +2 -1
  353. package/lib/aws/notify/targets/event-bus.js +1 -1
  354. package/lib/aws/notify/targets/function.js +1 -1
  355. package/lib/aws/notify/targets/log-group.js +2 -2
  356. package/lib/aws/notify/targets/sqs.js +1 -1
  357. package/lib/aws/notify/targets/state-machine.js +1 -1
  358. package/lib/aws/notify/targets/util.d.ts +1 -1
  359. package/lib/aws/notify/targets/util.js +10 -11
  360. package/lib/aws/notify/util.js +4 -4
  361. package/lib/aws/provider-config.generated.d.ts +33 -33
  362. package/lib/aws/provider-config.generated.js +1 -1
  363. package/lib/aws/storage/bucket-notifications.js +1 -1
  364. package/lib/aws/storage/bucket-policy.js +1 -1
  365. package/lib/aws/storage/bucket-source.js +1 -1
  366. package/lib/aws/storage/bucket.d.ts +298 -65
  367. package/lib/aws/storage/bucket.js +548 -225
  368. package/lib/aws/storage/cors-config.generated.d.ts +3 -3
  369. package/lib/aws/storage/cors-config.generated.js +1 -1
  370. package/lib/aws/storage/cors-rule-config.generated.d.ts +5 -5
  371. package/lib/aws/storage/cors-rule-config.generated.js +1 -1
  372. package/lib/aws/storage/index.d.ts +1 -0
  373. package/lib/aws/storage/index.js +2 -1
  374. package/lib/aws/storage/lifecycle-config.generated.d.ts +11 -11
  375. package/lib/aws/storage/lifecycle-config.generated.js +1 -1
  376. package/lib/aws/storage/notification-targets/function.js +6 -6
  377. package/lib/aws/storage/notification-targets/queue.js +1 -1
  378. package/lib/aws/storage/origin-access-identity.d.ts +1 -1
  379. package/lib/aws/storage/origin-access-identity.js +5 -4
  380. package/lib/aws/storage/parameter-util.d.ts +12 -0
  381. package/lib/aws/storage/parameter-util.js +65 -0
  382. package/lib/aws/storage/parameter.d.ts +526 -0
  383. package/lib/aws/storage/parameter.js +606 -0
  384. package/lib/aws/storage/s3-canned-metrics.generated.d.ts +22 -0
  385. package/lib/aws/storage/s3-canned-metrics.generated.js +23 -0
  386. package/lib/aws/storage/util.d.ts +25 -3
  387. package/lib/aws/storage/util.js +84 -17
  388. package/lib/aws/storage/website-config.generated.d.ts +5 -5
  389. package/lib/aws/storage/website-config.generated.js +1 -1
  390. package/lib/aws/util.js +2 -3
  391. package/lib/construct-base.d.ts +10 -1
  392. package/lib/construct-base.js +9 -6
  393. package/lib/duration.js +1 -1
  394. package/lib/expiration.d.ts +48 -0
  395. package/lib/expiration.js +68 -0
  396. package/lib/helpers-internal/index.d.ts +1 -0
  397. package/lib/helpers-internal/index.js +7 -0
  398. package/lib/index.d.ts +2 -0
  399. package/lib/index.js +3 -1
  400. package/lib/private/md5.d.ts +4 -0
  401. package/lib/private/md5.js +14 -0
  402. package/lib/private/unique-resource-name.js +3 -4
  403. package/lib/size.js +2 -2
  404. package/lib/stack-base.d.ts +4 -23
  405. package/lib/stack-base.js +9 -30
  406. package/lib/terra-func.d.ts +103 -0
  407. package/lib/terra-func.js +170 -0
  408. package/lib/token.js +5 -5
  409. package/package.json +15 -8
  410. package/bun.lockb +0 -0
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var _a, _b;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.LaunchTemplateRequireImdsv2Aspect = exports.InstanceRequireImdsv2Aspect = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ // https://github.com/aws/aws-cdk/blob/v2.175.1/packages/aws-cdk-lib/aws-ec2/lib/aspects/require-imdsv2-aspect.ts
7
+ const provider_aws_1 = require("@cdktf/provider-aws");
8
+ const cdktf_1 = require("cdktf");
9
+ const aws_stack_1 = require("../../aws-stack");
10
+ const instance_1 = require("../instance");
11
+ const launch_template_1 = require("../launch-template");
12
+ /**
13
+ * Base class for Aspect that makes IMDSv2 required.
14
+ */
15
+ class RequireImdsv2Aspect {
16
+ constructor(props) {
17
+ this.suppressWarnings = props?.suppressWarnings ?? false;
18
+ }
19
+ /**
20
+ * Adds a warning annotation to a node, unless `suppressWarnings` is true.
21
+ *
22
+ * @param node The scope to add the warning to.
23
+ * @param message The warning message.
24
+ */
25
+ warn(node, message) {
26
+ if (this.suppressWarnings !== true) {
27
+ // `@aws-cdk/aws-ec2:imdsv2${RequireImdsv2Aspect.name}`,
28
+ cdktf_1.Annotations.of(node).addWarning(`${RequireImdsv2Aspect.name} failed on node ${node.node.id}: ${message}`);
29
+ }
30
+ }
31
+ }
32
+ /**
33
+ * Aspect that applies IMDS configuration on EC2 Instance constructs.
34
+ *
35
+ * This aspect configures IMDS on an EC2 instance by creating a Launch Template with the
36
+ * IMDS configuration and associating that Launch Template with the instance. If an Instance
37
+ * is already associated with a Launch Template, a warning will (optionally) be added to the
38
+ * construct node and it will be skipped.
39
+ *
40
+ * To cover Instances already associated with Launch Templates, use `LaunchTemplateImdsAspect`.
41
+ */
42
+ class InstanceRequireImdsv2Aspect extends RequireImdsv2Aspect {
43
+ constructor(props) {
44
+ super(props);
45
+ this.suppressLaunchTemplateWarning =
46
+ props?.suppressLaunchTemplateWarning ?? false;
47
+ }
48
+ visit(node) {
49
+ if (!(node instanceof instance_1.Instance)) {
50
+ return;
51
+ }
52
+ if (node.instance.launchTemplateInput !== undefined) {
53
+ this.warn(node, "Cannot toggle IMDSv1 because this Instance is associated with an existing Launch Template.");
54
+ return;
55
+ }
56
+ const lt = new provider_aws_1.launchTemplate.LaunchTemplate(node, "LaunchTemplate", {
57
+ metadataOptions: {
58
+ httpTokens: "required",
59
+ },
60
+ });
61
+ lt.name = aws_stack_1.AwsStack.uniqueId(lt);
62
+ node.instance.putLaunchTemplate({
63
+ name: lt.name,
64
+ version: lt.latestVersion.toString(),
65
+ });
66
+ }
67
+ warn(node, message) {
68
+ if (this.suppressLaunchTemplateWarning !== true) {
69
+ super.warn(node, message);
70
+ }
71
+ }
72
+ }
73
+ exports.InstanceRequireImdsv2Aspect = InstanceRequireImdsv2Aspect;
74
+ _a = JSII_RTTI_SYMBOL_1;
75
+ InstanceRequireImdsv2Aspect[_a] = { fqn: "terraconstructs.aws.compute.InstanceRequireImdsv2Aspect", version: "0.0.12" };
76
+ /**
77
+ * Aspect that applies IMDS configuration on EC2 Launch Template constructs.
78
+ *
79
+ * @see https://registry.terraform.io/providers/hashicorp/aws/5.68.0/docs/resources/launch_template#metadata-options
80
+ * @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html
81
+ */
82
+ class LaunchTemplateRequireImdsv2Aspect extends RequireImdsv2Aspect {
83
+ constructor(props) {
84
+ super(props);
85
+ }
86
+ visit(node) {
87
+ if (!(node instanceof launch_template_1.LaunchTemplate)) {
88
+ return;
89
+ }
90
+ const lt = node.node.tryFindChild("Resource");
91
+ const metadataOptions = lt.metadataOptionsInput;
92
+ // // metaDataOptions is ComplexListObject and can never be a token
93
+ // if (Tokenization.isResolvable(metadataOptions)) {
94
+ // this.warn(node, "LaunchTemplateData.MetadataOptions is a CDK token.");
95
+ // return;
96
+ // }
97
+ lt.putMetadataOptions({
98
+ ...metadataOptions,
99
+ httpTokens: "required",
100
+ });
101
+ }
102
+ }
103
+ exports.LaunchTemplateRequireImdsv2Aspect = LaunchTemplateRequireImdsv2Aspect;
104
+ _b = JSII_RTTI_SYMBOL_1;
105
+ LaunchTemplateRequireImdsv2Aspect[_b] = { fqn: "terraconstructs.aws.compute.LaunchTemplateRequireImdsv2Aspect", version: "0.0.12" };
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWlyZS1pbWRzdjItYXNwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL2FzcGVjdHMvcmVxdWlyZS1pbWRzdjItYXNwZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaUhBQWlIO0FBQ2pILHNEQUFxRDtBQUNyRCxpQ0FBNkM7QUFFN0MsK0NBQTJDO0FBQzNDLDBDQUF1QztBQUN2Qyx3REFBb0Q7QUFjcEQ7O0dBRUc7QUFDSCxNQUFlLG1CQUFtQjtJQUdoQyxZQUFZLEtBQWdDO1FBQzFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLEVBQUUsZ0JBQWdCLElBQUksS0FBSyxDQUFDO0lBQzNELENBQUM7SUFJRDs7Ozs7T0FLRztJQUNPLElBQUksQ0FBQyxJQUFnQixFQUFFLE9BQWU7UUFDOUMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDbkMsd0RBQXdEO1lBQ3hELG1CQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FDN0IsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLG1CQUFtQixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxPQUFPLEVBQUUsQ0FDekUsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFtQkQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSwyQkFBNEIsU0FBUSxtQkFBbUI7SUFHbEUsWUFBWSxLQUF3QztRQUNsRCxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDYixJQUFJLENBQUMsNkJBQTZCO1lBQ2hDLEtBQUssRUFBRSw2QkFBNkIsSUFBSSxLQUFLLENBQUM7SUFDbEQsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFnQjtRQUNwQixJQUFJLENBQUMsQ0FBQyxJQUFJLFlBQVksbUJBQVEsQ0FBQyxFQUFFLENBQUM7WUFDaEMsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLEVBQ0osNEZBQTRGLENBQzdGLENBQUM7WUFDRixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sRUFBRSxHQUFHLElBQUksNkJBQWMsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQ25FLGVBQWUsRUFBRTtnQkFDZixVQUFVLEVBQUUsVUFBVTthQUN2QjtTQUNGLENBQUMsQ0FBQztRQUNILEVBQUUsQ0FBQyxJQUFJLEdBQUcsb0JBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztZQUM5QixJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUk7WUFDYixPQUFPLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUU7U0FDckMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLElBQUksQ0FBQyxJQUFnQixFQUFFLE9BQWU7UUFDOUMsSUFBSSxJQUFJLENBQUMsNkJBQTZCLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDaEQsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7O0FBckNILGtFQXNDQzs7O0FBUUQ7Ozs7O0dBS0c7QUFDSCxNQUFhLGlDQUFrQyxTQUFRLG1CQUFtQjtJQUN4RSxZQUFZLEtBQThDO1FBQ3hELEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBZ0I7UUFDcEIsSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLGdDQUFjLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQy9CLFVBQVUsQ0FDc0IsQ0FBQztRQUNuQyxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUM7UUFDaEQsbUVBQW1FO1FBQ25FLG9EQUFvRDtRQUNwRCwyRUFBMkU7UUFDM0UsWUFBWTtRQUNaLElBQUk7UUFFSixFQUFFLENBQUMsa0JBQWtCLENBQUM7WUFDcEIsR0FBRyxlQUFlO1lBQ2xCLFVBQVUsRUFBRSxVQUFVO1NBQ3ZCLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBeEJILDhFQXlCQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE3NS4xL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1lYzIvbGliL2FzcGVjdHMvcmVxdWlyZS1pbWRzdjItYXNwZWN0LnRzXG5pbXBvcnQgeyBsYXVuY2hUZW1wbGF0ZSB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBJQXNwZWN0LCBBbm5vdGF0aW9ucyB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgSUNvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBBd3NTdGFjayB9IGZyb20gXCIuLi8uLi9hd3Mtc3RhY2tcIjtcbmltcG9ydCB7IEluc3RhbmNlIH0gZnJvbSBcIi4uL2luc3RhbmNlXCI7XG5pbXBvcnQgeyBMYXVuY2hUZW1wbGF0ZSB9IGZyb20gXCIuLi9sYXVuY2gtdGVtcGxhdGVcIjtcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBgUmVxdWlyZUltZHN2MkFzcGVjdGAuXG4gKi9cbmludGVyZmFjZSBSZXF1aXJlSW1kc3YyQXNwZWN0UHJvcHMge1xuICAvKipcbiAgICogV2hldGhlciB3YXJuaW5nIGFubm90YXRpb25zIGZyb20gdGhpcyBBc3BlY3Qgc2hvdWxkIGJlIHN1cHByZXNzZWQgb3Igbm90LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzdXBwcmVzc1dhcm5pbmdzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBBc3BlY3QgdGhhdCBtYWtlcyBJTURTdjIgcmVxdWlyZWQuXG4gKi9cbmFic3RyYWN0IGNsYXNzIFJlcXVpcmVJbWRzdjJBc3BlY3QgaW1wbGVtZW50cyBJQXNwZWN0IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHN1cHByZXNzV2FybmluZ3M6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHJvcHM/OiBSZXF1aXJlSW1kc3YyQXNwZWN0UHJvcHMpIHtcbiAgICB0aGlzLnN1cHByZXNzV2FybmluZ3MgPSBwcm9wcz8uc3VwcHJlc3NXYXJuaW5ncyA/PyBmYWxzZTtcbiAgfVxuXG4gIGFic3RyYWN0IHZpc2l0KG5vZGU6IElDb25zdHJ1Y3QpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgd2FybmluZyBhbm5vdGF0aW9uIHRvIGEgbm9kZSwgdW5sZXNzIGBzdXBwcmVzc1dhcm5pbmdzYCBpcyB0cnVlLlxuICAgKlxuICAgKiBAcGFyYW0gbm9kZSBUaGUgc2NvcGUgdG8gYWRkIHRoZSB3YXJuaW5nIHRvLlxuICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgd2FybmluZyBtZXNzYWdlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHdhcm4obm9kZTogSUNvbnN0cnVjdCwgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuc3VwcHJlc3NXYXJuaW5ncyAhPT0gdHJ1ZSkge1xuICAgICAgLy8gYEBhd3MtY2RrL2F3cy1lYzI6aW1kc3YyJHtSZXF1aXJlSW1kc3YyQXNwZWN0Lm5hbWV9YCxcbiAgICAgIEFubm90YXRpb25zLm9mKG5vZGUpLmFkZFdhcm5pbmcoXG4gICAgICAgIGAke1JlcXVpcmVJbWRzdjJBc3BlY3QubmFtZX0gZmFpbGVkIG9uIG5vZGUgJHtub2RlLm5vZGUuaWR9OiAke21lc3NhZ2V9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYEluc3RhbmNlUmVxdWlyZUltZHN2MkFzcGVjdGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFuY2VSZXF1aXJlSW1kc3YyQXNwZWN0UHJvcHNcbiAgZXh0ZW5kcyBSZXF1aXJlSW1kc3YyQXNwZWN0UHJvcHMge1xuICAvKipcbiAgICogV2hldGhlciB3YXJuaW5ncyB0aGF0IHdvdWxkIGJlIHJhaXNlZCB3aGVuIGFuIEluc3RhbmNlIGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBleGlzdGluZyBMYXVuY2ggVGVtcGxhdGVcbiAgICogc2hvdWxkIGJlIHN1cHByZXNzZWQgb3Igbm90LlxuICAgKlxuICAgKiBZb3UgY2FuIHNldCB0aGlzIHRvIGB0cnVlYCBpZiBgTGF1bmNoVGVtcGxhdGVJbWRzQXNwZWN0YCBpcyBiZWluZyB1c2VkIGFsb25nc2lkZSB0aGlzIEFzcGVjdCB0b1xuICAgKiBzdXBwcmVzcyBmYWxzZS1wb3NpdGl2ZSB3YXJuaW5ncyBiZWNhdXNlIGFueSBMYXVuY2ggVGVtcGxhdGVzIGFzc29jaWF0ZWQgd2l0aCBJbnN0YW5jZXMgd2lsbCBzdGlsbCBiZSBjb3ZlcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzdXBwcmVzc0xhdW5jaFRlbXBsYXRlV2FybmluZz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQXNwZWN0IHRoYXQgYXBwbGllcyBJTURTIGNvbmZpZ3VyYXRpb24gb24gRUMyIEluc3RhbmNlIGNvbnN0cnVjdHMuXG4gKlxuICogVGhpcyBhc3BlY3QgY29uZmlndXJlcyBJTURTIG9uIGFuIEVDMiBpbnN0YW5jZSBieSBjcmVhdGluZyBhIExhdW5jaCBUZW1wbGF0ZSB3aXRoIHRoZVxuICogSU1EUyBjb25maWd1cmF0aW9uIGFuZCBhc3NvY2lhdGluZyB0aGF0IExhdW5jaCBUZW1wbGF0ZSB3aXRoIHRoZSBpbnN0YW5jZS4gSWYgYW4gSW5zdGFuY2VcbiAqIGlzIGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIGEgTGF1bmNoIFRlbXBsYXRlLCBhIHdhcm5pbmcgd2lsbCAob3B0aW9uYWxseSkgYmUgYWRkZWQgdG8gdGhlXG4gKiBjb25zdHJ1Y3Qgbm9kZSBhbmQgaXQgd2lsbCBiZSBza2lwcGVkLlxuICpcbiAqIFRvIGNvdmVyIEluc3RhbmNlcyBhbHJlYWR5IGFzc29jaWF0ZWQgd2l0aCBMYXVuY2ggVGVtcGxhdGVzLCB1c2UgYExhdW5jaFRlbXBsYXRlSW1kc0FzcGVjdGAuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnN0YW5jZVJlcXVpcmVJbWRzdjJBc3BlY3QgZXh0ZW5kcyBSZXF1aXJlSW1kc3YyQXNwZWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBzdXBwcmVzc0xhdW5jaFRlbXBsYXRlV2FybmluZzogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcz86IEluc3RhbmNlUmVxdWlyZUltZHN2MkFzcGVjdFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3VwcHJlc3NMYXVuY2hUZW1wbGF0ZVdhcm5pbmcgPVxuICAgICAgcHJvcHM/LnN1cHByZXNzTGF1bmNoVGVtcGxhdGVXYXJuaW5nID8/IGZhbHNlO1xuICB9XG5cbiAgdmlzaXQobm9kZTogSUNvbnN0cnVjdCk6IHZvaWQge1xuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBJbnN0YW5jZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG5vZGUuaW5zdGFuY2UubGF1bmNoVGVtcGxhdGVJbnB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLndhcm4oXG4gICAgICAgIG5vZGUsXG4gICAgICAgIFwiQ2Fubm90IHRvZ2dsZSBJTURTdjEgYmVjYXVzZSB0aGlzIEluc3RhbmNlIGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBleGlzdGluZyBMYXVuY2ggVGVtcGxhdGUuXCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGx0ID0gbmV3IGxhdW5jaFRlbXBsYXRlLkxhdW5jaFRlbXBsYXRlKG5vZGUsIFwiTGF1bmNoVGVtcGxhdGVcIiwge1xuICAgICAgbWV0YWRhdGFPcHRpb25zOiB7XG4gICAgICAgIGh0dHBUb2tlbnM6IFwicmVxdWlyZWRcIixcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgbHQubmFtZSA9IEF3c1N0YWNrLnVuaXF1ZUlkKGx0KTtcbiAgICBub2RlLmluc3RhbmNlLnB1dExhdW5jaFRlbXBsYXRlKHtcbiAgICAgIG5hbWU6IGx0Lm5hbWUsXG4gICAgICB2ZXJzaW9uOiBsdC5sYXRlc3RWZXJzaW9uLnRvU3RyaW5nKCksXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgd2Fybihub2RlOiBJQ29uc3RydWN0LCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5zdXBwcmVzc0xhdW5jaFRlbXBsYXRlV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgc3VwZXIud2Fybihub2RlLCBtZXNzYWdlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBgTGF1bmNoVGVtcGxhdGVSZXF1aXJlSW1kc3YyQXNwZWN0YC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYXVuY2hUZW1wbGF0ZVJlcXVpcmVJbWRzdjJBc3BlY3RQcm9wc1xuICBleHRlbmRzIFJlcXVpcmVJbWRzdjJBc3BlY3RQcm9wcyB7fVxuXG4vKipcbiAqIEFzcGVjdCB0aGF0IGFwcGxpZXMgSU1EUyBjb25maWd1cmF0aW9uIG9uIEVDMiBMYXVuY2ggVGVtcGxhdGUgY29uc3RydWN0cy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNjguMC9kb2NzL3Jlc291cmNlcy9sYXVuY2hfdGVtcGxhdGUjbWV0YWRhdGEtb3B0aW9uc1xuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvZWMyLWluc3RhbmNlLW1ldGFkYXRhLmh0bWxcbiAqL1xuZXhwb3J0IGNsYXNzIExhdW5jaFRlbXBsYXRlUmVxdWlyZUltZHN2MkFzcGVjdCBleHRlbmRzIFJlcXVpcmVJbWRzdjJBc3BlY3Qge1xuICBjb25zdHJ1Y3Rvcihwcm9wcz86IExhdW5jaFRlbXBsYXRlUmVxdWlyZUltZHN2MkFzcGVjdFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgdmlzaXQobm9kZTogSUNvbnN0cnVjdCk6IHZvaWQge1xuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBMYXVuY2hUZW1wbGF0ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsdCA9IG5vZGUubm9kZS50cnlGaW5kQ2hpbGQoXG4gICAgICBcIlJlc291cmNlXCIsXG4gICAgKSBhcyBsYXVuY2hUZW1wbGF0ZS5MYXVuY2hUZW1wbGF0ZTtcbiAgICBjb25zdCBtZXRhZGF0YU9wdGlvbnMgPSBsdC5tZXRhZGF0YU9wdGlvbnNJbnB1dDtcbiAgICAvLyAvLyBtZXRhRGF0YU9wdGlvbnMgaXMgQ29tcGxleExpc3RPYmplY3QgYW5kIGNhbiBuZXZlciBiZSBhIHRva2VuXG4gICAgLy8gaWYgKFRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUobWV0YWRhdGFPcHRpb25zKSkge1xuICAgIC8vICAgdGhpcy53YXJuKG5vZGUsIFwiTGF1bmNoVGVtcGxhdGVEYXRhLk1ldGFkYXRhT3B0aW9ucyBpcyBhIENESyB0b2tlbi5cIik7XG4gICAgLy8gICByZXR1cm47XG4gICAgLy8gfVxuXG4gICAgbHQucHV0TWV0YWRhdGFPcHRpb25zKHtcbiAgICAgIC4uLm1ldGFkYXRhT3B0aW9ucyxcbiAgICAgIGh0dHBUb2tlbnM6IFwicmVxdWlyZWRcIixcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,172 @@
1
+ import { Construct } from "constructs";
2
+ import { InstanceType } from ".";
3
+ import { Connections } from "./connections";
4
+ import { IInstance, Instance, InstanceOutputs } from "./instance";
5
+ import { IMachineImage } from "./machine-image";
6
+ import { IPeer } from "./peer";
7
+ import { ISecurityGroup } from "./security-group";
8
+ import { BlockDevice } from "./volume";
9
+ import { IVpc, SubnetSelection } from "./vpc";
10
+ import { AwsConstructBase } from "../aws-construct";
11
+ import { AwsStack } from "../aws-stack";
12
+ import { IPrincipal, IRole } from "../iam";
13
+ /**
14
+ * Properties of the bastion host
15
+ *
16
+ *
17
+ */
18
+ export interface BastionHostLinuxProps {
19
+ /**
20
+ * In which AZ to place the instance within the VPC
21
+ *
22
+ * @default - Random zone.
23
+ */
24
+ readonly availabilityZone?: string;
25
+ /**
26
+ * VPC to launch the instance in.
27
+ */
28
+ readonly vpc: IVpc;
29
+ /**
30
+ * The name of the instance
31
+ *
32
+ * @default 'BastionHost'
33
+ */
34
+ readonly instanceName?: string;
35
+ /**
36
+ * Select the subnets to run the bastion host in.
37
+ * Set this to PUBLIC if you need to connect to this instance via the internet and cannot use SSM.
38
+ * You have to allow port 22 manually by using the connections field
39
+ *
40
+ * @default - private subnets of the supplied VPC
41
+ */
42
+ readonly subnetSelection?: SubnetSelection;
43
+ /**
44
+ * Security Group to assign to this instance
45
+ *
46
+ * @default - create new security group with no inbound and all outbound traffic allowed
47
+ */
48
+ readonly securityGroup?: ISecurityGroup;
49
+ /**
50
+ * Type of instance to launch
51
+ * @default 't3.nano'
52
+ */
53
+ readonly instanceType?: InstanceType;
54
+ /**
55
+ * The machine image to use, assumed to have SSM Agent preinstalled.
56
+ *
57
+ * @default - An Amazon Linux 2023 image if the `@aws-cdk/aws-ec2:bastionHostUseAmazonLinux2023ByDefault` feature flag is enabled. Otherwise, an Amazon Linux 2 image. In both cases, the image is kept up-to-date automatically (the instance
58
+ * may be replaced on every deployment) and already has SSM Agent installed.
59
+ */
60
+ readonly machineImage?: IMachineImage;
61
+ /**
62
+ * Specifies how block devices are exposed to the instance. You can specify virtual devices and EBS volumes.
63
+ *
64
+ * Each instance that is launched has an associated root device volume,
65
+ * either an Amazon EBS volume or an instance store volume.
66
+ * You can use block device mappings to specify additional EBS volumes or
67
+ * instance store volumes to attach to an instance when it is launched.
68
+ *
69
+ * @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html
70
+ *
71
+ * @default - Uses the block device mapping of the AMI
72
+ */
73
+ readonly blockDevices?: BlockDevice[];
74
+ /**
75
+ * Whether IMDSv2 should be required on this instance
76
+ *
77
+ * @default - false
78
+ */
79
+ readonly requireImdsv2?: boolean;
80
+ /**
81
+ * Determines whether changes to the UserData will force instance replacement.
82
+ *
83
+ * Depending on the EC2 instance type, modifying the UserData may either restart
84
+ * or replace the instance:
85
+ *
86
+ * - Instance store-backed instances are replaced.
87
+ * - EBS-backed instances are restarted.
88
+ *
89
+ * Note that by default, restarting does not execute the updated UserData, so an alternative
90
+ * mechanism is needed to ensure the instance re-executes the UserData.
91
+ *
92
+ * When set to `true`, the instance's Logical ID will depend on the UserData, causing
93
+ * CloudFormation to replace the instance if the UserData changes.
94
+ *
95
+ * @default - `true` if `initOptions` is specified, otherwise `false`.
96
+ */
97
+ readonly userDataCausesReplacement?: boolean;
98
+ }
99
+ /**
100
+ * This creates a linux bastion host you can use to connect to other instances or services in your VPC.
101
+ * The recommended way to connect to the bastion host is by using AWS Systems Manager Session Manager.
102
+ *
103
+ * The operating system is Amazon Linux 2 with the latest SSM agent installed
104
+ *
105
+ * You can also configure this bastion host to allow connections via SSH
106
+ *
107
+ *
108
+ * @resource aws_instance
109
+ */
110
+ export declare class BastionHostLinux extends AwsConstructBase implements IInstance {
111
+ get instanceOutputs(): InstanceOutputs;
112
+ get outputs(): Record<string, any>;
113
+ readonly stack: AwsStack;
114
+ /**
115
+ * Allows specify security group connections for the instance.
116
+ */
117
+ readonly connections: Connections;
118
+ /**
119
+ * The IAM role assumed by the instance.
120
+ */
121
+ readonly role: IRole;
122
+ /**
123
+ * The principal to grant permissions to
124
+ */
125
+ readonly grantPrincipal: IPrincipal;
126
+ /**
127
+ * The underlying instance resource
128
+ */
129
+ readonly instance: Instance;
130
+ /**
131
+ * @attribute
132
+ */
133
+ readonly instanceId: string;
134
+ /**
135
+ * @attribute
136
+ */
137
+ readonly instanceAvailabilityZone: string;
138
+ /**
139
+ * @attribute
140
+ */
141
+ readonly instancePrivateDnsName: string;
142
+ /**
143
+ * @attribute
144
+ */
145
+ readonly instancePrivateIp: string;
146
+ /**
147
+ * @attribute
148
+ */
149
+ readonly instancePublicDnsName: string;
150
+ /**
151
+ * @attribute
152
+ */
153
+ readonly instancePublicIp: string;
154
+ constructor(scope: Construct, id: string, props: BastionHostLinuxProps);
155
+ /**
156
+ * Returns the AmazonLinuxCpuType corresponding to the given instance architecture
157
+ * @param architecture the instance architecture value to convert
158
+ */
159
+ private toAmazonLinuxCpuType;
160
+ /**
161
+ * Allow SSH access from the given peer or peers
162
+ *
163
+ * Necessary if you want to connect to the instance using ssh. If not
164
+ * called, you should use SSM Session Manager to connect to the instance.
165
+ */
166
+ allowSshAccessFrom(...peer: IPeer[]): void;
167
+ /**
168
+ * Returns the machine image to use for the bastion host, respecting the feature flag
169
+ * to default to Amazon Linux 2023 if enabled, otherwise defaulting to Amazon Linux 2.
170
+ */
171
+ private getMachineImage;
172
+ }
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.BastionHostLinux = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ // https://github.com/aws/aws-cdk/blob/v2.175.1/packages/aws-cdk-lib/aws-ec2/lib/bastion-host.ts
7
+ const cdktf_1 = require("cdktf");
8
+ const _1 = require(".");
9
+ const instance_1 = require("./instance");
10
+ const machine_image_1 = require("./machine-image");
11
+ const port_1 = require("./port");
12
+ const aws_construct_1 = require("../aws-construct");
13
+ const aws_stack_1 = require("../aws-stack");
14
+ const iam_1 = require("../iam");
15
+ /**
16
+ * This creates a linux bastion host you can use to connect to other instances or services in your VPC.
17
+ * The recommended way to connect to the bastion host is by using AWS Systems Manager Session Manager.
18
+ *
19
+ * The operating system is Amazon Linux 2 with the latest SSM agent installed
20
+ *
21
+ * You can also configure this bastion host to allow connections via SSH
22
+ *
23
+ *
24
+ * @resource aws_instance
25
+ */
26
+ class BastionHostLinux extends aws_construct_1.AwsConstructBase {
27
+ get instanceOutputs() {
28
+ return {
29
+ instanceId: this.instanceId,
30
+ };
31
+ }
32
+ get outputs() {
33
+ return this.instanceOutputs;
34
+ }
35
+ constructor(scope, id, props) {
36
+ super(scope, id);
37
+ this.stack = aws_stack_1.AwsStack.ofAwsConstruct(scope);
38
+ const instanceType = props.instanceType ??
39
+ _1.InstanceType.of(_1.InstanceClass.T3, _1.InstanceSize.NANO);
40
+ this.instance = new instance_1.Instance(this, "Resource", {
41
+ vpc: props.vpc,
42
+ availabilityZone: props.availabilityZone,
43
+ securityGroup: props.securityGroup,
44
+ instanceName: props.instanceName ?? "BastionHost",
45
+ instanceType,
46
+ machineImage: this.getMachineImage(this, instanceType, props),
47
+ vpcSubnets: props.subnetSelection ?? {},
48
+ blockDevices: props.blockDevices ?? undefined,
49
+ // init: props.init,
50
+ // initOptions: props.initOptions,
51
+ requireImdsv2: props.requireImdsv2 ?? false,
52
+ userDataCausesReplacement: props.userDataCausesReplacement,
53
+ });
54
+ this.instance.addToRolePolicy(new iam_1.PolicyStatement({
55
+ actions: [
56
+ "ssmmessages:*",
57
+ "ssm:UpdateInstanceInformation",
58
+ "ec2messages:*",
59
+ ],
60
+ resources: ["*"],
61
+ }));
62
+ this.connections = this.instance.connections;
63
+ this.role = this.instance.role;
64
+ this.grantPrincipal = this.instance.role;
65
+ this.instanceId = this.instance.instanceId;
66
+ this.instancePrivateIp = this.instance.instancePrivateIp;
67
+ this.instanceAvailabilityZone = this.instance.instanceAvailabilityZone;
68
+ this.instancePrivateDnsName = this.instance.instancePrivateDnsName;
69
+ this.instancePublicIp = this.instance.instancePublicIp;
70
+ this.instancePublicDnsName = this.instance.instancePublicDnsName;
71
+ new cdktf_1.TerraformOutput(this, "BastionHostId", {
72
+ description: "Instance ID of the bastion host. Use this to connect via SSM Session Manager",
73
+ value: this.instanceId,
74
+ });
75
+ }
76
+ /**
77
+ * Returns the AmazonLinuxCpuType corresponding to the given instance architecture
78
+ * @param architecture the instance architecture value to convert
79
+ */
80
+ toAmazonLinuxCpuType(architecture) {
81
+ if (architecture === _1.InstanceArchitecture.ARM_64) {
82
+ return machine_image_1.AmazonLinuxCpuType.ARM_64;
83
+ }
84
+ else if (architecture === _1.InstanceArchitecture.X86_64) {
85
+ return machine_image_1.AmazonLinuxCpuType.X86_64;
86
+ }
87
+ throw new Error(`Unsupported instance architecture '${architecture}'`);
88
+ }
89
+ /**
90
+ * Allow SSH access from the given peer or peers
91
+ *
92
+ * Necessary if you want to connect to the instance using ssh. If not
93
+ * called, you should use SSM Session Manager to connect to the instance.
94
+ */
95
+ allowSshAccessFrom(...peer) {
96
+ peer.forEach((p) => {
97
+ this.connections.allowFrom(p, port_1.Port.tcp(22), "SSH access");
98
+ });
99
+ }
100
+ /**
101
+ * Returns the machine image to use for the bastion host, respecting the feature flag
102
+ * to default to Amazon Linux 2023 if enabled, otherwise defaulting to Amazon Linux 2.
103
+ */
104
+ getMachineImage(_scope, instanceType, props) {
105
+ const defaultMachineImage = machine_image_1.MachineImage.latestAmazonLinux2023({
106
+ cpuType: this.toAmazonLinuxCpuType(instanceType.architecture),
107
+ });
108
+ return props.machineImage ?? defaultMachineImage;
109
+ }
110
+ }
111
+ exports.BastionHostLinux = BastionHostLinux;
112
+ _a = JSII_RTTI_SYMBOL_1;
113
+ BastionHostLinux[_a] = { fqn: "terraconstructs.aws.compute.BastionHostLinux", version: "0.0.12" };
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzdGlvbi1ob3N0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL2Jhc3Rpb24taG9zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGdHQUFnRztBQUVoRyxpQ0FBd0M7QUFFeEMsd0JBS1c7QUFHWCx5Q0FLb0I7QUFDcEIsbURBSXlCO0FBRXpCLGlDQUE4QjtBQUk5QixvREFBb0Q7QUFDcEQsNENBQXdDO0FBQ3hDLGdDQUE0RDtBQWtINUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQWEsZ0JBQWlCLFNBQVEsZ0NBQWdCO0lBQ3BELElBQVcsZUFBZTtRQUN4QixPQUFPO1lBQ0wsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQzVCLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBc0RELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNEI7UUFDcEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLG9CQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLE1BQU0sWUFBWSxHQUNoQixLQUFLLENBQUMsWUFBWTtZQUNsQixlQUFZLENBQUMsRUFBRSxDQUFDLGdCQUFhLENBQUMsRUFBRSxFQUFFLGVBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksbUJBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQzdDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztZQUNkLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7WUFDeEMsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhO1lBQ2xDLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLGFBQWE7WUFDakQsWUFBWTtZQUNaLFlBQVksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDO1lBQzdELFVBQVUsRUFBRSxLQUFLLENBQUMsZUFBZSxJQUFJLEVBQUU7WUFDdkMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksU0FBUztZQUM3QyxvQkFBb0I7WUFDcEIsa0NBQWtDO1lBQ2xDLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYSxJQUFJLEtBQUs7WUFDM0MseUJBQXlCLEVBQUUsS0FBSyxDQUFDLHlCQUF5QjtTQUMzRCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FDM0IsSUFBSSxxQkFBZSxDQUFDO1lBQ2xCLE9BQU8sRUFBRTtnQkFDUCxlQUFlO2dCQUNmLCtCQUErQjtnQkFDL0IsZUFBZTthQUNoQjtZQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUNqQixDQUFDLENBQ0gsQ0FBQztRQUNGLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFDN0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFDM0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUM7UUFDekQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUM7UUFDdkUsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUM7UUFDbkUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7UUFDdkQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUM7UUFFakUsSUFBSSx1QkFBZSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUU7WUFDekMsV0FBVyxFQUNULDhFQUE4RTtZQUNoRixLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDdkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNLLG9CQUFvQixDQUMxQixZQUFrQztRQUVsQyxJQUFJLFlBQVksS0FBSyx1QkFBb0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqRCxPQUFPLGtDQUFrQixDQUFDLE1BQU0sQ0FBQztRQUNuQyxDQUFDO2FBQU0sSUFBSSxZQUFZLEtBQUssdUJBQW9CLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDeEQsT0FBTyxrQ0FBa0IsQ0FBQyxNQUFNLENBQUM7UUFDbkMsQ0FBQztRQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksa0JBQWtCLENBQUMsR0FBRyxJQUFhO1FBQ3hDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsV0FBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSyxlQUFlLENBQ3JCLE1BQWlCLEVBQ2pCLFlBQTBCLEVBQzFCLEtBQTRCO1FBRTVCLE1BQU0sbUJBQW1CLEdBQUcsNEJBQVksQ0FBQyxxQkFBcUIsQ0FBQztZQUM3RCxPQUFPLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7U0FDOUQsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxLQUFLLENBQUMsWUFBWSxJQUFJLG1CQUFtQixDQUFDO0lBQ25ELENBQUM7O0FBdEpILDRDQXVKQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE3NS4xL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1lYzIvbGliL2Jhc3Rpb24taG9zdC50c1xuXG5pbXBvcnQgeyBUZXJyYWZvcm1PdXRwdXQgfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBJbnN0YW5jZUFyY2hpdGVjdHVyZSxcbiAgSW5zdGFuY2VDbGFzcyxcbiAgSW5zdGFuY2VTaXplLFxuICBJbnN0YW5jZVR5cGUsXG59IGZyb20gXCIuXCI7XG4vLyBpbXBvcnQgeyBDbG91ZEZvcm1hdGlvbkluaXQgfSBmcm9tIFwiLi9jZm4taW5pdFwiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbnMgfSBmcm9tIFwiLi9jb25uZWN0aW9uc1wiO1xuaW1wb3J0IHtcbiAgLy8gQXBwbHlDbG91ZEZvcm1hdGlvbkluaXRPcHRpb25zLFxuICBJSW5zdGFuY2UsXG4gIEluc3RhbmNlLFxuICBJbnN0YW5jZU91dHB1dHMsXG59IGZyb20gXCIuL2luc3RhbmNlXCI7XG5pbXBvcnQge1xuICBBbWF6b25MaW51eENwdVR5cGUsXG4gIElNYWNoaW5lSW1hZ2UsXG4gIE1hY2hpbmVJbWFnZSxcbn0gZnJvbSBcIi4vbWFjaGluZS1pbWFnZVwiO1xuaW1wb3J0IHsgSVBlZXIgfSBmcm9tIFwiLi9wZWVyXCI7XG5pbXBvcnQgeyBQb3J0IH0gZnJvbSBcIi4vcG9ydFwiO1xuaW1wb3J0IHsgSVNlY3VyaXR5R3JvdXAgfSBmcm9tIFwiLi9zZWN1cml0eS1ncm91cFwiO1xuaW1wb3J0IHsgQmxvY2tEZXZpY2UgfSBmcm9tIFwiLi92b2x1bWVcIjtcbmltcG9ydCB7IElWcGMsIFN1Ym5ldFNlbGVjdGlvbiB9IGZyb20gXCIuL3ZwY1wiO1xuaW1wb3J0IHsgQXdzQ29uc3RydWN0QmFzZSB9IGZyb20gXCIuLi9hd3MtY29uc3RydWN0XCI7XG5pbXBvcnQgeyBBd3NTdGFjayB9IGZyb20gXCIuLi9hd3Mtc3RhY2tcIjtcbmltcG9ydCB7IElQcmluY2lwYWwsIElSb2xlLCBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tIFwiLi4vaWFtXCI7XG5cbi8qKlxuICogUHJvcGVydGllcyBvZiB0aGUgYmFzdGlvbiBob3N0XG4gKlxuICpcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXN0aW9uSG9zdExpbnV4UHJvcHMge1xuICAvKipcbiAgICogSW4gd2hpY2ggQVogdG8gcGxhY2UgdGhlIGluc3RhbmNlIHdpdGhpbiB0aGUgVlBDXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gUmFuZG9tIHpvbmUuXG4gICAqL1xuICByZWFkb25seSBhdmFpbGFiaWxpdHlab25lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWUEMgdG8gbGF1bmNoIHRoZSBpbnN0YW5jZSBpbi5cbiAgICovXG4gIHJlYWRvbmx5IHZwYzogSVZwYztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGluc3RhbmNlXG4gICAqXG4gICAqIEBkZWZhdWx0ICdCYXN0aW9uSG9zdCdcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogU2VsZWN0IHRoZSBzdWJuZXRzIHRvIHJ1biB0aGUgYmFzdGlvbiBob3N0IGluLlxuICAgKiBTZXQgdGhpcyB0byBQVUJMSUMgaWYgeW91IG5lZWQgdG8gY29ubmVjdCB0byB0aGlzIGluc3RhbmNlIHZpYSB0aGUgaW50ZXJuZXQgYW5kIGNhbm5vdCB1c2UgU1NNLlxuICAgKiBZb3UgaGF2ZSB0byBhbGxvdyBwb3J0IDIyIG1hbnVhbGx5IGJ5IHVzaW5nIHRoZSBjb25uZWN0aW9ucyBmaWVsZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHByaXZhdGUgc3VibmV0cyBvZiB0aGUgc3VwcGxpZWQgVlBDXG4gICAqL1xuICByZWFkb25seSBzdWJuZXRTZWxlY3Rpb24/OiBTdWJuZXRTZWxlY3Rpb247XG5cbiAgLyoqXG4gICAqIFNlY3VyaXR5IEdyb3VwIHRvIGFzc2lnbiB0byB0aGlzIGluc3RhbmNlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gY3JlYXRlIG5ldyBzZWN1cml0eSBncm91cCB3aXRoIG5vIGluYm91bmQgYW5kIGFsbCBvdXRib3VuZCB0cmFmZmljIGFsbG93ZWRcbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXA/OiBJU2VjdXJpdHlHcm91cDtcblxuICAvKipcbiAgICogVHlwZSBvZiBpbnN0YW5jZSB0byBsYXVuY2hcbiAgICogQGRlZmF1bHQgJ3QzLm5hbm8nXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZVR5cGU/OiBJbnN0YW5jZVR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBtYWNoaW5lIGltYWdlIHRvIHVzZSwgYXNzdW1lZCB0byBoYXZlIFNTTSBBZ2VudCBwcmVpbnN0YWxsZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQW4gQW1hem9uIExpbnV4IDIwMjMgaW1hZ2UgaWYgdGhlIGBAYXdzLWNkay9hd3MtZWMyOmJhc3Rpb25Ib3N0VXNlQW1hem9uTGludXgyMDIzQnlEZWZhdWx0YCBmZWF0dXJlIGZsYWcgaXMgZW5hYmxlZC4gT3RoZXJ3aXNlLCBhbiBBbWF6b24gTGludXggMiBpbWFnZS4gSW4gYm90aCBjYXNlcywgdGhlIGltYWdlIGlzIGtlcHQgdXAtdG8tZGF0ZSBhdXRvbWF0aWNhbGx5ICh0aGUgaW5zdGFuY2VcbiAgICogbWF5IGJlIHJlcGxhY2VkIG9uIGV2ZXJ5IGRlcGxveW1lbnQpIGFuZCBhbHJlYWR5IGhhcyBTU00gQWdlbnQgaW5zdGFsbGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbWFjaGluZUltYWdlPzogSU1hY2hpbmVJbWFnZTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyBibG9jayBkZXZpY2VzIGFyZSBleHBvc2VkIHRvIHRoZSBpbnN0YW5jZS4gWW91IGNhbiBzcGVjaWZ5IHZpcnR1YWwgZGV2aWNlcyBhbmQgRUJTIHZvbHVtZXMuXG4gICAqXG4gICAqIEVhY2ggaW5zdGFuY2UgdGhhdCBpcyBsYXVuY2hlZCBoYXMgYW4gYXNzb2NpYXRlZCByb290IGRldmljZSB2b2x1bWUsXG4gICAqIGVpdGhlciBhbiBBbWF6b24gRUJTIHZvbHVtZSBvciBhbiBpbnN0YW5jZSBzdG9yZSB2b2x1bWUuXG4gICAqIFlvdSBjYW4gdXNlIGJsb2NrIGRldmljZSBtYXBwaW5ncyB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgRUJTIHZvbHVtZXMgb3JcbiAgICogaW5zdGFuY2Ugc3RvcmUgdm9sdW1lcyB0byBhdHRhY2ggdG8gYW4gaW5zdGFuY2Ugd2hlbiBpdCBpcyBsYXVuY2hlZC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvYmxvY2stZGV2aWNlLW1hcHBpbmctY29uY2VwdHMuaHRtbFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFVzZXMgdGhlIGJsb2NrIGRldmljZSBtYXBwaW5nIG9mIHRoZSBBTUlcbiAgICovXG4gIHJlYWRvbmx5IGJsb2NrRGV2aWNlcz86IEJsb2NrRGV2aWNlW107XG5cbiAgLy8gLyoqXG4gIC8vICAqIEFwcGx5IHRoZSBnaXZlbiBDbG91ZEZvcm1hdGlvbiBJbml0IGNvbmZpZ3VyYXRpb24gdG8gdGhlIGluc3RhbmNlIGF0IHN0YXJ0dXBcbiAgLy8gICpcbiAgLy8gICogQGRlZmF1bHQgLSBubyBDbG91ZEZvcm1hdGlvbiBpbml0XG4gIC8vICAqL1xuICAvLyByZWFkb25seSBpbml0PzogQ2xvdWRGb3JtYXRpb25Jbml0O1xuXG4gIC8vIC8qKlxuICAvLyAgKiBVc2UgdGhlIGdpdmVuIG9wdGlvbnMgZm9yIGFwcGx5aW5nIENsb3VkRm9ybWF0aW9uIEluaXRcbiAgLy8gICpcbiAgLy8gICogRGVzY3JpYmVzIHRoZSBjb25maWdzZXRzIHRvIHVzZSBhbmQgdGhlIHRpbWVvdXQgdG8gd2FpdFxuICAvLyAgKlxuICAvLyAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgb3B0aW9uc1xuICAvLyAgKi9cbiAgLy8gcmVhZG9ubHkgaW5pdE9wdGlvbnM/OiBBcHBseUNsb3VkRm9ybWF0aW9uSW5pdE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgSU1EU3YyIHNob3VsZCBiZSByZXF1aXJlZCBvbiB0aGlzIGluc3RhbmNlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVJbWRzdjI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgY2hhbmdlcyB0byB0aGUgVXNlckRhdGEgd2lsbCBmb3JjZSBpbnN0YW5jZSByZXBsYWNlbWVudC5cbiAgICpcbiAgICogRGVwZW5kaW5nIG9uIHRoZSBFQzIgaW5zdGFuY2UgdHlwZSwgbW9kaWZ5aW5nIHRoZSBVc2VyRGF0YSBtYXkgZWl0aGVyIHJlc3RhcnRcbiAgICogb3IgcmVwbGFjZSB0aGUgaW5zdGFuY2U6XG4gICAqXG4gICAqIC0gSW5zdGFuY2Ugc3RvcmUtYmFja2VkIGluc3RhbmNlcyBhcmUgcmVwbGFjZWQuXG4gICAqIC0gRUJTLWJhY2tlZCBpbnN0YW5jZXMgYXJlIHJlc3RhcnRlZC5cbiAgICpcbiAgICogTm90ZSB0aGF0IGJ5IGRlZmF1bHQsIHJlc3RhcnRpbmcgZG9lcyBub3QgZXhlY3V0ZSB0aGUgdXBkYXRlZCBVc2VyRGF0YSwgc28gYW4gYWx0ZXJuYXRpdmVcbiAgICogbWVjaGFuaXNtIGlzIG5lZWRlZCB0byBlbnN1cmUgdGhlIGluc3RhbmNlIHJlLWV4ZWN1dGVzIHRoZSBVc2VyRGF0YS5cbiAgICpcbiAgICogV2hlbiBzZXQgdG8gYHRydWVgLCB0aGUgaW5zdGFuY2UncyBMb2dpY2FsIElEIHdpbGwgZGVwZW5kIG9uIHRoZSBVc2VyRGF0YSwgY2F1c2luZ1xuICAgKiBDbG91ZEZvcm1hdGlvbiB0byByZXBsYWNlIHRoZSBpbnN0YW5jZSBpZiB0aGUgVXNlckRhdGEgY2hhbmdlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBgdHJ1ZWAgaWYgYGluaXRPcHRpb25zYCBpcyBzcGVjaWZpZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgcmVhZG9ubHkgdXNlckRhdGFDYXVzZXNSZXBsYWNlbWVudD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhpcyBjcmVhdGVzIGEgbGludXggYmFzdGlvbiBob3N0IHlvdSBjYW4gdXNlIHRvIGNvbm5lY3QgdG8gb3RoZXIgaW5zdGFuY2VzIG9yIHNlcnZpY2VzIGluIHlvdXIgVlBDLlxuICogVGhlIHJlY29tbWVuZGVkIHdheSB0byBjb25uZWN0IHRvIHRoZSBiYXN0aW9uIGhvc3QgaXMgYnkgdXNpbmcgQVdTIFN5c3RlbXMgTWFuYWdlciBTZXNzaW9uIE1hbmFnZXIuXG4gKlxuICogVGhlIG9wZXJhdGluZyBzeXN0ZW0gaXMgQW1hem9uIExpbnV4IDIgd2l0aCB0aGUgbGF0ZXN0IFNTTSBhZ2VudCBpbnN0YWxsZWRcbiAqXG4gKiBZb3UgY2FuIGFsc28gY29uZmlndXJlIHRoaXMgYmFzdGlvbiBob3N0IHRvIGFsbG93IGNvbm5lY3Rpb25zIHZpYSBTU0hcbiAqXG4gKlxuICogQHJlc291cmNlIGF3c19pbnN0YW5jZVxuICovXG5leHBvcnQgY2xhc3MgQmFzdGlvbkhvc3RMaW51eCBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJSW5zdGFuY2Uge1xuICBwdWJsaWMgZ2V0IGluc3RhbmNlT3V0cHV0cygpOiBJbnN0YW5jZU91dHB1dHMge1xuICAgIHJldHVybiB7XG4gICAgICBpbnN0YW5jZUlkOiB0aGlzLmluc3RhbmNlSWQsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFuY2VPdXRwdXRzO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHN0YWNrOiBBd3NTdGFjaztcblxuICAvKipcbiAgICogQWxsb3dzIHNwZWNpZnkgc2VjdXJpdHkgZ3JvdXAgY29ubmVjdGlvbnMgZm9yIHRoZSBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9uczogQ29ubmVjdGlvbnM7XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSBhc3N1bWVkIGJ5IHRoZSBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb2xlOiBJUm9sZTtcblxuICAvKipcbiAgICogVGhlIHByaW5jaXBhbCB0byBncmFudCBwZXJtaXNzaW9ucyB0b1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsOiBJUHJpbmNpcGFsO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5kZXJseWluZyBpbnN0YW5jZSByZXNvdXJjZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlOiBJbnN0YW5jZTtcblxuICAvKipcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlQXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFuY2VQcml2YXRlRG5zTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFuY2VQcml2YXRlSXA6IHN0cmluZztcblxuICAvKipcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlUHVibGljRG5zTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFuY2VQdWJsaWNJcDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBCYXN0aW9uSG9zdExpbnV4UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMuc3RhY2sgPSBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdChzY29wZSk7XG4gICAgY29uc3QgaW5zdGFuY2VUeXBlID1cbiAgICAgIHByb3BzLmluc3RhbmNlVHlwZSA/P1xuICAgICAgSW5zdGFuY2VUeXBlLm9mKEluc3RhbmNlQ2xhc3MuVDMsIEluc3RhbmNlU2l6ZS5OQU5PKTtcbiAgICB0aGlzLmluc3RhbmNlID0gbmV3IEluc3RhbmNlKHRoaXMsIFwiUmVzb3VyY2VcIiwge1xuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICBhdmFpbGFiaWxpdHlab25lOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgc2VjdXJpdHlHcm91cDogcHJvcHMuc2VjdXJpdHlHcm91cCxcbiAgICAgIGluc3RhbmNlTmFtZTogcHJvcHMuaW5zdGFuY2VOYW1lID8/IFwiQmFzdGlvbkhvc3RcIixcbiAgICAgIGluc3RhbmNlVHlwZSxcbiAgICAgIG1hY2hpbmVJbWFnZTogdGhpcy5nZXRNYWNoaW5lSW1hZ2UodGhpcywgaW5zdGFuY2VUeXBlLCBwcm9wcyksXG4gICAgICB2cGNTdWJuZXRzOiBwcm9wcy5zdWJuZXRTZWxlY3Rpb24gPz8ge30sXG4gICAgICBibG9ja0RldmljZXM6IHByb3BzLmJsb2NrRGV2aWNlcyA/PyB1bmRlZmluZWQsXG4gICAgICAvLyBpbml0OiBwcm9wcy5pbml0LFxuICAgICAgLy8gaW5pdE9wdGlvbnM6IHByb3BzLmluaXRPcHRpb25zLFxuICAgICAgcmVxdWlyZUltZHN2MjogcHJvcHMucmVxdWlyZUltZHN2MiA/PyBmYWxzZSxcbiAgICAgIHVzZXJEYXRhQ2F1c2VzUmVwbGFjZW1lbnQ6IHByb3BzLnVzZXJEYXRhQ2F1c2VzUmVwbGFjZW1lbnQsXG4gICAgfSk7XG4gICAgdGhpcy5pbnN0YW5jZS5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIFwic3NtbWVzc2FnZXM6KlwiLFxuICAgICAgICAgIFwic3NtOlVwZGF0ZUluc3RhbmNlSW5mb3JtYXRpb25cIixcbiAgICAgICAgICBcImVjMm1lc3NhZ2VzOipcIixcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgfSksXG4gICAgKTtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5pbnN0YW5jZS5jb25uZWN0aW9ucztcbiAgICB0aGlzLnJvbGUgPSB0aGlzLmluc3RhbmNlLnJvbGU7XG4gICAgdGhpcy5ncmFudFByaW5jaXBhbCA9IHRoaXMuaW5zdGFuY2Uucm9sZTtcbiAgICB0aGlzLmluc3RhbmNlSWQgPSB0aGlzLmluc3RhbmNlLmluc3RhbmNlSWQ7XG4gICAgdGhpcy5pbnN0YW5jZVByaXZhdGVJcCA9IHRoaXMuaW5zdGFuY2UuaW5zdGFuY2VQcml2YXRlSXA7XG4gICAgdGhpcy5pbnN0YW5jZUF2YWlsYWJpbGl0eVpvbmUgPSB0aGlzLmluc3RhbmNlLmluc3RhbmNlQXZhaWxhYmlsaXR5Wm9uZTtcbiAgICB0aGlzLmluc3RhbmNlUHJpdmF0ZURuc05hbWUgPSB0aGlzLmluc3RhbmNlLmluc3RhbmNlUHJpdmF0ZURuc05hbWU7XG4gICAgdGhpcy5pbnN0YW5jZVB1YmxpY0lwID0gdGhpcy5pbnN0YW5jZS5pbnN0YW5jZVB1YmxpY0lwO1xuICAgIHRoaXMuaW5zdGFuY2VQdWJsaWNEbnNOYW1lID0gdGhpcy5pbnN0YW5jZS5pbnN0YW5jZVB1YmxpY0Ruc05hbWU7XG5cbiAgICBuZXcgVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiQmFzdGlvbkhvc3RJZFwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJJbnN0YW5jZSBJRCBvZiB0aGUgYmFzdGlvbiBob3N0LiBVc2UgdGhpcyB0byBjb25uZWN0IHZpYSBTU00gU2Vzc2lvbiBNYW5hZ2VyXCIsXG4gICAgICB2YWx1ZTogdGhpcy5pbnN0YW5jZUlkLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIEFtYXpvbkxpbnV4Q3B1VHlwZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBpbnN0YW5jZSBhcmNoaXRlY3R1cmVcbiAgICogQHBhcmFtIGFyY2hpdGVjdHVyZSB0aGUgaW5zdGFuY2UgYXJjaGl0ZWN0dXJlIHZhbHVlIHRvIGNvbnZlcnRcbiAgICovXG4gIHByaXZhdGUgdG9BbWF6b25MaW51eENwdVR5cGUoXG4gICAgYXJjaGl0ZWN0dXJlOiBJbnN0YW5jZUFyY2hpdGVjdHVyZSxcbiAgKTogQW1hem9uTGludXhDcHVUeXBlIHtcbiAgICBpZiAoYXJjaGl0ZWN0dXJlID09PSBJbnN0YW5jZUFyY2hpdGVjdHVyZS5BUk1fNjQpIHtcbiAgICAgIHJldHVybiBBbWF6b25MaW51eENwdVR5cGUuQVJNXzY0O1xuICAgIH0gZWxzZSBpZiAoYXJjaGl0ZWN0dXJlID09PSBJbnN0YW5jZUFyY2hpdGVjdHVyZS5YODZfNjQpIHtcbiAgICAgIHJldHVybiBBbWF6b25MaW51eENwdVR5cGUuWDg2XzY0O1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgaW5zdGFuY2UgYXJjaGl0ZWN0dXJlICcke2FyY2hpdGVjdHVyZX0nYCk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgU1NIIGFjY2VzcyBmcm9tIHRoZSBnaXZlbiBwZWVyIG9yIHBlZXJzXG4gICAqXG4gICAqIE5lY2Vzc2FyeSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHRvIHRoZSBpbnN0YW5jZSB1c2luZyBzc2guIElmIG5vdFxuICAgKiBjYWxsZWQsIHlvdSBzaG91bGQgdXNlIFNTTSBTZXNzaW9uIE1hbmFnZXIgdG8gY29ubmVjdCB0byB0aGUgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWxsb3dTc2hBY2Nlc3NGcm9tKC4uLnBlZXI6IElQZWVyW10pOiB2b2lkIHtcbiAgICBwZWVyLmZvckVhY2goKHApID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdGlvbnMuYWxsb3dGcm9tKHAsIFBvcnQudGNwKDIyKSwgXCJTU0ggYWNjZXNzXCIpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG1hY2hpbmUgaW1hZ2UgdG8gdXNlIGZvciB0aGUgYmFzdGlvbiBob3N0LCByZXNwZWN0aW5nIHRoZSBmZWF0dXJlIGZsYWdcbiAgICogdG8gZGVmYXVsdCB0byBBbWF6b24gTGludXggMjAyMyBpZiBlbmFibGVkLCBvdGhlcndpc2UgZGVmYXVsdGluZyB0byBBbWF6b24gTGludXggMi5cbiAgICovXG4gIHByaXZhdGUgZ2V0TWFjaGluZUltYWdlKFxuICAgIF9zY29wZTogQ29uc3RydWN0LFxuICAgIGluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlLFxuICAgIHByb3BzOiBCYXN0aW9uSG9zdExpbnV4UHJvcHMsXG4gICk6IElNYWNoaW5lSW1hZ2Uge1xuICAgIGNvbnN0IGRlZmF1bHRNYWNoaW5lSW1hZ2UgPSBNYWNoaW5lSW1hZ2UubGF0ZXN0QW1hem9uTGludXgyMDIzKHtcbiAgICAgIGNwdVR5cGU6IHRoaXMudG9BbWF6b25MaW51eENwdVR5cGUoaW5zdGFuY2VUeXBlLmFyY2hpdGVjdHVyZSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHByb3BzLm1hY2hpbmVJbWFnZSA/PyBkZWZhdWx0TWFjaGluZUltYWdlO1xuICB9XG59XG4iXX0=
@@ -64,5 +64,5 @@ class Chain {
64
64
  }
65
65
  exports.Chain = Chain;
66
66
  _a = JSII_RTTI_SYMBOL_1;
67
- Chain[_a] = { fqn: "terraconstructs.aws.compute.Chain", version: "0.0.10" };
67
+ Chain[_a] = { fqn: "terraconstructs.aws.compute.Chain", version: "0.0.12" };
68
68
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvY2hhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtR0FBbUc7QUFFbkcsZ0RBQTREO0FBSTVEOzs7OztHQUtHO0FBQ0gsTUFBYSxLQUFLO0lBQ2hCOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFpQjtRQUNuQyxPQUFPLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQWlCLEVBQUUsSUFBZ0I7UUFDeEQsT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FDbEIsVUFBaUIsRUFDakIsU0FBc0IsRUFDdEIsU0FBcUI7UUFFckIsT0FBTyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFpQkQsWUFDRSxVQUFpQixFQUNqQixTQUFzQixFQUNMLFNBQXFCO1FBQXJCLGNBQVMsR0FBVCxTQUFTLENBQVk7UUFFdEMsSUFBSSxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNJLElBQUksQ0FBQyxJQUFnQjtRQUMxQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQ2IsNkNBQTZDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxxQkFBcUIsQ0FDcEYsQ0FBQztRQUNKLENBQUM7UUFFRCxLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLENBQUM7UUFFRCxPQUFPLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksYUFBYSxDQUFDLEVBQVUsRUFBRSxRQUF1QixFQUFFO1FBQ3hELE9BQU8sSUFBSSxtQkFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvRCxDQUFDOztBQWhGSCxzQkFpRkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNjAuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucy9saWIvY2hhaW4udHNcblxuaW1wb3J0IHsgUGFyYWxsZWwsIFBhcmFsbGVsUHJvcHMgfSBmcm9tIFwiLi9zdGF0ZXMvcGFyYWxsZWxcIjtcbmltcG9ydCB7IFN0YXRlIH0gZnJvbSBcIi4vc3RhdGVzL3N0YXRlXCI7XG5pbXBvcnQgeyBJQ2hhaW5hYmxlLCBJTmV4dGFibGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIEEgY29sbGVjdGlvbiBvZiBzdGF0ZXMgdG8gY2hhaW4gb250b1xuICpcbiAqIEEgQ2hhaW4gaGFzIGEgc3RhcnQgYW5kIHplcm8gb3IgbW9yZSBjaGFpbmFibGUgZW5kcy4gSWYgdGhlcmUgYXJlXG4gKiB6ZXJvIGVuZHMsIGNhbGxpbmcgbmV4dCgpIG9uIHRoZSBDaGFpbiB3aWxsIGZhaWwuXG4gKi9cbmV4cG9ydCBjbGFzcyBDaGFpbiBpbXBsZW1lbnRzIElDaGFpbmFibGUge1xuICAvKipcbiAgICogQmVnaW4gYSBuZXcgQ2hhaW4gZnJvbSBvbmUgY2hhaW5hYmxlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHN0YXJ0KHN0YXRlOiBJQ2hhaW5hYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBDaGFpbihzdGF0ZS5zdGFydFN0YXRlLCBzdGF0ZS5lbmRTdGF0ZXMsIHN0YXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGEgQ2hhaW4gd2l0aCB0aGUgc3RhcnQgZnJvbSBvbmUgY2hhaW4gYW5kIHRoZSBlbmRzIGZyb20gYW5vdGhlclxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzZXF1ZW5jZShzdGFydDogSUNoYWluYWJsZSwgbmV4dDogSUNoYWluYWJsZSkge1xuICAgIHJldHVybiBuZXcgQ2hhaW4oc3RhcnQuc3RhcnRTdGF0ZSwgbmV4dC5lbmRTdGF0ZXMsIG5leHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYSBDaGFpbiB3aXRoIHNwZWNpZmljIHN0YXJ0IGFuZCBlbmQgc3RhdGVzLCBhbmQgYSBsYXN0LWFkZGVkIENoYWluYWJsZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjdXN0b20oXG4gICAgc3RhcnRTdGF0ZTogU3RhdGUsXG4gICAgZW5kU3RhdGVzOiBJTmV4dGFibGVbXSxcbiAgICBsYXN0QWRkZWQ6IElDaGFpbmFibGUsXG4gICkge1xuICAgIHJldHVybiBuZXcgQ2hhaW4oc3RhcnRTdGF0ZSwgZW5kU3RhdGVzLCBsYXN0QWRkZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIElkZW50aWZ5IHRoaXMgQ2hhaW5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhcnQgc3RhdGUgb2YgdGhpcyBjaGFpblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN0YXJ0U3RhdGU6IFN0YXRlO1xuXG4gIC8qKlxuICAgKiBUaGUgY2hhaW5hYmxlIGVuZCBzdGF0ZShzKSBvZiB0aGlzIGNoYWluXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZW5kU3RhdGVzOiBJTmV4dGFibGVbXTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgIHN0YXJ0U3RhdGU6IFN0YXRlLFxuICAgIGVuZFN0YXRlczogSU5leHRhYmxlW10sXG4gICAgcHJpdmF0ZSByZWFkb25seSBsYXN0QWRkZWQ6IElDaGFpbmFibGUsXG4gICkge1xuICAgIHRoaXMuaWQgPSBsYXN0QWRkZWQuaWQ7XG4gICAgdGhpcy5zdGFydFN0YXRlID0gc3RhcnRTdGF0ZTtcbiAgICB0aGlzLmVuZFN0YXRlcyA9IGVuZFN0YXRlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb250aW51ZSBub3JtYWwgZXhlY3V0aW9uIHdpdGggdGhlIGdpdmVuIHN0YXRlXG4gICAqL1xuICBwdWJsaWMgbmV4dChuZXh0OiBJQ2hhaW5hYmxlKTogQ2hhaW4ge1xuICAgIGlmICh0aGlzLmVuZFN0YXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBhZGQgdG8gY2hhaW46IGxhc3Qgc3RhdGUgaW4gY2hhaW4gKCR7dGhpcy5sYXN0QWRkZWQuaWR9KSBkb2VzIG5vdCBhbGxvdyBpdGAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZW5kU3RhdGUgb2YgdGhpcy5lbmRTdGF0ZXMpIHtcbiAgICAgIGVuZFN0YXRlLm5leHQobmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBDaGFpbih0aGlzLnN0YXJ0U3RhdGUsIG5leHQuZW5kU3RhdGVzLCBuZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBzaW5nbGUgc3RhdGUgdGhhdCBlbmNvbXBhc3NlcyBhbGwgc3RhdGVzIGluIHRoZSBjaGFpblxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGFkZCBlcnJvciBoYW5kbGluZyB0byBhIHNlcXVlbmNlIG9mIHN0YXRlcy5cbiAgICpcbiAgICogQmUgYXdhcmUgdGhhdCB0aGlzIGNoYW5nZXMgdGhlIHJlc3VsdCBvZiB0aGUgaW5uZXIgc3RhdGUgbWFjaGluZVxuICAgKiB0byBiZSBhbiBhcnJheSB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIHN0YXRlIG1hY2hpbmUgaW4gaXQuIEFkanVzdFxuICAgKiB5b3VyIHBhdGhzIGFjY29yZGluZ2x5LiBGb3IgZXhhbXBsZSwgY2hhbmdlICdvdXRwdXRQYXRoJyB0b1xuICAgKiAnJFswXScuXG4gICAqL1xuICBwdWJsaWMgdG9TaW5nbGVTdGF0ZShpZDogc3RyaW5nLCBwcm9wczogUGFyYWxsZWxQcm9wcyA9IHt9KTogUGFyYWxsZWwge1xuICAgIHJldHVybiBuZXcgUGFyYWxsZWwodGhpcy5zdGFydFN0YXRlLCBpZCwgcHJvcHMpLmJyYW5jaCh0aGlzKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Return the splits necessary to allocate the given sequence of cidrs in the given order
3
+ *
4
+ * The entire block is of size 'rootNetmask', and subsequent blocks will be allocated
5
+ * from it sized according to the sizes in the 'netmasks' array.
6
+ *
7
+ * The return value is a list of `CidrSplit` objects, which represent
8
+ * invocations of a pair of `Fn.select(Fn.cidr(...))` operations.
9
+ *
10
+ * Strategy: walk through the IP block space, clipping to the next possible
11
+ * start of a block of the given size, then allocate it. Here is an unrealistic
12
+ * example (with a weird ordering of the netmasks to show how clipping and hence
13
+ * space wasting plays out in practice):
14
+ *
15
+ * root space /16
16
+ * ┌──────────────────────────────────────────────────────────────────────────────────────────────┐
17
+ * │ │
18
+ * A /21 B /19
19
+ * ┌───┬───┬───┬───┬───────────────┬───────────────┬───┬───────────┬───────────────┬──────────────┐
20
+ * │ A │ A │ A │###│ B │ B │ A │###########│ B │ .... │
21
+ * └───┴───┴───┴───┴───────────────┴───────────────┴───┴───────────┴───────────────┴──────────────┘
22
+ * ^^^______ wasted space _________________^^^^^^
23
+ */
24
+ export declare function calculateCidrSplits(rootNetmask: number, netmasks: number[]): CidrSplit[];
25
+ /**
26
+ * A representation of a pair of `Fn.select(Fn.cidr())` invocations
27
+ */
28
+ export interface CidrSplit {
29
+ /**
30
+ * The netmask of this block size
31
+ * (If you want a /24, netmask=24).
32
+ */
33
+ readonly netmask: number;
34
+ /**
35
+ * newbits = (childNetmask - rootNetmask), i.e. how many additional bits
36
+ * beyond the root's netmask we're subdividing by.
37
+ *
38
+ * Used directly by Terraform's `cidrsubnet(...)`.
39
+ */
40
+ readonly newbits: number;
41
+ /**
42
+ * How many parts the mask needs to be split into
43
+ */
44
+ readonly count: number;
45
+ /**
46
+ * What subnet index to select from the split
47
+ */
48
+ readonly index: number;
49
+ }
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ // https://github.com/aws/aws-cdk/blob/v2.175.1/packages/aws-cdk-lib/aws-ec2/lib/cidr-splits.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.calculateCidrSplits = calculateCidrSplits;
5
+ /**
6
+ * Return the splits necessary to allocate the given sequence of cidrs in the given order
7
+ *
8
+ * The entire block is of size 'rootNetmask', and subsequent blocks will be allocated
9
+ * from it sized according to the sizes in the 'netmasks' array.
10
+ *
11
+ * The return value is a list of `CidrSplit` objects, which represent
12
+ * invocations of a pair of `Fn.select(Fn.cidr(...))` operations.
13
+ *
14
+ * Strategy: walk through the IP block space, clipping to the next possible
15
+ * start of a block of the given size, then allocate it. Here is an unrealistic
16
+ * example (with a weird ordering of the netmasks to show how clipping and hence
17
+ * space wasting plays out in practice):
18
+ *
19
+ * root space /16
20
+ * ┌──────────────────────────────────────────────────────────────────────────────────────────────┐
21
+ * │ │
22
+ * A /21 B /19
23
+ * ┌───┬───┬───┬───┬───────────────┬───────────────┬───┬───────────┬───────────────┬──────────────┐
24
+ * │ A │ A │ A │###│ B │ B │ A │###########│ B │ .... │
25
+ * └───┴───┴───┴───┴───────────────┴───────────────┴───┴───────────┴───────────────┴──────────────┘
26
+ * ^^^______ wasted space _________________^^^^^^
27
+ */
28
+ function calculateCidrSplits(rootNetmask, netmasks) {
29
+ // NOTE: Terraform cidrsubnets() function does the same thing, but forces TF Tokens
30
+ // Local implementation of this logic allows more powerful configuration through constructs
31
+ // ref: https://developer.hashicorp.com/terraform/language/v1.7.x/functions/cidrsubnets
32
+ const ret = new Array();
33
+ let offset = 0;
34
+ for (const netmask of netmasks) {
35
+ const size = Math.pow(2, 32 - netmask);
36
+ // Clip offset to the next block of the given size
37
+ offset = nextMultiple(offset, size);
38
+ const count = Math.pow(2, netmask - rootNetmask);
39
+ const newbits = netmask - rootNetmask;
40
+ // if newbits is negative, it means the child netmask is bigger than the root netmask
41
+ // this will be caught by offset > Math.pow(2, 32 - rootNetmask) check below
42
+ ret.push({
43
+ count,
44
+ netmask,
45
+ newbits,
46
+ index: offset / size,
47
+ });
48
+ // Consume
49
+ offset += size;
50
+ }
51
+ if (offset > Math.pow(2, 32 - rootNetmask)) {
52
+ throw new Error(`IP space of size /${rootNetmask} not big enough to allocate subnets of sizes ${netmasks.map((x) => `/${x}`)}`);
53
+ }
54
+ return ret;
55
+ }
56
+ function nextMultiple(current, multiple) {
57
+ return Math.ceil(current / multiple) * multiple;
58
+ }
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2lkci1zcGxpdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvY2lkci1zcGxpdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtGQUErRjs7QUF5Qi9GLGtEQXNDQztBQTdERDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILFNBQWdCLG1CQUFtQixDQUNqQyxXQUFtQixFQUNuQixRQUFrQjtJQUVsQixtRkFBbUY7SUFDbkYsMkZBQTJGO0lBQzNGLHVGQUF1RjtJQUN2RixNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBYSxDQUFDO0lBRW5DLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNmLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBRXZDLGtEQUFrRDtRQUNsRCxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVwQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEdBQUcsV0FBVyxDQUFDLENBQUM7UUFDakQsTUFBTSxPQUFPLEdBQUcsT0FBTyxHQUFHLFdBQVcsQ0FBQztRQUN0QyxxRkFBcUY7UUFDckYsNEVBQTRFO1FBQzVFLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDUCxLQUFLO1lBQ0wsT0FBTztZQUNQLE9BQU87WUFDUCxLQUFLLEVBQUUsTUFBTSxHQUFHLElBQUk7U0FDckIsQ0FBQyxDQUFDO1FBRUgsVUFBVTtRQUNWLE1BQU0sSUFBSSxJQUFJLENBQUM7SUFDakIsQ0FBQztJQUVELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQzNDLE1BQU0sSUFBSSxLQUFLLENBQ2IscUJBQXFCLFdBQVcsZ0RBQWdELFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUMvRyxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLE9BQWUsRUFBRSxRQUFnQjtJQUNyRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWVjMi9saWIvY2lkci1zcGxpdHMudHNcblxuLyoqXG4gKiBSZXR1cm4gdGhlIHNwbGl0cyBuZWNlc3NhcnkgdG8gYWxsb2NhdGUgdGhlIGdpdmVuIHNlcXVlbmNlIG9mIGNpZHJzIGluIHRoZSBnaXZlbiBvcmRlclxuICpcbiAqIFRoZSBlbnRpcmUgYmxvY2sgaXMgb2Ygc2l6ZSAncm9vdE5ldG1hc2snLCBhbmQgc3Vic2VxdWVudCBibG9ja3Mgd2lsbCBiZSBhbGxvY2F0ZWRcbiAqIGZyb20gaXQgc2l6ZWQgYWNjb3JkaW5nIHRvIHRoZSBzaXplcyBpbiB0aGUgJ25ldG1hc2tzJyBhcnJheS5cbiAqXG4gKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgbGlzdCBvZiBgQ2lkclNwbGl0YCBvYmplY3RzLCB3aGljaCByZXByZXNlbnRcbiAqIGludm9jYXRpb25zIG9mIGEgcGFpciBvZiBgRm4uc2VsZWN0KEZuLmNpZHIoLi4uKSlgIG9wZXJhdGlvbnMuXG4gKlxuICogU3RyYXRlZ3k6IHdhbGsgdGhyb3VnaCB0aGUgSVAgYmxvY2sgc3BhY2UsIGNsaXBwaW5nIHRvIHRoZSBuZXh0IHBvc3NpYmxlXG4gKiBzdGFydCBvZiBhIGJsb2NrIG9mIHRoZSBnaXZlbiBzaXplLCB0aGVuIGFsbG9jYXRlIGl0LiBIZXJlIGlzIGFuIHVucmVhbGlzdGljXG4gKiBleGFtcGxlICh3aXRoIGEgd2VpcmQgb3JkZXJpbmcgb2YgdGhlIG5ldG1hc2tzIHRvIHNob3cgaG93IGNsaXBwaW5nIGFuZCBoZW5jZVxuICogc3BhY2Ugd2FzdGluZyBwbGF5cyBvdXQgaW4gcHJhY3RpY2UpOlxuICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Qgc3BhY2UgIC8xNlxuICog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gKiDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gKiAgIEEgIC8yMSAgICAgICAgICAgICBCICAvMTlcbiAqIOKUjOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICog4pSCIEEg4pSCIEEg4pSCIEEg4pSCIyMj4pSCICAgICAgIEIgICAgICAg4pSCICAgICAgIEIgICAgICAg4pSCIEEg4pSCIyMjIyMjIyMjIyPilIIgICAgICAgQiAgICAgICDilIIgICAgIC4uLi4gICAgIOKUglxuICog4pSU4pSA4pSA4pSA4pS04pSA4pSA4pSA4pS04pSA4pSA4pSA4pS04pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gKiAgICAgICAgICAgICAgXl5eX19fX19fIHdhc3RlZCBzcGFjZSBfX19fX19fX19fX19fX19fX15eXl5eXlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlQ2lkclNwbGl0cyhcbiAgcm9vdE5ldG1hc2s6IG51bWJlcixcbiAgbmV0bWFza3M6IG51bWJlcltdLFxuKTogQ2lkclNwbGl0W10ge1xuICAvLyBOT1RFOiBUZXJyYWZvcm0gY2lkcnN1Ym5ldHMoKSBmdW5jdGlvbiBkb2VzIHRoZSBzYW1lIHRoaW5nLCBidXQgZm9yY2VzIFRGIFRva2Vuc1xuICAvLyBMb2NhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGxvZ2ljIGFsbG93cyBtb3JlIHBvd2VyZnVsIGNvbmZpZ3VyYXRpb24gdGhyb3VnaCBjb25zdHJ1Y3RzXG4gIC8vIHJlZjogaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvdjEuNy54L2Z1bmN0aW9ucy9jaWRyc3VibmV0c1xuICBjb25zdCByZXQgPSBuZXcgQXJyYXk8Q2lkclNwbGl0PigpO1xuXG4gIGxldCBvZmZzZXQgPSAwO1xuICBmb3IgKGNvbnN0IG5ldG1hc2sgb2YgbmV0bWFza3MpIHtcbiAgICBjb25zdCBzaXplID0gTWF0aC5wb3coMiwgMzIgLSBuZXRtYXNrKTtcblxuICAgIC8vIENsaXAgb2Zmc2V0IHRvIHRoZSBuZXh0IGJsb2NrIG9mIHRoZSBnaXZlbiBzaXplXG4gICAgb2Zmc2V0ID0gbmV4dE11bHRpcGxlKG9mZnNldCwgc2l6ZSk7XG5cbiAgICBjb25zdCBjb3VudCA9IE1hdGgucG93KDIsIG5ldG1hc2sgLSByb290TmV0bWFzayk7XG4gICAgY29uc3QgbmV3Yml0cyA9IG5ldG1hc2sgLSByb290TmV0bWFzaztcbiAgICAvLyBpZiBuZXdiaXRzIGlzIG5lZ2F0aXZlLCBpdCBtZWFucyB0aGUgY2hpbGQgbmV0bWFzayBpcyBiaWdnZXIgdGhhbiB0aGUgcm9vdCBuZXRtYXNrXG4gICAgLy8gdGhpcyB3aWxsIGJlIGNhdWdodCBieSBvZmZzZXQgPiBNYXRoLnBvdygyLCAzMiAtIHJvb3ROZXRtYXNrKSBjaGVjayBiZWxvd1xuICAgIHJldC5wdXNoKHtcbiAgICAgIGNvdW50LFxuICAgICAgbmV0bWFzayxcbiAgICAgIG5ld2JpdHMsXG4gICAgICBpbmRleDogb2Zmc2V0IC8gc2l6ZSxcbiAgICB9KTtcblxuICAgIC8vIENvbnN1bWVcbiAgICBvZmZzZXQgKz0gc2l6ZTtcbiAgfVxuXG4gIGlmIChvZmZzZXQgPiBNYXRoLnBvdygyLCAzMiAtIHJvb3ROZXRtYXNrKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJUCBzcGFjZSBvZiBzaXplIC8ke3Jvb3ROZXRtYXNrfSBub3QgYmlnIGVub3VnaCB0byBhbGxvY2F0ZSBzdWJuZXRzIG9mIHNpemVzICR7bmV0bWFza3MubWFwKCh4KSA9PiBgLyR7eH1gKX1gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBuZXh0TXVsdGlwbGUoY3VycmVudDogbnVtYmVyLCBtdWx0aXBsZTogbnVtYmVyKSB7XG4gIHJldHVybiBNYXRoLmNlaWwoY3VycmVudCAvIG11bHRpcGxlKSAqIG11bHRpcGxlO1xufVxuXG4vKipcbiAqIEEgcmVwcmVzZW50YXRpb24gb2YgYSBwYWlyIG9mIGBGbi5zZWxlY3QoRm4uY2lkcigpKWAgaW52b2NhdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaWRyU3BsaXQge1xuICAvKipcbiAgICogVGhlIG5ldG1hc2sgb2YgdGhpcyBibG9jayBzaXplXG4gICAqIChJZiB5b3Ugd2FudCBhIC8yNCwgbmV0bWFzaz0yNCkuXG4gICAqL1xuICByZWFkb25seSBuZXRtYXNrOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIG5ld2JpdHMgPSAoY2hpbGROZXRtYXNrIC0gcm9vdE5ldG1hc2spLCBpLmUuIGhvdyBtYW55IGFkZGl0aW9uYWwgYml0c1xuICAgKiBiZXlvbmQgdGhlIHJvb3QncyBuZXRtYXNrIHdlJ3JlIHN1YmRpdmlkaW5nIGJ5LlxuICAgKlxuICAgKiBVc2VkIGRpcmVjdGx5IGJ5IFRlcnJhZm9ybSdzIGBjaWRyc3VibmV0KC4uLilgLlxuICAgKi9cbiAgcmVhZG9ubHkgbmV3Yml0czogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBIb3cgbWFueSBwYXJ0cyB0aGUgbWFzayBuZWVkcyB0byBiZSBzcGxpdCBpbnRvXG4gICAqL1xuICByZWFkb25seSBjb3VudDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGF0IHN1Ym5ldCBpbmRleCB0byBzZWxlY3QgZnJvbSB0aGUgc3BsaXRcbiAgICovXG4gIHJlYWRvbmx5IGluZGV4OiBudW1iZXI7XG59XG4iXX0=
@@ -0,0 +1,43 @@
1
+ import { Construct } from "constructs";
2
+ import { IClientVpnEndpoint } from "./client-vpn-endpoint-types";
3
+ import { AwsConstructBase } from "../aws-construct";
4
+ /**
5
+ * Options for a ClientVpnAuthorizationRule
6
+ */
7
+ export interface ClientVpnAuthorizationRuleOptions {
8
+ /**
9
+ * The IPv4 address range, in CIDR notation, of the network for which access
10
+ * is being authorized.
11
+ */
12
+ readonly cidr: string;
13
+ /**
14
+ * The ID of the group to grant access to, for example, the Active Directory
15
+ * group or identity provider (IdP) group.
16
+ *
17
+ * @default - authorize all groups
18
+ */
19
+ readonly groupId?: string;
20
+ /**
21
+ * A brief description of the authorization rule.
22
+ *
23
+ * @default - no description
24
+ */
25
+ readonly description?: string;
26
+ }
27
+ /**
28
+ * Properties for a ClientVpnAuthorizationRule
29
+ */
30
+ export interface ClientVpnAuthorizationRuleProps extends ClientVpnAuthorizationRuleOptions {
31
+ /**
32
+ * The client VPN endpoint to which to add the rule.
33
+ * @default clientVpnEndpoint is required
34
+ */
35
+ readonly clientVpnEndpoint: IClientVpnEndpoint;
36
+ }
37
+ /**
38
+ * A client VPN authorization rule
39
+ */
40
+ export declare class ClientVpnAuthorizationRule extends AwsConstructBase {
41
+ get outputs(): Record<string, any>;
42
+ constructor(scope: Construct, id: string, props: ClientVpnAuthorizationRuleProps);
43
+ }