From f4a9c5d94bf970a01f23093caf6974a7ae11501b Mon Sep 17 00:00:00 2001 From: Jonathon Saunders Date: Thu, 6 Oct 2022 14:57:50 -0700 Subject: [PATCH 1/5] Remove storage mounts for TES, only needed for cromwell --- .../helm/templates/tes-deployment.yaml | 30 ------------------- 1 file changed, 30 deletions(-) diff --git a/src/deploy-cromwell-on-azure/scripts/helm/templates/tes-deployment.yaml b/src/deploy-cromwell-on-azure/scripts/helm/templates/tes-deployment.yaml index 95f3ee2f..4873fd4e 100644 --- a/src/deploy-cromwell-on-azure/scripts/helm/templates/tes-deployment.yaml +++ b/src/deploy-cromwell-on-azure/scripts/helm/templates/tes-deployment.yaml @@ -71,34 +71,4 @@ spec: ports: - containerPort: {{ .Values.service.tesPort }} resources: {} - volumeMounts: -{{- range .Values.defaultContainers }} - - mountPath: {{.}} - name: {{.}}-claim1 -{{- end }} -{{- range .Values.externalContainers }} - - mountPath: /{{.accountName}}/{{.containerName}} - name: {{.accountName}}-{{.containerName}}-claim1 -{{- end }} -{{- range .Values.externalSasContainers }} - - mountPath: /{{.accountName}}/{{.containerName}} - name: {{.accountName}}-{{.containerName}}-claim1 -{{- end }} - restartPolicy: Always - volumes: -{{- range .Values.defaultContainers }} - - name: {{.}}-claim1 - persistentVolumeClaim: - claimName: {{.}}-claim1 -{{- end }} -{{- range .Values.externalContainers }} - - name: {{.accountName}}-{{.containerName}}-claim1 - persistentVolumeClaim: - claimName: {{.accountName}}-{{.containerName}}-claim1 -{{- end }} -{{- range .Values.externalSasContainers }} - - name: {{.accountName}}-{{.containerName}}-claim1 - persistentVolumeClaim: - claimName: {{.accountName}}-{{.containerName}}-claim1 -{{- end }} status: {} From 64baf75f5f69098e5787227a41483ca67c107772 Mon Sep 17 00:00:00 2001 From: Jonathon Saunders Date: Thu, 6 Oct 2022 15:12:55 -0700 Subject: [PATCH 2/5] No need to validate helm for manual deployment --- src/deploy-cromwell-on-azure/Deployer.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/deploy-cromwell-on-azure/Deployer.cs b/src/deploy-cromwell-on-azure/Deployer.cs index 04d800a8..090bd291 100644 --- a/src/deploy-cromwell-on-azure/Deployer.cs +++ b/src/deploy-cromwell-on-azure/Deployer.cs @@ -2785,12 +2785,16 @@ void ValidateHelmInstall(string helmPath, string featureName) ThrowIfBothProvided(configuration.UseAks, nameof(configuration.UseAks), configuration.CustomTesImagePath != null, nameof(configuration.CustomTesImagePath)); ThrowIfBothProvided(configuration.UseAks, nameof(configuration.UseAks), configuration.CustomTriggerServiceImagePath != null, nameof(configuration.CustomTriggerServiceImagePath)); ThrowIfBothProvided(configuration.UseAks, nameof(configuration.UseAks), configuration.CustomCromwellImagePath != null, nameof(configuration.CustomCromwellImagePath)); - ValidateDependantFeature(configuration.UseAks, nameof(configuration.UseAks), !string.IsNullOrWhiteSpace(configuration.HelmBinaryPath), nameof(configuration.HelmBinaryPath)); - + if (configuration.UseAks) { ThrowIfNotProvidedForUpdate(configuration.AksClusterName, nameof(configuration.AksClusterName)); - ValidateHelmInstall(configuration.HelmBinaryPath, nameof(configuration.HelmBinaryPath)); + + if (!configuration.ManualHelmDeployment) + { + ValidateDependantFeature(configuration.UseAks, nameof(configuration.UseAks), !string.IsNullOrWhiteSpace(configuration.HelmBinaryPath), nameof(configuration.HelmBinaryPath)); + ValidateHelmInstall(configuration.HelmBinaryPath, nameof(configuration.HelmBinaryPath)); + } } } From ae988439a15f452d75846daabdea499fb1da1928 Mon Sep 17 00:00:00 2001 From: Jonathon Saunders Date: Thu, 6 Oct 2022 15:41:06 -0700 Subject: [PATCH 3/5] Default ProvisionPostgreSqlOnAzure to true is UseAKS is true --- src/deploy-cromwell-on-azure/Deployer.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/deploy-cromwell-on-azure/Deployer.cs b/src/deploy-cromwell-on-azure/Deployer.cs index 090bd291..20c74332 100644 --- a/src/deploy-cromwell-on-azure/Deployer.cs +++ b/src/deploy-cromwell-on-azure/Deployer.cs @@ -2778,7 +2778,6 @@ void ValidateHelmInstall(string helmPath, string featureName) if (!configuration.Update) { - ValidateDependantFeature(configuration.UseAks, nameof(configuration.UseAks), configuration.ProvisionPostgreSqlOnAzure.GetValueOrDefault(), nameof(configuration.ProvisionPostgreSqlOnAzure)); ValidateDependantFeature(configuration.CrossSubscriptionAKSDeployment.GetValueOrDefault(), nameof(configuration.CrossSubscriptionAKSDeployment), configuration.UseAks, nameof(configuration.UseAks)); } @@ -2795,6 +2794,15 @@ void ValidateHelmInstall(string helmPath, string featureName) ValidateDependantFeature(configuration.UseAks, nameof(configuration.UseAks), !string.IsNullOrWhiteSpace(configuration.HelmBinaryPath), nameof(configuration.HelmBinaryPath)); ValidateHelmInstall(configuration.HelmBinaryPath, nameof(configuration.HelmBinaryPath)); } + + if (configuration.ProvisionPostgreSqlOnAzure is null) + { + configuration.ProvisionPostgreSqlOnAzure = true; + } + else if (!configuration.ProvisionPostgreSqlOnAzure.GetValueOrDefault()) + { + ValidateDependantFeature(configuration.UseAks, nameof(configuration.UseAks), configuration.ProvisionPostgreSqlOnAzure.GetValueOrDefault(), nameof(configuration.ProvisionPostgreSqlOnAzure)); + } } } From adb7c27b0ca9107cb922b946875842b06e959dbc Mon Sep 17 00:00:00 2001 From: Jonathon Saunders Date: Sat, 8 Oct 2022 10:37:28 -0700 Subject: [PATCH 4/5] Upload values file to storage account --- src/deploy-cromwell-on-azure/Deployer.cs | 7 +++++-- src/deploy-cromwell-on-azure/KubernetesManager.cs | 12 +++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/deploy-cromwell-on-azure/Deployer.cs b/src/deploy-cromwell-on-azure/Deployer.cs index 20c74332..58586b38 100644 --- a/src/deploy-cromwell-on-azure/Deployer.cs +++ b/src/deploy-cromwell-on-azure/Deployer.cs @@ -514,7 +514,7 @@ await Task.Run(async () => await ProvisionManagedCluster(resourceGroup, managedIdentity, logAnalyticsWorkspace, vnetAndSubnet?.virtualNetwork, vnetAndSubnet?.vmSubnet.Name, configuration.PrivateNetworking.GetValueOrDefault()); } - await kubernetesManager.UpdateHelmValuesAsync(storageAccount.Name, keyVaultUri, resourceGroup.Name, personalizedSettings.Union(systemSettings).ToDictionary(kv => kv.Key, kv => kv.Value), managedIdentity); + await kubernetesManager.UpdateHelmValuesAsync(storageAccount, keyVaultUri, resourceGroup.Name, personalizedSettings.Union(systemSettings).ToDictionary(kv => kv.Key, kv => kv.Value), managedIdentity); if (configuration.ManualHelmDeployment) { @@ -3064,12 +3064,15 @@ public static async Task DownloadTextFromStorageAccountAsync(IStorageAcc } private async Task UploadTextToStorageAccountAsync(IStorageAccount storageAccount, string containerName, string blobName, string content) + => await UploadTextToStorageAccountAsync(storageAccount, containerName, blobName, content, cts.Token); + + public static async Task UploadTextToStorageAccountAsync(IStorageAccount storageAccount, string containerName, string blobName, string content, CancellationToken token) { var blobClient = await GetBlobClientAsync(storageAccount); var container = blobClient.GetBlobContainerClient(containerName); await container.CreateIfNotExistsAsync(); - await container.GetBlobClient(blobName).UploadAsync(BinaryData.FromString(content), true, cts.Token); + await container.GetBlobClient(blobName).UploadAsync(BinaryData.FromString(content), true, token); } private static string GetLinuxParentPath(string path) diff --git a/src/deploy-cromwell-on-azure/KubernetesManager.cs b/src/deploy-cromwell-on-azure/KubernetesManager.cs index b6c021b5..6cf813ea 100644 --- a/src/deploy-cromwell-on-azure/KubernetesManager.cs +++ b/src/deploy-cromwell-on-azure/KubernetesManager.cs @@ -82,7 +82,7 @@ public async Task DeployHelmChartToClusterAsync() await ExecHelmProcess($"upgrade --install cromwellonazure ./scripts/helm --kubeconfig {kubeConfigPath} --namespace {configuration.AksCoANamespace} --create-namespace"); } - public async Task UpdateHelmValuesAsync(string storageAccountName, string keyVaultUrl, string resourceGroupName, Dictionary settings, IIdentity managedId) + public async Task UpdateHelmValuesAsync(IStorageAccount storageAccount, string keyVaultUrl, string resourceGroupName, Dictionary settings, IIdentity managedId) { var values = KubernetesYaml.Deserialize(Utility.GetFileContent("scripts", "helm", "values-template.yaml")); values.Persistence["storageAccount"] = settings["DefaultStorageAccountName"]; @@ -121,7 +121,7 @@ public async Task UpdateHelmValuesAsync(string storageAccountName, string keyVau { var containerConfig = new Dictionary() { - { "accountName", storageAccountName }, + { "accountName", storageAccount.Name }, { "containerName", container }, { "keyVaultURL", keyVaultUrl }, { "keyVaultSecretName", Deployer.StorageAccountKeySecretName} @@ -138,7 +138,7 @@ public async Task UpdateHelmValuesAsync(string storageAccountName, string keyVau { var containerConfig = new Dictionary() { - { "accountName", storageAccountName }, + { "accountName", storageAccount.Name }, { "containerName", container }, { "resourceGroup", resourceGroupName }, }; @@ -147,7 +147,9 @@ public async Task UpdateHelmValuesAsync(string storageAccountName, string keyVau } } - await File.WriteAllTextAsync(Path.Join("scripts", "helm", "values.yaml"), KubernetesYaml.Serialize(values)); + var valuesString = KubernetesYaml.Serialize(values); + await File.WriteAllTextAsync(Path.Join("scripts", "helm", "values.yaml"), valuesString); + await Deployer.UploadTextToStorageAccountAsync(storageAccount, Deployer.ConfigurationContainerName, "values.yaml", valuesString, cts.Token); } private async Task ExecHelmProcess(string command) @@ -259,7 +261,7 @@ private async Task WaitForWorkloadWithTimeout(IKubernetes client, string d public async Task UpgradeAKSDeployment(Dictionary settings, IResourceGroup resourceGroup, IStorageAccount storageAccount, IIdentity managedId, string keyVaultUrl) { - await UpdateHelmValuesAsync(storageAccount.Name, keyVaultUrl, resourceGroup.Name, settings, managedId); + await UpdateHelmValuesAsync(storageAccount, keyVaultUrl, resourceGroup.Name, settings, managedId); await DeployHelmChartToClusterAsync(); } From 12b41f5c2fe8ee255e98f6c6c4ab547b827189d3 Mon Sep 17 00:00:00 2001 From: Jonathon Saunders Date: Mon, 10 Oct 2022 23:29:46 -0700 Subject: [PATCH 5/5] Use aksValues.yaml to store settings. --- src/deploy-cromwell-on-azure/Deployer.cs | 35 ++---- .../KubernetesManager.cs | 114 ++++++++++++++---- 2 files changed, 100 insertions(+), 49 deletions(-) diff --git a/src/deploy-cromwell-on-azure/Deployer.cs b/src/deploy-cromwell-on-azure/Deployer.cs index 58586b38..312b2ccc 100644 --- a/src/deploy-cromwell-on-azure/Deployer.cs +++ b/src/deploy-cromwell-on-azure/Deployer.cs @@ -211,7 +211,7 @@ public async Task DeployAsync() storageAccount = storageAccounts.First(); } - accountNames = Utility.DelimitedTextToDictionary(await DownloadTextFromStorageAccountAsync(storageAccount, ConfigurationContainerName, PersonalizedSettingsFileName, cts), SettingsDelimiter); + accountNames = await kubernetesManager.GetAKSSettings(storageAccount); } else { @@ -308,7 +308,8 @@ public async Task DeployAsync() { if (accountNames.TryGetValue("CrossSubscriptionAKSDeployment", out var crossSubscriptionAKSDeployment)) { - configuration.CrossSubscriptionAKSDeployment = bool.Parse(crossSubscriptionAKSDeployment); + bool.TryParse(crossSubscriptionAKSDeployment, out var parsed); + configuration.CrossSubscriptionAKSDeployment = parsed; } if (accountNames.TryGetValue("KeyVaultName", out var keyVaultName)) @@ -326,18 +327,17 @@ public async Task DeployAsync() ?? throw new ValidationException($"Managed Identity {managedIdentityClientId} does not exist in region {configuration.RegionName} or is not accessible to the current user."); // Override any configuration that is used by the update. - var systemSettings = Utility.DelimitedTextToDictionary(await DownloadTextFromStorageAccountAsync(storageAccount, ConfigurationContainerName, NonpersonalizedSettingsFileName, cts), SettingsDelimiter); - var versionString = systemSettings["CromwellOnAzureVersion"]; + var aksValues = await kubernetesManager.GetAKSSettings(storageAccount); + var versionString = aksValues["CromwellOnAzureVersion"]; var installedVersion = !string.IsNullOrEmpty(versionString) && Version.TryParse(versionString, out var version) ? version : null; + var settings = ConfigureSettings(managedIdentity, aksValues, installedVersion); await kubernetesManager.UpgradeAKSDeployment( - GetPersonalizedSettings(managedIdentity, accountNames, installedVersion).Union(GetSystemSettings(systemSettings)).ToDictionary(kv => kv.Key, kv => kv.Value), + settings, resourceGroup, storageAccount, managedIdentity, keyVaultUri); - - await UploadTextToStorageAccountAsync(storageAccount, ConfigurationContainerName, NonpersonalizedSettingsFileName, Utility.DictionaryToDelimitedText(systemSettings, SettingsDelimiter)); } else { @@ -506,15 +506,14 @@ await Task.Run(async () => ConsoleEx.WriteLine(); compute = Task.Run(async () => { - var personalizedSettings = GetPersonalizedSettings(managedIdentity, default, default); - var systemSettings = GetSystemSettings(default); + var settings = ConfigureSettings(managedIdentity, default, default); if (aksCluster == null && !configuration.ManualHelmDeployment) { await ProvisionManagedCluster(resourceGroup, managedIdentity, logAnalyticsWorkspace, vnetAndSubnet?.virtualNetwork, vnetAndSubnet?.vmSubnet.Name, configuration.PrivateNetworking.GetValueOrDefault()); } - await kubernetesManager.UpdateHelmValuesAsync(storageAccount, keyVaultUri, resourceGroup.Name, personalizedSettings.Union(systemSettings).ToDictionary(kv => kv.Key, kv => kv.Value), managedIdentity); + await kubernetesManager.UpdateHelmValuesAsync(storageAccount, keyVaultUri, resourceGroup.Name, settings, managedIdentity); if (configuration.ManualHelmDeployment) { @@ -528,9 +527,6 @@ await Task.Run(async () => await kubernetesManager.DeployCoADependencies(); await kubernetesManager.DeployHelmChartToClusterAsync(); } - - await UploadTextToStorageAccountAsync(storageAccount, ConfigurationContainerName, PersonalizedSettingsFileName, Utility.DictionaryToDelimitedText(personalizedSettings, SettingsDelimiter)); - await UploadTextToStorageAccountAsync(storageAccount, ConfigurationContainerName, NonpersonalizedSettingsFileName, Utility.DictionaryToDelimitedText(systemSettings, SettingsDelimiter)); }); } else @@ -966,10 +962,10 @@ private static Dictionary GetDefaultValues(string[] files) return settings; } - private Dictionary GetSystemSettings(Dictionary settings) + private Dictionary ConfigureSettings(IIdentity managedIdentity, Dictionary settings, Version installedVersion) { settings ??= new(); - var defaults = GetDefaultValues(new[] { "env-00-coa-version.txt", "env-02-internal-images.txt", "env-03-external-images.txt", }); + var defaults = GetDefaultValues(new [] { "env-00-coa-version.txt", "env-01-account-names.txt", "env-02-internal-images.txt", "env-03-external-images.txt", "env-04-settings.txt" }); // We always overwrite the CoA version UpdateSetting(settings, defaults, "CromwellOnAzureVersion", default(string), ignoreDefaults: false); @@ -985,14 +981,6 @@ private Dictionary GetSystemSettings(Dictionary UpdateSetting(settings, defaults, "BlobxferImageName", configuration.BlobxferImageName); UpdateSetting(settings, defaults, "DisableBatchNodesPublicIpAddress", configuration.DisableBatchNodesPublicIpAddress, b => b.GetValueOrDefault().ToString(), configuration.DisableBatchNodesPublicIpAddress.GetValueOrDefault().ToString()); - BackFillSettings(settings, defaults); - return settings; - } - - private Dictionary GetPersonalizedSettings(IIdentity managedIdentity, Dictionary settings, Version installedVersion) - { - settings ??= new(); - var defaults = GetDefaultValues(new [] { "env-01-account-names.txt", "env-04-settings.txt" }); if (installedVersion is null) { @@ -1006,7 +994,6 @@ private Dictionary GetPersonalizedSettings(IIdentity managedIden UpdateSetting(settings, defaults, "AksCoANamespace", configuration.AksCoANamespace, ignoreDefaults: true); var provisionPostgreSqlOnAzure = configuration.ProvisionPostgreSqlOnAzure.GetValueOrDefault(); - UpdateSetting(settings, defaults, "ProvisionPostgreSqlOnAzure", configuration.ProvisionPostgreSqlOnAzure); UpdateSetting(settings, defaults, "CrossSubscriptionAKSDeployment", configuration.CrossSubscriptionAKSDeployment); UpdateSetting(settings, defaults, "PostgreSqlServerName", provisionPostgreSqlOnAzure ? configuration.PostgreSqlServerName : string.Empty, ignoreDefaults: true); UpdateSetting(settings, defaults, "PostgreSqlDatabaseName", provisionPostgreSqlOnAzure ? configuration.PostgreSqlCromwellDatabaseName : string.Empty, ignoreDefaults: true); diff --git a/src/deploy-cromwell-on-azure/KubernetesManager.cs b/src/deploy-cromwell-on-azure/KubernetesManager.cs index 6cf813ea..f99a89d8 100644 --- a/src/deploy-cromwell-on-azure/KubernetesManager.cs +++ b/src/deploy-cromwell-on-azure/KubernetesManager.cs @@ -85,33 +85,11 @@ public async Task DeployHelmChartToClusterAsync() public async Task UpdateHelmValuesAsync(IStorageAccount storageAccount, string keyVaultUrl, string resourceGroupName, Dictionary settings, IIdentity managedId) { var values = KubernetesYaml.Deserialize(Utility.GetFileContent("scripts", "helm", "values-template.yaml")); - values.Persistence["storageAccount"] = settings["DefaultStorageAccountName"]; + UpdateValuesFromSettings(values, settings); values.Config["resourceGroup"] = resourceGroupName; - values.Config["azureServicesAuthConnectionString"] = settings["AzureServicesAuthConnectionString"]; - values.Config["applicationInsightsAccountName"] = settings["ApplicationInsightsAccountName"]; - values.Config["cosmosDbAccountName"] = settings["CosmosDbAccountName"]; - values.Config["batchAccountName"] = settings["BatchAccountName"]; - values.Config["batchNodesSubnetId"] = settings["BatchNodesSubnetId"]; - values.Config["coaNamespace"] = settings["AksCoANamespace"]; - values.Config["disableBatchNodesPublicIpAddress"] = settings["DisableBatchNodesPublicIpAddress"]; - values.Config["disableBatchScheduling"] = settings["DisableBatchScheduling"]; - values.Config["usePreemptibleVmsOnly"] = settings["UsePreemptibleVmsOnly"]; - values.Config["blobxferImageName"] = settings["BlobxferImageName"]; - values.Config["dockerInDockerImageName"] = settings["DockerInDockerImageName"]; - values.Config["batchImageOffer"] = settings["BatchImageOffer"]; - values.Config["batchImagePublisher"] = settings["BatchImagePublisher"]; - values.Config["batchImageSku"] = settings["BatchImageSku"]; - values.Config["batchImageVersion"] = settings["BatchImageVersion"]; - values.Config["batchNodeAgentSkuId"] = settings["BatchNodeAgentSkuId"]; - values.Config["marthaUrl"] = settings["MarthaUrl"]; - values.Config["marthaKeyVaultName"] = settings["MarthaKeyVaultName"]; - values.Config["marthaSecretName"] = settings["MarthaSecretName"]; values.Identity["name"] = managedId.Name; values.Identity["resourceId"] = managedId.Id; values.Identity["clientId"] = managedId.ClientId; - values.Images["tes"] = settings["TesImageName"]; - values.Images["triggerservice"] = settings["TriggerServiceImageName"]; - values.Images["cromwell"] = settings["CromwellImageName"]; if (configuration.CrossSubscriptionAKSDeployment.GetValueOrDefault()) { @@ -149,7 +127,93 @@ public async Task UpdateHelmValuesAsync(IStorageAccount storageAccount, string k var valuesString = KubernetesYaml.Serialize(values); await File.WriteAllTextAsync(Path.Join("scripts", "helm", "values.yaml"), valuesString); - await Deployer.UploadTextToStorageAccountAsync(storageAccount, Deployer.ConfigurationContainerName, "values.yaml", valuesString, cts.Token); + await Deployer.UploadTextToStorageAccountAsync(storageAccount, Deployer.ConfigurationContainerName, "aksValues.yaml", valuesString, cts.Token); + } + + public async Task UpgradeValuesYaml(IStorageAccount storageAccount, Dictionary settings) + { + var values = KubernetesYaml.Deserialize(await Deployer.DownloadTextFromStorageAccountAsync(storageAccount, Deployer.ConfigurationContainerName, "aksValues.yaml", cts)); + UpdateValuesFromSettings(values, settings); + var valuesString = KubernetesYaml.Serialize(values); + await File.WriteAllTextAsync(Path.Join("scripts", "helm", "values.yaml"), valuesString); + await Deployer.UploadTextToStorageAccountAsync(storageAccount, Deployer.ConfigurationContainerName, "aksValues.yaml", valuesString, cts.Token); + } + + private static void UpdateValuesFromSettings(HelmValues values, Dictionary settings) + { + values.Config["cromwellOnAzureVersion"] = settings["CromwellOnAzureVersion"]; + values.Persistence["storageAccount"] = settings["DefaultStorageAccountName"]; + values.Config["azureServicesAuthConnectionString"] = settings["AzureServicesAuthConnectionString"]; + values.Config["applicationInsightsAccountName"] = settings["ApplicationInsightsAccountName"]; + values.Config["cosmosDbAccountName"] = settings["CosmosDbAccountName"]; + values.Config["batchAccountName"] = settings["BatchAccountName"]; + values.Config["batchNodesSubnetId"] = settings["BatchNodesSubnetId"]; + values.Config["coaNamespace"] = settings["AksCoANamespace"]; + values.Config["disableBatchNodesPublicIpAddress"] = settings["DisableBatchNodesPublicIpAddress"]; + values.Config["disableBatchScheduling"] = settings["DisableBatchScheduling"]; + values.Config["usePreemptibleVmsOnly"] = settings["UsePreemptibleVmsOnly"]; + values.Config["blobxferImageName"] = settings["BlobxferImageName"]; + values.Config["dockerInDockerImageName"] = settings["DockerInDockerImageName"]; + values.Config["batchImageOffer"] = settings["BatchImageOffer"]; + values.Config["batchImagePublisher"] = settings["BatchImagePublisher"]; + values.Config["batchImageSku"] = settings["BatchImageSku"]; + values.Config["batchImageVersion"] = settings["BatchImageVersion"]; + values.Config["batchNodeAgentSkuId"] = settings["BatchNodeAgentSkuId"]; + values.Config["marthaUrl"] = settings["MarthaUrl"]; + values.Config["marthaKeyVaultName"] = settings["MarthaKeyVaultName"]; + values.Config["marthaSecretName"] = settings["MarthaSecretName"]; + values.Images["tes"] = settings["TesImageName"]; + values.Images["triggerservice"] = settings["TriggerServiceImageName"]; + values.Images["cromwell"] = settings["CromwellImageName"]; + values.Config["crossSubscriptionAKSDeployment"] = settings["CrossSubscriptionAKSDeployment"]; + values.Config["postgreSqlServerName"] = settings["PostgreSqlServerName"]; + values.Config["postgreSqlDatabaseName"] = settings["PostgreSqlDatabaseName"]; + values.Config["postgreSqlUserLogin"] = settings["PostgreSqlUserLogin"]; + values.Config["postgreSqlUserPassword"] = settings["PostgreSqlUserPassword"]; + values.Config["usePostgreSqlSingleServer"] = settings["UsePostgreSqlSingleServer"]; + } + + public async Task> GetAKSSettings(IStorageAccount storageAccount) + { + var values = KubernetesYaml.Deserialize(await Deployer.DownloadTextFromStorageAccountAsync(storageAccount, Deployer.ConfigurationContainerName, "aksValues.yaml", cts)); + return ValuesToSettings(values); + } + + private static Dictionary ValuesToSettings(HelmValues values) + { + var settings = new Dictionary(); + settings["CromwellOnAzureVersion"] = values.Config["cromwellOnAzureVersion"]; + settings["DefaultStorageAccountName"] = values.Persistence["storageAccount"]; + settings["AzureServicesAuthConnectionString"] = values.Config["azureServicesAuthConnectionString"]; + settings["ApplicationInsightsAccountName"] = values.Config["applicationInsightsAccountName"]; + settings["CosmosDbAccountName"] = values.Config["cosmosDbAccountName"]; + settings["BatchAccountName"] = values.Config["batchAccountName"]; + settings["BatchNodesSubnetId"] = values.Config["batchNodesSubnetId"]; + settings["AksCoANamespace"] = values.Config["coaNamespace"]; + settings["DisableBatchNodesPublicIpAddress"] = values.Config["disableBatchNodesPublicIpAddress"]; + settings["DisableBatchScheduling"] = values.Config["disableBatchScheduling"]; + settings["UsePreemptibleVmsOnly"] = values.Config["usePreemptibleVmsOnly"]; + settings["BlobxferImageName"] = values.Config["blobxferImageName"]; + settings["DockerInDockerImageName"] = values.Config["dockerInDockerImageName"]; + settings["BatchImageOffer"] = values.Config["batchImageOffer"]; + settings["BatchImagePublisher"] = values.Config["batchImagePublisher"]; + settings["BatchImageSku"] = values.Config["batchImageSku"]; + settings["BatchImageVersion"] = values.Config["batchImageVersion"]; + settings["BatchNodeAgentSkuId"] = values.Config["batchNodeAgentSkuId"]; + settings["MarthaUrl"] = values.Config["marthaUrl"]; + settings["MarthaKeyVaultName"] = values.Config["marthaKeyVaultName"]; + settings["MarthaSecretName"] = values.Config["marthaSecretName"]; + settings["TesImageName"] = values.Images["tes"]; + settings["TriggerServiceImageName"] = values.Images["triggerservice"]; + settings["CromwellImageName"] = values.Images["cromwell"]; + settings["CrossSubscriptionAKSDeployment"] = values.Config["crossSubscriptionAKSDeployment"]; + settings["PostgreSqlServerName"] = values.Config["postgreSqlServerName"]; + settings["PostgreSqlDatabaseName"] = values.Config["postgreSqlDatabaseName"]; + settings["PostgreSqlUserLogin"] = values.Config["postgreSqlUserLogin"]; + settings["PostgreSqlUserPassword"] = values.Config["postgreSqlUserPassword"]; + settings["UsePostgreSqlSingleServer"] = values.Config["usePostgreSqlSingleServer"]; + settings["ManagedIdentityClientId"] = values.Identity["clientId"]; + return settings; } private async Task ExecHelmProcess(string command) @@ -261,7 +325,7 @@ private async Task WaitForWorkloadWithTimeout(IKubernetes client, string d public async Task UpgradeAKSDeployment(Dictionary settings, IResourceGroup resourceGroup, IStorageAccount storageAccount, IIdentity managedId, string keyVaultUrl) { - await UpdateHelmValuesAsync(storageAccount, keyVaultUrl, resourceGroup.Name, settings, managedId); + await UpgradeValuesYaml(storageAccount, settings); await DeployHelmChartToClusterAsync(); }