cdk8s-plus-31 2.0.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 (114) hide show
  1. package/.backportrc.json +17 -0
  2. package/.jsii +90235 -0
  3. package/CODE_OF_CONDUCT.md +3 -0
  4. package/CONTRIBUTING.md +185 -0
  5. package/DCO +34 -0
  6. package/LICENSE +202 -0
  7. package/NOTICE +1 -0
  8. package/OWNERS.md +5 -0
  9. package/README.md +32 -0
  10. package/SECURITY.md +5 -0
  11. package/cdk8s.yaml +8 -0
  12. package/docs/java.md +23855 -0
  13. package/docs/plus/config-map.md +98 -0
  14. package/docs/plus/container.md +133 -0
  15. package/docs/plus/cronjob.md +67 -0
  16. package/docs/plus/deployment.md +232 -0
  17. package/docs/plus/horizontal-pod-autoscaler.md +226 -0
  18. package/docs/plus/ingress.md +68 -0
  19. package/docs/plus/job.md +48 -0
  20. package/docs/plus/namespace.md +58 -0
  21. package/docs/plus/network-policy.md +341 -0
  22. package/docs/plus/pod.md +455 -0
  23. package/docs/plus/pv.md +82 -0
  24. package/docs/plus/pvc.md +77 -0
  25. package/docs/plus/rbac.md +104 -0
  26. package/docs/plus/secret.md +32 -0
  27. package/docs/plus/service-account.md +35 -0
  28. package/docs/plus/service.md +41 -0
  29. package/docs/plus/volume.md +38 -0
  30. package/docs/python.md +26079 -0
  31. package/docs/typescript.md +19565 -0
  32. package/git-hooks/README.md +9 -0
  33. package/git-hooks/prepare-commit-msg +18 -0
  34. package/git-hooks/setup.sh +10 -0
  35. package/lib/_action.d.ts +21 -0
  36. package/lib/_action.js +32 -0
  37. package/lib/api-resource.d.ts +298 -0
  38. package/lib/api-resource.js +430 -0
  39. package/lib/base.d.ts +79 -0
  40. package/lib/base.js +92 -0
  41. package/lib/config-map.d.ts +126 -0
  42. package/lib/config-map.js +159 -0
  43. package/lib/container.d.ts +1057 -0
  44. package/lib/container.js +845 -0
  45. package/lib/cron-job.d.ts +138 -0
  46. package/lib/cron-job.js +103 -0
  47. package/lib/daemon-set.d.ts +45 -0
  48. package/lib/daemon-set.js +55 -0
  49. package/lib/deployment.d.ts +223 -0
  50. package/lib/deployment.js +214 -0
  51. package/lib/handler.d.ts +62 -0
  52. package/lib/handler.js +54 -0
  53. package/lib/horizontal-pod-autoscaler.d.ts +500 -0
  54. package/lib/horizontal-pod-autoscaler.js +569 -0
  55. package/lib/imports/k8s.d.ts +21534 -0
  56. package/lib/imports/k8s.js +16496 -0
  57. package/lib/index.d.ts +26 -0
  58. package/lib/index.js +39 -0
  59. package/lib/ingress.d.ts +230 -0
  60. package/lib/ingress.js +246 -0
  61. package/lib/job.d.ts +64 -0
  62. package/lib/job.js +54 -0
  63. package/lib/namespace.d.ts +128 -0
  64. package/lib/namespace.js +109 -0
  65. package/lib/network-policy.d.ts +311 -0
  66. package/lib/network-policy.js +344 -0
  67. package/lib/pod.d.ts +1080 -0
  68. package/lib/pod.js +1139 -0
  69. package/lib/probe.d.ts +141 -0
  70. package/lib/probe.js +77 -0
  71. package/lib/pv.d.ts +375 -0
  72. package/lib/pv.js +273 -0
  73. package/lib/pvc.d.ts +163 -0
  74. package/lib/pvc.js +152 -0
  75. package/lib/role-binding.d.ts +138 -0
  76. package/lib/role-binding.js +165 -0
  77. package/lib/role.d.ts +268 -0
  78. package/lib/role.js +401 -0
  79. package/lib/secret.d.ts +195 -0
  80. package/lib/secret.js +185 -0
  81. package/lib/service-account.d.ts +83 -0
  82. package/lib/service-account.js +105 -0
  83. package/lib/service.d.ts +289 -0
  84. package/lib/service.js +182 -0
  85. package/lib/stateful-set.d.ts +169 -0
  86. package/lib/stateful-set.js +174 -0
  87. package/lib/utils.d.ts +4 -0
  88. package/lib/utils.js +34 -0
  89. package/lib/volume.d.ts +573 -0
  90. package/lib/volume.js +371 -0
  91. package/lib/workload.d.ts +121 -0
  92. package/lib/workload.js +122 -0
  93. package/node_modules/balanced-match/.github/FUNDING.yml +2 -0
  94. package/node_modules/balanced-match/LICENSE.md +21 -0
  95. package/node_modules/balanced-match/README.md +97 -0
  96. package/node_modules/balanced-match/index.js +62 -0
  97. package/node_modules/balanced-match/package.json +48 -0
  98. package/node_modules/concat-map/.travis.yml +4 -0
  99. package/node_modules/concat-map/LICENSE +18 -0
  100. package/node_modules/concat-map/README.markdown +62 -0
  101. package/node_modules/concat-map/example/map.js +6 -0
  102. package/node_modules/concat-map/index.js +13 -0
  103. package/node_modules/concat-map/package.json +43 -0
  104. package/node_modules/concat-map/test/map.js +39 -0
  105. package/node_modules/minimatch/LICENSE +15 -0
  106. package/node_modules/minimatch/README.md +230 -0
  107. package/node_modules/minimatch/minimatch.js +947 -0
  108. package/node_modules/minimatch/node_modules/brace-expansion/LICENSE +21 -0
  109. package/node_modules/minimatch/node_modules/brace-expansion/README.md +129 -0
  110. package/node_modules/minimatch/node_modules/brace-expansion/index.js +201 -0
  111. package/node_modules/minimatch/node_modules/brace-expansion/package.json +47 -0
  112. package/node_modules/minimatch/package.json +33 -0
  113. package/package.json +186 -0
  114. package/rotate.md +84 -0
