aubay-oci-deploy-tool 1.0.1

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 (107) hide show
  1. package/README.md +4 -0
  2. package/argocd/argocd.d.ts +22 -0
  3. package/argocd/argocd.js +266 -0
  4. package/argocd/argocd.js.map +1 -0
  5. package/argocd/config.d.ts +2 -0
  6. package/argocd/config.js +19 -0
  7. package/argocd/config.js.map +1 -0
  8. package/argocd/interfaces.d.ts +66 -0
  9. package/argocd/interfaces.js +3 -0
  10. package/argocd/interfaces.js.map +1 -0
  11. package/compute/compute.d.ts +11 -0
  12. package/compute/compute.js +56 -0
  13. package/compute/compute.js.map +1 -0
  14. package/compute/config.d.ts +2 -0
  15. package/compute/config.js +19 -0
  16. package/compute/config.js.map +1 -0
  17. package/compute/interfaces.d.ts +19 -0
  18. package/compute/interfaces.js +3 -0
  19. package/compute/interfaces.js.map +1 -0
  20. package/crds/config.d.ts +2 -0
  21. package/crds/config.js +9 -0
  22. package/crds/config.js.map +1 -0
  23. package/crds/crds.d.ts +13 -0
  24. package/crds/crds.js +42 -0
  25. package/crds/crds.js.map +1 -0
  26. package/crds/interfaces.d.ts +7 -0
  27. package/crds/interfaces.js +3 -0
  28. package/crds/interfaces.js.map +1 -0
  29. package/external-secrets/config.d.ts +5 -0
  30. package/external-secrets/config.js +12 -0
  31. package/external-secrets/config.js.map +1 -0
  32. package/external-secrets/externalsecrets.d.ts +22 -0
  33. package/external-secrets/externalsecrets.js +74 -0
  34. package/external-secrets/externalsecrets.js.map +1 -0
  35. package/external-secrets/interfaces.d.ts +10 -0
  36. package/external-secrets/interfaces.js +3 -0
  37. package/external-secrets/interfaces.js.map +1 -0
  38. package/iam/config.d.ts +2 -0
  39. package/iam/config.js +17 -0
  40. package/iam/config.js.map +1 -0
  41. package/iam/iam.d.ts +10 -0
  42. package/iam/iam.js +33 -0
  43. package/iam/iam.js.map +1 -0
  44. package/iam/interfaces.d.ts +12 -0
  45. package/iam/interfaces.js +3 -0
  46. package/iam/interfaces.js.map +1 -0
  47. package/index.d.ts +39 -0
  48. package/index.js +81 -0
  49. package/index.js.map +1 -0
  50. package/istio/config.d.ts +2 -0
  51. package/istio/config.js +18 -0
  52. package/istio/config.js.map +1 -0
  53. package/istio/interfaces.d.ts +18 -0
  54. package/istio/interfaces.js +3 -0
  55. package/istio/interfaces.js.map +1 -0
  56. package/istio/istio.d.ts +24 -0
  57. package/istio/istio.js +288 -0
  58. package/istio/istio.js.map +1 -0
  59. package/network/config.d.ts +3 -0
  60. package/network/config.js +23 -0
  61. package/network/config.js.map +1 -0
  62. package/network/interfaces.d.ts +31 -0
  63. package/network/interfaces.js +3 -0
  64. package/network/interfaces.js.map +1 -0
  65. package/network/network.d.ts +28 -0
  66. package/network/network.js +218 -0
  67. package/network/network.js.map +1 -0
  68. package/oke/config.d.ts +3 -0
  69. package/oke/config.js +25 -0
  70. package/oke/config.js.map +1 -0
  71. package/oke/interfaces.d.ts +40 -0
  72. package/oke/interfaces.js +3 -0
  73. package/oke/interfaces.js.map +1 -0
  74. package/oke/oke.d.ts +15 -0
  75. package/oke/oke.js +112 -0
  76. package/oke/oke.js.map +1 -0
  77. package/package.json +22 -0
  78. package/region/config.d.ts +2 -0
  79. package/region/config.js +9 -0
  80. package/region/config.js.map +1 -0
  81. package/region/interfaces.d.ts +7 -0
  82. package/region/interfaces.js +3 -0
  83. package/region/interfaces.js.map +1 -0
  84. package/region/region.d.ts +6 -0
  85. package/region/region.js +12 -0
  86. package/region/region.js.map +1 -0
  87. package/region/shortcode.d.ts +13 -0
  88. package/region/shortcode.js +22 -0
  89. package/region/shortcode.js.map +1 -0
  90. package/security/config.d.ts +3 -0
  91. package/security/config.js +27 -0
  92. package/security/config.js.map +1 -0
  93. package/security/interfaces.d.ts +23 -0
  94. package/security/interfaces.js +3 -0
  95. package/security/interfaces.js.map +1 -0
  96. package/security/security.d.ts +13 -0
  97. package/security/security.js +79 -0
  98. package/security/security.js.map +1 -0
  99. package/storage/config.d.ts +4 -0
  100. package/storage/config.js +24 -0
  101. package/storage/config.js.map +1 -0
  102. package/storage/interfaces.d.ts +19 -0
  103. package/storage/interfaces.js +3 -0
  104. package/storage/interfaces.js.map +1 -0
  105. package/storage/storage.d.ts +9 -0
  106. package/storage/storage.js +36 -0
  107. package/storage/storage.js.map +1 -0
