Exemplo n.º 1
0
        /// <summary>
        /// Extracts resource and resource group from ARM Id
        /// </summary>
        /// <param name="input">input string</param>
        /// <returns></returns>
        public static ExtractedInfo ExtractFromActionRuleResourceId(string resourceId)
        {
            ExtractedInfo info = new ExtractedInfo();

            string[] tokens = resourceId.Split('/');
            if (tokens.Length == 9)
            {
                info.ResourceGroupName = tokens[4];
                info.Resource          = tokens[8];
                return(info);
            }
            else
            {
                throw new PSArgumentException(string.Format(Resources.InvalidResourceId, resourceId));
            }
        }
Exemplo n.º 2
0
        protected override void ProcessRecordInternal()
        {
            ActionRule result = new ActionRule();

            if (ShouldProcess(
                    target: string.Format(Resources.TargetWithRG, this.Name, this.ResourceGroupName),
                    action: Resources.CreateOrUpdateActionRule_Action))
            {
                switch (ParameterSetName)
                {
                case BySimplifiedFormatActionGroupActionRuleParameterSet:
                    if (ActionRuleType != "ActionGroup")
                    {
                        throw new PSInvalidOperationException(string.Format(Resources.IncorrectActionRuleType_Exception, "ActionGroup"));
                    }

                    // Create Action Rule
                    ActionRule actionGroupAR = new ActionRule(
                        location: "Global",
                        tags: new Dictionary <string, string>(),
                        properties: new ActionGroup(
                            scope: ParseScope(),
                            conditions: ParseConditions(),
                            actionGroupId: ActionGroupId,
                            description: Description,
                            status: Status
                            )
                        );

                    result = this.AlertsManagementClient.ActionRules.CreateUpdateWithHttpMessagesAsync(
                        resourceGroupName: ResourceGroupName, actionRuleName: Name, actionRule: actionGroupAR).Result.Body;
                    break;

                case BySimplifiedFormatSuppressionActionRuleParameterSet:

                    if (ActionRuleType != "Suppression")
                    {
                        throw new PSInvalidOperationException(string.Format(Resources.IncorrectActionRuleType_Exception, "Suppression"));
                    }

                    SuppressionConfig config = new SuppressionConfig(recurrenceType: ReccurenceType);
                    if (ReccurenceType != "Always")
                    {
                        config.Schedule = new SuppressionSchedule(
                            startDate: SuppressionStartTime.Split(' ')[0],
                            endDate: SuppressionEndTime.Split(' ')[0],
                            startTime: SuppressionStartTime.Split(' ')[1],
                            endTime: SuppressionEndTime.Split(' ')[1]
                            );

                        if (ReccurentValue.Length > 0)
                        {
                            config.Schedule.RecurrenceValues = ReccurentValue.OfType <int?>().ToList();
                        }
                    }

                    // Create Action Rule
                    ActionRule suppressionAR = new ActionRule(
                        location: "Global",
                        tags: new Dictionary <string, string>(),
                        properties: new Suppression(
                            scope: ParseScope(),
                            conditions: ParseConditions(),
                            description: Description,
                            status: Status,
                            suppressionConfig: config
                            )
                        );

                    result = this.AlertsManagementClient.ActionRules.CreateUpdateWithHttpMessagesAsync(
                        resourceGroupName: ResourceGroupName, actionRuleName: Name, actionRule: suppressionAR).Result.Body;
                    break;

                case BySimplifiedFormatDiagnosticsActionRuleParameterSet:
                    if (ActionRuleType != "Diagnostics")
                    {
                        throw new PSInvalidOperationException(string.Format(Resources.IncorrectActionRuleType_Exception, "Diagnostics"));
                    }

                    // Create Action Rule
                    ActionRule diagnosticsAR = new ActionRule(
                        location: "Global",
                        tags: new Dictionary <string, string>(),
                        properties: new Diagnostics(
                            scope: ParseScope(),
                            conditions: ParseConditions(),
                            description: Description,
                            status: Status
                            )
                        );

                    result = this.AlertsManagementClient.ActionRules.CreateUpdateWithHttpMessagesAsync(
                        resourceGroupName: ResourceGroupName, actionRuleName: Name, actionRule: diagnosticsAR).Result.Body;

                    break;

                case ByInputObjectParameterSet:
                    ExtractedInfo info = CommonUtils.ExtractFromActionRuleResourceId(InputObject.Id);
                    switch (InputObject.ActionRuleType)
                    {
                    case "ActionGroup":
                        // Create Action Rule
                        PSActionGroupActionRule actionGroupInputObject = (PSActionGroupActionRule)InputObject;
                        ActionRule actionGroupARFromInputObject        = new ActionRule(
                            location: "Global",
                            tags: new Dictionary <string, string>(),
                            properties: new ActionGroup(
                                scope: JsonConvert.DeserializeObject <Scope>(actionGroupInputObject.Scope),
                                conditions: JsonConvert.DeserializeObject <Conditions>(actionGroupInputObject.Conditions),
                                actionGroupId: actionGroupInputObject.ActionGroupId,
                                description: actionGroupInputObject.Description,
                                status: actionGroupInputObject.Status
                                )
                            );

                        result = this.AlertsManagementClient.ActionRules.CreateUpdateWithHttpMessagesAsync(
                            resourceGroupName: info.ResourceGroupName, actionRuleName: info.Resource, actionRule: actionGroupARFromInputObject).Result.Body;
                        break;

                    case "Suppression":
                        PSSuppressionActionRule suppressionInputObject = (PSSuppressionActionRule)InputObject;
                        SuppressionConfig       configFromInputObject  = new SuppressionConfig(recurrenceType: suppressionInputObject.RecurrenceType);
                        if (suppressionInputObject.RecurrenceType != "Always")
                        {
                            configFromInputObject.Schedule = new SuppressionSchedule(
                                startDate: suppressionInputObject.StartDate,
                                endDate: suppressionInputObject.EndDate,
                                startTime: suppressionInputObject.StartTime,
                                endTime: suppressionInputObject.EndTime
                                );

                            if (ReccurentValue.Length > 0)
                            {
                                configFromInputObject.Schedule.RecurrenceValues = suppressionInputObject.RecurrenceValues;
                            }
                        }

                        // Create Action Rule
                        ActionRule suppressionARFromInputObject = new ActionRule(
                            location: "Global",
                            tags: new Dictionary <string, string>(),
                            properties: new Suppression(
                                scope: JsonConvert.DeserializeObject <Scope>(suppressionInputObject.Scope),
                                conditions: JsonConvert.DeserializeObject <Conditions>(suppressionInputObject.Conditions),
                                description: suppressionInputObject.Description,
                                status: suppressionInputObject.Status,
                                suppressionConfig: configFromInputObject
                                )
                            );

                        result = this.AlertsManagementClient.ActionRules.CreateUpdateWithHttpMessagesAsync(
                            resourceGroupName: info.ResourceGroupName, actionRuleName: info.Resource, actionRule: suppressionARFromInputObject).Result.Body;
                        break;

                    case "Diagnostics":
                        // Create Action Rule
                        PSDiagnosticsActionRule diagnosticsInputObject = (PSDiagnosticsActionRule)InputObject;
                        ActionRule diagnosticsARFromInputObject        = new ActionRule(
                            location: "Global",
                            tags: new Dictionary <string, string>(),
                            properties: new Diagnostics(
                                scope: JsonConvert.DeserializeObject <Scope>(diagnosticsInputObject.Scope),
                                conditions: JsonConvert.DeserializeObject <Conditions>(diagnosticsInputObject.Conditions),
                                description: diagnosticsInputObject.Description,
                                status: diagnosticsInputObject.Status
                                )
                            );

                        result = this.AlertsManagementClient.ActionRules.CreateUpdateWithHttpMessagesAsync(
                            resourceGroupName: info.ResourceGroupName, actionRuleName: info.Resource, actionRule: diagnosticsARFromInputObject).Result.Body;
                        break;
                    }
                    break;
                }

                WriteObject(sendToPipeline: TransformOutput(result));
            }
        }
        protected override void ProcessRecordInternal()
        {
            try
            {
                switch (ParameterSetName)
                {
                case ListAlertProcessingRulesParameterSet:
                case ListAlertProcessingRulesByResourceGroupParameterSet:
                    IPage <AlertProcessingRule> pageResult = new Page <AlertProcessingRule>();
                    List <AlertProcessingRule>  resultList = new List <AlertProcessingRule>();
                    bool listByResourceGroup = false;

                    if (string.IsNullOrWhiteSpace(ResourceGroupName))
                    {
                        pageResult = this.AlertsManagementClient.AlertProcessingRules.ListBySubscriptionWithHttpMessagesAsync(
                            ).Result.Body;

                        listByResourceGroup = false;
                    }
                    else
                    {
                        pageResult = this.AlertsManagementClient.AlertProcessingRules.ListByResourceGroupWithHttpMessagesAsync(
                            resourceGroupName: ResourceGroupName
                            ).Result.Body;

                        listByResourceGroup = true;
                    }

                    // Deal with paging in response
                    ulong first = MyInvocation.BoundParameters.ContainsKey("First") ? this.PagingParameters.First : ulong.MaxValue;
                    ulong skip  = MyInvocation.BoundParameters.ContainsKey("Skip") ? this.PagingParameters.Skip : 0;

                    // Any items before this count should be return
                    ulong lastCount    = MyInvocation.BoundParameters.ContainsKey("First") ? skip + first : ulong.MaxValue;
                    ulong currentCount = 0;
                    var   nextPageLink = pageResult.NextPageLink;

                    do
                    {
                        nextPageLink = pageResult.NextPageLink;
                        List <AlertProcessingRule> tempList = pageResult.ToList();
                        if (currentCount + (ulong)tempList.Count - 1 < skip)
                        {
                            // skip the whole chunk if they are all in skip
                            currentCount += (ulong)tempList.Count;
                        }
                        else
                        {
                            foreach (AlertProcessingRule currentActionRule in tempList)
                            {
                                // not return "skip" count of items in the begin, and only return "first" count of items after that.
                                if (currentCount >= skip && currentCount < lastCount)
                                {
                                    resultList.Add(currentActionRule);
                                }
                                currentCount++;
                                if (currentCount >= lastCount)
                                {
                                    break;
                                }
                            }
                        }

                        if (!string.IsNullOrEmpty(nextPageLink))
                        {
                            if (listByResourceGroup)
                            {
                                pageResult = this.AlertsManagementClient.AlertProcessingRules.ListByResourceGroupNextWithHttpMessagesAsync(nextPageLink).Result.Body;
                            }
                            else
                            {
                                pageResult = this.AlertsManagementClient.AlertProcessingRules.ListBySubscriptionNextWithHttpMessagesAsync(nextPageLink).Result.Body;
                            }
                        }
                    } while (!string.IsNullOrEmpty(nextPageLink) && currentCount < lastCount);

                    WriteObject(resultList.Select((r) => TransformOutput(r)), enumerateCollection: true);
                    break;

                case AlertProcessingRuleByNameParameterSet:
                    var rulebyName = this.AlertsManagementClient.AlertProcessingRules.GetByNameWithHttpMessagesAsync(ResourceGroupName, Name).Result.Body;
                    WriteObject(sendToPipeline: TransformOutput(rulebyName));
                    break;

                case ResourceIdParameterSet:
                    ExtractedInfo info     = CommonUtils.ExtractFromActionRuleResourceId(ResourceId);
                    var           ruleById = this.AlertsManagementClient.AlertProcessingRules.GetByNameWithHttpMessagesAsync(info.ResourceGroupName, info.Resource).Result.Body;
                    WriteObject(sendToPipeline: TransformOutput(ruleById));
                    break;
                }
            }
            catch (Exception e)
            {
                throw (e);
            }
        }
