// Get guest configuration policy assignment report by reportId protected PolicyStatusDetailed GetPolicyStatusDetailedByReportId(string reportId) { var urlParameters = CommonHelpers.GetGCURLParameters(reportId); var reportGuid = CommonHelpers.GetReportGUIDFromID(reportId); if (urlParameters == null || reportGuid == null) { throw new ErrorResponseException(string.Format(StringResources.InvalidReportId, reportId)); } PolicyStatusDetailed policyReport = null; if (urlParameters != null && urlParameters.AreParametersNotNullOrEmpty() && !string.IsNullOrEmpty(reportId)) { GuestConfigurationAssignmentReport report = null; try { report = GuestConfigurationClient.GuestConfigurationAssignmentReports.Get(urlParameters.ResourceGroupName, urlParameters.AssignmentName, reportGuid, urlParameters.VMName); } catch (GuestConfigurationErrorResponseException exception) when(HttpStatusCode.NotFound.Equals(exception.Response.StatusCode)) { this.WriteVerbose(string.Format(StringResources.NotFoundByReportId, reportId)); throw exception; } policyReport = new PolicyStatusDetailed(report, null); } return(policyReport); }
public PolicyStatus(GuestConfigurationAssignmentReport gcrpReport, PolicyData gcPolicyAssignment) { if (gcPolicyAssignment != null) { this.PolicyDisplayName = gcPolicyAssignment.PolicyDisplayName; this.Configuration = gcPolicyAssignment.Configuration; this.ComplianceStatus = gcPolicyAssignment.ComplianceStatus; // Initially, gcrpReport can be null. So use status from assignment. } if (gcrpReport != null && gcrpReport.Properties != null) { this.ReportId = gcrpReport.Id; this.StartTime = gcrpReport.Properties.StartTime; this.EndTime = gcrpReport.Properties.EndTime; this.ComplianceStatus = gcrpReport.Properties.ComplianceStatus; this.Configuration = new PolicyData.ConfigurationInfo { Name = gcrpReport.Properties.Assignment.Configuration.Name, Version = gcrpReport.Properties.Assignment.Configuration.Version }; if (gcrpReport.Properties.Vm != null) { this.VM = new VMInfo() { Uuid = gcrpReport.Properties.Vm.Uuid, ResourceId = gcrpReport.Properties.Vm.Id, }; } } }
// Get guest configuration policy statuses by initiative definition name protected IEnumerable <PolicyStatusDetailed> GetPolicyStatusesDetailedByInitiativeName(string resourceGroupName, string vmName, string initiativeName, IEnumerable <GuestConfigurationAssignment> gcrpAssignments) { var gcPolicyAssignments = GetPolicyStatuses(resourceGroupName, vmName, gcrpAssignments, initiativeName); var gcPolicyAssignmentReportList = new List <PolicyStatusDetailed>(); var gcPolicyAssignmentsArray = gcPolicyAssignments.ToArray(); // Sort assignments by policy display name Array.Sort(gcPolicyAssignmentsArray, (first, second) => { return(string.Compare(first.PolicyDisplayName, second.PolicyDisplayName, true)); }); foreach (var gcPolicyAssignment in gcPolicyAssignmentsArray) { var reportGuid = CommonHelpers.GetReportGUIDFromID(gcPolicyAssignment.LatestReportId); GuestConfigurationAssignmentReport gcrpReport = null; if (gcPolicyAssignment.LatestReportId != null) { gcrpReport = GuestConfigurationClient.GuestConfigurationAssignmentReports.Get(resourceGroupName, gcPolicyAssignment.Configuration.Name, reportGuid, vmName); } gcPolicyAssignmentReportList.Add(new PolicyStatusDetailed(gcrpReport, gcPolicyAssignment)); } return(gcPolicyAssignmentReportList); }
public PolicyStatusDetailed(GuestConfigurationAssignmentReport gcrpReport, PolicyData gcPolicyAssignment) : base(gcrpReport, gcPolicyAssignment) { this.ComplianceReasons = new List <ComplianceReasonDetails>(); if (gcrpReport != null && gcrpReport.Properties != null) { if (gcrpReport.Properties.Details != null) { foreach (var gcrpResource in gcrpReport.Properties.Details.Resources) { if (gcrpResource == null) { continue; } var propertiesJObject = JObject.Parse(gcrpResource.Properties.ToString()); if (propertiesJObject == null) { continue; } var propertiesDictionary = propertiesJObject.ToObject <Dictionary <string, object> >(); string policy = null; if (propertiesDictionary.ContainsKey(Constants.Policy)) { policy = propertiesDictionary[Constants.Policy].ToString(); } string resourceId = null; if (propertiesDictionary.ContainsKey(Constants.ResourceId)) { resourceId = propertiesDictionary[Constants.ResourceId].ToString(); } var resourceReasons = new List <ReasonAndCode>(); foreach (var reason in gcrpResource.Reasons) { resourceReasons.Add( new ReasonAndCode() { Reason = reason.Phrase, Code = reason.Code, } ); } var complianceReason = new ComplianceReasonDetails() { Policy = policy, ResourceId = resourceId, ComplianceStatus = gcrpResource.ComplianceStatus, Reasons = resourceReasons, }; this.ComplianceReasons.Add(complianceReason); } } } }
// Get guest configuration policy assignment reports by initiative definition name protected IEnumerable <GuestConfigurationPolicyAssignmentReport> GetAllGuestConfigurationAssignmentReportsByInitiativeName(string resourceGroupName, string vmName, string initiativeName, bool isStatusHistoryCmdlet, bool isShowStatusChangeOnlyPresent = false) { var gcPolicyAssignments = GetAllGuestConfigurationAssignmentsByInitiativeName(resourceGroupName, vmName, initiativeName); var gcPolicyAssignmentReportList = new List <GuestConfigurationPolicyAssignmentReport>(); var gcPolicyAssignmentsArray = gcPolicyAssignments.ToArray(); // Sort assignments by policy display name Array.Sort(gcPolicyAssignmentsArray, (first, second) => { return(string.Compare(first.PolicyDisplayName, second.PolicyDisplayName, true)); }); if (!isStatusHistoryCmdlet) { foreach (var gcPolicyAssignment in gcPolicyAssignmentsArray) { var reportGuid = CommonHelpers.GetReportGUIDFromID(gcPolicyAssignment.LatestReportId); GuestConfigurationAssignmentReport gcrpReport = null; if (gcPolicyAssignment.LatestReportId != null) { gcrpReport = GuestConfigurationClient.GuestConfigurationAssignmentReports.Get(resourceGroupName, gcPolicyAssignment.Configuration.Name, reportGuid, vmName); } gcPolicyAssignmentReportList.Add(new GuestConfigurationPolicyAssignmentReport(gcrpReport, gcPolicyAssignment)); } } else { foreach (var gcPolicyAssignment in gcPolicyAssignmentsArray) { var gcrpReportss = GuestConfigurationClient.GuestConfigurationAssignmentReports.List(resourceGroupName, gcPolicyAssignment.Configuration.Name, vmName); var gcrpReportsList = gcrpReportss.Value; if (isShowStatusChangeOnlyPresent) { gcrpReportsList = GetReportsWithOnlyStatusChanges(gcrpReportsList); } if (gcrpReportsList != null) { var statusHistoryList = new List <GuestConfigurationPolicyAssignmentReport>(); foreach (var gcrpReport in gcrpReportsList) { statusHistoryList.Add(new GuestConfigurationPolicyAssignmentReport(gcrpReport, gcPolicyAssignment)); } gcPolicyAssignmentReportList.AddRange(statusHistoryList); } } } return(gcPolicyAssignmentReportList); }
// Get guest configuration policy statuses by initiative definition name protected IEnumerable <PolicyStatusDetailed> GetPolicyStatusesDetailedByInitiativeName(string resourceGroupName, string vmName, string initiativeName, IEnumerable <GuestConfigurationAssignment> gcrpAssignments) { var gcPolicyAssignments = GetPolicyStatuses(resourceGroupName, vmName, gcrpAssignments, initiativeName); var gcPolicyAssignmentReportList = new List <PolicyStatusDetailed>(); if (gcPolicyAssignments.Count() > 0) { var gcPolicyAssignmentsArray = gcPolicyAssignments.ToArray(); // Sort assignments by policy display name Array.Sort(gcPolicyAssignmentsArray, (first, second) => { return(string.Compare(first.PolicyDisplayName, second.PolicyDisplayName, true)); }); foreach (var gcPolicyAssignment in gcPolicyAssignmentsArray) { var reportGuid = CommonHelpers.GetReportGUIDFromID(gcPolicyAssignment.LatestReportId); GuestConfigurationAssignmentReport gcrpReport = null; if (gcPolicyAssignment.LatestReportId != null) { gcrpReport = GuestConfigurationClient.GuestConfigurationAssignmentReports.Get(resourceGroupName, gcPolicyAssignment.Configuration.Name, reportGuid, vmName); } PolicyStatusDetailed policyDetailed = new PolicyStatusDetailed(gcrpReport, gcPolicyAssignment); QueryOptions queryOptions = new QueryOptions(); queryOptions.Filter = string.Format("resourceGroup eq '{0}' and policyDefinitionAction eq 'deployifnotexists' and contains(ResourceId,'{1}')", resourceGroupName, vmName); queryOptions.OrderBy = "Timestamp desc"; queryOptions.Top = 1; PolicyStatesQueryResults policyDbResults = PolicyInsightsClient.PolicyStates.ListQueryResultsForPolicySetDefinition("latest", DefaultContext.Subscription.Id, gcPolicyAssignment.PolicySetDefinitionName, queryOptions); if (policyDbResults.Odatacount > 0 && policyDbResults.Value[0].IsCompliant.HasValue && !policyDbResults.Value[0].IsCompliant.Value) { policyDetailed.ComplianceStatus = "NonCompliant"; } gcPolicyAssignmentReportList.Add(policyDetailed); } } return(gcPolicyAssignmentReportList); }
// Get guest configuration policy statuses by initiative definition name protected IEnumerable <PolicyStatusDetailed> GetPolicyStatusesDetailedByInitiativeName(string resourceGroupName, string vmName, string initiativeName, IEnumerable <GuestConfigurationAssignment> gcrpAssignments) { var gcPolicyAssignments = GetPolicyStatuses(resourceGroupName, vmName, gcrpAssignments, initiativeName); var gcPolicyAssignmentReportList = new List <PolicyStatusDetailed>(); if (gcPolicyAssignments.Count() > 0) { var gcPolicyAssignmentsArray = gcPolicyAssignments.ToArray(); // Sort assignments by policy display name Array.Sort(gcPolicyAssignmentsArray, (first, second) => { return(string.Compare(first.PolicyDisplayName, second.PolicyDisplayName, true)); }); foreach (var gcPolicyAssignment in gcPolicyAssignmentsArray) { var reportGuid = CommonHelpers.GetReportGUIDFromID(gcPolicyAssignment.LatestReportId); GuestConfigurationAssignmentReport gcrpVMReport = null; GuestConfigurationAssignmentReport gcrpHCReport = null; GuestConfigurationAssignmentReport gcrpReport = null; if (gcPolicyAssignment.LatestReportId != null) { //check Azure VM try { gcrpVMReport = GuestConfigurationClient.GuestConfigurationAssignmentReports.Get(resourceGroupName, gcPolicyAssignment.Configuration.Name, reportGuid, vmName); } catch (GuestConfigurationErrorResponseException exception) when(HttpStatusCode.NotFound.Equals(exception.Response.StatusCode)) { this.WriteVerbose(string.Format(StringResources.NotFoundByReportId, reportGuid)); } //check HybridCompute machine try { gcrpHCReport = GuestConfigurationClient.GuestConfigurationHCRPAssignmentReports.Get(resourceGroupName, gcPolicyAssignment.Configuration.Name, reportGuid, vmName); } catch (GuestConfigurationErrorResponseException exception) when(HttpStatusCode.NotFound.Equals(exception.Response.StatusCode)) { this.WriteVerbose(string.Format(StringResources.NotFoundByReportId, reportGuid)); } gcrpReport = gcrpVMReport != null ? gcrpVMReport : gcrpHCReport; } PolicyStatusDetailed policyDetailed = new PolicyStatusDetailed(gcrpReport, gcPolicyAssignment); QueryOptions queryOptions = new QueryOptions(); queryOptions.Filter = string.Format("PolicySetDefinitionName eq '{0}' and contains(ResourceId,'{1}')", gcPolicyAssignment.PolicySetDefinitionName, vmName); queryOptions.OrderBy = "Timestamp desc"; queryOptions.Top = 1; PolicyStatesQueryResults policyDbResults = PolicyInsightsClient.PolicyStates.ListQueryResultsForResourceGroup("latest", DefaultContext.Subscription.Id, resourceGroupName, queryOptions); if (policyDbResults.Odatacount > 0 && policyDbResults.Value[0].IsCompliant.HasValue && !policyDbResults.Value[0].IsCompliant.Value) { policyDetailed.ComplianceStatus = "NonCompliant"; } gcPolicyAssignmentReportList.Add(policyDetailed); } } return(gcPolicyAssignmentReportList); }
public GuestConfigurationPolicyAssignmentReport(GuestConfigurationAssignmentReport gcrpReport, GuestConfigurationPolicyAssignment gcPolicyAssignment) { if (gcPolicyAssignment != null) { this.PolicyDisplayName = gcPolicyAssignment.PolicyDisplayName; this.Configuration = gcPolicyAssignment.Configuration; this.ComplianceStatus = gcPolicyAssignment.ComplianceStatus; // Initially, gcrpReport can be null. So use status from assignment. } this.ComplianceReasons = new List <ComplianceReasonDetails>(); if (gcrpReport != null && gcrpReport.Properties != null) { this.LatestReportId = gcrpReport.Id; this.StartTime = gcrpReport.Properties.StartTime; this.EndTime = gcrpReport.Properties.EndTime; this.ComplianceStatus = gcrpReport.Properties.ComplianceStatus; if (gcrpReport.Properties.Details != null) { foreach (var gcrpResource in gcrpReport.Properties.Details.Resources) { if (gcrpResource == null) { continue; } var propertiesJObject = JObject.Parse(gcrpResource.Properties.ToString()); if (propertiesJObject == null) { continue; } var propertiesDictionary = propertiesJObject.ToObject <Dictionary <string, object> >(); string policy = null; if (propertiesDictionary.ContainsKey(Constants.Policy)) { policy = propertiesDictionary[Constants.Policy].ToString(); } string resourceId = null; if (propertiesDictionary.ContainsKey(Constants.ResourceId)) { resourceId = propertiesDictionary[Constants.ResourceId].ToString(); } var resourceReasons = new List <ReasonAndCode>(); foreach (var reason in gcrpResource.Reasons) { resourceReasons.Add( new ReasonAndCode() { Reason = reason.Phrase, Code = reason.Code, } ); } var complianceReason = new ComplianceReasonDetails() { Policy = policy, ResourceId = resourceId, ComplianceStatus = gcrpResource.ComplianceStatus, Reasons = resourceReasons, }; this.ComplianceReasons.Add(complianceReason); } } if (gcrpReport.Properties.Vm != null) { this.VM = new VMInfo() { Uuid = gcrpReport.Properties.Vm.Uuid, ResourceId = gcrpReport.Properties.Vm.Id, }; } } }