// 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);
        }
Exemple #2
0
        // 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);
        }