Exemplo n.º 4
0
        protected override void ProcessRecordInternal()
        {
            AlertProcessingRule result = new AlertProcessingRule();

            if (ShouldProcess(
                    target: string.Format(Resources.TargetWithRG, this.Name, this.ResourceGroupName),
                    action: Resources.CreateOrUpdateAlertProcessingRule_Action))
            {
                try
                {
                    switch (ParameterSetName)
                    {
                    case BySimplifiedFormatActionGroupAlertProcessingRuleParameterSet:
                        if (AlertProcessingRuleType != "AddActionGroups")
                        {
                            throw new PSInvalidOperationException(string.Format(Resources.IncorrectActionRuleType_Exception, "AddActionGroups"));
                        }

                        // Create Alert Processing Rule
                        AlertProcessingRule actionGroupAR = new AlertProcessingRule(
                            location: "Global",
                            tags: ParseTags(),
                            properties: new AlertProcessingRuleProperties(
                                scopes: Scope,
                                actions: ParseAddActionGroupsActions(),
                                conditions: ParseConditions(),
                                schedule: ValidateParseSchedule(),
                                description: Description,
                                enabled: Enabled == null ? true : bool.Parse(Enabled)
                                )
                            );

                        result = this.AlertsManagementClient.AlertProcessingRules.CreateOrUpdateWithHttpMessagesAsync(
                            resourceGroupName: ResourceGroupName, alertProcessingRuleName: Name, alertProcessingRule: actionGroupAR).Result.Body;
                        break;

                    case BySimplifiedFormatSuppressionAlertProcessingRuleParameterSet:

                        if (AlertProcessingRuleType != "RemoveAllActionGroups")
                        {
                            throw new PSInvalidOperationException(string.Format(Resources.IncorrectActionRuleType_Exception, "RemoveAllActionGroups"));
                        }

                        // Create Action Rule
                        AlertProcessingRule suppressionAR = new AlertProcessingRule(
                            location: "Global",
                            tags: ParseTags(),
                            properties: new AlertProcessingRuleProperties(
                                scopes: Scope,
                                actions: ParseRemoveAllActionGroupsActions(),
                                conditions: ParseConditions(),
                                schedule: ValidateParseSchedule(),
                                description: Description,
                                enabled: Enabled == null ? true : bool.Parse(Enabled)
                                )
                            );

                        result = this.AlertsManagementClient.AlertProcessingRules.CreateOrUpdateWithHttpMessagesAsync(
                            resourceGroupName: ResourceGroupName, alertProcessingRuleName: Name, alertProcessingRule: suppressionAR).Result.Body;
                        break;

                    case ByInputObjectParameterSet:
                        ExtractedInfo info = CommonUtils.ExtractFromActionRuleResourceId(InputObject.Id);
                        switch (InputObject.AlertProcessingType)
                        {
                        case "AddActionGroups":
                            // Create AlertProcessing Rule
                            PSActionGroupAlertProcessingRule actionGroupInputObject           = (PSActionGroupAlertProcessingRule)InputObject;
                            AlertProcessingRule actionGroupAlertProcessingRuleFromInputObject = new AlertProcessingRule(
                                location: "Global",
                                tags: JsonConvert.DeserializeObject <IDictionary <string, string> >(actionGroupInputObject.Tags),
                                properties: new AlertProcessingRuleProperties(
                                    scopes: JsonConvert.DeserializeObject <IList <string> >(actionGroupInputObject.Scopes),
                                    actions: ExtractActions(actionGroupInputObject.ActionGroupIds),
                                    conditions: JsonConvert.DeserializeObject <IList <Condition> >(actionGroupInputObject.Conditions),
                                    schedule: JsonConvert.DeserializeObject <Schedule>(actionGroupInputObject.Schedule),
                                    description: actionGroupInputObject.Description,
                                    enabled: actionGroupInputObject.Enabled == "True" ? true : false
                                    )
                                );

                            result = this.AlertsManagementClient.AlertProcessingRules.CreateOrUpdateWithHttpMessagesAsync(
                                resourceGroupName: info.ResourceGroupName, alertProcessingRuleName: info.Resource, alertProcessingRule: actionGroupAlertProcessingRuleFromInputObject).Result.Body;
                            break;

                        case "RemoveAllActionGroups":
                            PSSuppressionAlertProcessingRule suppressionInputObject = (PSSuppressionAlertProcessingRule)InputObject;

                            // Create AlertProcessing Rule
                            AlertProcessingRule suppressionARFromInputObject = new AlertProcessingRule(
                                location: "Global",
                                tags: JsonConvert.DeserializeObject <IDictionary <string, string> >(suppressionInputObject.Tags),
                                properties: new AlertProcessingRuleProperties(
                                    scopes: JsonConvert.DeserializeObject <IList <string> >(suppressionInputObject.Scopes),
                                    actions: ParseRemoveAllActionGroupsActions(),
                                    conditions: JsonConvert.DeserializeObject <IList <Condition> >(suppressionInputObject.Conditions),
                                    schedule: JsonConvert.DeserializeObject <Schedule>(suppressionInputObject.Schedule),
                                    description: suppressionInputObject.Description,
                                    enabled: suppressionInputObject.Enabled == "True" ? true : false
                                    )
                                );

                            result = this.AlertsManagementClient.AlertProcessingRules.CreateOrUpdateWithHttpMessagesAsync(
                                resourceGroupName: info.ResourceGroupName, alertProcessingRuleName: info.Resource, alertProcessingRule: suppressionARFromInputObject).Result.Body;
                            break;
                        }
                        break;
                    }
                }
                catch (System.Exception e)
                {
                    throw (e);
                }
                WriteObject(sendToPipeline: TransformOutput(result));
            }
        }