package/istio/istio.js ADDED
@@ -0,0 +1,288 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Istio = void 0;
4
+ const pulumi = require("@pulumi/pulumi");
5
+ const k8s = require("@pulumi/kubernetes");
6
+ class Istio {
7
+ constructor(clusters, subnets, config, opts) {
8
+ this.clusters = clusters;
9
+ this.subnets = subnets;
10
+ this.config = config;
11
+ this.opts = opts;
12
+ this.releases = [];
13
+ this.gwCRD = [];
14
+ this.deploy();
15
+ }
16
+ // ===========================================================
17
+ // MAIN DEPLOY
18
+ // ===========================================================
19
+ deploy() {
20
+ this.clusters.apply(clusters => {
21
+ const allClusterValues = clusters.map(c => pulumi.all([c.clusterName, c.kubeconfig]));
22
+ pulumi.all(allClusterValues).apply(resolvedClusters => {
23
+ resolvedClusters.forEach(([clusterName, kubeconfig]) => {
24
+ pulumi.log.info(`Desplegando Istio en cluster: ${clusterName}`);
25
+ const provider = new k8s.Provider(`k8s-istio-${clusterName}`, { kubeconfig }, this.opts);
26
+ // Crear namespace istio-system si no existe
27
+ this.ensureNamespace(this.config.namespace, provider);
28
+ // Instalar Base + Istiod
29
+ const releases = this.installIstioControlPlane(clusterName, provider);
30
+ this.releases.push(...releases);
31
+ // Crear namespaces para istio-injection
32
+ // this.applyNamespaceInjection(clusterName, provider);
33
+ // Crear los Istio Gateways (1 por cada LB definido)
34
+ this.createGateways(clusterName, provider, releases);
35
+ //this.applyMtlsStrict(provider, releases);
36
+ //this.applyCnpgIstioExceptions(provider, releases);
37
+ });
38
+ });
39
+ });
40
+ }
41
+ // ===========================================================
42
+ // NAMESPACE (create if not exists)
43
+ // ===========================================================
44
+ ensureNamespace(name, provider) {
45
+ const ns = new k8s.core.v1.Namespace(`istio-ns-${name}`, {
46
+ metadata: { name },
47
+ }, { provider });
48
+ return ns;
49
+ }
50
+ // ===========================================================
51
+ // ISTIO BASE + ISTIOD
52
+ // ===========================================================
53
+ installIstioControlPlane(clusterName, provider) {
54
+ const base = new k8s.helm.v3.Release(`istio-base-${clusterName}`, {
55
+ chart: "base",
56
+ version: this.config.chartVersion,
57
+ namespace: this.config.namespace,
58
+ repositoryOpts: { repo: "https://istio-release.storage.googleapis.com/charts" },
59
+ }, { provider });
60
+ const istiod = new k8s.helm.v3.Release(`istiod-${clusterName}`, {
61
+ chart: "istiod",
62
+ version: this.config.chartVersion,
63
+ namespace: this.config.namespace,
64
+ repositoryOpts: { repo: "https://istio-release.storage.googleapis.com/charts" },
65
+ }, { provider, dependsOn: [base] });
66
+ return [base, istiod];
67
+ }
68
+ // ===========================================================
69
+ // NAMESPACES WITH SIDECAR INJECTION
70
+ // ===========================================================
71
+ applyNamespaceInjection(clusterName, provider) {
72
+ this.config.namespacesToInject.forEach(ns => {
73
+ const namespace = new k8s.core.v1.Namespace(`istio-injection-${clusterName}-${ns}`, {
74
+ metadata: {
75
+ name: ns,
76
+ labels: { "istio-injection": "enabled" },
77
+ },
78
+ }, { provider });
79
+ this.releases.push(namespace);
80
+ });
81
+ }
82
+ // ===========================================================
83
+ // ISTIO GATEWAYS
84
+ // (1 gateway por cada entrada en config.lb)
85
+ // ===========================================================
86
+ createGateways(clusterName, provider, opts) {
87
+ this.config.lb.forEach(lb => {
88
+ const subnetId = this.findSubnet(lb.subnetName);
89
+ const ingressGateway = new k8s.helm.v3.Release(`istio-gateway-${clusterName}-${lb.name}`, {
90
+ chart: "gateway",
91
+ version: this.config.chartVersion,
92
+ namespace: this.config.namespace,
93
+ repositoryOpts: {
94
+ repo: "https://istio-release.storage.googleapis.com/charts",
95
+ },
96
+ values: {
97
+ name: `ingressgateway-${lb.type}`,
98
+ labels: {
99
+ istio: `ingressgateway-${lb.type}`,
100
+ },
101
+ service: this.applyServiceLoadBalancerAnnotations(lb, subnetId, lb.reservedIpOcid),
102
+ volumes: [
103
+ {
104
+ name: "tls-certs",
105
+ secret: { secretName: "tls-aubay-ingress" }
106
+ }
107
+ ],
108
+ volumeMounts: [
109
+ {
110
+ name: "tls-certs",
111
+ mountPath: "/certs/istio"
112
+ }
113
+ ]
114
+ },
115
+ }, { provider, dependsOn: opts });
116
+ this.releases.push(ingressGateway);
117
+ // Creamos Gateway CRD
118
+ const gatewayCR = this.createGatewayCR(clusterName, lb, provider, ingressGateway);
119
+ this.gwCRD.push(gatewayCR);
120
+ });
121
+ }
122
+ applyServiceLoadBalancerAnnotations(lb, subnetId, reservedIp) {
123
+ const isPrivate = lb.type === "private";
124
+ const annotations = {
125
+ "oci.oraclecloud.com/load-balancer-type": "nlb",
126
+ "oci-network-load-balancer.oraclecloud.com/subnet": subnetId.apply(id => id),
127
+ };
128
+ if (reservedIp && isPrivate) {
129
+ annotations["oci-network-load-balancer.oraclecloud.com/assigned-private-ipv4"] = pulumi.output(reservedIp);
130
+ annotations["oci-network-load-balancer.oraclecloud.com/internal"] = "true";
131
+ }
132
+ const svc = {
133
+ type: "LoadBalancer",
134
+ annotations,
135
+ ports: [
136
+ { name: "http2", port: 80 },
137
+ { name: "https", port: 443 },
138
+ ],
139
+ };
140
+ if (reservedIp && !isPrivate) {
141
+ svc.loadBalancerIP = reservedIp;
142
+ }
143
+ if (isPrivate) {
144
+ svc.ports = [
145
+ ...svc.ports,
146
+ { name: "registration", port: 1515 },
147
+ { name: "events", port: 1514 },
148
+ ];
149
+ }
150
+ return svc;
151
+ }
152
+ createGatewayCR(clusterName, lb, provider, dependsOn) {
153
+ const servers = [
154
+ {
155
+ port: { number: 80, name: "http", protocol: "HTTP" },
156
+ hosts: ["*"],
157
+ },
158
+ {
159
+ port: { number: 443, name: "https", protocol: "HTTPS" },
160
+ hosts: ["*"],
161
+ tls: {
162
+ mode: "SIMPLE",
163
+ privateKey: "/certs/istio/tls.key",
164
+ serverCertificate: "/certs/istio/tls.crt",
165
+ },
166
+ },
167
+ ];
168
+ if (lb.type === "private") {
169
+ servers.push({
170
+ port: { number: 1515, name: "registration", protocol: "TCP" },
171
+ hosts: ["*"],
172
+ }, {
173
+ port: { number: 1514, name: "events", protocol: "TCP" },
174
+ hosts: ["*"],
175
+ });
176
+ }
177
+ return new k8s.apiextensions.CustomResource(`istio-gateway-crd-${clusterName}-${lb.name}`, {
178
+ apiVersion: "networking.istio.io/v1beta1",
179
+ kind: "Gateway",
180
+ metadata: {
181
+ name: `gw-${lb.type}`,
182
+ namespace: this.config.namespace,
183
+ },
184
+ spec: {
185
+ selector: {
186
+ istio: `ingressgateway-${lb.type}`,
187
+ },
188
+ servers
189
+ }
190
+ }, { provider, dependsOn: dependsOn });
191
+ }
192
+ applyMtlsStrict(provider, opts) {
193
+ new k8s.apiextensions.CustomResource("istio-mtls-strict", {
194
+ apiVersion: "security.istio.io/v1beta1",
195
+ kind: "PeerAuthentication",
196
+ metadata: { name: "default", namespace: "istio-system" },
197
+ spec: {
198
+ mtls: { mode: "STRICT" }
199
+ },
200
+ }, { provider, dependsOn: opts });
201
+ }
202
+ // ===========================================================
203
+ // SUBNET LOOKUP
204
+ // ===========================================================
205
+ findSubnet(subnetName) {
206
+ return this.subnets.apply(subnets => pulumi.all(subnets.map(s => pulumi.all([s.displayName, s.id]).apply(([name, id]) => name === subnetName ? id : undefined))).apply(ids => {
207
+ const found = ids.find(id => id !== undefined);
208
+ if (!found) {
209
+ throw new Error(`No se encontró la subnet ${subnetName}`);
210
+ }
211
+ return found;
212
+ }));
213
+ }
214
+ // ===========================================================
215
+ // CNPG (PostgreSQL Operator) – Istio Exceptions
216
+ // Permite al operator hablar con las BDs aunque estas tengan sidecar
217
+ // ===========================================================
218
+ applyCnpgIstioExceptions(provider, opts) {
219
+ const namespace = this.config.cnpgNamespace && this.config.cnpgNamespace !== ""
220
+ ? this.config.cnpgNamespace
221
+ : "databases";
222
+ //
223
+ // 1. PeerAuthentication
224
+ // Deshabilita mTLS SOLO en el puerto 8000 de los pods de PostgreSQL
225
+ //
226
+ const pa = new k8s.apiextensions.CustomResource("cnpg-peer-auth", {
227
+ apiVersion: "security.istio.io/v1beta1",
228
+ kind: "PeerAuthentication",
229
+ metadata: {
230
+ name: "cnpg-operator-mtls",
231
+ namespace,
232
+ },
233
+ spec: {
234
+ selector: {
235
+ matchLabels: {
236
+ "cnpg.io/podRole": "instance",
237
+ },
238
+ },
239
+ mtls: { mode: "STRICT" },
240
+ portLevelMtls: {
241
+ "8000": { mode: "DISABLE" },
242
+ },
243
+ },
244
+ }, { provider, dependsOn: opts });
245
+ //
246
+ // 2. AuthorizationPolicy
247
+ // Permite que SOLO el operator acceda al puerto 8000
248
+ //
249
+ const ap = new k8s.apiextensions.CustomResource("cnpg-authorization-policy", {
250
+ apiVersion: "security.istio.io/v1beta1",
251
+ kind: "AuthorizationPolicy",
252
+ metadata: {
253
+ name: "cnpg-operator-access",
254
+ namespace,
255
+ },
256
+ spec: {
257
+ selector: {
258
+ matchLabels: {
259
+ "cnpg.io/podRole": "instance",
260
+ },
261
+ },
262
+ rules: [
263
+ {
264
+ from: [
265
+ {
266
+ source: {
267
+ principals: [
268
+ "cluster.local/ns/cnpg-system/sa/cnpg-operator",
269
+ ],
270
+ },
271
+ },
272
+ ],
273
+ to: [
274
+ {
275
+ operation: {
276
+ ports: ["8000"],
277
+ },
278
+ },
279
+ ],
280
+ },
281
+ ],
282
+ },
283
+ }, { provider, dependsOn: opts });
284
+ return [pa, ap];
285
+ }
286
+ }
287
+ exports.Istio = Istio;
288
+ //# sourceMappingURL=istio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"istio.js","sourceRoot":"","sources":["../../src/istio/istio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { IVcnConfig } from "./interfaces";
2
+ export declare const compartmentId: string;
3
+ export declare const vcns: IVcnConfig[];
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.vcns = exports.compartmentId = void 0;
4
+ const pulumi = require("@pulumi/pulumi");
5
+ const stack = pulumi.getStack();
6
+ const infraConfig = new pulumi.Config("infra");
7
+ exports.compartmentId = infraConfig.require("compartmentId");
8
+ // Config de red
9
+ const networkConfig = new pulumi.Config("network");
10
+ // Leemos el array completo de VCNs
11
+ const rawVcns = networkConfig.requireObject("vcns");
12
+ // Inyectamos automáticamente el compartmentId a cada VCN
13
+ exports.vcns = rawVcns.map(vcn => ({
14
+ ...vcn,
15
+ compartmentId: exports.compartmentId,
16
+ // Por si quieres añadir un sufijo con el stack (dev, prod…)
17
+ name: `${stack}-${vcn.name}`,
18
+ subnets: vcn.subnets.map(subnet => ({
19
+ ...subnet,
20
+ name: `${stack}-${subnet.name}`,
21
+ })),
22
+ }));
23
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/network/config.ts"],"names":[],"mappings":";;;AAAA,yCAAyC;AAGzC,MAAM,KAAK,GAAW,MAAM,CAAC,QAAQ,EAAE,CAAC;AAExC,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAClC,QAAA,aAAa,GAAW,WAAW,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AAE1E,gBAAgB;AAChB,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAEnD,mCAAmC;AACnC,MAAM,OAAO,GAAG,aAAa,CAAC,aAAa,CAAsC,MAAM,CAAC,CAAC;AAEzF,yDAAyD;AAC5C,QAAA,IAAI,GAAiB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClD,GAAG,GAAG;IACN,aAAa,EAAE,qBAAa;IAC5B,4DAA4D;IAC5D,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,CAAC,IAAI,EAAE;IAC5B,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChC,GAAG,MAAM;QACT,IAAI,EAAE,GAAG,KAAK,IAAI,MAAM,CAAC,IAAI,EAAE;KAClC,CAAC,CAAC;CACN,CAAC,CAAC,CAAC"}
@@ -0,0 +1,31 @@
1
+ import * as oci from "@pulumi/oci";
2
+ export interface INetwork {
3
+ vcns: oci.core.VirtualNetwork[];
4
+ subnets: oci.core.Subnet[];
5
+ nats: oci.core.NatGateway[];
6
+ igws: oci.core.InternetGateway[];
7
+ routeTables: oci.core.RouteTable[];
8
+ securityLists: oci.core.SecurityList[];
9
+ sgw: oci.core.ServiceGateway[];
10
+ drgAttachments?: oci.core.DrgAttachment[];
11
+ }
12
+ export interface IVcnConfig {
13
+ name: string;
14
+ cidr: string;
15
+ compartmentId: string;
16
+ subnets: ISubnetConfig[];
17
+ drGatewayOcid?: string;
18
+ }
19
+ export interface ISubnetConfig {
20
+ name: string;
21
+ cidr: string;
22
+ isPublic: boolean;
23
+ routeRules?: IDrgRouteRuleConfig[];
24
+ ingressRules?: oci.types.input.Core.SecurityListIngressSecurityRule[];
25
+ egressRules?: oci.types.input.Core.SecurityListEgressSecurityRule[];
26
+ }
27
+ export interface IDrgRouteRuleConfig {
28
+ destination: string;
29
+ destinationType?: string;
30
+ description?: string;
31
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/network/interfaces.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ import * as oci from "@pulumi/oci";
2
+ import { IVcnConfig, INetwork } from "./interfaces";
3
+ import { IRegion } from "../region/interfaces";
4
+ export declare class Network implements INetwork {
5
+ private vcnsConfig;
6
+ private region;
7
+ vcns: oci.core.VirtualNetwork[];
8
+ subnets: oci.core.Subnet[];
9
+ nats: oci.core.NatGateway[];
10
+ igws: oci.core.InternetGateway[];
11
+ routeTables: oci.core.RouteTable[];
12
+ securityLists: oci.core.SecurityList[];
13
+ sgw: oci.core.ServiceGateway[];
14
+ drgAttachments: oci.core.DrgAttachment[];
15
+ constructor(vcnsConfig: IVcnConfig[], region: IRegion);
16
+ private buildNetwork;
17
+ private createVcn;
18
+ private createDrgAttachment;
19
+ private createNat;
20
+ private createIgw;
21
+ private createServiceGateway;
22
+ private createSecurityList;
23
+ private getDefaultIngressRules;
24
+ private getDefaultEgressRules;
25
+ private createPublicRouteTable;
26
+ private createPrivateRouteTable;
27
+ private createSubnet;
28
+ }
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Network = void 0;
4
+ const oci = require("@pulumi/oci");
5
+ class Network {
6
+ constructor(vcnsConfig, region) {
7
+ this.vcnsConfig = vcnsConfig;
8
+ this.region = region;
9
+ this.vcns = [];
10
+ this.subnets = [];
11
+ this.nats = [];
12
+ this.igws = [];
13
+ this.routeTables = [];
14
+ this.securityLists = [];
15
+ this.sgw = [];
16
+ this.drgAttachments = [];
17
+ this.buildNetwork();
18
+ }
19
+ buildNetwork() {
20
+ this.vcnsConfig.forEach(vcn => {
21
+ let privateRt;
22
+ let publicRt;
23
+ const vcnCreated = this.createVcn(vcn);
24
+ this.vcns.push(vcnCreated);
25
+ if (vcn.drGatewayOcid) {
26
+ const drgAttachment = this.createDrgAttachment(vcnCreated, vcn.drGatewayOcid, vcn.name);
27
+ this.drgAttachments.push(drgAttachment);
28
+ }
29
+ const hasPrivateSubnets = vcn.subnets.some(subnet => !subnet.isPublic);
30
+ const hasPublicSubnets = vcn.subnets.some(subnet => subnet.isPublic);
31
+ if (hasPrivateSubnets) {
32
+ const nat = this.createNat(vcnCreated, vcn.name);
33
+ this.nats.push(nat);
34
+ const sgw = this.createServiceGateway(vcnCreated, vcn.name);
35
+ this.sgw.push(sgw);
36
+ privateRt = this.createPrivateRouteTable(vcnCreated, nat, sgw, vcn);
37
+ this.routeTables.push(privateRt);
38
+ }
39
+ if (hasPublicSubnets) {
40
+ const igw = this.createIgw(vcnCreated, vcn.name);
41
+ this.igws.push(igw);
42
+ publicRt = this.createPublicRouteTable(vcnCreated, igw, vcn.name);
43
+ this.routeTables.push(publicRt);
44
+ }
45
+ vcn.subnets.forEach(subnet => {
46
+ const securityList = this.createSecurityList(vcnCreated, subnet);
47
+ this.securityLists.push(securityList);
48
+ const routeTable = subnet.isPublic ? publicRt : privateRt;
49
+ const subnetCreated = this.createSubnet(vcnCreated, subnet, routeTable, securityList);
50
+ this.subnets.push(subnetCreated);
51
+ });
52
+ });
53
+ }
54
+ createVcn(vcnConfig) {
55
+ return new oci.core.VirtualNetwork(vcnConfig.name, {
56
+ compartmentId: vcnConfig.compartmentId,
57
+ cidrBlock: vcnConfig.cidr,
58
+ displayName: vcnConfig.name,
59
+ });
60
+ }
61
+ createDrgAttachment(vcn, drgId, vcnName) {
62
+ return new oci.core.DrgAttachment(`${vcnName}-drg-attach`, {
63
+ drgId: drgId,
64
+ displayName: `${vcnName}-drg-attach`,
65
+ networkDetails: {
66
+ type: "VCN",
67
+ id: vcn.id,
68
+ },
69
+ });
70
+ }
71
+ createNat(vcn, vcnName) {
72
+ return new oci.core.NatGateway(`${vcnName}-nat`, {
73
+ compartmentId: vcn.compartmentId,
74
+ vcnId: vcn.id,
75
+ displayName: `${vcnName}-nat`
76
+ });
77
+ }
78
+ createIgw(vcn, vcnName) {
79
+ return new oci.core.InternetGateway(`${vcnName}-igw`, {
80
+ compartmentId: vcn.compartmentId,
81
+ vcnId: vcn.id,
82
+ displayName: `${vcnName}-igw`
83
+ });
84
+ }
85
+ createServiceGateway(vcn, vcnName) {
86
+ const allServices = oci.core.getServicesOutput({});
87
+ const servicesId = allServices.apply(s => s.services.find(srv => srv.cidrBlock?.includes(`all-${this.region.shortCode}-services-in-oracle-services-network`))?.id);
88
+ return new oci.core.ServiceGateway(`${vcnName}-sgw`, {
89
+ compartmentId: vcn.compartmentId,
90
+ vcnId: vcn.id,
91
+ displayName: `${vcnName}-sgw`,
92
+ services: [{
93
+ serviceId: servicesId
94
+ }]
95
+ });
96
+ }
97
+ createSecurityList(vcn, subnetCfg) {
98
+ const defaultIngressRules = this.getDefaultIngressRules(vcn);
99
+ const defaultEgressRules = this.getDefaultEgressRules();
100
+ return new oci.core.SecurityList(`${subnetCfg.name}-sl`, {
101
+ compartmentId: vcn.compartmentId,
102
+ vcnId: vcn.id,
103
+ displayName: `${subnetCfg.name}-sl`,
104
+ ingressSecurityRules: [
105
+ ...defaultIngressRules,
106
+ ...(subnetCfg.ingressRules ?? []),
107
+ ],
108
+ egressSecurityRules: [
109
+ ...defaultEgressRules,
110
+ ...(subnetCfg.egressRules ?? []),
111
+ ],
112
+ });
113
+ }
114
+ getDefaultIngressRules(vcn) {
115
+ return [
116
+ {
117
+ protocol: "6", // TCP
118
+ source: "0.0.0.0/0",
119
+ sourceType: "CIDR_BLOCK",
120
+ tcpOptions: { min: 22, max: 22 },
121
+ description: "SSH from anywhere (port 22)",
122
+ },
123
+ {
124
+ protocol: "1", // ICMP
125
+ source: "0.0.0.0/0",
126
+ sourceType: "CIDR_BLOCK",
127
+ icmpOptions: { type: 3, code: 4 },
128
+ description: "ICMP Fragmentation Needed",
129
+ },
130
+ {
131
+ protocol: "1", // ICMP
132
+ source: vcn.cidrBlock,
133
+ sourceType: "CIDR_BLOCK",
134
+ icmpOptions: { type: 3 },
135
+ description: "ICMP Destination Unreachable within VCN",
136
+ },
137
+ ];
138
+ }
139
+ getDefaultEgressRules() {
140
+ return [
141
+ {
142
+ protocol: "all",
143
+ destination: "0.0.0.0/0",
144
+ destinationType: "CIDR_BLOCK",
145
+ description: "Allow all outbound traffic"
146
+ },
147
+ ];
148
+ }
149
+ createPublicRouteTable(vcn, igw, vcnName) {
150
+ return new oci.core.RouteTable(`${vcnName}-public-rt`, {
151
+ compartmentId: vcn.compartmentId,
152
+ vcnId: vcn.id,
153
+ routeRules: [
154
+ {
155
+ destination: "0.0.0.0/0",
156
+ networkEntityId: igw.id,
157
+ destinationType: "CIDR_BLOCK",
158
+ description: "Route traffic from public subnets to IGW",
159
+ },
160
+ ],
161
+ displayName: `${vcnName}-public-rt`
162
+ });
163
+ }
164
+ createPrivateRouteTable(vcn, nat, sgw, vcnCfg) {
165
+ // rutas básicas: NAT y Service Gateway
166
+ const baseRouteRules = [
167
+ {
168
+ destination: "0.0.0.0/0",
169
+ networkEntityId: nat.id,
170
+ destinationType: "CIDR_BLOCK",
171
+ description: "Route traffic from private subnets to NAT",
172
+ },
173
+ {
174
+ destination: `all-${this.region.shortCode}-services-in-oracle-services-network`,
175
+ destinationType: "SERVICE_CIDR_BLOCK",
176
+ networkEntityId: sgw.id,
177
+ description: "Access Oracle Services via Service Gateway"
178
+ }
179
+ ];
180
+ // si hay DRG, agregamos rutas de DRG
181
+ const drgRouteRules = [];
182
+ if (vcnCfg.drGatewayOcid) {
183
+ // recorremos todas las subnets y sus routeRules
184
+ vcnCfg.subnets.forEach(subnet => {
185
+ if (subnet.routeRules && subnet.routeRules.length > 0) {
186
+ subnet.routeRules.forEach(rule => {
187
+ drgRouteRules.push({
188
+ destination: rule.destination,
189
+ destinationType: rule.destinationType ?? "CIDR_BLOCK",
190
+ networkEntityId: vcnCfg.drGatewayOcid, // apuntamos al DRG
191
+ description: rule.description ?? "Route to DRG"
192
+ });
193
+ });
194
+ }
195
+ });
196
+ }
197
+ const allRouteRules = [...baseRouteRules, ...drgRouteRules];
198
+ return new oci.core.RouteTable(`${vcnCfg.name}-private-rt`, {
199
+ compartmentId: vcnCfg.compartmentId,
200
+ vcnId: vcn.id,
201
+ displayName: `${vcnCfg.name}-private-rt`,
202
+ routeRules: allRouteRules
203
+ });
204
+ }
205
+ createSubnet(vcn, subnetConfig, routeTable, securityList) {
206
+ return new oci.core.Subnet(subnetConfig.name, {
207
+ compartmentId: vcn.compartmentId,
208
+ vcnId: vcn.id,
209
+ displayName: subnetConfig.name,
210
+ cidrBlock: subnetConfig.cidr,
211
+ prohibitPublicIpOnVnic: !subnetConfig.isPublic,
212
+ routeTableId: routeTable?.id,
213
+ securityListIds: [securityList.id]
214
+ });
215
+ }
216
+ }
217
+ exports.Network = Network;
218
+ //# sourceMappingURL=network.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/network/network.ts"],"names":[],"mappings":";;;AAAA,mCAAmC;AAInC,MAAa,OAAO;IAUhB,YAAoB,UAAwB,EAAU,MAAe;QAAjD,eAAU,GAAV,UAAU,CAAc;QAAU,WAAM,GAAN,MAAM,CAAS;QAT9D,SAAI,GAA8B,EAAE,CAAC;QACrC,YAAO,GAAsB,EAAE,CAAC;QAChC,SAAI,GAA0B,EAAE,CAAC;QACjC,SAAI,GAA+B,EAAE,CAAC;QACtC,gBAAW,GAA0B,EAAE,CAAC;QACxC,kBAAa,GAA4B,EAAE,CAAC;QAC5C,QAAG,GAA8B,EAAE,CAAC;QACpC,mBAAc,GAA6B,EAAE,CAAC;QAGjD,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAEO,YAAY;QAChB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC1B,IAAI,SAA8B,CAAC;YACnC,IAAI,QAA6B,CAAC;YAElC,MAAM,UAAU,GAA4B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAChE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAE3B,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;gBACpB,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;gBACxF,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5C,CAAC;YAED,MAAM,iBAAiB,GAAY,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAChF,MAAM,gBAAgB,GAAY,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAE9E,IAAG,iBAAiB,EAAE,CAAC;gBACnB,MAAM,GAAG,GAAwB,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;gBACtE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAEpB,MAAM,GAAG,GAA4B,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;gBACrF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAEnB,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;gBACnE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACpC,CAAC;YAED,IAAG,gBAAgB,EAAE,CAAC;gBAClB,MAAM,GAAG,GAA6B,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC3E,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAEpB,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;gBAClE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC;YAED,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBACzB,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBACjE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAEtC,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;gBAE1D,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;gBACtF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,SAAS,CAAC,SAAqB;QACnC,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,EAAE;YAC/C,aAAa,EAAE,SAAS,CAAC,aAAa;YACtC,SAAS,EAAE,SAAS,CAAC,IAAI;YACzB,WAAW,EAAE,SAAS,CAAC,IAAI;SAC9B,CAAC,CAAC;IACP,CAAC;IAEO,mBAAmB,CAAC,GAA4B,EAAE,KAAa,EAAE,OAAe;QACpF,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,OAAO,aAAa,EAAE;YACvD,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,GAAG,OAAO,aAAa;YACpC,cAAc,EAAE;gBACZ,IAAI,EAAE,KAAK;gBACX,EAAE,EAAE,GAAG,CAAC,EAAE;aACb;SACJ,CAAC,CAAC;IACP,CAAC;IAEO,SAAS,CAAC,GAA4B,EAAE,OAAe;QAC3D,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,OAAO,MAAM,EAAE;YAC7C,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,KAAK,EAAE,GAAG,CAAC,EAAE;YACb,WAAW,EAAE,GAAG,OAAO,MAAM;SAChC,CAAC,CAAC;IACP,CAAC;IAEO,SAAS,CAAC,GAA4B,EAAE,OAAe;QAC3D,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,OAAO,MAAM,EAAE;YAClD,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,KAAK,EAAE,GAAG,CAAC,EAAE;YACb,WAAW,EAAE,GAAG,OAAO,MAAM;SAChC,CAAC,CAAC;IACP,CAAC;IAEO,oBAAoB,CAAC,GAA4B,EAAE,OAAe;QACtE,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CACrC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAClB,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,sCAAsC,CAAC,CAC9F,EAAE,EAAG,CACT,CAAC;QAEF,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,OAAO,MAAM,EAAE;YACjD,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,KAAK,EAAE,GAAG,CAAC,EAAE;YACb,WAAW,EAAE,GAAG,OAAO,MAAM;YAC7B,QAAQ,EAAE,CAAC;oBACP,SAAS,EAAE,UAAU;iBACxB,CAAC;SACL,CAAC,CAAC;IACP,CAAC;IAEO,kBAAkB,CAAC,GAA4B,EAAE,SAAwB;QAC7E,MAAM,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAExD,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,IAAI,KAAK,EAAE;YACrD,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,KAAK,EAAE,GAAG,CAAC,EAAE;YACb,WAAW,EAAE,GAAG,SAAS,CAAC,IAAI,KAAK;YACnC,oBAAoB,EAAE;gBAClB,GAAG,mBAAmB;gBACtB,GAAG,CAAC,SAAS,CAAC,YAAY,IAAI,EAAE,CAAC;aACpC;YACD,mBAAmB,EAAE;gBACjB,GAAG,kBAAkB;gBACrB,GAAG,CAAC,SAAS,CAAC,WAAW,IAAI,EAAE,CAAC;aACnC;SACJ,CAAC,CAAC;IACP,CAAC;IAEO,sBAAsB,CAAC,GAA4B;QACvD,OAAO;YACH;gBACI,QAAQ,EAAE,GAAG,EAAE,MAAM;gBACrB,MAAM,EAAE,WAAW;gBACnB,UAAU,EAAE,YAAY;gBACxB,UAAU,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;gBAChC,WAAW,EAAE,6BAA6B;aAC7C;YACD;gBACI,QAAQ,EAAE,GAAG,EAAE,OAAO;gBACtB,MAAM,EAAE,WAAW;gBACnB,UAAU,EAAE,YAAY;gBACxB,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;gBACjC,WAAW,EAAE,2BAA2B;aAC3C;YACD;gBACI,QAAQ,EAAE,GAAG,EAAE,OAAO;gBACtB,MAAM,EAAE,GAAG,CAAC,SAAS;gBACrB,UAAU,EAAE,YAAY;gBACxB,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;gBACxB,WAAW,EAAE,yCAAyC;aACzD;SACJ,CAAC;IACN,CAAC;IAEO,qBAAqB;QACzB,OAAO;YACH;gBACI,QAAQ,EAAE,KAAK;gBACf,WAAW,EAAE,WAAW;gBACxB,eAAe,EAAE,YAAY;gBAC7B,WAAW,EAAE,4BAA4B;aAC5C;SACJ,CAAC;IACN,CAAC;IAEO,sBAAsB,CAAC,GAA4B,EAAE,GAA6B,EAAE,OAAe;QACvG,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,OAAO,YAAY,EAAE;YACnD,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,KAAK,EAAE,GAAG,CAAC,EAAE;YACb,UAAU,EAAE;gBACR;oBACI,WAAW,EAAE,WAAW;oBACxB,eAAe,EAAE,GAAG,CAAC,EAAE;oBACvB,eAAe,EAAE,YAAY;oBAC7B,WAAW,EAAE,0CAA0C;iBAC1D;aACJ;YACD,WAAW,EAAE,GAAG,OAAO,YAAY;SACtC,CAAC,CAAC;IACP,CAAC;IAEO,uBAAuB,CAC3B,GAA4B,EAC5B,GAAwB,EACxB,GAA4B,EAC5B,MAAkB;QAGlB,uCAAuC;QACvC,MAAM,cAAc,GAA+C;YAC/D;gBACI,WAAW,EAAE,WAAW;gBACxB,eAAe,EAAE,GAAG,CAAC,EAAE;gBACvB,eAAe,EAAE,YAAY;gBAC7B,WAAW,EAAE,2CAA2C;aAC3D;YACD;gBACI,WAAW,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,sCAAsC;gBAC/E,eAAe,EAAE,oBAAoB;gBACrC,eAAe,EAAE,GAAG,CAAC,EAAE;gBACvB,WAAW,EAAE,4CAA4C;aAC5D;SACJ,CAAC;QAEF,qCAAqC;QACrC,MAAM,aAAa,GAA+C,EAAE,CAAC;QACrE,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACvB,gDAAgD;YAChD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBAC5B,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpD,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;wBAC7B,aAAa,CAAC,IAAI,CAAC;4BACf,WAAW,EAAE,IAAI,CAAC,WAAW;4BAC7B,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,YAAY;4BACrD,eAAe,EAAE,MAAM,CAAC,aAAc,EAAE,mBAAmB;4BAC3D,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,cAAc;yBAClD,CAAC,CAAC;oBACP,CAAC,CAAC,CAAC;gBACP,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QAED,MAAM,aAAa,GAAG,CAAC,GAAG,cAAc,EAAE,GAAG,aAAa,CAAC,CAAC;QAE5D,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,IAAI,aAAa,EAAE;YACxD,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,KAAK,EAAE,GAAG,CAAC,EAAE;YACb,WAAW,EAAE,GAAG,MAAM,CAAC,IAAI,aAAa;YACxC,UAAU,EAAE,aAAa;SAC5B,CAAC,CAAC;IACP,CAAC;IAEO,YAAY,CAChB,GAA4B,EAC5B,YAA2B,EAC3B,UAA+B,EAC/B,YAAmC;QAEnC,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE;YAC1C,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,KAAK,EAAE,GAAG,CAAC,EAAE;YACb,WAAW,EAAE,YAAY,CAAC,IAAI;YAC9B,SAAS,EAAE,YAAY,CAAC,IAAI;YAC5B,sBAAsB,EAAE,CAAC,YAAY,CAAC,QAAQ;YAC9C,YAAY,EAAE,UAAU,EAAE,EAAE;YAC5B,eAAe,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;SACrC,CAAC,CAAC;IACP,CAAC;CACJ;AA7PD,0BA6PC"}
@@ -0,0 +1,3 @@
1
+ import { IOkeClusterConfig } from "./interfaces";
2
+ export declare const ociCompartmentId: string;
3
+ export declare const clusters: IOkeClusterConfig[];