// 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);
        }
Exemple #6
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);
        }
        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,
                    };
                }
            }
        }