@drunk-pulumi/azure 0.0.19
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.
- package/Aks/Helper.d.ts +43 -0
- package/Aks/Helper.js +72 -0
- package/Aks/Identity.d.ts +14 -0
- package/Aks/Identity.js +32 -0
- package/Aks/VmSetAutoScale/index.d.ts +16 -0
- package/Aks/VmSetAutoScale/index.js +132 -0
- package/Aks/VmSetMonitor/index.d.ts +12 -0
- package/Aks/VmSetMonitor/index.js +67 -0
- package/Aks/index.d.ts +100 -0
- package/Aks/index.js +558 -0
- package/Apim/ApiProduct/Api.d.ts +35 -0
- package/Apim/ApiProduct/Api.js +131 -0
- package/Apim/ApiProduct/OpenApi.d.ts +85 -0
- package/Apim/ApiProduct/OpenApi.js +3 -0
- package/Apim/ApiProduct/PolicyBuilder.d.ts +79 -0
- package/Apim/ApiProduct/PolicyBuilder.js +361 -0
- package/Apim/ApiProduct/Product.d.ts +8 -0
- package/Apim/ApiProduct/Product.js +63 -0
- package/Apim/ApiProduct/SwaggerHelper.d.ts +6 -0
- package/Apim/ApiProduct/SwaggerHelper.js +44 -0
- package/Apim/ApiProduct/index.d.ts +9 -0
- package/Apim/ApiProduct/index.js +22 -0
- package/Apim/Helpers.d.ts +0 -0
- package/Apim/Helpers.js +2 -0
- package/Apim/HookProxy/index.d.ts +20 -0
- package/Apim/HookProxy/index.js +27 -0
- package/Apim/index.d.ts +22 -0
- package/Apim/index.js +118 -0
- package/Apps/LogicApp.d.ts +12 -0
- package/Apps/LogicApp.js +19 -0
- package/Automation/AutoAccount.d.ts +5 -0
- package/Automation/AutoAccount.js +20 -0
- package/AzAd/B2C.d.ts +9 -0
- package/AzAd/B2C.js +38 -0
- package/AzAd/ConditionalPolicies/index.d.ts +0 -0
- package/AzAd/ConditionalPolicies/index.js +2 -0
- package/AzAd/EnvRoles.d.ts +12 -0
- package/AzAd/EnvRoles.js +62 -0
- package/AzAd/GraphDefinition.d.ts +14 -0
- package/AzAd/GraphDefinition.js +5136 -0
- package/AzAd/Group.d.ts +29 -0
- package/AzAd/Group.js +70 -0
- package/AzAd/Helper.d.ts +18 -0
- package/AzAd/Helper.js +37 -0
- package/AzAd/Identities/AzDevOps.d.ts +23 -0
- package/AzAd/Identities/AzDevOps.js +61 -0
- package/AzAd/Identities/AzUserAdRevertSync.d.ts +14 -0
- package/AzAd/Identities/AzUserAdRevertSync.js +18 -0
- package/AzAd/Identity.d.ts +51 -0
- package/AzAd/Identity.js +133 -0
- package/AzAd/ManagedIdentity.d.ts +6 -0
- package/AzAd/ManagedIdentity.js +23 -0
- package/AzAd/Role.d.ts +19 -0
- package/AzAd/Role.js +25 -0
- package/AzAd/RoleAssignment.d.ts +79 -0
- package/AzAd/RoleAssignment.js +48 -0
- package/AzAd/RolesBuiltIn.d.ts +62 -0
- package/AzAd/RolesBuiltIn.js +13841 -0
- package/Cdn/index.d.ts +11 -0
- package/Cdn/index.js +47 -0
- package/Certificate/index.d.ts +41 -0
- package/Certificate/index.js +156 -0
- package/Certificate/p12.d.ts +5 -0
- package/Certificate/p12.js +37 -0
- package/Common/AppConfigs/dotnetConfig.d.ts +15 -0
- package/Common/AppConfigs/dotnetConfig.js +20 -0
- package/Common/AutoTags.d.ts +1 -0
- package/Common/AutoTags.js +24 -0
- package/Common/AzureEnv.d.ts +37 -0
- package/Common/AzureEnv.js +94 -0
- package/Common/ConfigHelper.d.ts +5 -0
- package/Common/ConfigHelper.js +14 -0
- package/Common/GlobalEnv.d.ts +14 -0
- package/Common/GlobalEnv.js +38 -0
- package/Common/Helpers.d.ts +10 -0
- package/Common/Helpers.js +30 -0
- package/Common/Location.d.ts +4 -0
- package/Common/Location.js +23 -0
- package/Common/LocationBuiltIn.d.ts +81 -0
- package/Common/LocationBuiltIn.js +1925 -0
- package/Common/Naming/index.d.ts +62 -0
- package/Common/Naming/index.js +146 -0
- package/Common/ResourceEnv.d.ts +16 -0
- package/Common/ResourceEnv.js +29 -0
- package/Common/StackEnv.d.ts +4 -0
- package/Common/StackEnv.js +22 -0
- package/Common/index.d.ts +5 -0
- package/Common/index.js +9 -0
- package/ContainerRegistry/Helper.d.ts +23 -0
- package/ContainerRegistry/Helper.js +47 -0
- package/ContainerRegistry/index.d.ts +28 -0
- package/ContainerRegistry/index.js +103 -0
- package/Core/Helper.d.ts +16 -0
- package/Core/Helper.js +37 -0
- package/Core/KeyGenetators.d.ts +33 -0
- package/Core/KeyGenetators.js +66 -0
- package/Core/Locker.d.ts +13 -0
- package/Core/Locker.js +14 -0
- package/Core/Random.d.ts +40 -0
- package/Core/Random.js +83 -0
- package/Core/ResourceCreator.d.ts +17 -0
- package/Core/ResourceCreator.js +48 -0
- package/Core/ResourceGroup.d.ts +13 -0
- package/Core/ResourceGroup.js +45 -0
- package/CosmosDb/index.d.ts +33 -0
- package/CosmosDb/index.js +129 -0
- package/CustomRoles/index.d.ts +5 -0
- package/CustomRoles/index.js +27 -0
- package/IOT/Hub/index.d.ts +32 -0
- package/IOT/Hub/index.js +208 -0
- package/KeyVault/CustomHelper.d.ts +35 -0
- package/KeyVault/CustomHelper.js +40 -0
- package/KeyVault/Helper.d.ts +33 -0
- package/KeyVault/Helper.js +58 -0
- package/KeyVault/VaultAccess.d.ts +15 -0
- package/KeyVault/VaultAccess.js +47 -0
- package/KeyVault/VaultPermissions.d.ts +26 -0
- package/KeyVault/VaultPermissions.js +169 -0
- package/KeyVault/index.d.ts +28 -0
- package/KeyVault/index.js +136 -0
- package/KubeX/AcrSecret.d.ts +15 -0
- package/KubeX/AcrSecret.js +31 -0
- package/KubeX/Apps/AstroPage.d.ts +12 -0
- package/KubeX/Apps/AstroPage.js +33 -0
- package/KubeX/Apps/KafKa.d.ts +6 -0
- package/KubeX/Apps/KafKa.js +13 -0
- package/KubeX/Apps/Nobelium.d.ts +13 -0
- package/KubeX/Apps/Nobelium.js +37 -0
- package/KubeX/Apps/Wikijs.d.ts +30 -0
- package/KubeX/Apps/Wikijs.js +54 -0
- package/KubeX/Apps/WordPress.d.ts +24 -0
- package/KubeX/Apps/WordPress.js +55 -0
- package/KubeX/Apps/YarpProxy/index.d.ts +17 -0
- package/KubeX/Apps/YarpProxy/index.js +107 -0
- package/KubeX/Apps/YarpProxy/type.d.ts +55 -0
- package/KubeX/Apps/YarpProxy/type.js +3 -0
- package/KubeX/CertHelper.d.ts +1 -0
- package/KubeX/CertHelper.js +9 -0
- package/KubeX/CertImports.d.ts +19 -0
- package/KubeX/CertImports.js +70 -0
- package/KubeX/CloudFlare/CertCreator.d.ts +19 -0
- package/KubeX/CloudFlare/CertCreator.js +90 -0
- package/KubeX/CloudFlare/CertImports.d.ts +17 -0
- package/KubeX/CloudFlare/CertImports.js +34 -0
- package/KubeX/CloudFlare/DynamicDns.d.ts +21 -0
- package/KubeX/CloudFlare/DynamicDns.js +39 -0
- package/KubeX/CloudFlare/Tunnel-Helm.d.ts +17 -0
- package/KubeX/CloudFlare/Tunnel-Helm.js +12 -0
- package/KubeX/CloudFlare/Tunnel.d.ts +23 -0
- package/KubeX/CloudFlare/Tunnel.js +54 -0
- package/KubeX/CloudFlare/index.d.ts +13 -0
- package/KubeX/CloudFlare/index.js +36 -0
- package/KubeX/Clusters/K3s/AutoUpgradeController/index.d.ts +6 -0
- package/KubeX/Clusters/K3s/AutoUpgradeController/index.js +60 -0
- package/KubeX/ConfigSecret.d.ts +24 -0
- package/KubeX/ConfigSecret.js +38 -0
- package/KubeX/Core/CertManager/index.d.ts +24 -0
- package/KubeX/Core/CertManager/index.js +96 -0
- package/KubeX/Core/KsCertSecret.d.ts +12 -0
- package/KubeX/Core/KsCertSecret.js +22 -0
- package/KubeX/Core/KsSecret.d.ts +9 -0
- package/KubeX/Core/KsSecret.js +12 -0
- package/KubeX/Core/LoadBalancer/MetalLB.d.ts +7 -0
- package/KubeX/Core/LoadBalancer/MetalLB.js +21 -0
- package/KubeX/Core/Monitoring/index.d.ts +22 -0
- package/KubeX/Core/Monitoring/index.js +322 -0
- package/KubeX/Core/Namespace.d.ts +12 -0
- package/KubeX/Core/Namespace.js +41 -0
- package/KubeX/Core/Nginx/index.d.ts +60 -0
- package/KubeX/Core/Nginx/index.js +109 -0
- package/KubeX/Core/OAuthProxy/index.d.ts +0 -0
- package/KubeX/Core/OAuthProxy/index.js +3 -0
- package/KubeX/Core/ResourceQuota.d.ts +12 -0
- package/KubeX/Core/ResourceQuota.js +13 -0
- package/KubeX/Core/SecurityRules.d.ts +34 -0
- package/KubeX/Core/SecurityRules.js +93 -0
- package/KubeX/Core/StorageClass/azureBlob.d.ts +20 -0
- package/KubeX/Core/StorageClass/azureBlob.js +77 -0
- package/KubeX/Core/StorageClass/azureFile.d.ts +17 -0
- package/KubeX/Core/StorageClass/azureFile.js +45 -0
- package/KubeX/Core/StorageClass/index.d.ts +13 -0
- package/KubeX/Core/StorageClass/index.js +25 -0
- package/KubeX/Core/index.d.ts +57 -0
- package/KubeX/Core/index.js +94 -0
- package/KubeX/Databases/MariaDb.d.ts +11 -0
- package/KubeX/Databases/MariaDb.js +39 -0
- package/KubeX/Databases/MySql.V2.d.ts +11 -0
- package/KubeX/Databases/MySql.V2.js +40 -0
- package/KubeX/Databases/MySql.d.ts +13 -0
- package/KubeX/Databases/MySql.js +55 -0
- package/KubeX/Databases/PostgreSql/PostgreSQL-HA.d.ts +10 -0
- package/KubeX/Databases/PostgreSql/PostgreSQL-HA.js +47 -0
- package/KubeX/Databases/PostgreSql/PostgreSQL.d.ts +10 -0
- package/KubeX/Databases/PostgreSql/PostgreSQL.js +51 -0
- package/KubeX/Databases/PostgreSql/PostgreSql.v1.d.ts +13 -0
- package/KubeX/Databases/PostgreSql/PostgreSql.v1.js +56 -0
- package/KubeX/Databases/PostgreSql/index.d.ts +17 -0
- package/KubeX/Databases/PostgreSql/index.js +6 -0
- package/KubeX/Databases/RedisCache.d.ts +14 -0
- package/KubeX/Databases/RedisCache.js +65 -0
- package/KubeX/Databases/SqlServer.d.ts +15 -0
- package/KubeX/Databases/SqlServer.js +77 -0
- package/KubeX/Deployment/PodAutoscaler.d.ts +14 -0
- package/KubeX/Deployment/PodAutoscaler.js +51 -0
- package/KubeX/Deployment/index.d.ts +136 -0
- package/KubeX/Deployment/index.js +306 -0
- package/KubeX/Helpers.d.ts +4 -0
- package/KubeX/Helpers.js +17 -0
- package/KubeX/Ingress/AppGatewayIngress.d.ts +2 -0
- package/KubeX/Ingress/AppGatewayIngress.js +4 -0
- package/KubeX/Ingress/Conts.d.ts +13 -0
- package/KubeX/Ingress/Conts.js +18 -0
- package/KubeX/Ingress/NginxIngress.d.ts +3 -0
- package/KubeX/Ingress/NginxIngress.js +186 -0
- package/KubeX/Ingress/NginxProxy.d.ts +21 -0
- package/KubeX/Ingress/NginxProxy.js +43 -0
- package/KubeX/Ingress/TraefikIngress/CustomHeader.d.ts +15 -0
- package/KubeX/Ingress/TraefikIngress/CustomHeader.js +15 -0
- package/KubeX/Ingress/TraefikIngress/index.d.ts +11 -0
- package/KubeX/Ingress/TraefikIngress/index.js +95 -0
- package/KubeX/Ingress/index.d.ts +5 -0
- package/KubeX/Ingress/index.js +12 -0
- package/KubeX/Ingress/type.d.ts +82 -0
- package/KubeX/Ingress/type.js +3 -0
- package/KubeX/Providers/index.d.ts +8 -0
- package/KubeX/Providers/index.js +15 -0
- package/KubeX/Storage/Longhorn/index.d.ts +15 -0
- package/KubeX/Storage/Longhorn/index.js +54 -0
- package/KubeX/Storage/index.d.ts +25 -0
- package/KubeX/Storage/index.js +79 -0
- package/KubeX/Tools/AWS/LocalStack.d.ts +7 -0
- package/KubeX/Tools/AWS/LocalStack.js +29 -0
- package/KubeX/Tools/AWS/S3.d.ts +6 -0
- package/KubeX/Tools/AWS/S3.js +44 -0
- package/KubeX/Tools/AWS/index.d.ts +7 -0
- package/KubeX/Tools/AWS/index.js +14 -0
- package/KubeX/Tools/AppHealthzMonitor.d.ts +18 -0
- package/KubeX/Tools/AppHealthzMonitor.js +52 -0
- package/KubeX/Tools/ArgoCD/index.d.ts +17 -0
- package/KubeX/Tools/ArgoCD/index.js +131 -0
- package/KubeX/Tools/Dapr/Storage.d.ts +66 -0
- package/KubeX/Tools/Dapr/Storage.js +70 -0
- package/KubeX/Tools/Dapr/index.d.ts +10 -0
- package/KubeX/Tools/Dapr/index.js +31 -0
- package/KubeX/Tools/Echo-App.d.ts +3 -0
- package/KubeX/Tools/Echo-App.js +21 -0
- package/KubeX/Tools/Gitea/GiteaRepo.d.ts +72 -0
- package/KubeX/Tools/Gitea/GiteaRepo.js +184 -0
- package/KubeX/Tools/Gitea/GiteaRunner.d.ts +11 -0
- package/KubeX/Tools/Gitea/GiteaRunner.js +37 -0
- package/KubeX/Tools/Gitea/GiteaRunner.v1.d.ts +11 -0
- package/KubeX/Tools/Gitea/GiteaRunner.v1.js +123 -0
- package/KubeX/Tools/HarborRepo.d.ts +29 -0
- package/KubeX/Tools/HarborRepo.js +78 -0
- package/KubeX/Tools/HelloWorld.d.ts +3 -0
- package/KubeX/Tools/HelloWorld.js +21 -0
- package/KubeX/Tools/KubeCleanup.d.ts +9 -0
- package/KubeX/Tools/KubeCleanup.js +34 -0
- package/KubeX/Tools/NoIp.d.ts +13 -0
- package/KubeX/Tools/NoIp.js +24 -0
- package/KubeX/Tools/OpenLDAP/index.d.ts +12 -0
- package/KubeX/Tools/OpenLDAP/index.js +56 -0
- package/KubeX/Tools/OutlineVpn/index.d.ts +25 -0
- package/KubeX/Tools/OutlineVpn/index.js +256 -0
- package/KubeX/Tools/SqlPad.d.ts +29 -0
- package/KubeX/Tools/SqlPad.js +133 -0
- package/KubeX/Tools/ToolPod.d.ts +10 -0
- package/KubeX/Tools/ToolPod.js +40 -0
- package/KubeX/Tools/UptimeKuma.d.ts +6 -0
- package/KubeX/Tools/UptimeKuma.js +38 -0
- package/KubeX/Tools/index.d.ts +27 -0
- package/KubeX/Tools/index.js +35 -0
- package/KubeX/VairableResolvers/index.d.ts +15 -0
- package/KubeX/VairableResolvers/index.js +49 -0
- package/KubeX/kx/index.d.ts +114 -0
- package/KubeX/kx/index.js +423 -0
- package/KubeX/types.d.ts +49 -0
- package/KubeX/types.js +3 -0
- package/Logs/AppInsight.d.ts +16 -0
- package/Logs/AppInsight.js +48 -0
- package/Logs/Helpers.d.ts +50 -0
- package/Logs/Helpers.js +95 -0
- package/Logs/LogAnalytics.d.ts +17 -0
- package/Logs/LogAnalytics.js +54 -0
- package/Logs/WebTest.d.ts +13 -0
- package/Logs/WebTest.js +68 -0
- package/Logs/index.d.ts +42 -0
- package/Logs/index.js +69 -0
- package/MySql/index.d.ts +20 -0
- package/MySql/index.js +93 -0
- package/Postgresql/index.d.ts +20 -0
- package/Postgresql/index.js +93 -0
- package/ReadMe.md +36 -0
- package/RedisCache/index.d.ts +9 -0
- package/RedisCache/index.js +79 -0
- package/ServiceBus/ServiceBusHelper.d.ts +21 -0
- package/ServiceBus/ServiceBusHelper.js +35 -0
- package/ServiceBus/index.d.ts +98 -0
- package/ServiceBus/index.js +396 -0
- package/SignalR/index.d.ts +20 -0
- package/SignalR/index.js +114 -0
- package/Sql/Auditing.d.ts +0 -0
- package/Sql/Auditing.js +2 -0
- package/Sql/Helper.d.ts +9 -0
- package/Sql/Helper.js +11 -0
- package/Sql/SqlDb.d.ts +14 -0
- package/Sql/SqlDb.js +42 -0
- package/Sql/index.d.ts +44 -0
- package/Sql/index.js +236 -0
- package/Storage/CdnEndpoint.d.ts +12 -0
- package/Storage/CdnEndpoint.js +62 -0
- package/Storage/CdnRules.d.ts +6 -0
- package/Storage/CdnRules.js +134 -0
- package/Storage/Helper.d.ts +28 -0
- package/Storage/Helper.js +66 -0
- package/Storage/ManagementRules.d.ts +70 -0
- package/Storage/ManagementRules.js +32 -0
- package/Storage/index.d.ts +55 -0
- package/Storage/index.js +264 -0
- package/VM/index.d.ts +37 -0
- package/VM/index.js +138 -0
- package/VNet/Bastion.d.ts +8 -0
- package/VNet/Bastion.js +30 -0
- package/VNet/Firewall.d.ts +27 -0
- package/VNet/Firewall.js +87 -0
- package/VNet/FirewallPolicies/AksFirewallPolicy.d.ts +20 -0
- package/VNet/FirewallPolicies/AksFirewallPolicy.js +241 -0
- package/VNet/FirewallPolicies/CloudPCFirewallPolicy.d.ts +14 -0
- package/VNet/FirewallPolicies/CloudPCFirewallPolicy.js +303 -0
- package/VNet/FirewallPolicy.d.ts +28 -0
- package/VNet/FirewallPolicy.js +110 -0
- package/VNet/FirewallRules/AksFirewallRules.d.ts +24 -0
- package/VNet/FirewallRules/AksFirewallRules.js +250 -0
- package/VNet/FirewallRules/DefaultRules.d.ts +2 -0
- package/VNet/FirewallRules/DefaultRules.js +23 -0
- package/VNet/FirewallRules/types.d.ts +20 -0
- package/VNet/FirewallRules/types.js +5 -0
- package/VNet/GlobalNetworkPeering.d.ts +9 -0
- package/VNet/GlobalNetworkPeering.js +17 -0
- package/VNet/Helper.d.ts +33 -0
- package/VNet/Helper.js +86 -0
- package/VNet/IpAddress.d.ts +17 -0
- package/VNet/IpAddress.js +38 -0
- package/VNet/IpAddressPrefix.d.ts +22 -0
- package/VNet/IpAddressPrefix.js +42 -0
- package/VNet/NSGRules/AzADService.d.ts +10 -0
- package/VNet/NSGRules/AzADService.js +45 -0
- package/VNet/NetworkPeering.d.ts +10 -0
- package/VNet/NetworkPeering.js +29 -0
- package/VNet/PrivateDns.d.ts +33 -0
- package/VNet/PrivateDns.js +64 -0
- package/VNet/PrivateEndpoint.d.ts +9 -0
- package/VNet/PrivateEndpoint.js +71 -0
- package/VNet/PublicDns.d.ts +21 -0
- package/VNet/PublicDns.js +59 -0
- package/VNet/RouteTable.d.ts +13 -0
- package/VNet/RouteTable.js +23 -0
- package/VNet/SecurityGroup.d.ts +8 -0
- package/VNet/SecurityGroup.js +13 -0
- package/VNet/Subnet.d.ts +26 -0
- package/VNet/Subnet.js +48 -0
- package/VNet/VirtualWAN.d.ts +25 -0
- package/VNet/VirtualWAN.js +40 -0
- package/VNet/Vnet.d.ts +51 -0
- package/VNet/Vnet.js +196 -0
- package/VNet/index.d.ts +65 -0
- package/VNet/index.js +198 -0
- package/Web/AppCertOrder.d.ts +16 -0
- package/Web/AppCertOrder.js +34 -0
- package/Web/AppConfig.d.ts +16 -0
- package/Web/AppConfig.js +79 -0
- package/Web/AppGateway.d.ts +15 -0
- package/Web/AppGateway.js +32 -0
- package/Web/FuncApp.d.ts +12 -0
- package/Web/FuncApp.js +24 -0
- package/Web/Helpers.d.ts +6 -0
- package/Web/Helpers.js +36 -0
- package/Web/WebAppPlan.d.ts +7 -0
- package/Web/WebAppPlan.js +26 -0
- package/Web/types.d.ts +169 -0
- package/Web/types.js +3 -0
- package/package.json +34 -0
- package/types.d.ts +69 -0
- package/types.js +3 -0
- package/z_tests/_tools/Mocks.d.ts +2 -0
- package/z_tests/_tools/Mocks.js +47 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyDeploymentRules = exports.defaultResources = exports.defaultPodSecurityContext = exports.defaultSecurityContext = exports.defaultResponseHeaders = void 0;
|
|
4
|
+
var Conts_1 = require("../Ingress/Conts");
|
|
5
|
+
Object.defineProperty(exports, "defaultResponseHeaders", { enumerable: true, get: function () { return Conts_1.defaultResponseHeaders; } });
|
|
6
|
+
exports.defaultSecurityContext = {
|
|
7
|
+
runAsUser: 1000,
|
|
8
|
+
runAsGroup: 3000,
|
|
9
|
+
fsGroup: 2000,
|
|
10
|
+
};
|
|
11
|
+
exports.defaultPodSecurityContext = {
|
|
12
|
+
readOnlyRootFilesystem: false,
|
|
13
|
+
privileged: false,
|
|
14
|
+
runAsNonRoot: true,
|
|
15
|
+
allowPrivilegeEscalation: false,
|
|
16
|
+
fsGroupChangePolicy: 'OnRootMismatch',
|
|
17
|
+
capabilities: {
|
|
18
|
+
add: ['NET_ADMIN', 'SYS_TIME'],
|
|
19
|
+
drop: ['ALL'],
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
exports.defaultResources = {
|
|
23
|
+
limits: { cpu: '500m', memory: '500Mi' },
|
|
24
|
+
requests: { cpu: '10m', memory: '100Mi' },
|
|
25
|
+
};
|
|
26
|
+
const disableAutoMountServiceAccount = (obj) => {
|
|
27
|
+
//Update Auto mount Service Account
|
|
28
|
+
obj.spec.template.spec.automountServiceAccountToken = false;
|
|
29
|
+
};
|
|
30
|
+
const applySecurity = (obj) => {
|
|
31
|
+
//Update Security Context
|
|
32
|
+
if (obj.spec.template.spec.securityContext)
|
|
33
|
+
obj.spec.template.spec.securityContext = {
|
|
34
|
+
...exports.defaultSecurityContext,
|
|
35
|
+
...obj.spec.template.spec.securityContext,
|
|
36
|
+
};
|
|
37
|
+
else
|
|
38
|
+
obj.spec.template.spec.securityContext = exports.defaultSecurityContext;
|
|
39
|
+
const containers = obj.spec.template.spec.containers;
|
|
40
|
+
containers.forEach((c) => {
|
|
41
|
+
//Update Pod Security Context
|
|
42
|
+
if (c.securityContext)
|
|
43
|
+
c.securityContext = {
|
|
44
|
+
...exports.defaultPodSecurityContext,
|
|
45
|
+
...c.securityContext,
|
|
46
|
+
};
|
|
47
|
+
else
|
|
48
|
+
c.securityContext = exports.defaultPodSecurityContext;
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
const applyResourceLimits = (obj) => {
|
|
52
|
+
//Update the resources
|
|
53
|
+
const containers = obj.spec.template.spec.containers;
|
|
54
|
+
containers.forEach((c) => {
|
|
55
|
+
//Update the resources
|
|
56
|
+
if (c.resources)
|
|
57
|
+
c.resources = {
|
|
58
|
+
...exports.defaultResources,
|
|
59
|
+
...c.resources,
|
|
60
|
+
};
|
|
61
|
+
else
|
|
62
|
+
c.resources = exports.defaultResources;
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
const updateRevisionHistoryLimit = (obj) => {
|
|
66
|
+
if (!obj.spec.revisionHistoryLimit) {
|
|
67
|
+
obj.spec.revisionHistoryLimit = 1;
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
//Apply Security Context and Resources
|
|
71
|
+
const applyDeploymentRules = (obj, options = { disableServiceAccount: true }) => {
|
|
72
|
+
if (!['DaemonSet', 'Deployment', 'StatefulSet', 'Job', 'CronJob'].includes(obj.kind))
|
|
73
|
+
return obj;
|
|
74
|
+
if (options.ignoredKinds?.includes(obj.kind)) {
|
|
75
|
+
console.warn('applyDeploymentRules ignored:', `${obj.kind}-${obj.metadata.name}`);
|
|
76
|
+
return obj;
|
|
77
|
+
}
|
|
78
|
+
//Update the resources
|
|
79
|
+
applyResourceLimits(obj);
|
|
80
|
+
updateRevisionHistoryLimit(obj);
|
|
81
|
+
// disableAutoMountServiceAccount
|
|
82
|
+
if (options.disableServiceAccount &&
|
|
83
|
+
['Deployment', 'Job', 'CronJob'].includes(obj.kind)) {
|
|
84
|
+
disableAutoMountServiceAccount(obj);
|
|
85
|
+
}
|
|
86
|
+
if (!options.ignoreSecurityContext) {
|
|
87
|
+
//Update Security Context
|
|
88
|
+
applySecurity(obj);
|
|
89
|
+
}
|
|
90
|
+
return obj;
|
|
91
|
+
};
|
|
92
|
+
exports.applyDeploymentRules = applyDeploymentRules;
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VjdXJpdHlSdWxlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9LdWJlWC9Db3JlL1NlY3VyaXR5UnVsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMENBQTBEO0FBQWpELCtHQUFBLHNCQUFzQixPQUFBO0FBRWxCLFFBQUEsc0JBQXNCLEdBQUc7SUFDcEMsU0FBUyxFQUFFLElBQUk7SUFDZixVQUFVLEVBQUUsSUFBSTtJQUNoQixPQUFPLEVBQUUsSUFBSTtDQUNkLENBQUM7QUFFVyxRQUFBLHlCQUF5QixHQUFHO0lBQ3ZDLHNCQUFzQixFQUFFLEtBQUs7SUFDN0IsVUFBVSxFQUFFLEtBQUs7SUFDakIsWUFBWSxFQUFFLElBQUk7SUFDbEIsd0JBQXdCLEVBQUUsS0FBSztJQUMvQixtQkFBbUIsRUFBRSxnQkFBZ0I7SUFDckMsWUFBWSxFQUFFO1FBQ1osR0FBRyxFQUFFLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQztRQUM5QixJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUM7S0FDZDtDQUNGLENBQUM7QUFFVyxRQUFBLGdCQUFnQixHQUFHO0lBQzlCLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRTtJQUN4QyxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUU7Q0FDMUMsQ0FBQztBQUVGLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxHQUFRLEVBQUUsRUFBRTtJQUNsRCxtQ0FBbUM7SUFDbkMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLDRCQUE0QixHQUFHLEtBQUssQ0FBQztBQUM5RCxDQUFDLENBQUM7QUFFRixNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQVEsRUFBRSxFQUFFO0lBQ2pDLHlCQUF5QjtJQUN6QixJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FB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
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { DefaultK8sArgs } from '../../types';
|
|
2
|
+
import { Input } from '@pulumi/pulumi';
|
|
3
|
+
export declare const defaultBlobFuseMountOptions: string[];
|
|
4
|
+
export declare const defaultBlobNfsMountOptions: string[];
|
|
5
|
+
export interface AzureBlobStorageClassProps extends Omit<DefaultK8sArgs, 'name' | 'namespace'> {
|
|
6
|
+
isDefault?: boolean;
|
|
7
|
+
skuName: 'Premium_LRS' | 'Standard_LRS' | 'StandardSSD_LRS';
|
|
8
|
+
storageAccount: Input<string>;
|
|
9
|
+
fuse?: {
|
|
10
|
+
mountOptions?: Input<string>[];
|
|
11
|
+
};
|
|
12
|
+
nfs?: {
|
|
13
|
+
mountOptions?: Input<string>[];
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
declare const _default: ({ fuse, nfs, storageAccount, skuName, isDefault, ...others }: AzureBlobStorageClassProps) => {
|
|
17
|
+
fuseStorageClass: import("@pulumi/kubernetes/storage/v1/storageClass").StorageClass | undefined;
|
|
18
|
+
nfsStorageClass: import("@pulumi/kubernetes/storage/v1/storageClass").StorageClass | undefined;
|
|
19
|
+
};
|
|
20
|
+
export default _default;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defaultBlobNfsMountOptions = exports.defaultBlobFuseMountOptions = void 0;
|
|
4
|
+
const k8s = require("@pulumi/kubernetes");
|
|
5
|
+
const StackEnv_1 = require("../../../Common/StackEnv");
|
|
6
|
+
exports.defaultBlobFuseMountOptions = [
|
|
7
|
+
'-o allow_other',
|
|
8
|
+
'--file-cache-timeout-in-seconds=120',
|
|
9
|
+
'--use-attr-cache=true',
|
|
10
|
+
'--cancel-list-on-mount-seconds=10',
|
|
11
|
+
'-o attr_timeout=120',
|
|
12
|
+
'-o entry_timeout=120',
|
|
13
|
+
'-o negative_timeout=120',
|
|
14
|
+
'--log-level=LOG_WARNING',
|
|
15
|
+
'--cache-size-mb=1000',
|
|
16
|
+
];
|
|
17
|
+
exports.defaultBlobNfsMountOptions = [
|
|
18
|
+
'-o allow_other',
|
|
19
|
+
'--file-cache-timeout-in-seconds=120',
|
|
20
|
+
'--use-attr-cache=true',
|
|
21
|
+
'--cancel-list-on-mount-seconds=10',
|
|
22
|
+
'-o attr_timeout=120',
|
|
23
|
+
'-o entry_timeout=120',
|
|
24
|
+
'-o negative_timeout=120',
|
|
25
|
+
'--log-level=LOG_WARNING',
|
|
26
|
+
'--cache-size-mb=1000',
|
|
27
|
+
];
|
|
28
|
+
exports.default = ({ fuse, nfs, storageAccount, skuName, isDefault, ...others }) => {
|
|
29
|
+
const nfsname = `${StackEnv_1.organization}-azureblob-nfs-${skuName.replace('_', '-')}`.toLowerCase();
|
|
30
|
+
const fusename = `${StackEnv_1.organization}-azureblob-fuse-${skuName.replace('_', '-')}`.toLowerCase();
|
|
31
|
+
const provisioner = 'blob.csi.azure.com';
|
|
32
|
+
let fuseStorageClass = undefined;
|
|
33
|
+
let nfsStorageClass = undefined;
|
|
34
|
+
if (fuse)
|
|
35
|
+
fuseStorageClass = new k8s.storage.v1.StorageClass(fusename, {
|
|
36
|
+
metadata: {
|
|
37
|
+
name: fusename,
|
|
38
|
+
annotations: isDefault
|
|
39
|
+
? {
|
|
40
|
+
'storageclass.kubernetes.io/is-default-class': 'true',
|
|
41
|
+
}
|
|
42
|
+
: undefined,
|
|
43
|
+
},
|
|
44
|
+
provisioner,
|
|
45
|
+
allowVolumeExpansion: true,
|
|
46
|
+
reclaimPolicy: 'Delete',
|
|
47
|
+
volumeBindingMode: 'Immediate',
|
|
48
|
+
parameters: {
|
|
49
|
+
storageAccount,
|
|
50
|
+
skuName,
|
|
51
|
+
},
|
|
52
|
+
mountOptions: exports.defaultBlobFuseMountOptions,
|
|
53
|
+
}, others);
|
|
54
|
+
if (nfs)
|
|
55
|
+
nfsStorageClass = new k8s.storage.v1.StorageClass(nfsname, {
|
|
56
|
+
metadata: {
|
|
57
|
+
name: nfsname,
|
|
58
|
+
annotations: isDefault
|
|
59
|
+
? {
|
|
60
|
+
'storageclass.kubernetes.io/is-default-class': 'true',
|
|
61
|
+
}
|
|
62
|
+
: undefined,
|
|
63
|
+
},
|
|
64
|
+
provisioner,
|
|
65
|
+
allowVolumeExpansion: true,
|
|
66
|
+
reclaimPolicy: 'Delete',
|
|
67
|
+
volumeBindingMode: 'Immediate',
|
|
68
|
+
parameters: {
|
|
69
|
+
protocol: 'nfs',
|
|
70
|
+
storageAccount,
|
|
71
|
+
skuName,
|
|
72
|
+
},
|
|
73
|
+
//mountOptions: defaultBlobFuseMountOptions,
|
|
74
|
+
}, others);
|
|
75
|
+
return { fuseStorageClass, nfsStorageClass };
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXp1cmVCbG9iLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL0t1YmVYL0NvcmUvU3RvcmFnZUNsYXNzL2F6dXJlQmxvYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwwQ0FBMEM7QUFHMUMsdURBQXdEO0FBRTNDLFFBQUEsMkJBQTJCLEdBQUc7SUFDekMsZ0JBQWdCO0lBQ2hCLHFDQUFxQztJQUNyQyx1QkFBdUI7SUFDdkIsbUNBQW1DO0lBQ25DLHFCQUFxQjtJQUNyQixzQkFBc0I7SUFDdEIseUJBQXlCO0lBQ3pCLHlCQUF5QjtJQUN6QixzQkFBc0I7Q0FDdkIsQ0FBQztBQUVXLFFBQUEsMEJBQTBCLEdBQUc7SUFDeEMsZ0JBQWdCO0lBQ2hCLHFDQUFxQztJQUNyQyx1QkFBdUI7SUFDdkIsbUNBQW1DO0lBQ25DLHFCQUFxQjtJQUNyQixzQkFBc0I7SUFDdEIseUJBQXlCO0lBQ3pCLHlCQUF5QjtJQUN6QixzQkFBc0I7Q0FDdkIsQ0FBQztBQWVGLGtCQUFlLENBQUMsRUFDZCxJQUFJLEVBQ0osR0FBRyxFQUNILGNBQWMsRUFDZCxPQUFPLEVBQ1AsU0FBUyxFQUNULEdBQUcsTUFBTSxFQUNrQixFQUFFLEVBQUU7SUFDL0IsTUFBTSxPQUFPLEdBQUcsR0FBRyx1QkFBWSxrQkFBa0IsT0FBTyxDQUFDLE9BQU8sQ0FDOUQsR0FBRyxFQUNILEdBQUcsQ0FDSixFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEIsTUFBTSxRQUFRLEdBQUcsR0FBRyx1QkFBWSxtQkFBbUIsT0FBTyxDQUFDLE9BQU8sQ0FDaEUsR0FBRyxFQUNILEdBQUcsQ0FDSixFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7SUFFbEIsTUFBTSxXQUFXLEdBQUcsb0JBQW9CLENBQUM7SUFFekMsSUFBSSxnQkFBZ0IsR0FBNEMsU0FBUyxDQUFDO0lBQzFFLElBQUksZUFBZSxHQUE0QyxTQUFTLENBQUM7SUFFekUsSUFBSSxJQUFJO1FBQ04sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQ2hELFFBQVEsRUFDUjtZQUNFLFFBQVEsRUFBRTtnQkFDUixJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsU0FBUztvQkFDcEIsQ0FBQyxDQUFDO3dCQUNFLDZDQUE2QyxFQUFFLE1BQU07cUJBQ3REO29CQUNILENBQUMsQ0FBQyxTQUFTO2FBQ2Q7WUFDRCxXQUFXO1lBQ1gsb0JBQW9CLEVBQUUsSUFBSTtZQUMxQixhQUFhLEVBQUUsUUFBUTtZQUN2QixpQkFBaUIsRUFBRSxXQUFXO1lBQzlCLFVBQVUsRUFBRTtnQkFDVixjQUFjO2dCQUNkLE9BQU87YUFDUjtZQUNELFlBQVksRUFBRSxtQ0FBMkI7U0FDMUMsRUFDRCxNQUFNLENBQ1AsQ0FBQztJQUVKLElBQUksR0FBRztRQUNMLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FDL0MsT0FBTyxFQUNQO1lBQ0UsUUFBUSxFQUFFO2dCQUNSLElBQUksRUFBRSxPQUFPO2dCQUNiLFdBQVcsRUFBRSxTQUFTO29CQUNwQixDQUFDLENBQUM7d0JBQ0UsNkNBQTZDLEVBQUUsTUFBTTtxQkFDdEQ7b0JBQ0gsQ0FBQyxDQUFDLFNBQVM7YUFDZDtZQUNELFdBQVc7WUFDWCxvQkFBb0IsRUFBRSxJQUFJO1lBQzFCLGFBQWEsRUFBRSxRQUFRO1lBQ3ZCLGlCQUFpQixFQUFFLFdBQVc7WUFDOUIsVUFBVSxFQUFFO2dCQUNWLFFBQVEsRUFBRSxLQUFLO2dCQUNmLGNBQWM7Z0JBQ2QsT0FBTzthQUNSO1lBQ0QsNENBQTRDO1NBQzdDLEVBQ0QsTUFBTSxDQUNQLENBQUM7SUFFSixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLENBQUM7QUFDL0MsQ0FBQyxDQUFDIn0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { DefaultK8sArgs } from '../../types';
|
|
2
|
+
import { Input } from '@pulumi/pulumi';
|
|
3
|
+
/** Sample mount options of the AzureFile*/
|
|
4
|
+
export type RunAsType = {
|
|
5
|
+
runAsUser: number;
|
|
6
|
+
runAsGroup: number;
|
|
7
|
+
};
|
|
8
|
+
export declare const defaultAzureFileMountOptions: string[];
|
|
9
|
+
export declare const getAzureFileMountOptions: ({ runAsUser, runAsGroup, }: RunAsType) => string[];
|
|
10
|
+
export interface AzureFileStorageClassProps extends Omit<DefaultK8sArgs, 'name' | 'namespace'> {
|
|
11
|
+
isDefault?: boolean;
|
|
12
|
+
storageAccount: Input<string>;
|
|
13
|
+
skuName: 'Premium_LRS' | 'Standard_LRS' | 'StandardSSD_LRS';
|
|
14
|
+
mountOptions?: RunAsType;
|
|
15
|
+
}
|
|
16
|
+
declare const _default: ({ skuName, mountOptions, storageAccount, isDefault, ...others }: AzureFileStorageClassProps) => import("@pulumi/kubernetes/storage/v1/storageClass").StorageClass;
|
|
17
|
+
export default _default;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAzureFileMountOptions = exports.defaultAzureFileMountOptions = void 0;
|
|
4
|
+
const k8s = require("@pulumi/kubernetes");
|
|
5
|
+
const StackEnv_1 = require("../../../Common/StackEnv");
|
|
6
|
+
exports.defaultAzureFileMountOptions = [
|
|
7
|
+
'mfsymlinks',
|
|
8
|
+
'cache=strict',
|
|
9
|
+
'nosharesock',
|
|
10
|
+
];
|
|
11
|
+
const getAzureFileMountOptions = ({ runAsUser, runAsGroup, }) => [
|
|
12
|
+
'dir_mode=0777',
|
|
13
|
+
'file_mode=0777',
|
|
14
|
+
`uid=${runAsUser}`,
|
|
15
|
+
`gid=${runAsGroup}`,
|
|
16
|
+
'mfsymlinks',
|
|
17
|
+
'cache=strict',
|
|
18
|
+
'nosharesock',
|
|
19
|
+
];
|
|
20
|
+
exports.getAzureFileMountOptions = getAzureFileMountOptions;
|
|
21
|
+
exports.default = ({ skuName, mountOptions, storageAccount, isDefault, ...others }) => {
|
|
22
|
+
const name = `${StackEnv_1.organization}-azurefile-${skuName.replace('_', '-')}`.toLowerCase();
|
|
23
|
+
return new k8s.storage.v1.StorageClass(name, {
|
|
24
|
+
metadata: {
|
|
25
|
+
name,
|
|
26
|
+
annotations: isDefault
|
|
27
|
+
? {
|
|
28
|
+
'storageclass.kubernetes.io/is-default-class': 'true',
|
|
29
|
+
}
|
|
30
|
+
: undefined,
|
|
31
|
+
},
|
|
32
|
+
provisioner: 'file.csi.azure.com',
|
|
33
|
+
allowVolumeExpansion: true,
|
|
34
|
+
reclaimPolicy: 'Delete',
|
|
35
|
+
volumeBindingMode: 'Immediate',
|
|
36
|
+
parameters: {
|
|
37
|
+
storageAccount,
|
|
38
|
+
skuName,
|
|
39
|
+
},
|
|
40
|
+
mountOptions: mountOptions
|
|
41
|
+
? (0, exports.getAzureFileMountOptions)(mountOptions)
|
|
42
|
+
: exports.defaultAzureFileMountOptions,
|
|
43
|
+
}, others);
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXp1cmVGaWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL0t1YmVYL0NvcmUvU3RvcmFnZUNsYXNzL2F6dXJlRmlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwwQ0FBMEM7QUFHMUMsdURBQXdEO0FBUTNDLFFBQUEsNEJBQTRCLEdBQUc7SUFDMUMsWUFBWTtJQUNaLGNBQWM7SUFDZCxhQUFhO0NBQ2QsQ0FBQztBQUNLLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxFQUN2QyxTQUFTLEVBQ1QsVUFBVSxHQUNBLEVBQUUsRUFBRSxDQUFDO0lBQ2YsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQixPQUFPLFNBQVMsRUFBRTtJQUNsQixPQUFPLFVBQVUsRUFBRTtJQUNuQixZQUFZO0lBQ1osY0FBYztJQUNkLGFBQWE7Q0FDZCxDQUFDO0FBWFcsUUFBQSx3QkFBd0IsNEJBV25DO0FBVUYsa0JBQWUsQ0FBQyxFQUNkLE9BQU8sRUFDUCxZQUFZLEVBQ1osY0FBYyxFQUNkLFNBQVMsRUFDVCxHQUFHLE1BQU0sRUFDa0IsRUFBRSxFQUFFO0lBQy9CLE1BQU0sSUFBSSxHQUFHLEdBQUcsdUJBQVksY0FBYyxPQUFPLENBQUMsT0FBTyxDQUN2RCxHQUFHLEVBQ0gsR0FBRyxDQUNKLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUVsQixPQUFPLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUNwQyxJQUFJLEVBQ0o7UUFDRSxRQUFRLEVBQUU7WUFDUixJQUFJO1lBQ0osV0FBVyxFQUFFLFNBQVM7Z0JBQ3BCLENBQUMsQ0FBQztvQkFDRSw2Q0FBNkMsRUFBRSxNQUFNO2lCQUN0RDtnQkFDSCxDQUFDLENBQUMsU0FBUztTQUNkO1FBQ0QsV0FBVyxFQUFFLG9CQUFvQjtRQUNqQyxvQkFBb0IsRUFBRSxJQUFJO1FBQzFCLGFBQWEsRUFBRSxRQUFRO1FBQ3ZCLGlCQUFpQixFQUFFLFdBQVc7UUFDOUIsVUFBVSxFQUFFO1lBQ1YsY0FBYztZQUNkLE9BQU87U0FDUjtRQUNELFlBQVksRUFBRSxZQUFZO1lBQ3hCLENBQUMsQ0FBQyxJQUFBLGdDQUF3QixFQUFDLFlBQVksQ0FBQztZQUN4QyxDQUFDLENBQUMsb0NBQTRCO0tBQ2pDLEVBQ0QsTUFBTSxDQUNQLENBQUM7QUFDSixDQUFDLENBQUMifQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AzureFileStorageClassProps, RunAsType } from './azureFile';
|
|
2
|
+
import { AzureBlobStorageClassProps } from './azureBlob';
|
|
3
|
+
export interface StorageClassProps extends Omit<AzureFileStorageClassProps, 'mountOptions'>, Pick<AzureBlobStorageClassProps, 'fuse' | 'nfs'> {
|
|
4
|
+
azureFile?: {
|
|
5
|
+
mountOptions?: RunAsType;
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
declare const _default: ({ azureFile, fuse, nfs, ...others }: StorageClassProps) => {
|
|
9
|
+
azureFileStorageClass: import("@pulumi/kubernetes/storage/v1/storageClass").StorageClass | undefined;
|
|
10
|
+
azureBlobFuseStorageClass: import("@pulumi/kubernetes/storage/v1/storageClass").StorageClass | undefined;
|
|
11
|
+
azureBlobNfsStorageClass: import("@pulumi/kubernetes/storage/v1/storageClass").StorageClass | undefined;
|
|
12
|
+
};
|
|
13
|
+
export default _default;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const azureFile_1 = require("./azureFile");
|
|
4
|
+
const azureBlob_1 = require("./azureBlob");
|
|
5
|
+
exports.default = ({ azureFile, fuse, nfs, ...others }) => {
|
|
6
|
+
let azureFileStorageClass = undefined;
|
|
7
|
+
let azureBlobFuseStorageClass = undefined;
|
|
8
|
+
let azureBlobNfsStorageClass = undefined;
|
|
9
|
+
if (azureFile)
|
|
10
|
+
azureFileStorageClass = (0, azureFile_1.default)({
|
|
11
|
+
...others,
|
|
12
|
+
mountOptions: azureFile.mountOptions,
|
|
13
|
+
});
|
|
14
|
+
if (fuse || nfs) {
|
|
15
|
+
const rs = (0, azureBlob_1.default)({ ...others, fuse, nfs });
|
|
16
|
+
azureBlobFuseStorageClass = rs.fuseStorageClass;
|
|
17
|
+
azureBlobNfsStorageClass = rs.nfsStorageClass;
|
|
18
|
+
}
|
|
19
|
+
return {
|
|
20
|
+
azureFileStorageClass,
|
|
21
|
+
azureBlobFuseStorageClass,
|
|
22
|
+
azureBlobNfsStorageClass,
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvS3ViZVgvQ29yZS9TdG9yYWdlQ2xhc3MvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSwyQ0FBZ0Q7QUFDaEQsMkNBQWdEO0FBV2hELGtCQUFlLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sRUFBcUIsRUFBRSxFQUFFO0lBQ3hFLElBQUkscUJBQXFCLEdBQ3ZCLFNBQVMsQ0FBQztJQUNaLElBQUkseUJBQXlCLEdBQzNCLFNBQVMsQ0FBQztJQUNaLElBQUksd0JBQXdCLEdBQzFCLFNBQVMsQ0FBQztJQUVaLElBQUksU0FBUztRQUNYLHFCQUFxQixHQUFHLElBQUEsbUJBQXFCLEVBQUM7WUFDNUMsR0FBRyxNQUFNO1lBQ1QsWUFBWSxFQUFFLFNBQVMsQ0FBQyxZQUFZO1NBQ3JDLENBQUMsQ0FBQztJQUVMLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sRUFBRSxHQUFHLElBQUEsbUJBQXFCLEVBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMzRCx5QkFBeUIsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7UUFDaEQsd0JBQXdCLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQztJQUNoRCxDQUFDO0lBRUQsT0FBTztRQUNMLHFCQUFxQjtRQUNyQix5QkFBeUI7UUFDekIsd0JBQXdCO0tBQ3pCLENBQUM7QUFDSixDQUFDLENBQUMifQ==
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { MonitoringProps } from './Monitoring';
|
|
2
|
+
import { CertManagerProps } from './CertManager';
|
|
3
|
+
import { Input, Resource } from '@pulumi/pulumi';
|
|
4
|
+
import { StorageClassProps } from './StorageClass';
|
|
5
|
+
import { K8sArgs } from '../types';
|
|
6
|
+
import { MetalLBProps } from './LoadBalancer/MetalLB';
|
|
7
|
+
import { LonghornProps } from '../Storage/Longhorn';
|
|
8
|
+
interface NginxItemProps {
|
|
9
|
+
name: string;
|
|
10
|
+
publicIpAddress?: string;
|
|
11
|
+
/**Use this in case the ingress behind a firewall*/
|
|
12
|
+
internalIpAddress?: string;
|
|
13
|
+
/**Expose TCP Ports {port: dnsName} */
|
|
14
|
+
tcp?: {
|
|
15
|
+
[key: number]: string;
|
|
16
|
+
};
|
|
17
|
+
/**Expose UDP ports {port: dnsName} */
|
|
18
|
+
udp?: {
|
|
19
|
+
[key: number]: string;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
interface NginxProps {
|
|
23
|
+
namespace: string;
|
|
24
|
+
version?: string;
|
|
25
|
+
replicaCount?: number;
|
|
26
|
+
vnetResourceGroup?: string;
|
|
27
|
+
internalIngress?: boolean;
|
|
28
|
+
allowSnippetAnnotations?: boolean;
|
|
29
|
+
public?: NginxItemProps & {
|
|
30
|
+
forceUseIngressClass?: boolean;
|
|
31
|
+
};
|
|
32
|
+
private?: Omit<NginxItemProps, 'publicIpAddress'>;
|
|
33
|
+
}
|
|
34
|
+
interface Props extends K8sArgs {
|
|
35
|
+
namespaces: Array<{
|
|
36
|
+
name: string;
|
|
37
|
+
labels?: {
|
|
38
|
+
[key: string]: string;
|
|
39
|
+
};
|
|
40
|
+
}>;
|
|
41
|
+
metalLb?: Omit<MetalLBProps, 'provider' | 'dependsOn'>;
|
|
42
|
+
longhorn?: Omit<LonghornProps, 'provider' | 'dependsOn'>;
|
|
43
|
+
nginx?: NginxProps;
|
|
44
|
+
monitoring?: Omit<MonitoringProps, 'provider' | 'dependsOn'>;
|
|
45
|
+
certManager?: Omit<CertManagerProps, 'namespace' | 'provider' | 'dependsOn'>;
|
|
46
|
+
storageClasses?: {
|
|
47
|
+
[key: string]: Omit<StorageClassProps, 'provider' | 'name'>;
|
|
48
|
+
};
|
|
49
|
+
enableStaticIpEgress?: {
|
|
50
|
+
publicIpAddress?: Input<string>;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
declare const _default: ({ namespaces, provider, dependsOn, metalLb, longhorn, nginx, monitoring, certManager, storageClasses, }: Props) => Promise<{
|
|
54
|
+
namespacesList: import("@pulumi/kubernetes/core/v1/namespace").Namespace[];
|
|
55
|
+
resources: Resource[];
|
|
56
|
+
}>;
|
|
57
|
+
export default _default;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const Namespace_1 = require("./Namespace");
|
|
4
|
+
const Nginx_1 = require("./Nginx");
|
|
5
|
+
const Monitoring_1 = require("./Monitoring");
|
|
6
|
+
const CertManager_1 = require("./CertManager");
|
|
7
|
+
const StorageClass_1 = require("./StorageClass");
|
|
8
|
+
const MetalLB_1 = require("./LoadBalancer/MetalLB");
|
|
9
|
+
const Longhorn_1 = require("../Storage/Longhorn");
|
|
10
|
+
exports.default = async ({ namespaces, provider, dependsOn, metalLb, longhorn, nginx, monitoring, certManager, storageClasses, }) => {
|
|
11
|
+
//Create Namespaces
|
|
12
|
+
const namespacesList = namespaces.map((n) => (0, Namespace_1.default)({ ...n, provider }));
|
|
13
|
+
const resources = new Array();
|
|
14
|
+
if (metalLb) {
|
|
15
|
+
const lb = (0, MetalLB_1.default)({ ...metalLb, provider, dependsOn });
|
|
16
|
+
resources.push(lb);
|
|
17
|
+
}
|
|
18
|
+
if (nginx) {
|
|
19
|
+
const rs = nginxCreator({ ...nginx, provider, dependsOn: resources });
|
|
20
|
+
if (rs.publicIngress)
|
|
21
|
+
resources.push(rs.publicIngress);
|
|
22
|
+
if (rs.privateIngress)
|
|
23
|
+
resources.push(rs.privateIngress);
|
|
24
|
+
}
|
|
25
|
+
if (storageClasses) {
|
|
26
|
+
Object.keys(storageClasses).forEach((k) => {
|
|
27
|
+
const c = storageClasses[k];
|
|
28
|
+
if (!c)
|
|
29
|
+
return undefined;
|
|
30
|
+
return (0, StorageClass_1.default)({ provider, ...c });
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
if (certManager) {
|
|
34
|
+
resources.push((0, CertManager_1.default)({
|
|
35
|
+
...certManager,
|
|
36
|
+
provider,
|
|
37
|
+
dependsOn: resources,
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
if (monitoring) {
|
|
41
|
+
resources.push(await (0, Monitoring_1.default)({ ...monitoring, provider, dependsOn }));
|
|
42
|
+
}
|
|
43
|
+
if (longhorn) {
|
|
44
|
+
resources.push((0, Longhorn_1.default)({ ...longhorn, provider, dependsOn }));
|
|
45
|
+
}
|
|
46
|
+
return { namespacesList, resources };
|
|
47
|
+
};
|
|
48
|
+
const nginxCreator = ({ namespace, version, replicaCount, vnetResourceGroup, internalIngress, allowSnippetAnnotations, provider, ...info }) => {
|
|
49
|
+
//Namespace
|
|
50
|
+
const ns = (0, Namespace_1.default)({ name: namespace, provider });
|
|
51
|
+
let privateIngress;
|
|
52
|
+
let publicIngress;
|
|
53
|
+
if (info.public) {
|
|
54
|
+
//Public
|
|
55
|
+
publicIngress = (0, Nginx_1.default)({
|
|
56
|
+
name: info.public.name,
|
|
57
|
+
version,
|
|
58
|
+
namespace,
|
|
59
|
+
replicaCount,
|
|
60
|
+
allowSnippetAnnotations,
|
|
61
|
+
useIngressClassOnly: info.public.forceUseIngressClass || info.private !== undefined,
|
|
62
|
+
tcp: info.public.tcp,
|
|
63
|
+
udp: info.public.udp,
|
|
64
|
+
network: {
|
|
65
|
+
internalIngress,
|
|
66
|
+
vnetResourceGroup,
|
|
67
|
+
loadBalancerIP: info.public.publicIpAddress || info.public.internalIpAddress,
|
|
68
|
+
},
|
|
69
|
+
provider,
|
|
70
|
+
dependsOn: ns,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
if (info.private) {
|
|
74
|
+
//Private
|
|
75
|
+
privateIngress = (0, Nginx_1.default)({
|
|
76
|
+
name: info.private.name,
|
|
77
|
+
version,
|
|
78
|
+
namespace,
|
|
79
|
+
useIngressClassOnly: true,
|
|
80
|
+
allowSnippetAnnotations,
|
|
81
|
+
tcp: info.private.tcp,
|
|
82
|
+
udp: info.private.udp,
|
|
83
|
+
network: {
|
|
84
|
+
internalIngress,
|
|
85
|
+
vnetResourceGroup,
|
|
86
|
+
loadBalancerIP: info.private.internalIpAddress,
|
|
87
|
+
},
|
|
88
|
+
provider,
|
|
89
|
+
dependsOn: ns,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
return { publicIngress, privateIngress };
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvS3ViZVgvQ29yZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDJDQUFvQztBQUNwQyxtQ0FBNEI7QUFDNUIsNkNBQTJEO0FBQzNELCtDQUE4RDtBQUU5RCxpREFBaUU7QUFFakUsb0RBQStEO0FBQy9ELGtEQUE4RDtBQTJDOUQsa0JBQWUsS0FBSyxFQUFFLEVBQ3BCLFVBQVUsRUFDVixRQUFRLEVBQ1IsU0FBUyxFQUNULE9BQU8sRUFDUCxRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsRUFDVixXQUFXLEVBQ1gsY0FBYyxHQUNSLEVBQUUsRUFBRTtJQUNWLG1CQUFtQjtJQUNuQixNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFBLG1CQUFTLEVBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUUsTUFBTSxTQUFTLEdBQUcsSUFBSSxLQUFLLEVBQVksQ0FBQztJQUV4QyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ1osTUFBTSxFQUFFLEdBQUcsSUFBQSxpQkFBTyxFQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDeEQsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNWLE1BQU0sRUFBRSxHQUFHLFlBQVksQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUN0RSxJQUFJLEVBQUUsQ0FBQyxhQUFhO1lBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdkQsSUFBSSxFQUFFLENBQUMsY0FBYztZ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
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { MySqlProps } from '../types';
|
|
2
|
+
import * as k8s from '@pulumi/kubernetes';
|
|
3
|
+
interface MariaDbProps extends MySqlProps {
|
|
4
|
+
}
|
|
5
|
+
declare const _default: ({ name, namespace, version, vaultInfo, auth, storageClassName, provider, }: MariaDbProps) => {
|
|
6
|
+
mariadb: k8s.helm.v3.Chart;
|
|
7
|
+
host: import("@pulumi/pulumi").Output<string>;
|
|
8
|
+
username: string;
|
|
9
|
+
password: import("@pulumi/pulumi").Input<string>;
|
|
10
|
+
};
|
|
11
|
+
export default _default;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const Random_1 = require("../../Core/Random");
|
|
4
|
+
const k8s = require("@pulumi/kubernetes");
|
|
5
|
+
const pulumi_1 = require("@pulumi/pulumi");
|
|
6
|
+
exports.default = ({ name = 'mariadb', namespace, version, vaultInfo, auth, storageClassName, provider, }) => {
|
|
7
|
+
const password = auth?.rootPass
|
|
8
|
+
? auth.rootPass
|
|
9
|
+
: (0, Random_1.randomPassword)({
|
|
10
|
+
name,
|
|
11
|
+
length: 25,
|
|
12
|
+
options: { special: false },
|
|
13
|
+
vaultInfo,
|
|
14
|
+
}).result;
|
|
15
|
+
const mariadb = new k8s.helm.v3.Chart(name, {
|
|
16
|
+
namespace,
|
|
17
|
+
chart: 'mariadb',
|
|
18
|
+
fetchOpts: { repo: 'https://charts.bitnami.com/bitnami' },
|
|
19
|
+
values: {
|
|
20
|
+
global: {
|
|
21
|
+
storageClass: storageClassName,
|
|
22
|
+
},
|
|
23
|
+
image: { tag: version },
|
|
24
|
+
auth: {
|
|
25
|
+
rootPassword: password,
|
|
26
|
+
password,
|
|
27
|
+
username: name,
|
|
28
|
+
database: name,
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
}, { provider });
|
|
32
|
+
return {
|
|
33
|
+
mariadb,
|
|
34
|
+
host: (0, pulumi_1.interpolate) `${name}.${namespace}.svc.cluster.local`,
|
|
35
|
+
username: name,
|
|
36
|
+
password,
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFyaWFEYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9LdWJlWC9EYXRhYmFzZXMvTWFyaWFEYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLDhDQUFtRDtBQUNuRCwwQ0FBMEM7QUFDMUMsMkNBQTZDO0FBSTdDLGtCQUFlLENBQUMsRUFDZCxJQUFJLEdBQUcsU0FBUyxFQUNoQixTQUFTLEVBQ1QsT0FBTyxFQUNQLFNBQVMsRUFDVCxJQUFJLEVBQ0osZ0JBQWdCLEVBQ2hCLFFBQVEsR0FDSyxFQUFFLEVBQUU7SUFDakIsTUFBTSxRQUFRLEdBQUcsSUFBSSxFQUFFLFFBQVE7UUFDN0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRO1FBQ2YsQ0FBQyxDQUFDLElBQUEsdUJBQWMsRUFBQztZQUNiLElBQUk7WUFDSixNQUFNLEVBQUUsRUFBRTtZQUNWLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUU7WUFDM0IsU0FBUztTQUNWLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFFZCxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FDbkMsSUFBSSxFQUNKO1FBQ0UsU0FBUztRQUNULEtBQUssRUFBRSxTQUFTO1FBQ2hCLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxvQ0FBb0MsRUFBRTtRQUV6RCxNQUFNLEVBQUU7WUFDTixNQUFNLEVBQUU7Z0JBQ04sWUFBWSxFQUFFLGdCQUFnQjthQUMvQjtZQUNELEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUU7WUFDdkIsSUFBSSxFQUFFO2dCQUNKLFlBQVksRUFBRSxRQUFRO2dCQUN0QixRQUFRO2dCQUNSLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFFBQVEsRUFBRSxJQUFJO2FBQ2Y7U0FDRjtLQUNGLEVBQ0QsRUFBRSxRQUFRLEVBQUUsQ0FDYixDQUFDO0lBRUYsT0FBTztRQUNMLE9BQU87UUFDUCxJQUFJLEVBQUUsSUFBQSxvQkFBVyxFQUFBLEdBQUcsSUFBSSxJQUFJLFNBQVMsb0JBQW9CO1FBQ3pELFFBQVEsRUFBRSxJQUFJO1FBQ2QsUUFBUTtLQUNULENBQUM7QUFDSixDQUFDLENBQUMifQ==
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { MySqlProps } from '../types';
|
|
2
|
+
import * as k8s from '@pulumi/kubernetes';
|
|
3
|
+
interface MariaDbProps extends MySqlProps {
|
|
4
|
+
}
|
|
5
|
+
declare const _default: ({ name, namespace, version, auth, vaultInfo, storageClassName, provider, }: MariaDbProps) => {
|
|
6
|
+
mysql: k8s.helm.v3.Chart;
|
|
7
|
+
host: import("@pulumi/pulumi").Output<string>;
|
|
8
|
+
username: string;
|
|
9
|
+
password: import("@pulumi/pulumi").Input<string>;
|
|
10
|
+
};
|
|
11
|
+
export default _default;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const Random_1 = require("../../Core/Random");
|
|
4
|
+
const k8s = require("@pulumi/kubernetes");
|
|
5
|
+
const pulumi_1 = require("@pulumi/pulumi");
|
|
6
|
+
exports.default = ({ name = 'mysql', namespace, version, auth, vaultInfo, storageClassName, provider, }) => {
|
|
7
|
+
const password = auth?.rootPass
|
|
8
|
+
? auth.rootPass
|
|
9
|
+
: (0, Random_1.randomPassword)({
|
|
10
|
+
name,
|
|
11
|
+
length: 25,
|
|
12
|
+
options: { special: false },
|
|
13
|
+
policy: false,
|
|
14
|
+
vaultInfo,
|
|
15
|
+
}).result;
|
|
16
|
+
const mysql = new k8s.helm.v3.Chart(name, {
|
|
17
|
+
namespace,
|
|
18
|
+
chart: 'mysql',
|
|
19
|
+
fetchOpts: { repo: 'https://charts.bitnami.com/bitnami' },
|
|
20
|
+
values: {
|
|
21
|
+
global: {
|
|
22
|
+
storageClass: storageClassName,
|
|
23
|
+
},
|
|
24
|
+
image: { tag: version },
|
|
25
|
+
auth: {
|
|
26
|
+
rootPassword: password,
|
|
27
|
+
password,
|
|
28
|
+
username: name,
|
|
29
|
+
database: name,
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
}, { provider });
|
|
33
|
+
return {
|
|
34
|
+
mysql,
|
|
35
|
+
host: (0, pulumi_1.interpolate) `${name}.${namespace}.svc.cluster.local`,
|
|
36
|
+
username: name,
|
|
37
|
+
password,
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXlTcWwuVjIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvS3ViZVgvRGF0YWJhc2VzL015U3FsLlYyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsOENBQW1EO0FBQ25ELDBDQUEwQztBQUMxQywyQ0FBNkM7QUFJN0Msa0JBQWUsQ0FBQyxFQUNkLElBQUksR0FBRyxPQUFPLEVBQ2QsU0FBUyxFQUNULE9BQU8sRUFDUCxJQUFJLEVBQ0osU0FBUyxFQUNULGdCQUFnQixFQUNoQixRQUFRLEdBQ0ssRUFBRSxFQUFFO0lBQ2pCLE1BQU0sUUFBUSxHQUFHLElBQUksRUFBRSxRQUFRO1FBQzdCLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUTtRQUNmLENBQUMsQ0FBQyxJQUFBLHVCQUFjLEVBQUM7WUFDYixJQUFJO1lBQ0osTUFBTSxFQUFFLEVBQUU7WUFDVixPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO1lBQzNCLE1BQU0sRUFBRSxLQUFLO1lBQ2IsU0FBUztTQUNWLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFFZCxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FDakMsSUFBSSxFQUNKO1FBQ0UsU0FBUztRQUNULEtBQUssRUFBRSxPQUFPO1FBQ2QsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLG9DQUFvQyxFQUFFO1FBRXpELE1BQU0sRUFBRTtZQUNOLE1BQU0sRUFBRTtnQkFDTixZQUFZLEVBQUUsZ0JBQWdCO2FBQy9CO1lBQ0QsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRTtZQUN2QixJQUFJLEVBQUU7Z0JBQ0osWUFBWSxFQUFFLFFBQVE7Z0JBQ3RCLFFBQVE7Z0JBQ1IsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsUUFBUSxFQUFFLElBQUk7YUFDZjtTQUNGO0tBQ0YsRUFDRCxFQUFFLFFBQVEsRUFBRSxDQUNiLENBQUM7SUFFRixPQUFPO1FBQ0wsS0FBSztRQUNMLElBQUksRUFBRSxJQUFBLG9CQUFXLEVBQUEsR0FBRyxJQUFJLElBQUksU0FBUyxvQkFBb0I7UUFDekQsUUFBUSxFQUFFLElBQUk7UUFDZCxRQUFRO0tBQ1QsQ0FBQztBQUNKLENBQUMsQ0FBQyJ9
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { MySqlProps } from '../types';
|
|
2
|
+
declare const _default: ({ name, namespace, version, customPort, useClusterIP, vaultInfo, storageClassName, auth, ...others }: MySqlProps) => {
|
|
3
|
+
mysql: {
|
|
4
|
+
deployment: import("../kx").Deployment | undefined;
|
|
5
|
+
service: import("../kx").Service | undefined;
|
|
6
|
+
jobs: (import("@pulumi/kubernetes/batch/v1/cronJob").CronJob | import("../kx").Job)[] | undefined;
|
|
7
|
+
};
|
|
8
|
+
host: import("@pulumi/pulumi").Output<string>;
|
|
9
|
+
port: number;
|
|
10
|
+
username: string;
|
|
11
|
+
password: import("@pulumi/pulumi").Input<string>;
|
|
12
|
+
};
|
|
13
|
+
export default _default;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const Random_1 = require("../../Core/Random");
|
|
4
|
+
const pulumi_1 = require("@pulumi/pulumi");
|
|
5
|
+
const Deployment_1 = require("../Deployment");
|
|
6
|
+
const Storage_1 = require("../Storage");
|
|
7
|
+
exports.default = ({ name = 'mysql', namespace, version = 'latest', customPort, useClusterIP, vaultInfo, storageClassName, auth, ...others }) => {
|
|
8
|
+
const password = auth?.rootPass ||
|
|
9
|
+
(0, Random_1.randomPassword)({
|
|
10
|
+
name,
|
|
11
|
+
length: 25,
|
|
12
|
+
policy: false,
|
|
13
|
+
options: { special: false },
|
|
14
|
+
vaultInfo,
|
|
15
|
+
}).result;
|
|
16
|
+
const persisVolume = (0, Storage_1.createPVCForStorageClass)({
|
|
17
|
+
name,
|
|
18
|
+
namespace,
|
|
19
|
+
accessMode: 'ReadWriteMany',
|
|
20
|
+
...others,
|
|
21
|
+
storageClassName,
|
|
22
|
+
});
|
|
23
|
+
const port = 3306;
|
|
24
|
+
const mysql = (0, Deployment_1.default)({
|
|
25
|
+
name,
|
|
26
|
+
namespace,
|
|
27
|
+
...others,
|
|
28
|
+
secrets: { MYSQL_ROOT_PASSWORD: password },
|
|
29
|
+
podConfig: {
|
|
30
|
+
ports: { http: port },
|
|
31
|
+
image: `mysql:${version}`,
|
|
32
|
+
volumes: [
|
|
33
|
+
{
|
|
34
|
+
name: 'mysql-data',
|
|
35
|
+
persistentVolumeClaim: persisVolume.metadata.name,
|
|
36
|
+
mountPath: '/var/lib/mysql',
|
|
37
|
+
readOnly: false,
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
podSecurityContext: { runAsGroup: 1001, runAsUser: 1001 },
|
|
41
|
+
},
|
|
42
|
+
deploymentConfig: {
|
|
43
|
+
args: ['--default-authentication-plugin=mysql_native_password'],
|
|
44
|
+
},
|
|
45
|
+
//serviceConfig: { port: customPort || port, useClusterIP },
|
|
46
|
+
});
|
|
47
|
+
return {
|
|
48
|
+
mysql,
|
|
49
|
+
host: (0, pulumi_1.interpolate) `${name}.${namespace}.svc.cluster.local`,
|
|
50
|
+
port,
|
|
51
|
+
username: 'root',
|
|
52
|
+
password,
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXlTcWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvS3ViZVgvRGF0YWJhc2VzL015U3FsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsOENBQW1EO0FBQ25ELDJDQUE2QztBQUM3Qyw4Q0FBdUM7QUFDdkMsd0NBQXNEO0FBR3RELGtCQUFlLENBQUMsRUFDZCxJQUFJLEdBQUcsT0FBTyxFQUNkLFNBQVMsRUFDVCxPQUFPLEdBQUcsUUFBUSxFQUNsQixVQUFVLEVBQ1YsWUFBWSxFQUNaLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsSUFBSSxFQUNKLEdBQUcsTUFBTSxFQUNFLEVBQUUsRUFBRTtJQUNmLE1BQU0sUUFBUSxHQUNaLElBQUksRUFBRSxRQUFRO1FBQ2QsSUFBQSx1QkFBYyxFQUFDO1lBQ2IsSUFBSTtZQUNKLE1BQU0sRUFBRSxFQUFFO1lBQ1YsTUFBTSxFQUFFLEtBQUs7WUFDYixPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO1lBQzNCLFNBQVM7U0FDVixDQUFDLENBQUMsTUFBTSxDQUFDO0lBRVosTUFBTSxZQUFZLEdBQUcsSUFBQSxrQ0FBd0IsRUFBQztRQUM1QyxJQUFJO1FBQ0osU0FBUztRQUNULFVBQVUsRUFBRSxlQUFlO1FBQzNCLEdBQUcsTUFBTTtRQUNULGdCQUFnQjtLQUNqQixDQUFDLENBQUM7SUFFSCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbEIsTUFBTSxLQUFLLEdBQUcsSUFBQSxvQkFBVSxFQUFDO1FBQ3ZCLElBQUk7UUFDSixTQUFTO1FBQ1QsR0FBRyxNQUFNO1FBQ1QsT0FBTyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFO1FBQzFDLFNBQVMsRUFBRTtZQUNULEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDckIsS0FBSyxFQUFFLFNBQVMsT0FBTyxFQUFFO1lBQ3pCLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxJQUFJLEVBQUUsWUFBWTtvQkFDbEIscUJBQXFCLEVBQUUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJO29CQUNqRCxTQUFTLEVBQUUsZ0JBQWdCO29CQUMzQixRQUFRLEVBQUUsS0FBSztpQkFDaEI7YUFDRjtZQUNELGtCQUFrQixFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO1NBQzFEO1FBQ0QsZ0JBQWdCLEVBQUU7WUFDaEIsSUFBSSxFQUFFLENBQUMsdURBQXVELENBQUM7U0FDaEU7UUFDRCw0REFBNEQ7S0FDN0QsQ0FBQyxDQUFDO0lBRUgsT0FBTztRQUNMLEtBQUs7UUFDTCxJQUFJLEVBQUUsSUFBQSxvQkFBVyxFQUFBLEdBQUcsSUFBSSxJQUFJLFNBQVMsb0JBQW9CO1FBQ3pELElBQUk7UUFDSixRQUFRLEVBQUUsTUFBTTtRQUNoQixRQUFRO0tBQ1QsQ0FBQztBQUNKLENBQUMsQ0FBQyJ9
|