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/README.md ADDED
@@ -0,0 +1,4 @@
1
+ # AUBAY-OCI-DEPLOY-TOOL
2
+
3
+ This NPM library provide mechanisms to deploy to OCI (Oracle Cloud Infrastructure)
4
+
@@ -0,0 +1,22 @@
1
+ import * as pulumi from "@pulumi/pulumi";
2
+ import * as k8s from "@pulumi/kubernetes";
3
+ import { IArgoCd, IArgoCdConfig } from "./interfaces";
4
+ import { IOkeKubeconfig } from "../oke/interfaces";
5
+ export declare class ArgoCd implements IArgoCd {
6
+ private clusters;
7
+ private config;
8
+ private opts?;
9
+ releases: k8s.helm.v3.Release[];
10
+ appProjects: k8s.apiextensions.CustomResource[];
11
+ applications: k8s.apiextensions.CustomResource[];
12
+ externalSecrets: k8s.apiextensions.CustomResource[];
13
+ constructor(clusters: pulumi.Output<IOkeKubeconfig[]>, config: IArgoCdConfig, opts?: pulumi.CustomResourceOptions | undefined);
14
+ private deployToClusters;
15
+ private createNamespace;
16
+ private createExternalSecretOidc;
17
+ private installArgoCdHelm;
18
+ private createArgoCdVirtualService;
19
+ private createAppProjectsAndApps;
20
+ private createExternalSecret;
21
+ private sanitizeName;
22
+ }
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ArgoCd = void 0;
4
+ const pulumi = require("@pulumi/pulumi");
5
+ const k8s = require("@pulumi/kubernetes");
6
+ class ArgoCd {
7
+ constructor(clusters, config, opts) {
8
+ this.clusters = clusters;
9
+ this.config = config;
10
+ this.opts = opts;
11
+ this.releases = [];
12
+ this.appProjects = [];
13
+ this.applications = [];
14
+ this.externalSecrets = [];
15
+ this.deployToClusters();
16
+ }
17
+ deployToClusters() {
18
+ this.clusters.apply(clusters => {
19
+ // Recolectamos todos los Outputs para cada cluster
20
+ const allClusterValues = clusters.map(c => pulumi.all([c.clusterName, c.kubeconfig]));
21
+ pulumi.all(allClusterValues).apply(resolvedClusters => {
22
+ resolvedClusters.forEach(([clusterName, kubeconfig], i) => {
23
+ const clusterCfg = this.config.clusters.find(c => c.name === clusterName);
24
+ if (!clusterCfg || !clusterCfg.enabled) {
25
+ pulumi.log.info(`ArgoCD deshabilitado en cluster ${clusterName}`);
26
+ return;
27
+ }
28
+ pulumi.log.info(`Desplegando ArgoCD en cluster: ${clusterName}`);
29
+ const provider = new k8s.Provider(`k8s-provider-argocd-${clusterName}`, { kubeconfig }, this.opts);
30
+ const ns = this.createNamespace(provider, clusterName);
31
+ const release = this.installArgoCdHelm(provider, clusterCfg, ns);
32
+ const esOidc = this.createExternalSecretOidc(provider, clusterCfg, release);
33
+ this.releases.push(release);
34
+ const vs = this.createArgoCdVirtualService(provider, clusterCfg, release);
35
+ if (clusterCfg.appProjects?.length) {
36
+ this.createAppProjectsAndApps(provider, ns, clusterCfg, release);
37
+ }
38
+ else {
39
+ pulumi.log.info(`No se definieron AppProjects en ${clusterName}, solo se instalará ArgoCD base`);
40
+ }
41
+ });
42
+ });
43
+ });
44
+ }
45
+ createNamespace(provider, clusterName) {
46
+ return new k8s.core.v1.Namespace(`argocd-ns-${clusterName}`, {
47
+ metadata: { name: this.config.namespace },
48
+ }, { provider, ...this.opts });
49
+ }
50
+ createExternalSecretOidc(provider, clusterCfg, dependsOn) {
51
+ return new k8s.apiextensions.CustomResource(`argocd-oidc-external-secret-${clusterCfg.name}`, {
52
+ apiVersion: "external-secrets.io/v1",
53
+ kind: "ExternalSecret",
54
+ metadata: {
55
+ name: `argocd-oidc-es`,
56
+ namespace: this.config.namespace,
57
+ },
58
+ spec: {
59
+ refreshInterval: "1h",
60
+ secretStoreRef: {
61
+ name: "oci-vault-cluster-secret-store",
62
+ kind: "ClusterSecretStore",
63
+ },
64
+ target: {
65
+ name: `argocd-secret`,
66
+ creationPolicy: "Merge",
67
+ },
68
+ data: [
69
+ {
70
+ secretKey: "oidc.azure.clientSecret",
71
+ remoteRef: {
72
+ key: clusterCfg.azure.vaultSecretAD,
73
+ },
74
+ }
75
+ ],
76
+ },
77
+ }, { provider, dependsOn: [dependsOn], ignoreChanges: ["spec.refreshInterval"] });
78
+ }
79
+ installArgoCdHelm(provider, clusterCfg, ns) {
80
+ return new k8s.helm.v3.Release(`argocd-${clusterCfg.name}`, {
81
+ chart: "argo-cd",
82
+ version: this.config.helm.chartVersion,
83
+ repositoryOpts: { repo: "https://argoproj.github.io/argo-helm" },
84
+ skipCrds: false,
85
+ namespace: this.config.namespace,
86
+ values: {
87
+ global: { image: { tag: this.config.helm.appVersion } },
88
+ fullnameOverride: "argocd",
89
+ controller: { replicas: clusterCfg.replicaCount },
90
+ repoServer: { replicas: clusterCfg.replicaCount },
91
+ server: {
92
+ replicas: clusterCfg.replicaCount,
93
+ service: {
94
+ type: clusterCfg.serviceType,
95
+ },
96
+ extraArgs: ["--insecure"],
97
+ },
98
+ configs: {
99
+ cm: {
100
+ url: `https://${clusterCfg.domain}`,
101
+ "oidc.config": `
102
+ name: AzureAD
103
+ issuer: https://login.microsoftonline.com/${clusterCfg.azure.tenantId}/v2.0
104
+ clientID: ${clusterCfg.azure.clientId}
105
+ clientSecret: $oidc.azure.clientSecret
106
+ requestedScopes: ["openid", "profile", "email", "offline_access"]
107
+ redirectURI: https://${clusterCfg.domain}/auth/callback
108
+ #userNameKey: email
109
+ #groupsKey: groups --> Añadimos estas dos por si en un futuro queremos granular permisos por grupos. Habilitamos procesamiento del claim groups
110
+ `,
111
+ //"ui.logo": "https://d2q79iu7y748jz.cloudfront.net/s/_squarelogo/256x256/df56b4d370b83792bb6d2fc465b0a480"
112
+ },
113
+ rbac: {
114
+ "policy.default": "role:admin",
115
+ },
116
+ },
117
+ },
118
+ }, { provider, dependsOn: [ns] });
119
+ }
120
+ createArgoCdVirtualService(provider, clusterCfg, dependsOn) {
121
+ const vs = new k8s.apiextensions.CustomResource(`argocd-vs-${clusterCfg.name}`, {
122
+ apiVersion: "networking.istio.io/v1beta1",
123
+ kind: "VirtualService",
124
+ metadata: {
125
+ name: `argocd-vs`,
126
+ namespace: this.config.namespace,
127
+ },
128
+ spec: {
129
+ hosts: [clusterCfg.domain],
130
+ gateways: [`istio-system/gw-private`],
131
+ http: [
132
+ {
133
+ match: [{ uri: { prefix: "/" } }],
134
+ route: [
135
+ {
136
+ destination: {
137
+ host: `argocd-server.${this.config.namespace}.svc.cluster.local`,
138
+ port: { number: 80 },
139
+ },
140
+ },
141
+ ],
142
+ },
143
+ ],
144
+ },
145
+ }, { provider, dependsOn: dependsOn ? [dependsOn] : undefined });
146
+ return vs;
147
+ }
148
+ createAppProjectsAndApps(provider, ns, clusterCfg, dependsOn) {
149
+ const baseDepends = dependsOn ? [dependsOn] : [ns];
150
+ (clusterCfg.appProjects ?? []).forEach(proj => {
151
+ const projRes = new k8s.apiextensions.CustomResource(`argocd-project-${proj.name}`, {
152
+ apiVersion: "argoproj.io/v1alpha1",
153
+ kind: "AppProject",
154
+ metadata: {
155
+ name: proj.name,
156
+ namespace: this.config.namespace,
157
+ },
158
+ spec: {
159
+ description: proj.description,
160
+ sourceRepos: proj.sourceRepos.map(s => s.repoURL),
161
+ destinations: proj.destinations,
162
+ clusterResourceWhitelist: proj.clusterResourceWhitelist ? proj.clusterResourceWhitelist : undefined,
163
+ namespaceResourceWhitelist: proj.namespaceResourceWhitelist ? proj.namespaceResourceWhitelist : undefined,
164
+ },
165
+ }, { provider, dependsOn: baseDepends });
166
+ this.appProjects.push(projRes);
167
+ (proj.sourceRepos ?? []).forEach((src, idx) => {
168
+ const appName = this.sanitizeName(`${proj.name}-${idx}`);
169
+ const app = new k8s.apiextensions.CustomResource(`argocd-app-${appName}`, {
170
+ apiVersion: "argoproj.io/v1alpha1",
171
+ kind: "Application",
172
+ metadata: {
173
+ name: appName,
174
+ namespace: this.config.namespace,
175
+ },
176
+ spec: {
177
+ project: proj.name,
178
+ source: {
179
+ repoURL: src.repoURL,
180
+ chart: src.type === "helm" ? src.chart : undefined,
181
+ path: src.path ?? ".",
182
+ targetRevision: src.targetRevision ?? "HEAD",
183
+ helm: src.type === "helm" ? {
184
+ //repo: src.chartRepoURL,
185
+ version: src.chartVersion,
186
+ valueFiles: src.valuesFile ? [src.valuesFile] : undefined,
187
+ values: src.values ?? undefined,
188
+ } : undefined,
189
+ },
190
+ destination: proj.destinations?.[0] ?? { server: "https://kubernetes.default.svc", namespace: "default" },
191
+ syncPolicy: proj.syncPolicy?.automated
192
+ ? {
193
+ automated: {
194
+ prune: proj.syncPolicy.prune ?? true,
195
+ selfHeal: proj.syncPolicy.selfHeal ?? true,
196
+ },
197
+ syncOptions: proj.syncPolicy.syncOptions ?? [],
198
+ }
199
+ : undefined,
200
+ },
201
+ }, { provider, dependsOn: [projRes] });
202
+ this.applications.push(app);
203
+ if (src.vaultSecret) {
204
+ const extSecret = this.createExternalSecret(provider, src, app);
205
+ this.externalSecrets.push(extSecret);
206
+ }
207
+ });
208
+ });
209
+ }
210
+ createExternalSecret(provider, src, dependsOn) {
211
+ return new k8s.apiextensions.CustomResource(`argocd-external-secret-${src.repoURL}`, {
212
+ apiVersion: "external-secrets.io/v1",
213
+ kind: "ExternalSecret",
214
+ metadata: {
215
+ name: `${src.vaultSecret}-es`,
216
+ namespace: this.config.namespace,
217
+ },
218
+ spec: {
219
+ refreshInterval: "1h",
220
+ secretStoreRef: {
221
+ name: "oci-vault-cluster-secret-store", // tu ClusterSecretStore
222
+ kind: "ClusterSecretStore",
223
+ },
224
+ target: {
225
+ name: `${src.vaultSecret}-secret`,
226
+ creationPolicy: "Owner",
227
+ template: {
228
+ metadata: {
229
+ labels: {
230
+ "argocd.argoproj.io/secret-type": "repository",
231
+ },
232
+ },
233
+ },
234
+ },
235
+ data: [
236
+ {
237
+ secretKey: "url",
238
+ remoteRef: {
239
+ key: src.vaultSecret,
240
+ property: "url",
241
+ },
242
+ },
243
+ {
244
+ secretKey: "username",
245
+ remoteRef: {
246
+ key: src.vaultSecret,
247
+ property: "username",
248
+ },
249
+ },
250
+ {
251
+ secretKey: "password",
252
+ remoteRef: {
253
+ key: src.vaultSecret,
254
+ property: "password",
255
+ },
256
+ },
257
+ ],
258
+ },
259
+ }, { provider, dependsOn: [dependsOn], ignoreChanges: ["spec.refreshInterval"] });
260
+ }
261
+ sanitizeName(name) {
262
+ return name.toLowerCase().replace(/[^a-z0-9.-]/g, "-").replace(/^-+|-+$/g, "").slice(0, 63);
263
+ }
264
+ }
265
+ exports.ArgoCd = ArgoCd;
266
+ //# sourceMappingURL=argocd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"argocd.js","sourceRoot":"","sources":["../../src/argocd/argocd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { IArgoCdConfig } from "./interfaces";
2
+ export declare const argoCdConfig: IArgoCdConfig;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.argoCdConfig = void 0;
4
+ const pulumi = require("@pulumi/pulumi");
5
+ const stack = pulumi.getStack();
6
+ const deployConfig = new pulumi.Config("deploy");
7
+ const rawArgocdConfig = deployConfig.requireObject("argocd");
8
+ exports.argoCdConfig = {
9
+ namespace: rawArgocdConfig.namespace,
10
+ helm: {
11
+ chartVersion: rawArgocdConfig.helm.chartVersion,
12
+ appVersion: rawArgocdConfig.helm.appVersion,
13
+ },
14
+ clusters: rawArgocdConfig.clusters.map(c => ({
15
+ ...c,
16
+ name: `${stack}-${c.name}`, // añadimos prefijo del stack (ej. dev-oke-app)
17
+ })),
18
+ };
19
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/argocd/config.ts"],"names":[],"mappings":";;;AAAA,yCAAyC;AAGzC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;AAChC,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAEjD,MAAM,eAAe,GAAG,YAAY,CAAC,aAAa,CAAgB,QAAQ,CAAC,CAAC;AAE/D,QAAA,YAAY,GAAkB;IACvC,SAAS,EAAE,eAAe,CAAC,SAAS;IACpC,IAAI,EAAE;QACF,YAAY,EAAE,eAAe,CAAC,IAAI,CAAC,YAAY;QAC/C,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,UAAU;KAC9C;IACD,QAAQ,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACzC,GAAG,CAAC;QACJ,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,+CAA+C;KAC9E,CAAC,CAAC;CACN,CAAC"}
@@ -0,0 +1,66 @@
1
+ import * as k8s from "@pulumi/kubernetes";
2
+ export interface IAppDestination {
3
+ server: string;
4
+ namespace: string;
5
+ }
6
+ export interface IAppSource {
7
+ repoURL: string;
8
+ path?: string;
9
+ targetRevision?: string;
10
+ type?: "helm" | "operator";
11
+ chartVersion?: string;
12
+ chart?: string;
13
+ values?: Record<string, any>;
14
+ valuesFile?: string;
15
+ vaultSecret?: string;
16
+ }
17
+ export interface ISyncPolicy {
18
+ automated?: boolean;
19
+ prune?: boolean;
20
+ selfHeal?: boolean;
21
+ syncOptions?: string[];
22
+ }
23
+ export interface IAppProject {
24
+ name: string;
25
+ description?: string;
26
+ sourceRepos: IAppSource[];
27
+ destinations: IAppDestination[];
28
+ syncPolicy?: ISyncPolicy;
29
+ clusterResourceWhitelist?: {
30
+ group: string;
31
+ kind: string;
32
+ }[];
33
+ namespaceResourceWhitelist?: {
34
+ group: string;
35
+ kind: string;
36
+ }[];
37
+ }
38
+ export interface IClusterArgocdConfig {
39
+ name: string;
40
+ enabled: boolean;
41
+ domain: string;
42
+ replicaCount: number;
43
+ serviceType: "ClusterIP" | "NodePort" | "LoadBalancer";
44
+ azure: IArgoCdAzure;
45
+ appProjects?: IAppProject[];
46
+ }
47
+ export interface IArgoCdHelmValues {
48
+ chartVersion: string;
49
+ appVersion: string;
50
+ }
51
+ export interface IArgoCdAzure {
52
+ tenantId: string;
53
+ clientId: string;
54
+ vaultSecretAD: string;
55
+ }
56
+ export interface IArgoCdConfig {
57
+ namespace: string;
58
+ clusters: IClusterArgocdConfig[];
59
+ helm: IArgoCdHelmValues;
60
+ }
61
+ export interface IArgoCd {
62
+ releases: k8s.helm.v3.Release[];
63
+ appProjects: k8s.apiextensions.CustomResource[];
64
+ applications: k8s.apiextensions.CustomResource[];
65
+ externalSecrets: k8s.apiextensions.CustomResource[];
66
+ }
@@ -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/argocd/interfaces.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import * as oci from "@pulumi/oci";
2
+ import { IInstanceConfig, ICompute } from "./interfaces";
3
+ export declare class Compute implements ICompute {
4
+ private instancesConfig;
5
+ private subnets;
6
+ instances: oci.core.Instance[];
7
+ constructor(instancesConfig: IInstanceConfig[], subnets: oci.core.Subnet[]);
8
+ private buildInstances;
9
+ private createInstance;
10
+ private findSubnet;
11
+ }
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Compute = void 0;
4
+ const oci = require("@pulumi/oci");
5
+ const pulumi = require("@pulumi/pulumi");
6
+ class Compute {
7
+ constructor(instancesConfig, subnets) {
8
+ this.instancesConfig = instancesConfig;
9
+ this.subnets = subnets;
10
+ this.instances = [];
11
+ this.buildInstances();
12
+ }
13
+ buildInstances() {
14
+ this.instancesConfig.forEach(cfg => {
15
+ const instance = this.createInstance(cfg);
16
+ this.instances.push(instance);
17
+ });
18
+ }
19
+ createInstance(cfg) {
20
+ const subnetId = this.findSubnet(cfg.subnetName);
21
+ return new oci.core.Instance(cfg.name, {
22
+ compartmentId: cfg.compartmentId,
23
+ availabilityDomain: cfg.ad,
24
+ displayName: cfg.name,
25
+ shape: cfg.shape,
26
+ shapeConfig: {
27
+ ocpus: cfg.ocpus,
28
+ memoryInGbs: cfg.memoryInGBs,
29
+ },
30
+ createVnicDetails: {
31
+ subnetId: subnetId,
32
+ assignPublicIp: cfg.assignPublicIp ? "true" : "false",
33
+ privateIp: cfg.privateIp
34
+ },
35
+ sourceDetails: {
36
+ sourceType: "image",
37
+ sourceId: cfg.imageId,
38
+ bootVolumeSizeInGbs: cfg.bootVolumeSizeInGBs,
39
+ },
40
+ metadata: {
41
+ ssh_authorized_keys: cfg.sshAuthorizedKeys,
42
+ },
43
+ freeformTags: cfg.tags,
44
+ });
45
+ }
46
+ findSubnet(subnetName) {
47
+ return pulumi.all(this.subnets.map(s => s.displayName.apply(d => ({ id: s.id, match: d === subnetName })))).apply(subnets => {
48
+ const match = subnets.find(s => s.match);
49
+ if (!match)
50
+ throw new Error(`No se encontró la subnet ${subnetName}`);
51
+ return match.id;
52
+ });
53
+ }
54
+ }
55
+ exports.Compute = Compute;
56
+ //# sourceMappingURL=compute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compute.js","sourceRoot":"","sources":["../../src/compute/compute.ts"],"names":[],"mappings":";;;AAAA,mCAAmC;AACnC,yCAAyC;AAGzC,MAAa,OAAO;IAGhB,YAAoB,eAAkC,EAAU,OAA0B;QAAtE,oBAAe,GAAf,eAAe,CAAmB;QAAU,YAAO,GAAP,OAAO,CAAmB;QAFnF,cAAS,GAAwB,EAAE,CAAC;QAGvC,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAEO,cAAc;QAClB,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,cAAc,CAAC,GAAoB;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACjD,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE;YACnC,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,kBAAkB,EAAE,GAAG,CAAC,EAAE;YAC1B,WAAW,EAAE,GAAG,CAAC,IAAI;YACrB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,WAAW,EAAE;gBACT,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,WAAW,EAAE,GAAG,CAAC,WAAW;aAC/B;YACD,iBAAiB,EAAE;gBACf,QAAQ,EAAE,QAAQ;gBAClB,cAAc,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;gBACrD,SAAS,EAAE,GAAG,CAAC,SAAS;aAC3B;YACD,aAAa,EAAE;gBACX,UAAU,EAAE,OAAO;gBACnB,QAAQ,EAAE,GAAG,CAAC,OAAO;gBACrB,mBAAmB,EAAE,GAAG,CAAC,mBAAmB;aAC/C;YACD,QAAQ,EAAE;gBACN,mBAAmB,EAAE,GAAG,CAAC,iBAAiB;aAC7C;YAED,YAAY,EAAE,GAAG,CAAC,IAAI;SACzB,CAAC,CAAC;IACP,CAAC;IAEO,UAAU,CAAC,UAAkB;QACjC,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACnC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,KAAK,UAAU,EAAE,CAAC,CAAC,CACpE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;YACf,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,UAAU,EAAE,CAAC,CAAC;YACtE,OAAO,KAAK,CAAC,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AApDD,0BAoDC"}
@@ -0,0 +1,2 @@
1
+ import { IInstanceConfig } from "./interfaces";
2
+ export declare const instances: IInstanceConfig[];
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.instances = void 0;
4
+ const pulumi = require("@pulumi/pulumi");
5
+ // stack
6
+ const stack = pulumi.getStack();
7
+ // compartment
8
+ const infraConfig = new pulumi.Config("infra");
9
+ const compartmentId = infraConfig.require("compartmentId");
10
+ // compute config
11
+ const computeConfig = new pulumi.Config("compute");
12
+ const rawInstances = computeConfig.requireObject("instances");
13
+ exports.instances = rawInstances.map(inst => ({
14
+ ...inst,
15
+ compartmentId,
16
+ subnetName: `${stack}-${inst.subnetName}`,
17
+ tags: inst.tags ?? {},
18
+ }));
19
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/compute/config.ts"],"names":[],"mappings":";;;AAAA,yCAAyC;AAGzC,QAAQ;AACR,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;AAEhC,cAAc;AACd,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC/C,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AAE3D,iBAAiB;AACjB,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACnD,MAAM,YAAY,GAAG,aAAa,CAAC,aAAa,CAAQ,WAAW,CAAC,CAAC;AAExD,QAAA,SAAS,GAAsB,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClE,GAAG,IAAI;IACP,aAAa;IACb,UAAU,EAAE,GAAG,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE;IACzC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;CACxB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import * as oci from "@pulumi/oci";
2
+ export interface IInstanceConfig {
3
+ name: string;
4
+ compartmentId: string;
5
+ ad: string;
6
+ shape: string;
7
+ ocpus: number;
8
+ memoryInGBs: number;
9
+ imageId: string;
10
+ subnetName: string;
11
+ assignPublicIp: boolean;
12
+ privateIp?: string;
13
+ sshAuthorizedKeys: string;
14
+ bootVolumeSizeInGBs?: string;
15
+ tags?: Record<string, string>;
16
+ }
17
+ export interface ICompute {
18
+ instances: oci.core.Instance[];
19
+ }
@@ -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/compute/interfaces.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import { ICrdsConfig } from "./interfaces";
2
+ export declare const crdsConfig: ICrdsConfig;
package/crds/config.js ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.crdsConfig = void 0;
4
+ const pulumi = require("@pulumi/pulumi");
5
+ const deployConfig = new pulumi.Config("deploy");
6
+ exports.crdsConfig = deployConfig.getObject("crds") || {
7
+ postgresOperator: false
8
+ };
9
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/crds/config.ts"],"names":[],"mappings":";;;AAAA,yCAAyC;AAGzC,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAEpC,QAAA,UAAU,GAAgB,YAAY,CAAC,SAAS,CAAc,MAAM,CAAC,IAAI;IAClF,gBAAgB,EAAE,KAAK;CAC1B,CAAA"}
package/crds/crds.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ import * as k8s from "@pulumi/kubernetes";
2
+ import * as pulumi from "@pulumi/pulumi";
3
+ import { IOkeKubeconfig } from "../oke/interfaces";
4
+ import { ICrds, ICrdsConfig } from "./interfaces";
5
+ export declare class Crds implements ICrds {
6
+ private clusters;
7
+ private crdsConfig;
8
+ private opts?;
9
+ resources: k8s.yaml.ConfigFile[];
10
+ constructor(clusters: pulumi.Output<IOkeKubeconfig[]>, crdsConfig: ICrdsConfig, opts?: pulumi.CustomResourceOptions | undefined);
11
+ private installCrds;
12
+ private installMetricsServer;
13
+ }
package/crds/crds.js ADDED
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Crds = void 0;
4
+ const k8s = require("@pulumi/kubernetes");
5
+ class Crds {
6
+ constructor(clusters, crdsConfig, opts) {
7
+ this.clusters = clusters;
8
+ this.crdsConfig = crdsConfig;
9
+ this.opts = opts;
10
+ this.resources = [];
11
+ this.installCrds();
12
+ this.installMetricsServer();
13
+ }
14
+ installCrds() {
15
+ this.clusters.apply(clusters => {
16
+ for (const cluster of clusters) {
17
+ const provider = new k8s.Provider(`k8s-provider-cdr-${cluster.clusterName}`, {
18
+ kubeconfig: cluster.kubeconfig,
19
+ }, this.opts);
20
+ if (this.crdsConfig.postgresOperator) {
21
+ this.resources.push(new k8s.yaml.ConfigFile("cloudnative-pg-operator", {
22
+ file: "https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/v1.27.1/releases/cnpg-1.27.1.yaml",
23
+ }, { provider, ...this.opts }));
24
+ }
25
+ }
26
+ });
27
+ }
28
+ installMetricsServer() {
29
+ this.clusters.apply(clusters => {
30
+ for (const cluster of clusters) {
31
+ const provider = new k8s.Provider(`k8s-provider-metrics-server-${cluster.clusterName}`, {
32
+ kubeconfig: cluster.kubeconfig,
33
+ }, this.opts);
34
+ this.resources.push(new k8s.yaml.ConfigFile("metrics-server", {
35
+ file: "https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml",
36
+ }, { provider, ...this.opts }));
37
+ }
38
+ });
39
+ }
40
+ }
41
+ exports.Crds = Crds;
42
+ //# sourceMappingURL=crds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crds.js","sourceRoot":"","sources":["../../src/crds/crds.ts"],"names":[],"mappings":";;;AAAA,0CAA0C;AAM1C,MAAa,IAAI;IAGb,YAAoB,QAAyC,EAAU,UAAuB,EAAU,IAAmC;QAAvH,aAAQ,GAAR,QAAQ,CAAiC;QAAU,eAAU,GAAV,UAAU,CAAa;QAAU,SAAI,GAAJ,IAAI,CAA+B;QAFpI,cAAS,GAA0B,EAAE,CAAA;QAGxC,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAChC,CAAC;IAEO,WAAW;QACf,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YAC3B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC7B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,oBAAoB,OAAO,CAAC,WAAW,EAAE,EAAE;oBACzE,UAAU,EAAE,OAAO,CAAC,UAAU;iBACjC,EAAE,IAAI,CAAC,IAAI,CAAE,CAAC;gBAEf,IAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC;oBAClC,IAAI,CAAC,SAAS,CAAC,IAAI,CACf,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,yBAAyB,EAAE;wBAC/C,IAAI,EAAE,mGAAmG;qBAC5G,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CACjC,CAAC;gBACN,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,oBAAoB;QACxB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YAC3B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC7B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,+BAA+B,OAAO,CAAC,WAAW,EAAE,EAAE;oBACpF,UAAU,EAAE,OAAO,CAAC,UAAU;iBACjC,EAAE,IAAI,CAAC,IAAI,CAAE,CAAC;gBAEf,IAAI,CAAC,SAAS,CAAC,IAAI,CACf,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE;oBACtC,IAAI,EAAE,4FAA4F;iBACrG,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CACjC,CAAC;YACN,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAzCD,oBAyCC"}
@@ -0,0 +1,7 @@
1
+ import * as k8s from "@pulumi/kubernetes";
2
+ export interface ICrdsConfig {
3
+ postgresOperator: boolean;
4
+ }
5
+ export interface ICrds {
6
+ resources: k8s.yaml.ConfigFile[];
7
+ }
@@ -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/crds/interfaces.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ export declare const compartmentId: string;
2
+ export declare const externalSecretsConfig: {
3
+ chartVersion: string;
4
+ namespace: string;
5
+ };