package/lib/job.js ADDED
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Job = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const cdk8s_1 = require("cdk8s");
7
+ const k8s = require("./imports/k8s");
8
+ const pod = require("./pod");
9
+ const workload = require("./workload");
10
+ /**
11
+ * A Job creates one or more Pods and ensures that a specified number of them successfully terminate. As pods successfully complete,
12
+ * the Job tracks the successful completions. When a specified number of successful completions is reached, the task (ie, Job) is complete.
13
+ * Deleting a Job will clean up the Pods it created. A simple case is to create one Job object in order to reliably run one Pod to completion.
14
+ * The Job object will start a new Pod if the first Pod fails or is deleted (for example due to a node hardware failure or a node reboot).
15
+ * You can also use a Job to run multiple Pods in parallel.
16
+ */
17
+ class Job extends workload.Workload {
18
+ constructor(scope, id, props = {}) {
19
+ super(scope, id, {
20
+ restartPolicy: pod.RestartPolicy.NEVER,
21
+ select: false,
22
+ ...props,
23
+ });
24
+ this.resourceType = 'jobs';
25
+ this.apiObject = new k8s.KubeJob(this, 'Resource', {
26
+ metadata: props.metadata,
27
+ spec: cdk8s_1.Lazy.any({ produce: () => this._toKube() }),
28
+ });
29
+ this.activeDeadline = props.activeDeadline;
30
+ this.backoffLimit = props.backoffLimit;
31
+ this.ttlAfterFinished = props.ttlAfterFinished;
32
+ if (this.isolate) {
33
+ this.connections.isolate();
34
+ }
35
+ }
36
+ /**
37
+ * @internal
38
+ */
39
+ _toKube() {
40
+ return {
41
+ template: {
42
+ metadata: this.podMetadata.toJson(),
43
+ spec: this._toPodSpec(),
44
+ },
45
+ activeDeadlineSeconds: this.activeDeadline?.toSeconds(),
46
+ backoffLimit: this.backoffLimit,
47
+ ttlSecondsAfterFinished: this.ttlAfterFinished ? this.ttlAfterFinished.toSeconds() : undefined,
48
+ };
49
+ }
50
+ }
51
+ exports.Job = Job;
52
+ _a = JSII_RTTI_SYMBOL_1;
53
+ Job[_a] = { fqn: "cdk8s-plus-31.Job", version: "2.0.0" };
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2pvYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGlDQUFrRDtBQUVsRCxxQ0FBcUM7QUFDckMsNkJBQTZCO0FBQzdCLHVDQUF1QztBQW9DdkM7Ozs7OztHQU1HO0FBQ0gsTUFBYSxHQUFJLFNBQVEsUUFBUSxDQUFDLFFBQVE7SUF3QnhDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsUUFBa0IsRUFBRTtRQUM1RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLGFBQWEsRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLEtBQUs7WUFDdEMsTUFBTSxFQUFFLEtBQUs7WUFDYixHQUFHLEtBQUs7U0FDVCxDQUFDLENBQUM7UUFQVyxpQkFBWSxHQUFHLE1BQU0sQ0FBQztRQVNwQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ2pELFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixJQUFJLEVBQUUsWUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztTQUNsRCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFDM0MsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7UUFFL0MsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPO1FBQ1osT0FBTztZQUNMLFFBQVEsRUFBRTtnQkFDUixRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7Z0JBQ25DLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO2FBQ3hCO1lBQ0QscUJBQXFCLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUU7WUFDdkQsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQy9CLHVCQUF1QixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQy9GLENBQUM7SUFDSixDQUFDOztBQTFESCxrQkE0REMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcGlPYmplY3QsIExhenksIER1cmF0aW9uIH0gZnJvbSAnY2RrOHMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBrOHMgZnJvbSAnLi9pbXBvcnRzL2s4cyc7XG5pbXBvcnQgKiBhcyBwb2QgZnJvbSAnLi9wb2QnO1xuaW1wb3J0ICogYXMgd29ya2xvYWQgZnJvbSAnLi93b3JrbG9hZCc7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYEpvYmAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSm9iUHJvcHMgZXh0ZW5kcyB3b3JrbG9hZC5Xb3JrbG9hZFByb3BzIHtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBkdXJhdGlvbiB0aGUgam9iIG1heSBiZSBhY3RpdmUgYmVmb3JlIHRoZSBzeXN0ZW0gdHJpZXMgdG8gdGVybWluYXRlIGl0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIElmIHVuc2V0LCB0aGVuIHRoZXJlIGlzIG5vIGRlYWRsaW5lLlxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aXZlRGVhZGxpbmU/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgcmV0cmllcyBiZWZvcmUgbWFya2luZyB0aGlzIGpvYiBmYWlsZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gSWYgbm90IHNldCwgc3lzdGVtIGRlZmF1bHRzIHRvIDYuXG4gICAqL1xuICByZWFkb25seSBiYWNrb2ZmTGltaXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIExpbWl0cyB0aGUgbGlmZXRpbWUgb2YgYSBKb2IgdGhhdCBoYXMgZmluaXNoZWQgZXhlY3V0aW9uIChlaXRoZXIgQ29tcGxldGVcbiAgICogb3IgRmFpbGVkKS4gSWYgdGhpcyBmaWVsZCBpcyBzZXQsIGFmdGVyIHRoZSBKb2IgZmluaXNoZXMsIGl0IGlzIGVsaWdpYmxlIHRvXG4gICAqIGJlIGF1dG9tYXRpY2FsbHkgZGVsZXRlZC4gV2hlbiB0aGUgSm9iIGlzIGJlaW5nIGRlbGV0ZWQsIGl0cyBsaWZlY3ljbGVcbiAgICogZ3VhcmFudGVlcyAoZS5nLiBmaW5hbGl6ZXJzKSB3aWxsIGJlIGhvbm9yZWQuIElmIHRoaXMgZmllbGQgaXMgc2V0IHRvIHplcm8sXG4gICAqIHRoZSBKb2IgYmVjb21lcyBlbGlnaWJsZSB0byBiZSBkZWxldGVkIGltbWVkaWF0ZWx5IGFmdGVyIGl0IGZpbmlzaGVzLiBUaGlzXG4gICAqIGZpZWxkIGlzIGFscGhhLWxldmVsIGFuZCBpcyBvbmx5IGhvbm9yZWQgYnkgc2VydmVycyB0aGF0IGVuYWJsZSB0aGVcbiAgICogYFRUTEFmdGVyRmluaXNoZWRgIGZlYXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gSWYgdGhpcyBmaWVsZCBpcyB1bnNldCwgdGhlIEpvYiB3b24ndCBiZSBhdXRvbWF0aWNhbGx5IGRlbGV0ZWQuXG4gICAqL1xuICByZWFkb25seSB0dGxBZnRlckZpbmlzaGVkPzogRHVyYXRpb247XG5cbn1cblxuLyoqXG4gKiBBIEpvYiBjcmVhdGVzIG9uZSBvciBtb3JlIFBvZHMgYW5kIGVuc3VyZXMgdGhhdCBhIHNwZWNpZmllZCBudW1iZXIgb2YgdGhlbSBzdWNjZXNzZnVsbHkgdGVybWluYXRlLiBBcyBwb2RzIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZSxcbiAqIHRoZSBKb2IgdHJhY2tzIHRoZSBzdWNjZXNzZnVsIGNvbXBsZXRpb25zLiBXaGVuIGEgc3BlY2lmaWVkIG51bWJlciBvZiBzdWNjZXNzZnVsIGNvbXBsZXRpb25zIGlzIHJlYWNoZWQsIHRoZSB0YXNrIChpZSwgSm9iKSBpcyBjb21wbGV0ZS5cbiAqIERlbGV0aW5nIGEgSm9iIHdpbGwgY2xlYW4gdXAgdGhlIFBvZHMgaXQgY3JlYXRlZC4gQSBzaW1wbGUgY2FzZSBpcyB0byBjcmVhdGUgb25lIEpvYiBvYmplY3QgaW4gb3JkZXIgdG8gcmVsaWFibHkgcnVuIG9uZSBQb2QgdG8gY29tcGxldGlvbi5cbiAqIFRoZSBKb2Igb2JqZWN0IHdpbGwgc3RhcnQgYSBuZXcgUG9kIGlmIHRoZSBmaXJzdCBQb2QgZmFpbHMgb3IgaXMgZGVsZXRlZCAoZm9yIGV4YW1wbGUgZHVlIHRvIGEgbm9kZSBoYXJkd2FyZSBmYWlsdXJlIG9yIGEgbm9kZSByZWJvb3QpLlxuICogWW91IGNhbiBhbHNvIHVzZSBhIEpvYiB0byBydW4gbXVsdGlwbGUgUG9kcyBpbiBwYXJhbGxlbC5cbiAqL1xuZXhwb3J0IGNsYXNzIEpvYiBleHRlbmRzIHdvcmtsb2FkLldvcmtsb2FkIHtcblxuICAvKipcbiAgICogRHVyYXRpb24gYmVmb3JlIGpvYiBpcyB0ZXJtaW5hdGVkLiBJZiB1bmRlZmluZWQsIHRoZXJlIGlzIG5vIGRlYWRsaW5lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFjdGl2ZURlYWRsaW5lPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiByZXRyaWVzIGJlZm9yZSBtYXJraW5nIGZhaWxlZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBiYWNrb2ZmTGltaXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRUTCBiZWZvcmUgdGhlIGpvYiBpcyBkZWxldGVkIGFmdGVyIGl0IGlzIGZpbmlzaGVkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHR0bEFmdGVyRmluaXNoZWQ/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogQHNlZSBiYXNlLlJlc291cmNlLmFwaU9iamVjdFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFwaU9iamVjdDogQXBpT2JqZWN0O1xuXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZVR5cGUgPSAnam9icyc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEpvYlByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHJlc3RhcnRQb2xpY3k6IHBvZC5SZXN0YXJ0UG9saWN5Lk5FVkVSLFxuICAgICAgc2VsZWN0OiBmYWxzZSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hcGlPYmplY3QgPSBuZXcgazhzLkt1YmVKb2IodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbWV0YWRhdGE6IHByb3BzLm1ldGFkYXRhLFxuICAgICAgc3BlYzogTGF6eS5hbnkoeyBwcm9kdWNlOiAoKSA9PiB0aGlzLl90b0t1YmUoKSB9KSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWN0aXZlRGVhZGxpbmUgPSBwcm9wcy5hY3RpdmVEZWFkbGluZTtcbiAgICB0aGlzLmJhY2tvZmZMaW1pdCA9IHByb3BzLmJhY2tvZmZMaW1pdDtcbiAgICB0aGlzLnR0bEFmdGVyRmluaXNoZWQgPSBwcm9wcy50dGxBZnRlckZpbmlzaGVkO1xuXG4gICAgaWYgKHRoaXMuaXNvbGF0ZSkge1xuICAgICAgdGhpcy5jb25uZWN0aW9ucy5pc29sYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF90b0t1YmUoKTogazhzLkpvYlNwZWMge1xuICAgIHJldHVybiB7XG4gICAgICB0ZW1wbGF0ZToge1xuICAgICAgICBtZXRhZGF0YTogdGhpcy5wb2RNZXRhZGF0YS50b0pzb24oKSxcbiAgICAgICAgc3BlYzogdGhpcy5fdG9Qb2RTcGVjKCksXG4gICAgICB9LFxuICAgICAgYWN0aXZlRGVhZGxpbmVTZWNvbmRzOiB0aGlzLmFjdGl2ZURlYWRsaW5lPy50b1NlY29uZHMoKSxcbiAgICAgIGJhY2tvZmZMaW1pdDogdGhpcy5iYWNrb2ZmTGltaXQsXG4gICAgICB0dGxTZWNvbmRzQWZ0ZXJGaW5pc2hlZDogdGhpcy50dGxBZnRlckZpbmlzaGVkID8gdGhpcy50dGxBZnRlckZpbmlzaGVkLnRvU2Vjb25kcygpIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxufVxuIl19
@@ -0,0 +1,128 @@
1
+ import { ApiObject } from 'cdk8s';
2
+ import { Construct, IConstruct } from 'constructs';
3
+ import * as base from './base';
4
+ import * as k8s from './imports/k8s';
5
+ import * as networkpolicy from './network-policy';
6
+ import * as pod from './pod';
7
+ /**
8
+ * Configuration for selecting namespaces.
9
+ */
10
+ export interface NamespaceSelectorConfig {
11
+ /**
12
+ * A selector to select namespaces by labels.
13
+ */
14
+ readonly labelSelector?: pod.LabelSelector;
15
+ /**
16
+ * A list of names to select namespaces by names.
17
+ */
18
+ readonly names?: string[];
19
+ }
20
+ /**
21
+ * Represents an object that can select namespaces.
22
+ */
23
+ export interface INamespaceSelector extends IConstruct {
24
+ /**
25
+ * Return the configuration of this selector.
26
+ */
27
+ toNamespaceSelectorConfig(): NamespaceSelectorConfig;
28
+ }
29
+ /**
30
+ * Properties for `Namespace`.
31
+ */
32
+ export interface NamespaceProps extends base.ResourceProps {
33
+ }
34
+ /**
35
+ * In Kubernetes, namespaces provides a mechanism for isolating groups of resources within a single cluster.
36
+ * Names of resources need to be unique within a namespace, but not across namespaces.
37
+ * Namespace-based scoping is applicable only for namespaced objects (e.g. Deployments, Services, etc) and
38
+ * not for cluster-wide objects (e.g. StorageClass, Nodes, PersistentVolumes, etc).
39
+ */
40
+ export declare class Namespace extends base.Resource implements INamespaceSelector, networkpolicy.INetworkPolicyPeer {
41
+ /**
42
+ * @see https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/#automatic-labelling
43
+ */
44
+ static readonly NAME_LABEL = "kubernetes.io/metadata.name";
45
+ /**
46
+ * @see base.Resource.apiObject
47
+ */
48
+ protected readonly apiObject: ApiObject;
49
+ readonly resourceType: string;
50
+ private readonly _pods;
51
+ constructor(scope: Construct, id: string, props?: NamespaceProps);
52
+ /**
53
+ * @see INamespaceSelector.toNamespaceSelectorConfig()
54
+ */
55
+ toNamespaceSelectorConfig(): NamespaceSelectorConfig;
56
+ /**
57
+ * @see INetworkPolicyPeer.toNetworkPolicyPeerConfig()
58
+ */
59
+ toNetworkPolicyPeerConfig(): networkpolicy.NetworkPolicyPeerConfig;
60
+ /**
61
+ * @see INetworkPolicyPeer.toPodSelector()
62
+ */
63
+ toPodSelector(): pod.IPodSelector | undefined;
64
+ /**
65
+ * @internal
66
+ */
67
+ _toKube(): k8s.NamespaceSpec;
68
+ }
69
+ /**
70
+ * Options for `Namespaces.select`.
71
+ */
72
+ export interface NamespacesSelectOptions {
73
+ /**
74
+ * Labels the namespaces must have.
75
+ * This is equivalent to using an 'Is' selector.
76
+ *
77
+ * @default - no strict labels requirements.
78
+ */
79
+ readonly labels?: {
80
+ [key: string]: string;
81
+ };
82
+ /**
83
+ * Namespaces must satisfy these selectors.
84
+ * The selectors query labels, just like the `labels` property, but they
85
+ * provide a more advanced matching mechanism.
86
+ *
87
+ * @default - no selector requirements.
88
+ */
89
+ readonly expressions?: pod.LabelExpression[];
90
+ /**
91
+ * Namespaces names must be one of these.
92
+ *
93
+ * @default - no name requirements.
94
+ */
95
+ readonly names?: string[];
96
+ }
97
+ /**
98
+ * Represents a group of namespaces.
99
+ */
100
+ export declare class Namespaces extends Construct implements INamespaceSelector, networkpolicy.INetworkPolicyPeer {
101
+ private readonly expressions?;
102
+ private readonly names?;
103
+ private readonly labels?;
104
+ /**
105
+ * Select specific namespaces.
106
+ */
107
+ static select(scope: Construct, id: string, options: NamespacesSelectOptions): Namespaces;
108
+ /**
109
+ * Select all namespaces.
110
+ */
111
+ static all(scope: Construct, id: string): Namespaces;
112
+ private readonly _pods;
113
+ constructor(scope: Construct, id: string, expressions?: pod.LabelExpression[] | undefined, names?: string[] | undefined, labels?: {
114
+ [key: string]: string;
115
+ } | undefined);
116
+ /**
117
+ * @see INamespaceSelector.toNamespaceSelectorConfig()
118
+ */
119
+ toNamespaceSelectorConfig(): NamespaceSelectorConfig;
120
+ /**
121
+ * @see INetworkPolicyPeer.toNetworkPolicyPeerConfig()
122
+ */
123
+ toNetworkPolicyPeerConfig(): networkpolicy.NetworkPolicyPeerConfig;
124
+ /**
125
+ * @see INetworkPolicyPeer.toPodSelector()
126
+ */
127
+ toPodSelector(): pod.IPodSelector | undefined;
128
+ }
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ var _a, _b;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Namespaces = exports.Namespace = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const cdk8s_1 = require("cdk8s");
7
+ const constructs_1 = require("constructs");
8
+ const base = require("./base");
9
+ const k8s = require("./imports/k8s");
10
+ const pod = require("./pod");
11
+ /**
12
+ * In Kubernetes, namespaces provides a mechanism for isolating groups of resources within a single cluster.
13
+ * Names of resources need to be unique within a namespace, but not across namespaces.
14
+ * Namespace-based scoping is applicable only for namespaced objects (e.g. Deployments, Services, etc) and
15
+ * not for cluster-wide objects (e.g. StorageClass, Nodes, PersistentVolumes, etc).
16
+ */
17
+ class Namespace extends base.Resource {
18
+ constructor(scope, id, props = {}) {
19
+ super(scope, id);
20
+ this.resourceType = 'namespaces';
21
+ this.apiObject = new k8s.KubeNamespace(this, 'Resource', {
22
+ metadata: props.metadata,
23
+ spec: cdk8s_1.Lazy.any({ produce: () => this._toKube() }),
24
+ });
25
+ this._pods = pod.Pods.all(this, 'Pods', {
26
+ namespaces: Namespaces.select(this, 'Namespaces', { names: [this.name] }),
27
+ });
28
+ }
29
+ /**
30
+ * @see INamespaceSelector.toNamespaceSelectorConfig()
31
+ */
32
+ toNamespaceSelectorConfig() {
33
+ return { names: [this.name] };
34
+ }
35
+ /**
36
+ * @see INetworkPolicyPeer.toNetworkPolicyPeerConfig()
37
+ */
38
+ toNetworkPolicyPeerConfig() {
39
+ return this._pods.toNetworkPolicyPeerConfig();
40
+ }
41
+ /**
42
+ * @see INetworkPolicyPeer.toPodSelector()
43
+ */
44
+ toPodSelector() {
45
+ return this._pods.toPodSelector();
46
+ }
47
+ /**
48
+ * @internal
49
+ */
50
+ _toKube() {
51
+ return {};
52
+ }
53
+ }
54
+ exports.Namespace = Namespace;
55
+ _a = JSII_RTTI_SYMBOL_1;
56
+ Namespace[_a] = { fqn: "cdk8s-plus-31.Namespace", version: "2.0.0" };
57
+ /**
58
+ * @see https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/#automatic-labelling
59
+ */
60
+ Namespace.NAME_LABEL = 'kubernetes.io/metadata.name';
61
+ /**
62
+ * Represents a group of namespaces.
63
+ */
64
+ class Namespaces extends constructs_1.Construct {
65
+ constructor(scope, id, expressions, names, labels) {
66
+ super(scope, id);
67
+ this.expressions = expressions;
68
+ this.names = names;
69
+ this.labels = labels;
70
+ this._pods = pod.Pods.all(this, 'Pods', { namespaces: this });
71
+ }
72
+ /**
73
+ * Select specific namespaces.
74
+ */
75
+ static select(scope, id, options) {
76
+ return new Namespaces(scope, id, options.expressions, options.names, options.labels);
77
+ }
78
+ /**
79
+ * Select all namespaces.
80
+ */
81
+ static all(scope, id) {
82
+ return Namespaces.select(scope, id, { expressions: [], labels: {} });
83
+ }
84
+ /**
85
+ * @see INamespaceSelector.toNamespaceSelectorConfig()
86
+ */
87
+ toNamespaceSelectorConfig() {
88
+ return {
89
+ labelSelector: pod.LabelSelector.of({ expressions: this.expressions, labels: this.labels }),
90
+ names: this.names,
91
+ };
92
+ }
93
+ /**
94
+ * @see INetworkPolicyPeer.toNetworkPolicyPeerConfig()
95
+ */
96
+ toNetworkPolicyPeerConfig() {
97
+ return this._pods.toNetworkPolicyPeerConfig();
98
+ }
99
+ /**
100
+ * @see INetworkPolicyPeer.toPodSelector()
101
+ */
102
+ toPodSelector() {
103
+ return this._pods.toPodSelector();
104
+ }
105
+ }
106
+ exports.Namespaces = Namespaces;
107
+ _b = JSII_RTTI_SYMBOL_1;
108
+ Namespaces[_b] = { fqn: "cdk8s-plus-31.Namespaces", version: "2.0.0" };
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXNwYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25hbWVzcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGlDQUF3QztBQUN4QywyQ0FBbUQ7QUFDbkQsK0JBQStCO0FBQy9CLHFDQUFxQztBQUVyQyw2QkFBNkI7QUFpQzdCOzs7OztHQUtHO0FBQ0gsTUFBYSxTQUFVLFNBQVEsSUFBSSxDQUFDLFFBQVE7SUFnQjFDLFlBQW1CLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFFBQXdCLEVBQUU7UUFDekUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUxILGlCQUFZLEdBQVcsWUFBWSxDQUFDO1FBT2xELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDdkQsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLElBQUksRUFBRSxZQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1NBQ2xELENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUN0QyxVQUFVLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7U0FDMUUsQ0FBQyxDQUFDO0lBRUwsQ0FBQztJQUVEOztPQUVHO0lBQ0kseUJBQXlCO1FBQzlCLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSx5QkFBeUI7UUFDOUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksT0FBTztRQUNaLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQzs7QUF4REgsOEJBMERDOzs7QUF4REM7O0dBRUc7QUFDb0Isb0JBQVUsR0FBRyw2QkFBNkIsQ0FBQztBQXNGcEU7O0dBRUc7QUFDSCxNQUFhLFVBQVcsU0FBUSxzQkFBUztJQWtCdkMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFDckIsV0FBbUMsRUFDbkMsS0FBZ0IsRUFDaEIsTUFBa0M7UUFDbkQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUhBLGdCQUFXLEdBQVgsV0FBVyxDQUF3QjtRQUNuQyxVQUFLLEdBQUwsS0FBSyxDQUFXO1FBQ2hCLFdBQU0sR0FBTixNQUFNLENBQTRCO1FBR25ELElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUF2QkQ7O09BRUc7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLE9BQWdDO1FBQ2pGLE9BQU8sSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBZ0IsRUFBRSxFQUFVO1FBQzVDLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBYUQ7O09BRUc7SUFDSSx5QkFBeUI7UUFDOUIsT0FBTztZQUNMLGFBQWEsRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUU7WUFDNUYsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1NBQ2xCLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSSx5QkFBeUI7UUFDOUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDcEMsQ0FBQzs7QUFqREgsZ0NBbURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBpT2JqZWN0LCBMYXp5IH0gZnJvbSAnY2RrOHMnO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBJQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgKiBhcyBrOHMgZnJvbSAnLi9pbXBvcnRzL2s4cyc7XG5pbXBvcnQgKiBhcyBuZXR3b3JrcG9saWN5IGZyb20gJy4vbmV0d29yay1wb2xpY3knO1xuaW1wb3J0ICogYXMgcG9kIGZyb20gJy4vcG9kJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBzZWxlY3RpbmcgbmFtZXNwYWNlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOYW1lc3BhY2VTZWxlY3RvckNvbmZpZyB7XG5cbiAgLyoqXG4gICAqIEEgc2VsZWN0b3IgdG8gc2VsZWN0IG5hbWVzcGFjZXMgYnkgbGFiZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFiZWxTZWxlY3Rvcj86IHBvZC5MYWJlbFNlbGVjdG9yO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgbmFtZXMgdG8gc2VsZWN0IG5hbWVzcGFjZXMgYnkgbmFtZXMuXG4gICAqL1xuICByZWFkb25seSBuYW1lcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gb2JqZWN0IHRoYXQgY2FuIHNlbGVjdCBuYW1lc3BhY2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElOYW1lc3BhY2VTZWxlY3RvciBleHRlbmRzIElDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogUmV0dXJuIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoaXMgc2VsZWN0b3IuXG4gICAqL1xuICB0b05hbWVzcGFjZVNlbGVjdG9yQ29uZmlnKCk6IE5hbWVzcGFjZVNlbGVjdG9yQ29uZmlnO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGBOYW1lc3BhY2VgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hbWVzcGFjZVByb3BzIGV4dGVuZHMgYmFzZS5SZXNvdXJjZVByb3BzIHt9XG5cbi8qKlxuICogSW4gS3ViZXJuZXRlcywgbmFtZXNwYWNlcyBwcm92aWRlcyBhIG1lY2hhbmlzbSBmb3IgaXNvbGF0aW5nIGdyb3VwcyBvZiByZXNvdXJjZXMgd2l0aGluIGEgc2luZ2xlIGNsdXN0ZXIuXG4gKiBOYW1lcyBvZiByZXNvdXJjZXMgbmVlZCB0byBiZSB1bmlxdWUgd2l0aGluIGEgbmFtZXNwYWNlLCBidXQgbm90IGFjcm9zcyBuYW1lc3BhY2VzLlxuICogTmFtZXNwYWNlLWJhc2VkIHNjb3BpbmcgaXMgYXBwbGljYWJsZSBvbmx5IGZvciBuYW1lc3BhY2VkIG9iamVjdHMgKGUuZy4gRGVwbG95bWVudHMsIFNlcnZpY2VzLCBldGMpIGFuZFxuICogbm90IGZvciBjbHVzdGVyLXdpZGUgb2JqZWN0cyAoZS5nLiBTdG9yYWdlQ2xhc3MsIE5vZGVzLCBQZXJzaXN0ZW50Vm9sdW1lcywgZXRjKS5cbiAqL1xuZXhwb3J0IGNsYXNzIE5hbWVzcGFjZSBleHRlbmRzIGJhc2UuUmVzb3VyY2UgaW1wbGVtZW50cyBJTmFtZXNwYWNlU2VsZWN0b3IsIG5ldHdvcmtwb2xpY3kuSU5ldHdvcmtQb2xpY3lQZWVyIHtcblxuICAvKipcbiAgICogQHNlZSBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9vdmVydmlldy93b3JraW5nLXdpdGgtb2JqZWN0cy9uYW1lc3BhY2VzLyNhdXRvbWF0aWMtbGFiZWxsaW5nXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5BTUVfTEFCRUwgPSAna3ViZXJuZXRlcy5pby9tZXRhZGF0YS5uYW1lJztcblxuICAvKipcbiAgICogQHNlZSBiYXNlLlJlc291cmNlLmFwaU9iamVjdFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFwaU9iamVjdDogQXBpT2JqZWN0O1xuXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZVR5cGU6IHN0cmluZyA9ICduYW1lc3BhY2VzJztcblxuICBwcml2YXRlIHJlYWRvbmx5IF9wb2RzOiBwb2QuUG9kcztcblxuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5hbWVzcGFjZVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5hcGlPYmplY3QgPSBuZXcgazhzLkt1YmVOYW1lc3BhY2UodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbWV0YWRhdGE6IHByb3BzLm1ldGFkYXRhLFxuICAgICAgc3BlYzogTGF6eS5hbnkoeyBwcm9kdWNlOiAoKSA9PiB0aGlzLl90b0t1YmUoKSB9KSxcbiAgICB9KTtcblxuICAgIHRoaXMuX3BvZHMgPSBwb2QuUG9kcy5hbGwodGhpcywgJ1BvZHMnLCB7XG4gICAgICBuYW1lc3BhY2VzOiBOYW1lc3BhY2VzLnNlbGVjdCh0aGlzLCAnTmFtZXNwYWNlcycsIHsgbmFtZXM6IFt0aGlzLm5hbWVdIH0pLFxuICAgIH0pO1xuXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBJTmFtZXNwYWNlU2VsZWN0b3IudG9OYW1lc3BhY2VTZWxlY3RvckNvbmZpZygpXG4gICAqL1xuICBwdWJsaWMgdG9OYW1lc3BhY2VTZWxlY3RvckNvbmZpZygpOiBOYW1lc3BhY2VTZWxlY3RvckNvbmZpZyB7XG4gICAgcmV0dXJuIHsgbmFtZXM6IFt0aGlzLm5hbWVdIH07XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBJTmV0d29ya1BvbGljeVBlZXIudG9OZXR3b3JrUG9saWN5UGVlckNvbmZpZygpXG4gICAqL1xuICBwdWJsaWMgdG9OZXR3b3JrUG9saWN5UGVlckNvbmZpZygpOiBuZXR3b3JrcG9saWN5Lk5ldHdvcmtQb2xpY3lQZWVyQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fcG9kcy50b05ldHdvcmtQb2xpY3lQZWVyQ29uZmlnKCk7XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBJTmV0d29ya1BvbGljeVBlZXIudG9Qb2RTZWxlY3RvcigpXG4gICAqL1xuICBwdWJsaWMgdG9Qb2RTZWxlY3RvcigpOiBwb2QuSVBvZFNlbGVjdG9yIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcG9kcy50b1BvZFNlbGVjdG9yKCk7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX3RvS3ViZSgpOiBrOHMuTmFtZXNwYWNlU3BlYyB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBgTmFtZXNwYWNlcy5zZWxlY3RgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hbWVzcGFjZXNTZWxlY3RPcHRpb25zIHtcblxuICAvKipcbiAgICogTGFiZWxzIHRoZSBuYW1lc3BhY2VzIG11c3QgaGF2ZS5cbiAgICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIHVzaW5nIGFuICdJcycgc2VsZWN0b3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gc3RyaWN0IGxhYmVscyByZXF1aXJlbWVudHMuXG4gICAqL1xuICByZWFkb25seSBsYWJlbHM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBOYW1lc3BhY2VzIG11c3Qgc2F0aXNmeSB0aGVzZSBzZWxlY3RvcnMuXG4gICAqIFRoZSBzZWxlY3RvcnMgcXVlcnkgbGFiZWxzLCBqdXN0IGxpa2UgdGhlIGBsYWJlbHNgIHByb3BlcnR5LCBidXQgdGhleVxuICAgKiBwcm92aWRlIGEgbW9yZSBhZHZhbmNlZCBtYXRjaGluZyBtZWNoYW5pc20uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gc2VsZWN0b3IgcmVxdWlyZW1lbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhwcmVzc2lvbnM/OiBwb2QuTGFiZWxFeHByZXNzaW9uW107XG5cbiAgLyoqXG4gICAqIE5hbWVzcGFjZXMgbmFtZXMgbXVzdCBiZSBvbmUgb2YgdGhlc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gbmFtZSByZXF1aXJlbWVudHMuXG4gICAqL1xuICByZWFkb25seSBuYW1lcz86IHN0cmluZ1tdO1xuXG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGdyb3VwIG9mIG5hbWVzcGFjZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBOYW1lc3BhY2VzIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSU5hbWVzcGFjZVNlbGVjdG9yLCBuZXR3b3JrcG9saWN5LklOZXR3b3JrUG9saWN5UGVlciB7XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBzcGVjaWZpYyBuYW1lc3BhY2VzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzZWxlY3Qoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgb3B0aW9uczogTmFtZXNwYWNlc1NlbGVjdE9wdGlvbnMpOiBOYW1lc3BhY2VzIHtcbiAgICByZXR1cm4gbmV3IE5hbWVzcGFjZXMoc2NvcGUsIGlkLCBvcHRpb25zLmV4cHJlc3Npb25zLCBvcHRpb25zLm5hbWVzLCBvcHRpb25zLmxhYmVscyk7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0IGFsbCBuYW1lc3BhY2VzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhbGwoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZyk6IE5hbWVzcGFjZXMge1xuICAgIHJldHVybiBOYW1lc3BhY2VzLnNlbGVjdChzY29wZSwgaWQsIHsgZXhwcmVzc2lvbnM6IFtdLCBsYWJlbHM6IHt9IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcG9kczogcG9kLlBvZHM7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGV4cHJlc3Npb25zPzogcG9kLkxhYmVsRXhwcmVzc2lvbltdLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbmFtZXM/OiBzdHJpbmdbXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxhYmVscz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5fcG9kcyA9IHBvZC5Qb2RzLmFsbCh0aGlzLCAnUG9kcycsIHsgbmFtZXNwYWNlczogdGhpcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIElOYW1lc3BhY2VTZWxlY3Rvci50b05hbWVzcGFjZVNlbGVjdG9yQ29uZmlnKClcbiAgICovXG4gIHB1YmxpYyB0b05hbWVzcGFjZVNlbGVjdG9yQ29uZmlnKCk6IE5hbWVzcGFjZVNlbGVjdG9yQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWxTZWxlY3RvcjogcG9kLkxhYmVsU2VsZWN0b3Iub2YoeyBleHByZXNzaW9uczogdGhpcy5leHByZXNzaW9ucywgbGFiZWxzOiB0aGlzLmxhYmVscyB9ICksXG4gICAgICBuYW1lczogdGhpcy5uYW1lcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgSU5ldHdvcmtQb2xpY3lQZWVyLnRvTmV0d29ya1BvbGljeVBlZXJDb25maWcoKVxuICAgKi9cbiAgcHVibGljIHRvTmV0d29ya1BvbGljeVBlZXJDb25maWcoKTogbmV0d29ya3BvbGljeS5OZXR3b3JrUG9saWN5UGVlckNvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BvZHMudG9OZXR3b3JrUG9saWN5UGVlckNvbmZpZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgSU5ldHdvcmtQb2xpY3lQZWVyLnRvUG9kU2VsZWN0b3IoKVxuICAgKi9cbiAgcHVibGljIHRvUG9kU2VsZWN0b3IoKTogcG9kLklQb2RTZWxlY3RvciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3BvZHMudG9Qb2RTZWxlY3RvcigpO1xuICB9XG5cbn1cbiJdfQ==
@@ -0,0 +1,311 @@
1
+ import { ApiObject } from 'cdk8s';
2
+ import { Construct, IConstruct } from 'constructs';
3
+ import * as base from './base';
4
+ import * as k8s from './imports/k8s';
5
+ import * as pod from './pod';
6
+ /**
7
+ * Properties for `NetworkPolicyPort`.
8
+ */
9
+ export interface NetworkPolicyPortProps {
10
+ /**
11
+ * Specific port number.
12
+ *
13
+ * @default - all ports are allowed.
14
+ */
15
+ readonly port?: number;
16
+ /**
17
+ * End port (relative to `port`). Only applies if `port` is defined.
18
+ * Use this to specify a port range, rather that a specific one.
19
+ *
20
+ * @default - not a port range.
21
+ */
22
+ readonly endPort?: number;
23
+ /**
24
+ * Protocol.
25
+ *
26
+ * @default NetworkProtocol.TCP
27
+ */
28
+ readonly protocol?: NetworkProtocol;
29
+ }
30
+ /**
31
+ * Describes a port to allow traffic on.
32
+ */
33
+ export declare class NetworkPolicyPort {
34
+ private readonly port?;
35
+ private readonly endPort?;
36
+ private readonly protocol?;
37
+ /**
38
+ * Distinct TCP ports
39
+ */
40
+ static tcp(port: number): NetworkPolicyPort;
41
+ /**
42
+ * A TCP port range
43
+ */
44
+ static tcpRange(startPort: number, endPort: number): NetworkPolicyPort;
45
+ /**
46
+ * Any TCP traffic
47
+ */
48
+ static allTcp(): NetworkPolicyPort;
49
+ /**
50
+ * Distinct UDP ports
51
+ */
52
+ static udp(port: number): NetworkPolicyPort;
53
+ /**
54
+ * A UDP port range
55
+ */
56
+ static udpRange(startPort: number, endPort: number): NetworkPolicyPort;
57
+ /**
58
+ * Any UDP traffic
59
+ */
60
+ static allUdp(): NetworkPolicyPort;
61
+ /**
62
+ * Custom port configuration.
63
+ */
64
+ static of(props: NetworkPolicyPortProps): NetworkPolicyPort;
65
+ private constructor();
66
+ /**
67
+ * @internal
68
+ */
69
+ _toKube(): k8s.NetworkPolicyPort;
70
+ }
71
+ /**
72
+ * Configuration for network peers.
73
+ * A peer can either by an ip block, or a selection of pods, not both.
74
+ */
75
+ export interface NetworkPolicyPeerConfig {
76
+ /**
77
+ * The ip block this peer represents.
78
+ */
79
+ readonly ipBlock?: NetworkPolicyIpBlock;
80
+ /**
81
+ * The pod selector this peer represents.
82
+ */
83
+ readonly podSelector?: pod.PodSelectorConfig;
84
+ }
85
+ /**
86
+ * Describes a peer to allow traffic to/from.
87
+ */
88
+ export interface INetworkPolicyPeer extends IConstruct {
89
+ /**
90
+ * Return the configuration of this peer.
91
+ */
92
+ toNetworkPolicyPeerConfig(): NetworkPolicyPeerConfig;
93
+ /**
94
+ * Convert the peer into a pod selector, if possible.
95
+ */
96
+ toPodSelector(): pod.IPodSelector | undefined;
97
+ }
98
+ /**
99
+ * Describes a rule allowing traffic from / to pods matched by a network policy selector.
100
+ */
101
+ export interface NetworkPolicyRule {
102
+ /**
103
+ * The ports of the rule.
104
+ *
105
+ * @default - traffic is allowed on all ports.
106
+ */
107
+ readonly ports?: NetworkPolicyPort[];
108
+ /**
109
+ * Peer this rule interacts with.
110
+ */
111
+ readonly peer: INetworkPolicyPeer;
112
+ }
113
+ /**
114
+ * Describes a particular CIDR (Ex. "192.168.1.1/24","2001:db9::/64") that is
115
+ * allowed to the pods matched by a network policy selector.
116
+ * The except entry describes CIDRs that should not be included within this rule.
117
+ */
118
+ export declare class NetworkPolicyIpBlock extends Construct implements INetworkPolicyPeer {
119
+ /**
120
+ * A string representing the IP Block Valid examples are "192.168.1.1/24" or "2001:db9::/64".
121
+ */
122
+ readonly cidr: string;
123
+ /**
124
+ * A slice of CIDRs that should not be included within an IP Block Valid examples are "192.168.1.1/24" or "2001:db9::/64".
125
+ * Except values will be rejected if they are outside the CIDR range.
126
+ */
127
+ readonly except?: string[] | undefined;
128
+ /**
129
+ * Create an IPv4 peer from a CIDR
130
+ */
131
+ static ipv4(scope: Construct, id: string, cidrIp: string, except?: string[]): NetworkPolicyIpBlock;
132
+ /**
133
+ * Any IPv4 address
134
+ */
135
+ static anyIpv4(scope: Construct, id: string): NetworkPolicyIpBlock;
136
+ /**
137
+ * Create an IPv6 peer from a CIDR
138
+ */
139
+ static ipv6(scope: Construct, id: string, cidrIp: string, except?: string[]): NetworkPolicyIpBlock;
140
+ /**
141
+ * Any IPv6 address
142
+ */
143
+ static anyIpv6(scope: Construct, id: string): NetworkPolicyIpBlock;
144
+ private constructor();
145
+ /**
146
+ * @see INetworkPolicyPeer.toNetworkPolicyPeerConfig()
147
+ */
148
+ toNetworkPolicyPeerConfig(): NetworkPolicyPeerConfig;
149
+ /**
150
+ * @see INetworkPolicyPeer.toPodSelector()
151
+ */
152
+ toPodSelector(): pod.IPodSelector | undefined;
153
+ /**
154
+ * @internal
155
+ */
156
+ _toKube(): k8s.IpBlock;
157
+ }
158
+ /**
159
+ * Network protocols.
160
+ */
161
+ export declare enum NetworkProtocol {
162
+ /**
163
+ * TCP.
164
+ */
165
+ TCP = "TCP",
166
+ /**
167
+ * UDP.
168
+ */
169
+ UDP = "UDP",
170
+ /**
171
+ * SCTP.
172
+ */
173
+ SCTP = "SCTP"
174
+ }
175
+ /**
176
+ * Default behaviors of network traffic in policies.
177
+ */
178
+ export declare enum NetworkPolicyTrafficDefault {
179
+ /**
180
+ * The policy denies all traffic.
181
+ * Since rules are additive, additional rules or policies can allow
182
+ * specific traffic.
183
+ */
184
+ DENY = "DENY",
185
+ /**
186
+ * The policy allows all traffic (either ingress or egress).
187
+ * Since rules are additive, no additional rule or policies can
188
+ * subsequently deny the traffic.
189
+ */
190
+ ALLOW = "ALLOW"
191
+ }
192
+ /**
193
+ * Describes how the network policy should configure egress / ingress traffic.
194
+ */
195
+ export interface NetworkPolicyTraffic {
196
+ /**
197
+ * Specifies the default behavior of the policy when
198
+ * no rules are defined.
199
+ *
200
+ * @default - unset, the policy does not change the behavior.
201
+ */
202
+ readonly default?: NetworkPolicyTrafficDefault;
203
+ /**
204
+ * List of rules to be applied to the selected pods.
205
+ * If empty, the behavior of the policy is dictated by the `default` property.
206
+ *
207
+ * @default - no rules
208
+ */
209
+ readonly rules?: NetworkPolicyRule[];
210
+ }
211
+ /**
212
+ * Options for `NetworkPolicy.addEgressRule`.
213
+ */
214
+ export interface NetworkPolicyAddEgressRuleOptions {
215
+ /**
216
+ * Ports the rule should allow outgoing traffic to.
217
+ *
218
+ * @default - If the peer is a managed pod, take its ports. Otherwise, all ports are allowed.
219
+ */
220
+ readonly ports?: NetworkPolicyPort[];
221
+ }
222
+ /**
223
+ * Properties for `NetworkPolicy`.
224
+ */
225
+ export interface NetworkPolicyProps extends base.ResourceProps {
226
+ /**
227
+ * Which pods does this policy object applies to.
228
+ *
229
+ * This can either be a single pod / workload, or a grouping of pods selected
230
+ * via the `Pods.select` function. Rules is applied to any pods selected by this property.
231
+ * Multiple network policies can select the same set of pods.
232
+ * In this case, the rules for each are combined additively.
233
+ *
234
+ * Note that
235
+ *
236
+ * @default - will select all pods in the namespace of the policy.
237
+ */
238
+ readonly selector?: pod.IPodSelector;
239
+ /**
240
+ * Egress traffic configuration.
241
+ *
242
+ * @default - the policy doesn't change egress behavior of the pods it selects.
243
+ */
244
+ readonly egress?: NetworkPolicyTraffic;
245
+ /**
246
+ * Ingress traffic configuration.
247
+ *
248
+ * @default - the policy doesn't change ingress behavior of the pods it selects.
249
+ */
250
+ readonly ingress?: NetworkPolicyTraffic;
251
+ }
252
+ /**
253
+ * Control traffic flow at the IP address or port level (OSI layer 3 or 4),
254
+ * network policies are an application-centric construct which allow you
255
+ * to specify how a pod is allowed to communicate with various network peers.
256
+ *
257
+ * - Outgoing traffic is allowed if there are no network policies selecting
258
+ * the pod (and cluster policy otherwise allows the traffic),
259
+ * OR if the traffic matches at least one egress rule across all of the
260
+ * network policies that select the pod.
261
+ *
262
+ * - Incoming traffic is allowed to a pod if there are no network policies
263
+ * selecting the pod (and cluster policy otherwise allows the traffic),
264
+ * OR if the traffic source is the pod's local node,
265
+ * OR if the traffic matches at least one ingress rule across all of
266
+ * the network policies that select the pod.
267
+ *
268
+ * Network policies do not conflict; they are additive.
269
+ * If any policy or policies apply to a given pod for a given
270
+ * direction, the connections allowed in that direction from
271
+ * that pod is the union of what the applicable policies allow.
272
+ * Thus, order of evaluation does not affect the policy result.
273
+ *
274
+ * For a connection from a source pod to a destination pod to be allowed,
275
+ * both the egress policy on the source pod and the ingress policy on the
276
+ * destination pod need to allow the connection.
277
+ * If either side does not allow the connection, it will not happen.
278
+ *
279
+ * @see https://kubernetes.io/docs/concepts/services-networking/network-policies/#networkpolicy-resource
280
+ */
281
+ export declare class NetworkPolicy extends base.Resource {
282
+ /**
283
+ * @see base.Resource.apiObject
284
+ */
285
+ protected readonly apiObject: ApiObject;
286
+ readonly resourceType: string;
287
+ private readonly _podSelectorConfig;
288
+ private readonly _egressRules;
289
+ private readonly _ingressRules;
290
+ private readonly _policyTypes;
291
+ constructor(scope: Construct, id: string, props?: NetworkPolicyProps);
292
+ /**
293
+ * Allow outgoing traffic to the peer.
294
+ *
295
+ * If ports are not passed, traffic will be allowed on all ports.
296
+ */
297
+ addEgressRule(peer: INetworkPolicyPeer, ports?: NetworkPolicyPort[]): void;
298
+ /**
299
+ * Allow incoming traffic from the peer.
300
+ *
301
+ * If ports are not passed, traffic will be allowed on all ports.
302
+ */
303
+ addIngressRule(peer: INetworkPolicyPeer, ports?: NetworkPolicyPort[]): void;
304
+ private createNetworkPolicyPeers;
305
+ private configureDefaultBehavior;
306
+ /**
307
+ * @internal
308
+ */
309
+ _toKube(): k8s.NetworkPolicySpec;
310
+ }
311
+ export declare function validatePeerConfig(peerConfig: NetworkPolicyPeerConfig): void;