@drunk-pulumi/azure 0.0.19 → 0.0.20

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 (161) hide show
  1. package/Aks/Helper.d.ts +0 -18
  2. package/Aks/Helper.js +50 -32
  3. package/package.json +3 -6
  4. package/KubeX/AcrSecret.d.ts +0 -15
  5. package/KubeX/AcrSecret.js +0 -31
  6. package/KubeX/Apps/AstroPage.d.ts +0 -12
  7. package/KubeX/Apps/AstroPage.js +0 -33
  8. package/KubeX/Apps/KafKa.d.ts +0 -6
  9. package/KubeX/Apps/KafKa.js +0 -13
  10. package/KubeX/Apps/Nobelium.d.ts +0 -13
  11. package/KubeX/Apps/Nobelium.js +0 -37
  12. package/KubeX/Apps/Wikijs.d.ts +0 -30
  13. package/KubeX/Apps/Wikijs.js +0 -54
  14. package/KubeX/Apps/WordPress.d.ts +0 -24
  15. package/KubeX/Apps/WordPress.js +0 -55
  16. package/KubeX/Apps/YarpProxy/index.d.ts +0 -17
  17. package/KubeX/Apps/YarpProxy/index.js +0 -107
  18. package/KubeX/Apps/YarpProxy/type.d.ts +0 -55
  19. package/KubeX/Apps/YarpProxy/type.js +0 -3
  20. package/KubeX/CertHelper.d.ts +0 -1
  21. package/KubeX/CertHelper.js +0 -9
  22. package/KubeX/CertImports.d.ts +0 -19
  23. package/KubeX/CertImports.js +0 -70
  24. package/KubeX/CloudFlare/CertCreator.d.ts +0 -19
  25. package/KubeX/CloudFlare/CertCreator.js +0 -90
  26. package/KubeX/CloudFlare/CertImports.d.ts +0 -17
  27. package/KubeX/CloudFlare/CertImports.js +0 -34
  28. package/KubeX/CloudFlare/DynamicDns.d.ts +0 -21
  29. package/KubeX/CloudFlare/DynamicDns.js +0 -39
  30. package/KubeX/CloudFlare/Tunnel-Helm.d.ts +0 -17
  31. package/KubeX/CloudFlare/Tunnel-Helm.js +0 -12
  32. package/KubeX/CloudFlare/Tunnel.d.ts +0 -23
  33. package/KubeX/CloudFlare/Tunnel.js +0 -54
  34. package/KubeX/CloudFlare/index.d.ts +0 -13
  35. package/KubeX/CloudFlare/index.js +0 -36
  36. package/KubeX/Clusters/K3s/AutoUpgradeController/index.d.ts +0 -6
  37. package/KubeX/Clusters/K3s/AutoUpgradeController/index.js +0 -60
  38. package/KubeX/ConfigSecret.d.ts +0 -24
  39. package/KubeX/ConfigSecret.js +0 -38
  40. package/KubeX/Core/CertManager/index.d.ts +0 -24
  41. package/KubeX/Core/CertManager/index.js +0 -96
  42. package/KubeX/Core/KsCertSecret.d.ts +0 -12
  43. package/KubeX/Core/KsCertSecret.js +0 -22
  44. package/KubeX/Core/KsSecret.d.ts +0 -9
  45. package/KubeX/Core/KsSecret.js +0 -12
  46. package/KubeX/Core/LoadBalancer/MetalLB.d.ts +0 -7
  47. package/KubeX/Core/LoadBalancer/MetalLB.js +0 -21
  48. package/KubeX/Core/Monitoring/index.d.ts +0 -22
  49. package/KubeX/Core/Monitoring/index.js +0 -322
  50. package/KubeX/Core/Namespace.d.ts +0 -12
  51. package/KubeX/Core/Namespace.js +0 -41
  52. package/KubeX/Core/Nginx/index.d.ts +0 -60
  53. package/KubeX/Core/Nginx/index.js +0 -109
  54. package/KubeX/Core/OAuthProxy/index.d.ts +0 -0
  55. package/KubeX/Core/OAuthProxy/index.js +0 -3
  56. package/KubeX/Core/ResourceQuota.d.ts +0 -12
  57. package/KubeX/Core/ResourceQuota.js +0 -13
  58. package/KubeX/Core/SecurityRules.d.ts +0 -34
  59. package/KubeX/Core/SecurityRules.js +0 -93
  60. package/KubeX/Core/StorageClass/azureBlob.d.ts +0 -20
  61. package/KubeX/Core/StorageClass/azureBlob.js +0 -77
  62. package/KubeX/Core/StorageClass/azureFile.d.ts +0 -17
  63. package/KubeX/Core/StorageClass/azureFile.js +0 -45
  64. package/KubeX/Core/StorageClass/index.d.ts +0 -13
  65. package/KubeX/Core/StorageClass/index.js +0 -25
  66. package/KubeX/Core/index.d.ts +0 -57
  67. package/KubeX/Core/index.js +0 -94
  68. package/KubeX/Databases/MariaDb.d.ts +0 -11
  69. package/KubeX/Databases/MariaDb.js +0 -39
  70. package/KubeX/Databases/MySql.V2.d.ts +0 -11
  71. package/KubeX/Databases/MySql.V2.js +0 -40
  72. package/KubeX/Databases/MySql.d.ts +0 -13
  73. package/KubeX/Databases/MySql.js +0 -55
  74. package/KubeX/Databases/PostgreSql/PostgreSQL-HA.d.ts +0 -10
  75. package/KubeX/Databases/PostgreSql/PostgreSQL-HA.js +0 -47
  76. package/KubeX/Databases/PostgreSql/PostgreSQL.d.ts +0 -10
  77. package/KubeX/Databases/PostgreSql/PostgreSQL.js +0 -51
  78. package/KubeX/Databases/PostgreSql/PostgreSql.v1.d.ts +0 -13
  79. package/KubeX/Databases/PostgreSql/PostgreSql.v1.js +0 -56
  80. package/KubeX/Databases/PostgreSql/index.d.ts +0 -17
  81. package/KubeX/Databases/PostgreSql/index.js +0 -6
  82. package/KubeX/Databases/RedisCache.d.ts +0 -14
  83. package/KubeX/Databases/RedisCache.js +0 -65
  84. package/KubeX/Databases/SqlServer.d.ts +0 -15
  85. package/KubeX/Databases/SqlServer.js +0 -77
  86. package/KubeX/Deployment/PodAutoscaler.d.ts +0 -14
  87. package/KubeX/Deployment/PodAutoscaler.js +0 -51
  88. package/KubeX/Deployment/index.d.ts +0 -136
  89. package/KubeX/Deployment/index.js +0 -306
  90. package/KubeX/Helpers.d.ts +0 -4
  91. package/KubeX/Helpers.js +0 -17
  92. package/KubeX/Ingress/AppGatewayIngress.d.ts +0 -2
  93. package/KubeX/Ingress/AppGatewayIngress.js +0 -4
  94. package/KubeX/Ingress/Conts.d.ts +0 -13
  95. package/KubeX/Ingress/Conts.js +0 -18
  96. package/KubeX/Ingress/NginxIngress.d.ts +0 -3
  97. package/KubeX/Ingress/NginxIngress.js +0 -186
  98. package/KubeX/Ingress/NginxProxy.d.ts +0 -21
  99. package/KubeX/Ingress/NginxProxy.js +0 -43
  100. package/KubeX/Ingress/TraefikIngress/CustomHeader.d.ts +0 -15
  101. package/KubeX/Ingress/TraefikIngress/CustomHeader.js +0 -15
  102. package/KubeX/Ingress/TraefikIngress/index.d.ts +0 -11
  103. package/KubeX/Ingress/TraefikIngress/index.js +0 -95
  104. package/KubeX/Ingress/index.d.ts +0 -5
  105. package/KubeX/Ingress/index.js +0 -12
  106. package/KubeX/Ingress/type.d.ts +0 -82
  107. package/KubeX/Ingress/type.js +0 -3
  108. package/KubeX/Providers/index.d.ts +0 -8
  109. package/KubeX/Providers/index.js +0 -15
  110. package/KubeX/Storage/Longhorn/index.d.ts +0 -15
  111. package/KubeX/Storage/Longhorn/index.js +0 -54
  112. package/KubeX/Storage/index.d.ts +0 -25
  113. package/KubeX/Storage/index.js +0 -79
  114. package/KubeX/Tools/AWS/LocalStack.d.ts +0 -7
  115. package/KubeX/Tools/AWS/LocalStack.js +0 -29
  116. package/KubeX/Tools/AWS/S3.d.ts +0 -6
  117. package/KubeX/Tools/AWS/S3.js +0 -44
  118. package/KubeX/Tools/AWS/index.d.ts +0 -7
  119. package/KubeX/Tools/AWS/index.js +0 -14
  120. package/KubeX/Tools/AppHealthzMonitor.d.ts +0 -18
  121. package/KubeX/Tools/AppHealthzMonitor.js +0 -52
  122. package/KubeX/Tools/ArgoCD/index.d.ts +0 -17
  123. package/KubeX/Tools/ArgoCD/index.js +0 -131
  124. package/KubeX/Tools/Dapr/Storage.d.ts +0 -66
  125. package/KubeX/Tools/Dapr/Storage.js +0 -70
  126. package/KubeX/Tools/Dapr/index.d.ts +0 -10
  127. package/KubeX/Tools/Dapr/index.js +0 -31
  128. package/KubeX/Tools/Echo-App.d.ts +0 -3
  129. package/KubeX/Tools/Echo-App.js +0 -21
  130. package/KubeX/Tools/Gitea/GiteaRepo.d.ts +0 -72
  131. package/KubeX/Tools/Gitea/GiteaRepo.js +0 -184
  132. package/KubeX/Tools/Gitea/GiteaRunner.d.ts +0 -11
  133. package/KubeX/Tools/Gitea/GiteaRunner.js +0 -37
  134. package/KubeX/Tools/Gitea/GiteaRunner.v1.d.ts +0 -11
  135. package/KubeX/Tools/Gitea/GiteaRunner.v1.js +0 -123
  136. package/KubeX/Tools/HarborRepo.d.ts +0 -29
  137. package/KubeX/Tools/HarborRepo.js +0 -78
  138. package/KubeX/Tools/HelloWorld.d.ts +0 -3
  139. package/KubeX/Tools/HelloWorld.js +0 -21
  140. package/KubeX/Tools/KubeCleanup.d.ts +0 -9
  141. package/KubeX/Tools/KubeCleanup.js +0 -34
  142. package/KubeX/Tools/NoIp.d.ts +0 -13
  143. package/KubeX/Tools/NoIp.js +0 -24
  144. package/KubeX/Tools/OpenLDAP/index.d.ts +0 -12
  145. package/KubeX/Tools/OpenLDAP/index.js +0 -56
  146. package/KubeX/Tools/OutlineVpn/index.d.ts +0 -25
  147. package/KubeX/Tools/OutlineVpn/index.js +0 -256
  148. package/KubeX/Tools/SqlPad.d.ts +0 -29
  149. package/KubeX/Tools/SqlPad.js +0 -133
  150. package/KubeX/Tools/ToolPod.d.ts +0 -10
  151. package/KubeX/Tools/ToolPod.js +0 -40
  152. package/KubeX/Tools/UptimeKuma.d.ts +0 -6
  153. package/KubeX/Tools/UptimeKuma.js +0 -38
  154. package/KubeX/Tools/index.d.ts +0 -27
  155. package/KubeX/Tools/index.js +0 -35
  156. package/KubeX/VairableResolvers/index.d.ts +0 -15
  157. package/KubeX/VairableResolvers/index.js +0 -49
  158. package/KubeX/kx/index.d.ts +0 -114
  159. package/KubeX/kx/index.js +0 -423
  160. package/KubeX/types.d.ts +0 -49
  161. package/KubeX/types.js +0 -3
