diff --git a/src/Monitor/Monitor/ChangeLog.md b/src/Monitor/Monitor/ChangeLog.md index 5d9c7b4d4406..d94c30f6c59c 100644 --- a/src/Monitor/Monitor/ChangeLog.md +++ b/src/Monitor/Monitor/ChangeLog.md @@ -19,6 +19,7 @@ --> ## Upcoming Release +* Fixed bug for `Set-AzDiagnosticSettings`, retention policy won't apply to all categories; issue: https://github.com/Azure/azure-powershell/issues/11589 ## Version 1.7.0 * Added cmdlets for private link scope diff --git a/src/Monitor/Monitor/Diagnostics/SetAzureRmDiagnosticSettingCommand.cs b/src/Monitor/Monitor/Diagnostics/SetAzureRmDiagnosticSettingCommand.cs index 4212d49bec58..ba92ce603c9a 100644 --- a/src/Monitor/Monitor/Diagnostics/SetAzureRmDiagnosticSettingCommand.cs +++ b/src/Monitor/Monitor/Diagnostics/SetAzureRmDiagnosticSettingCommand.cs @@ -22,6 +22,7 @@ using Microsoft.Azure.Commands.Insights.OutputClasses; using Microsoft.Azure.Management.Monitor; using Microsoft.Azure.Management.Monitor.Models; +using Microsoft.WindowsAzure.Commands.Utilities.Common; namespace Microsoft.Azure.Commands.Insights.Diagnostics { @@ -373,22 +374,30 @@ private void SetRetention(DiagnosticSettingsResource properties) Days = this.RetentionInDays.Value }; - if (properties.Logs != null) + if (properties.Logs != null && this.IsParameterBound(c => c.Category)) { WriteDebugWithTimestamp("Setting retention policy for logs"); - foreach (LogSettings logSettings in properties.Logs) + properties.Logs = properties.Logs.Select(setting => { - logSettings.RetentionPolicy = retentionPolicy; - } + if (setting != null) + { + setting.RetentionPolicy = this.Category.Contains(setting.Category) ? retentionPolicy : (setting.RetentionPolicy == null ? null : setting.RetentionPolicy); + } + return setting; + }).ToList(); } - if (properties.Metrics != null) + if (properties.Metrics != null && this.IsParameterBound(c => c.MetricCategory)) { WriteDebugWithTimestamp("Setting retention policy for metrics"); - foreach (MetricSettings metricSettings in properties.Metrics) + properties.Metrics = properties.Metrics.Select(setting => { - metricSettings.RetentionPolicy = retentionPolicy; - } + if (setting != null) + { + setting.RetentionPolicy = this.MetricCategory.Contains(setting.Category) ? retentionPolicy : (setting.RetentionPolicy == null ? null : setting.RetentionPolicy); + } + return setting; + }).ToList(); } }