@@ -1,55 +0,0 @@
1
- import { DeploymentIngress } from '../../Deployment';
2
- import { Input } from '@pulumi/pulumi';
3
- export type Transform = {
4
- PathPrefix: string;
5
- } | {
6
- PathRemovePrefix: string;
7
- } | {
8
- PathPattern: string;
9
- } | {
10
- RequestHeader: string;
11
- Append: string;
12
- } | {
13
- ResponseHeader: string;
14
- Append: string;
15
- When?: 'Always';
16
- } | {
17
- ClientCert: 'X-Client-Cert' | string;
18
- } | {
19
- RequestHeadersCopy: boolean;
20
- } | {
21
- RequestHeaderOriginalHost: boolean;
22
- } | {
23
- 'X-Forwarded': 'proto' | 'host' | 'for' | 'prefix' | string;
24
- Append: boolean;
25
- Prefix: 'X-Forwarded-';
26
- };
27
- export interface Route {
28
- path: string | '{**catch-all}' | '{**remainder}';
29
- /**Header matching*/
30
- headers?: Array<{
31
- name: string;
32
- values: string[];
33
- mode: 'ExactHeader' | 'HeaderPrefix' | 'Contains' | 'NotContains' | 'Exists';
34
- }>;
35
- transforms?: Transform[];
36
- }
37
- export interface Cluster {
38
- loadBalancingPolicy?: 'FirstAlphabetical' | 'Random' | 'PowerOfTwoChoices' | 'RoundRobin' | 'LeastRequests';
39
- destinationUrl: string | Array<string>;
40
- routes: Route[];
41
- }
42
- export interface ReverseProxy {
43
- clusters: Cluster[];
44
- ingressConfig?: DeploymentIngress;
45
- }
46
- export interface ForwardedProxy {
47
- route: string;
48
- destinationUrls: Array<string>;
49
- clientCertificate?: Input<string>;
50
- clientCertificatePassword?: Input<string>;
51
- sslProtocols?: 'Ssl2' | 'Ssl3' | 'Tls' | 'Tls11' | 'Tls12' | 'Tls13';
52
- headers?: {
53
- [key: string]: string;
54
- };
55
- }
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9LdWJlWC9BcHBzL1lhcnBQcm94eS90eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -1 +0,0 @@
1
- export declare const getTlsName: (domain: string, enableCertIssuer: boolean) => string;
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getTlsName = void 0;
4
- const Helpers_1 = require("../Common/Helpers");
5
- const getTlsName = (domain, enableCertIssuer) => enableCertIssuer
6
- ? `tls-${(0, Helpers_1.replaceAll)(domain, '.', '-')}-lets`
7
- : `tls-${(0, Helpers_1.replaceAll)(domain, '.', '-')}-imported`;
8
- exports.getTlsName = getTlsName;
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2VydEhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9LdWJlWC9DZXJ0SGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtDQUErQztBQUV4QyxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQWMsRUFBRSxnQkFBeUIsRUFBRSxFQUFFLENBQ3RFLGdCQUFnQjtJQUNkLENBQUMsQ0FBQyxPQUFPLElBQUEsb0JBQVUsRUFBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxPQUFPO0lBQzVDLENBQUMsQ0FBQyxPQUFPLElBQUEsb0JBQVUsRUFBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUM7QUFIeEMsUUFBQSxVQUFVLGNBRzhCIn0=
@@ -1,19 +0,0 @@
1
- import { KeyVaultInfo } from '../types';
2
- import { K8sArgs } from './types';
3
- export interface FromCertOrderProps extends K8sArgs {
4
- namespaces: string[];
5
- /** The cert name or domain name */
6
- certName: string;
7
- }
8
- /** Import Cert to K8s from Azure Cert Order*/
9
- export declare const certImportFromCertOrder: ({ namespaces, certName, ...others }: FromCertOrderProps) => Promise<void>;
10
- export declare const certImportFromFolder: ({ certName, namespaces, certFolder, ...others }: FromCertOrderProps & {
11
- certFolder: string;
12
- }) => string | undefined;
13
- interface ImportCertFromVaultProps extends K8sArgs {
14
- certNames: string[];
15
- namespace: string;
16
- vaultInfo: KeyVaultInfo;
17
- }
18
- export declare const certImportFromVault: ({ certNames, namespace, vaultInfo, ...others }: ImportCertFromVaultProps) => Promise<void>;
19
- export {};
@@ -1,70 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.certImportFromVault = exports.certImportFromFolder = exports.certImportFromCertOrder = void 0;
4
- const Helpers_1 = require("./Helpers");
5
- const CertHelper_1 = require("./CertHelper");
6
- const fs = require("fs");
7
- const Helper_1 = require("../KeyVault/Helper");
8
- const KsCertSecret_1 = require("./Core/KsCertSecret");
9
- const Certificate_1 = require("../Certificate");
10
- /** Import Cert to K8s from Azure Cert Order*/
11
- const certImportFromCertOrder = async ({ namespaces, certName, ...others }) => {
12
- const cert = await (0, Helpers_1.getKubeDomainCert)(certName);
13
- if (!cert)
14
- return;
15
- const name = (0, CertHelper_1.getTlsName)(certName, false);
16
- namespaces.map((n, i) => (0, KsCertSecret_1.default)({
17
- name: `${name}-${i}`,
18
- namespace: n,
19
- certInfo: cert,
20
- ...others,
21
- }));
22
- };
23
- exports.certImportFromCertOrder = certImportFromCertOrder;
24
- const getCertFromFolder = (folder) => {
25
- const cert = fs.readFileSync(`./${folder}/cert.crt`, { encoding: 'utf8' });
26
- const ca = fs.readFileSync(`./${folder}/ca.crt`, { encoding: 'utf8' });
27
- const privateKey = fs.readFileSync(`./${folder}/private.key`, {
28
- encoding: 'utf8',
29
- });
30
- return { cert, ca, privateKey };
31
- };
32
- const certImportFromFolder = ({ certName, namespaces, certFolder, ...others }) => {
33
- const cert = getCertFromFolder(certFolder);
34
- if (!cert)
35
- return;
36
- const name = (0, CertHelper_1.getTlsName)(certName, false);
37
- namespaces.map((n, i) => (0, KsCertSecret_1.default)({
38
- name: `${name}-${i}`,
39
- namespace: n,
40
- certInfo: cert,
41
- ...others,
42
- }));
43
- return name;
44
- };
45
- exports.certImportFromFolder = certImportFromFolder;
46
- const certImportFromVault = async ({ certNames, namespace, vaultInfo, ...others }) => {
47
- await Promise.all(certNames.map(async (c, i) => {
48
- const cert = await (0, Helper_1.getSecret)({
49
- name: c,
50
- nameFormatted: false,
51
- vaultInfo,
52
- });
53
- const pems = cert?.value
54
- ? (0, Certificate_1.convertPfxToPem)({
55
- base64Cert: cert.value,
56
- password: '',
57
- })
58
- : undefined;
59
- if (pems) {
60
- (0, KsCertSecret_1.default)({
61
- name: `${c}-${i}`,
62
- namespace,
63
- certInfo: pems,
64
- ...others,
65
- });
66
- }
67
- }));
68
- };
69
- exports.certImportFromVault = certImportFromVault;
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2VydEltcG9ydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvS3ViZVgvQ2VydEltcG9ydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUNBQThDO0FBQzlDLDZDQUEwQztBQUMxQyx5QkFBeUI7QUFFekIsK0NBQStDO0FBRS9DLHNEQUErQztBQUMvQyxnREFBaUQ7QUFRakQsOENBQThDO0FBQ3ZDLE1BQU0sdUJBQXVCLEdBQUcsS0FBSyxFQUFFLEVBQzVDLFVBQVUsRUFDVixRQUFRLEVBQ1IsR0FBRyxNQUFNLEVBQ1UsRUFBRSxFQUFFO0lBQ3ZCLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSwyQkFBaUIsRUFBQyxRQUFRLENBQUMsQ0FBQztJQUMvQyxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU87SUFFbEIsTUFBTSxJQUFJLEdBQUcsSUFBQSx1QkFBVSxFQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN6QyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQ3RCLElBQUEsc0JBQVksRUFBQztRQUNYLElBQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUU7UUFDcEIsU0FBUyxFQUFFLENBQUM7UUFDWixRQUFRLEVBQUUsSUFBSTtRQUNkLEdBQUcsTUFBTTtLQUNWLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBakJXLFFBQUEsdUJBQXVCLDJCQWlCbEM7QUFFRixNQUFNLGlCQUFpQixHQUFHLENBQUMsTUFBYyxFQUFFLEVBQUU7SUFDM0MsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLE1BQU0sV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDM0UsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLE1BQU0sU0FBUyxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDdkUsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLE1BQU0sY0FBYyxFQUFFO1FBQzVELFFBQVEsRUFBRSxNQUFNO0tBQ2pCLENBQUMsQ0FBQztJQUVILE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2xDLENBQUMsQ0FBQztBQUVLLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxFQUNuQyxRQUFRLEVBQ1IsVUFBVSxFQUNWLFVBQVUsRUFDVixHQUFHLE1BQU0sRUFDbUMsRUFBRSxFQUFFO0lBQ2hELE1BQU0sSUFBSSxHQUFHLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzNDLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTztJQUVsQixNQUFNLElBQUksR0FBRyxJQUFBLHVCQUFVLEVBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDdEIsSUFBQSxzQkFBWSxFQUFDO1FBQ1gsSUFBSSxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRTtRQUNwQixTQUFTLEVBQUUsQ0FBQztRQUNaLFFBQVEsRUFBRSxJQUFJO1FBQ2QsR0FBRyxNQUFNO0tBQ1YsQ0FBQyxDQUNILENBQUM7SUFFRixPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQXBCVyxRQUFBLG9CQUFvQix3QkFvQi9CO0FBUUssTUFBTSxtQkFBbUIsR0FBRyxLQUFLLEVBQUUsRUFDeEMsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxNQUFNLEVBQ2dCLEVBQUUsRUFBRTtJQUM3QixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2YsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzNCLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSxrQkFBUyxFQUFDO1lBQzNCLElBQUksRUFBRSxDQUFDO1lBQ1AsYUFBYSxFQUFFLEtBQUs7WUFDcEIsU0FBUztTQUNWLENBQUMsQ0FBQztRQUVILE1BQU0sSUFBSSxHQUFHLElBQUksRUFBRSxLQUFLO1lBQ3RCLENBQUMsQ0FBQyxJQUFBLDZCQUFlLEVBQUM7Z0JBQ2QsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUN0QixRQUFRLEVBQUUsRUFBRTthQUNiLENBQUM7WUFDSixDQUFDLENBQUMsU0FBUyxDQUFDO1FBRWQsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULElBQUEsc0JBQVksRUFBQztnQkFDWCxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNqQixTQUFTO2dCQUNULFFBQVEsRUFBRSxJQUFJO2dCQUNkLEdBQUcsTUFBTTthQUNWLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBL0JXLFFBQUEsbUJBQW1CLHVCQStCOUIifQ==
@@ -1,19 +0,0 @@
1
- import * as cf from '@pulumi/cloudflare';
2
- import { KeyVaultInfo } from '../../types';
3
- export interface CloudFlareCertCreatorProps {
4
- domainName: string;
5
- vaultInfo?: KeyVaultInfo;
6
- provider: cf.Provider;
7
- lock?: boolean;
8
- }
9
- export declare const getCloudflareOriginCert: ({ domainName, vaultInfo, }: Pick<Required<CloudFlareCertCreatorProps>, 'domainName' | 'vaultInfo'>) => Promise<{
10
- privateKey: string;
11
- cert: string;
12
- ca: string;
13
- }>;
14
- declare const _default: ({ domainName, provider, vaultInfo, lock, }: CloudFlareCertCreatorProps) => Promise<{
15
- privateKey: import("@pulumi/pulumi").Output<string>;
16
- cert: import("@pulumi/pulumi").Output<string>;
17
- ca: string;
18
- }>;
19
- export default _default;
@@ -1,90 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getCloudflareOriginCert = void 0;
4
- const tls = require("@pulumi/tls");
5
- const StackEnv_1 = require("../../Common/StackEnv");
6
- const cf = require("@pulumi/cloudflare");
7
- const CustomHelper_1 = require("../../KeyVault/CustomHelper");
8
- const Helper_1 = require("../../KeyVault/Helper");
9
- const getVaultNames = (domainName) => ({
10
- privateKeyName: `cloudflare-${domainName}-privateKey`,
11
- certName: `cloudflare-${domainName}-cert`,
12
- caName: `cloudflare-${domainName}-ca`,
13
- });
14
- const getCloudflareOriginCert = async ({ domainName, vaultInfo, }) => {
15
- const vaultNames = getVaultNames(domainName);
16
- const cert = await (0, Helper_1.getSecret)({
17
- name: vaultNames.certName,
18
- vaultInfo,
19
- });
20
- const ca = await (0, Helper_1.getSecret)({
21
- name: vaultNames.caName,
22
- vaultInfo,
23
- });
24
- const pk = await (0, Helper_1.getSecret)({
25
- name: vaultNames.privateKeyName,
26
- vaultInfo,
27
- });
28
- return {
29
- privateKey: pk.value,
30
- cert: cert.value,
31
- ca: ca.value,
32
- };
33
- };
34
- exports.getCloudflareOriginCert = getCloudflareOriginCert;
35
- exports.default = async ({ domainName, provider, vaultInfo, lock = true, }) => {
36
- const vaultNames = getVaultNames(domainName);
37
- const algorithm = 'RSA';
38
- //create new private key
39
- const privateKey = new tls.PrivateKey(`${domainName}_private_key`, {
40
- algorithm,
41
- });
42
- //create new CSR
43
- const csr = new tls.CertRequest(`${domainName}_csr`, {
44
- privateKeyPem: privateKey.privateKeyPem,
45
- subject: {
46
- commonName: domainName,
47
- organization: StackEnv_1.organization,
48
- },
49
- dnsNames: [domainName],
50
- });
51
- //Create a new Cert
52
- const cert = new cf.OriginCaCertificate(`${domainName}_original_cert`, {
53
- csr: csr.certRequestPem,
54
- hostnames: [domainName, `*.${domainName}`, `www.${domainName}`],
55
- requestType: 'origin-rsa',
56
- requestedValidity: 5475,
57
- }, { provider, protect: lock });
58
- //Get CA cert
59
- const ca = await cf.getOriginCaRootCertificate({
60
- algorithm,
61
- }, { provider });
62
- //Store to vault
63
- if (vaultInfo) {
64
- (0, CustomHelper_1.addCustomSecret)({
65
- name: vaultNames.privateKeyName,
66
- value: privateKey.privateKeyPem,
67
- contentType: `cloudflare ${domainName} privateKey`,
68
- vaultInfo,
69
- });
70
- (0, CustomHelper_1.addCustomSecret)({
71
- name: vaultNames.certName,
72
- value: cert.certificate,
73
- contentType: `cloudflare ${domainName} certificate`,
74
- vaultInfo,
75
- });
76
- (0, CustomHelper_1.addCustomSecret)({
77
- name: vaultNames.caName,
78
- value: ca.certPem,
79
- contentType: `cloudflare ${domainName} CA`,
80
- vaultInfo,
81
- });
82
- }
83
- //return results
84
- return {
85
- privateKey: privateKey.privateKeyPem,
86
- cert: cert.certificate,
87
- ca: ca.certPem,
88
- };
89
- };
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2VydENyZWF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvS3ViZVgvQ2xvdWRGbGFyZS9DZXJ0Q3JlYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFDbkMsb0RBQXFEO0FBQ3JELHlDQUF5QztBQUV6Qyw4REFBOEQ7QUFDOUQsa0RBQWtEO0FBU2xELE1BQU0sYUFBYSxHQUFHLENBQUMsVUFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3QyxjQUFjLEVBQUUsY0FBYyxVQUFVLGFBQWE7SUFDckQsUUFBUSxFQUFFLGNBQWMsVUFBVSxPQUFPO0lBQ3pDLE1BQU0sRUFBRSxjQUFjLFVBQVUsS0FBSztDQUN0QyxDQUFDLENBQUM7QUFFSSxNQUFNLHVCQUF1QixHQUFHLEtBQUssRUFBRSxFQUM1QyxVQUFVLEVBQ1YsU0FBUyxHQUM4RCxFQUFFLEVBQUU7SUFDM0UsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRTdDLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSxrQkFBUyxFQUFDO1FBQzNCLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUTtRQUN6QixTQUFTO0tBQ1YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLGtCQUFTLEVBQUM7UUFDekIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxNQUFNO1FBQ3ZCLFNBQVM7S0FDVixDQUFDLENBQUM7SUFDSCxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUEsa0JBQVMsRUFBQztRQUN6QixJQUFJLEVBQUUsVUFBVSxDQUFDLGNBQWM7UUFDL0IsU0FBUztLQUNWLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxVQUFVLEVBQUUsRUFBRyxDQUFDLEtBQU07UUFDdEIsSUFBSSxFQUFFLElBQUssQ0FBQyxLQUFNO1FBQ2xCLEVBQUUsRUFBRSxFQUFHLENBQUMsS0FBTTtLQUNmLENBQUM7QUFDSixDQUFDLENBQUM7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
@@ -1,17 +0,0 @@
1
- import { K8sArgs } from '../types';
2
- import * as pulumi from '@pulumi/pulumi';
3
- import * as cf from '@pulumi/cloudflare';
4
- import { KeyVaultInfo } from '../../types';
5
- export interface CloudFlareCertImportProps extends K8sArgs {
6
- namespaces: pulumi.Input<string>[];
7
- cloudflare: Array<{
8
- apiKey?: pulumi.Input<string>;
9
- provider?: cf.Provider;
10
- zones: string[];
11
- }>;
12
- /**Load existing cert from Key Vault*/
13
- certExisted?: boolean;
14
- vaultInfo?: KeyVaultInfo;
15
- }
16
- declare const _default: ({ namespaces, cloudflare, certExisted, vaultInfo, ...others }: CloudFlareCertImportProps) => Promise<Promise<pulumi.Output<pulumi.Output<import("@pulumi/kubernetes/core/v1/secret").Secret>[]>>[][]>;
17
- export default _default;
@@ -1,34 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const pulumi = require("@pulumi/pulumi");
4
- const cf = require("@pulumi/cloudflare");
5
- const CertCreator_1 = require("./CertCreator");
6
- const KsCertSecret_1 = require("../Core/KsCertSecret");
7
- const CertHelper_1 = require("../CertHelper");
8
- exports.default = async ({ namespaces, cloudflare, certExisted, vaultInfo, ...others }) => await Promise.all(cloudflare.map((c, i) => {
9
- if (!c.apiKey && !c.provider)
10
- throw new Error('Either CloudFlare API Key or Provider must be provided.');
11
- const cfProvider = c.provider ??
12
- new cf.Provider(`cloudflare_${i}`, {
13
- apiToken: c.apiKey,
14
- });
15
- return c.zones.map(async (z) => {
16
- const cert = certExisted && vaultInfo
17
- ? await (0, CertCreator_1.getCloudflareOriginCert)({ domainName: z, vaultInfo })
18
- : await (0, CertCreator_1.default)({
19
- domainName: z,
20
- vaultInfo,
21
- provider: cfProvider,
22
- });
23
- // const ns = c.namespaces ?? namespaces;
24
- // if (!ns || !Array.isArray(ns))
25
- // throw new Error(`The namespaces of ${z} is invalid.`);
26
- return pulumi.all([namespaces]).apply(([ns]) => ns.map((n) => (0, KsCertSecret_1.default)({
27
- name: (0, CertHelper_1.getTlsName)(z, false),
28
- namespace: n,
29
- certInfo: cert,
30
- ...others,
31
- })));
32
- });
33
- }));
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2VydEltcG9ydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvS3ViZVgvQ2xvdWRGbGFyZS9DZXJ0SW1wb3J0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLHlDQUF5QztBQUN6Qyx5Q0FBeUM7QUFDekMsK0NBQXFFO0FBQ3JFLHVEQUFnRDtBQUNoRCw4Q0FBMkM7QUFnQjNDLGtCQUFlLEtBQUssRUFBRSxFQUNwQixVQUFVLEVBQ1YsVUFBVSxFQUNWLFdBQVcsRUFDWCxTQUFTLEVBQ1QsR0FBRyxNQUFNLEVBQ2lCLEVBQUUsRUFBRSxDQUM5QixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2YsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUN0QixJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRO1FBQzFCLE1BQU0sSUFBSSxLQUFLLENBQ2IseURBQXlELENBQzFELENBQUM7SUFFSixNQUFNLFVBQVUsR0FDZCxDQUFDLENBQUMsUUFBUTtRQUNWLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFO1lBQ2pDLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTTtTQUNuQixDQUFDLENBQUM7SUFFTCxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM3QixNQUFNLElBQUksR0FDUixXQUFXLElBQUksU0FBUztZQUN0QixDQUFDLENBQUMsTUFBTSxJQUFBLHFDQUF1QixFQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQztZQUM3RCxDQUFDLENBQUMsTUFBTSxJQUFBLHFCQUFXLEVBQUM7Z0JBQ2hCLFVBQVUsRUFBRSxDQUFDO2dCQUNiLFNBQVM7Z0JBQ1QsUUFBUSxFQUFFLFVBQVU7YUFDckIsQ0FBQyxDQUFDO1FBRVQseUNBQXlDO1FBQ3pDLGlDQUFpQztRQUNqQywyREFBMkQ7UUFFM0QsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDN0MsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ1gsSUFBQSxzQkFBWSxFQUFDO1lBQ1gsSUFBSSxFQUFFLElBQUEsdUJBQVUsRUFBQyxDQUFDLEVBQUUsS0FBSyxDQUFDO1lBQzFCLFNBQVMsRUFBRSxDQUFDO1lBQ1osUUFBUSxFQUFFLElBQUk7WUFDZCxHQUFHLE1BQU07U0FDVixDQUFDLENBQ0gsQ0FDRixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FDSCxDQUFDIn0=
@@ -1,21 +0,0 @@
1
- import * as k8s from '@pulumi/kubernetes';
2
- import { Input, Resource } from '@pulumi/pulumi';
3
- type CloudFlareProps = {
4
- apiKey: Input<string>;
5
- zones: Array<{
6
- id: Input<string>;
7
- proxied?: boolean;
8
- aRecords: Array<{
9
- name: string;
10
- proxied?: boolean;
11
- }>;
12
- }>;
13
- };
14
- export interface DynamicDnsProps {
15
- namespace: Input<string>;
16
- cloudFlare: Array<CloudFlareProps>;
17
- provider: k8s.Provider;
18
- dependsOn?: Input<Input<Resource>[]> | Input<Resource>;
19
- }
20
- declare const _default: ({ namespace, cloudFlare, ...others }: DynamicDnsProps) => void;
21
- export default _default;
@@ -1,39 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const Deployment_1 = require("../Deployment");
4
- exports.default = ({ namespace, cloudFlare = [], ...others }) => {
5
- const name = 'cloudflare-ddns';
6
- const image = 'baoduy2412/cloudflare-ddns:latest';
7
- const configMap = {};
8
- const secrets = {};
9
- cloudFlare.forEach((c, ci) => {
10
- secrets[`Cloudflare__${ci}__ApiKey`] = c.apiKey;
11
- c.zones.forEach((z, zi) => {
12
- configMap[`Cloudflare__${ci}__Zones__${zi}__Id`] = z.id;
13
- if (z.proxied)
14
- configMap[`Cloudflare__${ci}__Zones__${zi}__Proxied`] = z.proxied
15
- ? 'true'
16
- : 'false';
17
- z.aRecords.forEach((r, rI) => {
18
- configMap[`Cloudflare__${ci}__Zones__${zi}__ARecords__${rI}__Name`] =
19
- r.name;
20
- if (r.proxied)
21
- configMap[`Cloudflare__${ci}__Zones__${zi}__ARecords__${rI}__Proxied`] = r.proxied ? 'true' : 'false';
22
- });
23
- });
24
- });
25
- (0, Deployment_1.default)({
26
- name,
27
- namespace,
28
- configMap,
29
- secrets,
30
- podConfig: {
31
- ports: { http: 8080 },
32
- image,
33
- resources: { requests: { memory: '1Mi', cpu: '1m' } },
34
- },
35
- deploymentConfig: { replicas: 1 },
36
- ...others,
37
- });
38
- };
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRHluYW1pY0Rucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9LdWJlWC9DbG91ZEZsYXJlL0R5bmFtaWNEbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSw4Q0FBdUM7QUFtQnZDLGtCQUFlLENBQUMsRUFDZCxTQUFTLEVBQ1QsVUFBVSxHQUFHLEVBQUUsRUFFZixHQUFHLE1BQU0sRUFDTyxFQUFFLEVBQUU7SUFDcEIsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLENBQUM7SUFDL0IsTUFBTSxLQUFLLEdBQUcsbUNBQW1DLENBQUM7SUFFbEQsTUFBTSxTQUFTLEdBQWtDLEVBQUUsQ0FBQztJQUNwRCxNQUFNLE9BQU8sR0FBa0MsRUFBRSxDQUFDO0lBRWxELFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUU7UUFDM0IsT0FBTyxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBRWhELENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO1lBQ3hCLFNBQVMsQ0FBQyxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFFeEQsSUFBSSxDQUFDLENBQUMsT0FBTztnQkFDWCxTQUFTLENBQUMsZUFBZSxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTztvQkFDL0QsQ0FBQyxDQUFDLE1BQU07b0JBQ1IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUVkLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO2dCQUMzQixTQUFTLENBQUMsZUFBZSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsUUFBUSxDQUFDO29CQUNqRSxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUVULElBQUksQ0FBQyxDQUFDLE9BQU87b0JBQ1gsU0FBUyxDQUNQLGVBQWUsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFdBQVcsQ0FDNUQsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNyQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFBLG9CQUFVLEVBQUM7UUFDVCxJQUFJO1FBQ0osU0FBUztRQUVULFNBQVM7UUFDVCxPQUFPO1FBRVAsU0FBUyxFQUFFO1lBQ1QsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtZQUNyQixLQUFLO1lBQ0wsU0FBUyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7U0FDdEQ7UUFDRCxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUU7UUFFakMsR0FBRyxNQUFNO0tBQ1YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDIn0=
@@ -1,17 +0,0 @@
1
- import { DefaultK8sArgs } from '../types';
2
- import { Input } from '@pulumi/pulumi';
3
- import * as k8s from '@pulumi/kubernetes';
4
- export type TunnelHelmParameters = {
5
- account: Input<string>;
6
- tunnelName: Input<string>;
7
- tunnelId: Input<string>;
8
- secret: Input<string>;
9
- enableWarp?: Input<boolean>;
10
- };
11
- export interface TunnelHelmProps extends Omit<DefaultK8sArgs, 'name'> {
12
- name?: string;
13
- replicas?: number;
14
- parameters: TunnelHelmParameters;
15
- }
16
- declare const _default: ({ name, namespace, parameters, replicas, ...others }: TunnelHelmProps) => k8s.helm.v3.Chart;
17
- export default _default;
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const k8s = require("@pulumi/kubernetes");
4
- exports.default = ({ name = 'tunnel', namespace, parameters, replicas = 2, ...others }) => new k8s.helm.v3.Chart(name, {
5
- namespace,
6
- chart: 'cloudflare-tunnel',
7
- fetchOpts: { repo: 'https://cloudflare.github.io/helm-charts' },
8
- values: {
9
- cloudflare: parameters,
10
- },
11
- }, others);
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHVubmVsLUhlbG0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvS3ViZVgvQ2xvdWRGbGFyZS9UdW5uZWwtSGVsbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLDBDQUEwQztBQWdCMUMsa0JBQWUsQ0FBQyxFQUNkLElBQUksR0FBRyxRQUFRLEVBQ2YsU0FBUyxFQUVULFVBQVUsRUFDVixRQUFRLEdBQUcsQ0FBQyxFQUNaLEdBQUcsTUFBTSxFQUNPLEVBQUUsRUFBRSxDQUNwQixJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FDbkIsSUFBSSxFQUNKO0lBQ0UsU0FBUztJQUNULEtBQUssRUFBRSxtQkFBbUI7SUFDMUIsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLDBDQUEwQyxFQUFFO0lBRS9ELE1BQU0sRUFBRTtRQUNOLFVBQVUsRUFBRSxVQUFVO0tBQ3ZCO0NBQ0YsRUFDRCxNQUFNLENBQ1AsQ0FBQyJ9
@@ -1,23 +0,0 @@
1
- import { DefaultK8sArgs } from '../types';
2
- import { Input } from '@pulumi/pulumi';
3
- export type TunnelParameters = {
4
- token: Input<string>;
5
- enableLiveness?: boolean;
6
- enableMetrics?: boolean;
7
- tcp?: Array<{
8
- host: string;
9
- service: string;
10
- port: number;
11
- }>;
12
- };
13
- export interface TunnelProps extends Omit<DefaultK8sArgs, 'name'> {
14
- name?: string;
15
- replicas?: number;
16
- parameters: TunnelParameters;
17
- }
18
- declare const _default: ({ name, namespace, parameters, replicas, ...others }: TunnelProps) => {
19
- deployment: import("../kx").Deployment | undefined;
20
- service: import("../kx").Service | undefined;
21
- jobs: (import("@pulumi/kubernetes/batch/v1/cronJob").CronJob | import("../kx").Job)[] | undefined;
22
- };
23
- export default _default;
@@ -1,54 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const Deployment_1 = require("../Deployment");
4
- exports.default = ({ name = 'tunnel', namespace, parameters, replicas = 2, ...others }) => {
5
- const tcpArgs = parameters.tcp
6
- ? parameters.tcp.flatMap((t) => [
7
- '--hostname',
8
- t.host,
9
- '--url',
10
- `tcp://${t.service}:${t.port}`,
11
- ])
12
- : [];
13
- const args = [
14
- 'tunnel',
15
- ...tcpArgs,
16
- '--no-autoupdate',
17
- 'run',
18
- '--token',
19
- '$(token)',
20
- // '--config',
21
- // '/etc/cloudflared/config/config.yaml',
22
- ];
23
- if (parameters.enableMetrics) {
24
- args.push('--metrics', '0.0.0.0:8081');
25
- }
26
- const tunnel = (0, Deployment_1.default)({
27
- name,
28
- namespace,
29
- secrets: { token: parameters.token },
30
- podConfig: {
31
- ports: { http: 3000 },
32
- image: 'cloudflare/cloudflared:latest',
33
- podSecurityContext: { readOnlyRootFilesystem: true },
34
- probes: {
35
- liveness: parameters.enableLiveness
36
- ? {
37
- httpGet: '/ready',
38
- port: 8081,
39
- initialDelaySeconds: 10,
40
- periodSeconds: 10,
41
- failureThreshold: 3,
42
- }
43
- : undefined,
44
- },
45
- },
46
- deploymentConfig: {
47
- replicas,
48
- args,
49
- },
50
- ...others,
51
- });
52
- return tunnel;
53
- };
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHVubmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0t1YmVYL0Nsb3VkRmxhcmUvVHVubmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsOENBQXVDO0FBaUJ2QyxrQkFBZSxDQUFDLEVBQ2QsSUFBSSxHQUFHLFFBQVEsRUFDZixTQUFTLEVBQ1QsVUFBVSxFQUNWLFFBQVEsR0FBRyxDQUFDLEVBRVosR0FBRyxNQUFNLEVBQ0csRUFBRSxFQUFFO0lBQ2hCLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHO1FBQzVCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDNUIsWUFBWTtZQUNaLENBQUMsQ0FBQyxJQUFJO1lBQ04sT0FBTztZQUNQLFNBQVMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFO1NBQy9CLENBQUM7UUFDSixDQUFDLENBQUMsRUFBRSxDQUFDO0lBRVAsTUFBTSxJQUFJLEdBQUc7UUFDWCxRQUFRO1FBQ1IsR0FBRyxPQUFPO1FBQ1YsaUJBQWlCO1FBQ2pCLEtBQUs7UUFDTCxTQUFTO1FBQ1QsVUFBVTtRQUNWLGNBQWM7UUFDZCx5Q0FBeUM7S0FDMUMsQ0FBQztJQUVGLElBQUksVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFBLG9CQUFVLEVBQUM7UUFDeEIsSUFBSTtRQUNKLFNBQVM7UUFFVCxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRTtRQUVwQyxTQUFTLEVBQUU7WUFDVCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO1lBQ3JCLEtBQUssRUFBRSwrQkFBK0I7WUFDdEMsa0JBQWtCLEVBQUUsRUFBRSxzQkFBc0IsRUFBRSxJQUFJLEVBQUU7WUFDcEQsTUFBTSxFQUFFO2dCQUNOLFFBQVEsRUFBRSxVQUFVLENBQUMsY0FBYztvQkFDakMsQ0FBQyxDQUFDO3dCQUNFLE9BQU8sRUFBRSxRQUFRO3dCQUNqQixJQUFJLEVBQUUsSUFBSTt3QkFDVixtQkFBbUIsRUFBRSxFQUFFO3dCQUN2QixhQUFhLEVBQUUsRUFBRTt3QkFDakIsZ0JBQWdCLEVBQUUsQ0FBQztxQkFDcEI7b0JBQ0gsQ0FBQyxDQUFDLFNBQVM7YUFDZDtTQUNGO1FBRUQsZ0JBQWdCLEVBQUU7WUFDaEIsUUFBUTtZQUNSLElBQUk7U0FDTDtRQUVELEdBQUcsTUFBTTtLQUNWLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyJ9
@@ -1,13 +0,0 @@
1
- import { K8sArgs } from '../types';
2
- import { DynamicDnsProps } from './DynamicDns';
3
- import { TunnelProps } from './Tunnel';
4
- import { TunnelHelmProps } from './Tunnel-Helm';
5
- import { CloudFlareCertImportProps } from './CertImports';
6
- interface Props extends K8sArgs {
7
- namespace?: string;
8
- certImports?: Omit<CloudFlareCertImportProps, 'namespace' | 'provider' | 'dependsOn'>;
9
- dynamicDns?: Omit<DynamicDnsProps, 'namespace' | 'provider' | 'dependsOn'>;
10
- tunnel?: Omit<TunnelProps | TunnelHelmProps, 'namespace' | 'provider' | 'dependsOn'>;
11
- }
12
- declare const _default: ({ namespace, dynamicDns, tunnel, certImports, ...others }: Props) => void;
13
- export default _default;
@@ -1,36 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const pulumi_1 = require("@pulumi/pulumi");
4
- const Namespace_1 = require("../Core/Namespace");
5
- const DynamicDns_1 = require("./DynamicDns");
6
- const Tunnel_1 = require("./Tunnel");
7
- const Tunnel_Helm_1 = require("./Tunnel-Helm");
8
- const CertImports_1 = require("./CertImports");
9
- exports.default = ({ namespace = 'cloudflare', dynamicDns, tunnel, certImports, ...others }) => {
10
- const ns = (0, Namespace_1.default)({
11
- name: namespace,
12
- ...others,
13
- });
14
- if (certImports) {
15
- (0, pulumi_1.output)((0, CertImports_1.default)({ ...others, ...certImports }));
16
- }
17
- if (dynamicDns) {
18
- (0, DynamicDns_1.default)({ ...others, ...dynamicDns, namespace: ns.metadata.name });
19
- }
20
- if (tunnel) {
21
- if (tunnel.parameters.hasOwnProperty('tunnelId') &&
22
- tunnel.parameters.hasOwnProperty('secret'))
23
- (0, Tunnel_Helm_1.default)({
24
- ...others,
25
- ...tunnel,
26
- namespace: ns.metadata.name,
27
- });
28
- else
29
- (0, Tunnel_1.default)({
30
- ...others,
31
- ...tunnel,
32
- namespace: ns.metadata.name,
33
- });
34
- }
35
- };
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvS3ViZVgvQ2xvdWRGbGFyZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLDJDQUF3QztBQUN4QyxpREFBMEM7QUFDMUMsNkNBQTJEO0FBQzNELHFDQUErQztBQUMvQywrQ0FBNEQ7QUFDNUQsK0NBQXVFO0FBZ0J2RSxrQkFBZSxDQUFDLEVBQ2QsU0FBUyxHQUFHLFlBQVksRUFDeEIsVUFBVSxFQUNWLE1BQU0sRUFDTixXQUFXLEVBQ1gsR0FBRyxNQUFNLEVBQ0gsRUFBRSxFQUFFO0lBQ1YsTUFBTSxFQUFFLEdBQUcsSUFBQSxtQkFBUyxFQUFDO1FBQ25CLElBQUksRUFBRSxTQUFTO1FBQ2YsR0FBRyxNQUFNO0tBQ1YsQ0FBQyxDQUFDO0lBRUgsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNoQixJQUFBLGVBQU0sRUFBQyxJQUFBLHFCQUFXLEVBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxHQUFHLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQ0QsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNmLElBQUEsb0JBQVUsRUFBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLEdBQUcsVUFBVSxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUNELElBQUksTUFBTSxFQUFFLENBQUM7UUFDWCxJQUNFLE1BQU0sQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztZQUM1QyxNQUFNLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7WUFFMUMsSUFBQSxxQkFBVSxFQUFDO2dCQUNULEdBQUcsTUFBTTtnQkFDVCxHQUFJLE1BQTBCO2dCQUM5QixTQUFTLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJO2FBQzVCLENBQUMsQ0FBQzs7WUFFSCxJQUFBLGdCQUFNLEVBQUM7Z0JBQ0wsR0FBRyxNQUFNO2dCQUNULEdBQUksTUFBc0I7Z0JBQzFCLFNBQVMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUk7YUFDNUIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztBQUNILENBQUMsQ0FBQyJ9
@@ -1,6 +0,0 @@
1
- import { K8sArgs } from '../../../types';
2
- interface Props extends K8sArgs {
3
- enableWorkerPlan?: boolean;
4
- }
5
- declare const _default: ({ enableWorkerPlan, ...others }: Props) => void;
6
- export default _default;
@@ -1,60 +0,0 @@
1
- "use strict";
2
- //https://docs.k3s.io/upgrades/automated
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- const k8s = require("@pulumi/kubernetes");
5
- const createPlan = ({ name, namespace, isServerPlan, ...others }) => {
6
- return new k8s.apiextensions.CustomResource(name, {
7
- kind: 'Plan',
8
- apiVersion: 'upgrade.cattle.io/v1',
9
- metadata: { name, namespace },
10
- spec: {
11
- concurrency: 1,
12
- cordon: true,
13
- serviceAccountName: 'system-upgrade',
14
- upgrade: { image: 'rancher/k3s-upgrade' },
15
- channel: 'https://update.k3s.io/v1-release/channels/stable',
16
- prepare: isServerPlan
17
- ? undefined
18
- : { args: ['prepare', 'server-plan'], image: 'rancher/k3s-upgrade' },
19
- nodeSelector: {
20
- matchExpressions: [
21
- isServerPlan
22
- ? {
23
- key: 'node-role.kubernetes.io/master',
24
- operator: 'In',
25
- values: ['true'],
26
- }
27
- : {
28
- key: 'node-role.kubernetes.io/master',
29
- operator: 'DoesNotExist',
30
- },
31
- ],
32
- },
33
- },
34
- }, others);
35
- };
36
- exports.default = ({ enableWorkerPlan, ...others }) => {
37
- const name = 'k3s-auto-upgrade-controller';
38
- const controller = new k8s.yaml.ConfigFile(name, {
39
- skipAwait: true,
40
- file: 'https://github.com/rancher/system-upgrade-controller/blob/master/manifests/system-upgrade-controller.yaml',
41
- transformations: [(o) => { }],
42
- }, others);
43
- createPlan({
44
- name: 'server-plan',
45
- namespace: 'system-upgrade',
46
- isServerPlan: true,
47
- ...others,
48
- dependsOn: controller,
49
- });
50
- if (enableWorkerPlan) {
51
- createPlan({
52
- name: 'agent-plan',
53
- namespace: 'system-upgrade',
54
- isServerPlan: false,
55
- ...others,
56
- dependsOn: controller,
57
- });
58
- }
59
- };
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvS3ViZVgvQ2x1c3RlcnMvSzNzL0F1dG9VcGdyYWRlQ29udHJvbGxlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsd0NBQXdDOztBQUd4QywwQ0FBMEM7QUFhMUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxFQUNsQixJQUFJLEVBQ0osU0FBUyxFQUNULFlBQVksRUFDWixHQUFHLE1BQU0sRUFDQyxFQUFFLEVBQUU7SUFDZCxPQUFPLElBQUksR0FBRyxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQ3pDLElBQUksRUFDSjtRQUNFLElBQUksRUFBRSxNQUFNO1FBQ1osVUFBVSxFQUFFLHNCQUFzQjtRQUNsQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO1FBQzdCLElBQUksRUFBRTtZQUNKLFdBQVcsRUFBRSxDQUFDO1lBQ2QsTUFBTSxFQUFFLElBQUk7WUFDWixrQkFBa0IsRUFBRSxnQkFBZ0I7WUFDcEMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFFO1lBQ3pDLE9BQU8sRUFBRSxrREFBa0Q7WUFFM0QsT0FBTyxFQUFFLFlBQVk7Z0JBQ25CLENBQUMsQ0FBQyxTQUFTO2dCQUNYLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUscUJBQXFCLEVBQUU7WUFDdEUsWUFBWSxFQUFFO2dCQUNaLGdCQUFnQixFQUFFO29CQUNoQixZQUFZO3dCQUNWLENBQUMsQ0FBQzs0QkFDRSxHQUFHLEVBQUUsZ0NBQWdDOzRCQUNyQyxRQUFRLEVBQUUsSUFBSTs0QkFDZCxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUM7eUJBQ2pCO3dCQUNILENBQUMsQ0FBQzs0QkFDRSxHQUFHLEVBQUUsZ0NBQWdDOzRCQUNyQyxRQUFRLEVBQUUsY0FBYzt5QkFDekI7aUJBQ047YUFDRjtTQUNGO0tBQ0YsRUFDRCxNQUFNLENBQ1AsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLGtCQUFlLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLE1BQU0sRUFBUyxFQUFFLEVBQUU7SUFDeEQsTUFBTSxJQUFJLEdBQUcsNkJBQTZCLENBQUM7SUFFM0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FDeEMsSUFBSSxFQUNKO1FBQ0UsU0FBUyxFQUFFLElBQUk7UUFDZixJQUFJLEVBQUUsMkdBQTJHO1FBQ2pILGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRSxDQUFDLENBQUM7S0FDN0IsRUFDRCxNQUFNLENBQ1AsQ0FBQztJQUVGLFVBQVUsQ0FBQztRQUNULElBQUksRUFBRSxhQUFhO1FBQ25CLFNBQVMsRUFBRSxnQkFBZ0I7UUFDM0IsWUFBWSxFQUFFLElBQUk7UUFDbEIsR0FBRyxNQUFNO1FBQ1QsU0FBUyxFQUFFLFVBQVU7S0FDdEIsQ0FBQyxDQUFDO0lBRUgsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3JCLFVBQVUsQ0FBQztZQUNULElBQUksRUFBRSxZQUFZO1lBQ2xCLFNBQVMsRUFBRSxnQkFBZ0I7WUFDM0IsWUFBWSxFQUFFLEtBQUs7WUFDbkIsR0FBRyxNQUFNO1lBQ1QsU0FBUyxFQUFFLFVBQVU7U0FDdEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUMsQ0FBQyJ9