/******************************************************************************* * Copyright 2012-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"). You may not use * this file except in compliance with the License. A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. * ***************************************************************************** * * AWS Tools for Windows (TM) PowerShell (TM) * */ using System; using System.Collections.Generic; using System.Linq; using System.Management.Automation; using System.Text; using Amazon.PowerShell.Common; using Amazon.Runtime; using Amazon.RDS; using Amazon.RDS.Model; namespace Amazon.PowerShell.Cmdlets.RDS { /// /// Creates an RDS event notification subscription. This operation requires a topic Amazon /// Resource Name (ARN) created by either the RDS console, the SNS console, or the SNS /// API. To obtain an ARN with SNS, you must create a topic in Amazon SNS and subscribe /// to the topic. The ARN is displayed in the SNS console. /// /// /// /// You can specify the type of source (SourceType) that you want to be notified /// of and provide a list of RDS sources (SourceIds) that triggers the events. /// You can also provide a list of event categories (EventCategories) for /// events that you want to be notified of. For example, you can specify SourceType /// = db-instance, SourceIds = mydbinstance1, mydbinstance2 /// and EventCategories = Availability, Backup. /// /// If you specify both the SourceType and SourceIds, such as /// SourceType = db-instance and SourceIds = myDBInstance1, /// you are notified of all the db-instance events for the specified source. /// If you specify a SourceType but do not specify SourceIds, /// you receive notice of the events for that source type for all your RDS sources. If /// you don't specify either the SourceType or the SourceIds, you are notified /// of events generated from all RDS sources belonging to your customer account. /// /// For more information about subscribing to an event for RDS DB engines, see /// Subscribing to Amazon RDS event notification in the Amazon RDS User Guide. /// /// For more information about subscribing to an event for Aurora DB engines, see /// Subscribing to Amazon RDS event notification in the Amazon Aurora User Guide. /// /// [Cmdlet("New", "RDSEventSubscription", SupportsShouldProcess = true, ConfirmImpact = ConfirmImpact.Medium)] [OutputType("Amazon.RDS.Model.EventSubscription")] [AWSCmdlet("Calls the Amazon Relational Database Service CreateEventSubscription API operation.", Operation = new[] {"CreateEventSubscription"}, SelectReturnType = typeof(Amazon.RDS.Model.CreateEventSubscriptionResponse))] [AWSCmdletOutput("Amazon.RDS.Model.EventSubscription or Amazon.RDS.Model.CreateEventSubscriptionResponse", "This cmdlet returns an Amazon.RDS.Model.EventSubscription object.", "The service call response (type Amazon.RDS.Model.CreateEventSubscriptionResponse) can also be referenced from properties attached to the cmdlet entry in the $AWSHistory stack." )] public partial class NewRDSEventSubscriptionCmdlet : AmazonRDSClientCmdlet, IExecutor { #region Parameter Enabled /// /// /// A value that indicates whether to activate the subscription. If the event notification /// subscription isn't activated, the subscription is created but not active. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public System.Boolean? Enabled { get; set; } #endregion #region Parameter EventCategory /// /// /// A list of event categories for a particular source type (SourceType) /// that you want to subscribe to. You can see a list of the categories for a given source /// type in the "Amazon RDS event categories and event messages" section of the Amazon RDS User Guide or the Amazon Aurora User Guide. You can also see this list by using the DescribeEventCategories /// operation. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] [Alias("EventCategories")] public System.String[] EventCategory { get; set; } #endregion #region Parameter SnsTopicArn /// /// /// The Amazon Resource Name (ARN) of the SNS topic created for event notification. The /// ARN is created by Amazon SNS when you create a topic and subscribe to it. /// /// #if !MODULAR [System.Management.Automation.Parameter(Position = 1, ValueFromPipelineByPropertyName = true)] #else [System.Management.Automation.Parameter(Position = 1, ValueFromPipelineByPropertyName = true, Mandatory = true)] [System.Management.Automation.AllowEmptyString] [System.Management.Automation.AllowNull] #endif [Amazon.PowerShell.Common.AWSRequiredParameter] public System.String SnsTopicArn { get; set; } #endregion #region Parameter SourceId /// /// /// The list of identifiers of the event sources for which events are returned. If not /// specified, then all sources are included in the response. An identifier must begin /// with a letter and must contain only ASCII letters, digits, and hyphens. It can't end /// with a hyphen or contain two consecutive hyphens.Constraints: /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] [Alias("SourceIds")] public System.String[] SourceId { get; set; } #endregion #region Parameter SourceType /// /// /// The type of source that is generating the events. For example, if you want to be notified /// of events generated by a DB instance, you set this parameter to db-instance. /// For RDS Proxy events, specify db-proxy. If this value isn't specified, /// all events are returned.Valid values: db-instance | db-cluster | db-parameter-group /// | db-security-group | db-snapshot | db-cluster-snapshot /// | db-proxy /// /// [System.Management.Automation.Parameter(Position = 2, ValueFromPipelineByPropertyName = true)] public System.String SourceType { get; set; } #endregion #region Parameter SubscriptionName /// /// /// The name of the subscription.Constraints: The name must be less than 255 characters. /// /// #if !MODULAR [System.Management.Automation.Parameter(Position = 0, ValueFromPipelineByPropertyName = true, ValueFromPipeline = true)] #else [System.Management.Automation.Parameter(Position = 0, ValueFromPipelineByPropertyName = true, ValueFromPipeline = true, Mandatory = true)] [System.Management.Automation.AllowEmptyString] [System.Management.Automation.AllowNull] #endif [Amazon.PowerShell.Common.AWSRequiredParameter] public System.String SubscriptionName { get; set; } #endregion #region Parameter Tag /// /// /// The service has not provided documentation for this parameter; please refer to the service's API reference documentation for the latest available information. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] [Alias("Tags")] public Amazon.RDS.Model.Tag[] Tag { get; set; } #endregion #region Parameter Select /// /// Use the -Select parameter to control the cmdlet output. The default value is 'EventSubscription'. /// Specifying -Select '*' will result in the cmdlet returning the whole service response (Amazon.RDS.Model.CreateEventSubscriptionResponse). /// Specifying the name of a property of type Amazon.RDS.Model.CreateEventSubscriptionResponse will result in that property being returned. /// Specifying -Select '^ParameterName' will result in the cmdlet returning the selected cmdlet parameter value. /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public string Select { get; set; } = "EventSubscription"; #endregion #region Parameter PassThru /// /// Changes the cmdlet behavior to return the value passed to the SubscriptionName parameter. /// The -PassThru parameter is deprecated, use -Select '^SubscriptionName' instead. This parameter will be removed in a future version. /// [System.Obsolete("The -PassThru parameter is deprecated, use -Select '^SubscriptionName' instead. This parameter will be removed in a future version.")] [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public SwitchParameter PassThru { get; set; } #endregion #region Parameter Force /// /// This parameter overrides confirmation prompts to force /// the cmdlet to continue its operation. This parameter should always /// be used with caution. /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public SwitchParameter Force { get; set; } #endregion protected override void ProcessRecord() { this._AWSSignerType = "v4"; base.ProcessRecord(); var resourceIdentifiersText = FormatParameterValuesForConfirmationMsg(nameof(this.SubscriptionName), MyInvocation.BoundParameters); if (!ConfirmShouldProceed(this.Force.IsPresent, resourceIdentifiersText, "New-RDSEventSubscription (CreateEventSubscription)")) { return; } var context = new CmdletContext(); // allow for manipulation of parameters prior to loading into context PreExecutionContextLoad(context); #pragma warning disable CS0618, CS0612 //A class member was marked with the Obsolete attribute if (ParameterWasBound(nameof(this.Select))) { context.Select = CreateSelectDelegate(Select) ?? throw new System.ArgumentException("Invalid value for -Select parameter.", nameof(this.Select)); if (this.PassThru.IsPresent) { throw new System.ArgumentException("-PassThru cannot be used when -Select is specified.", nameof(this.Select)); } } else if (this.PassThru.IsPresent) { context.Select = (response, cmdlet) => this.SubscriptionName; } #pragma warning restore CS0618, CS0612 //A class member was marked with the Obsolete attribute context.Enabled = this.Enabled; if (this.EventCategory != null) { context.EventCategory = new List(this.EventCategory); } context.SnsTopicArn = this.SnsTopicArn; #if MODULAR if (this.SnsTopicArn == null && ParameterWasBound(nameof(this.SnsTopicArn))) { WriteWarning("You are passing $null as a value for parameter SnsTopicArn which is marked as required. In case you believe this parameter was incorrectly marked as required, report this by opening an issue at https://github.com/aws/aws-tools-for-powershell/issues."); } #endif if (this.SourceId != null) { context.SourceId = new List(this.SourceId); } context.SourceType = this.SourceType; context.SubscriptionName = this.SubscriptionName; #if MODULAR if (this.SubscriptionName == null && ParameterWasBound(nameof(this.SubscriptionName))) { WriteWarning("You are passing $null as a value for parameter SubscriptionName which is marked as required. In case you believe this parameter was incorrectly marked as required, report this by opening an issue at https://github.com/aws/aws-tools-for-powershell/issues."); } #endif if (this.Tag != null) { context.Tag = new List(this.Tag); } // allow further manipulation of loaded context prior to processing PostExecutionContextLoad(context); var output = Execute(context) as CmdletOutput; ProcessOutput(output); } #region IExecutor Members public object Execute(ExecutorContext context) { var cmdletContext = context as CmdletContext; // create request var request = new Amazon.RDS.Model.CreateEventSubscriptionRequest(); if (cmdletContext.Enabled != null) { request.Enabled = cmdletContext.Enabled.Value; } if (cmdletContext.EventCategory != null) { request.EventCategories = cmdletContext.EventCategory; } if (cmdletContext.SnsTopicArn != null) { request.SnsTopicArn = cmdletContext.SnsTopicArn; } if (cmdletContext.SourceId != null) { request.SourceIds = cmdletContext.SourceId; } if (cmdletContext.SourceType != null) { request.SourceType = cmdletContext.SourceType; } if (cmdletContext.SubscriptionName != null) { request.SubscriptionName = cmdletContext.SubscriptionName; } if (cmdletContext.Tag != null) { request.Tags = cmdletContext.Tag; } CmdletOutput output; // issue call var client = Client ?? CreateClient(_CurrentCredentials, _RegionEndpoint); try { var response = CallAWSServiceOperation(client, request); object pipelineOutput = null; pipelineOutput = cmdletContext.Select(response, this); output = new CmdletOutput { PipelineOutput = pipelineOutput, ServiceResponse = response }; } catch (Exception e) { output = new CmdletOutput { ErrorResponse = e }; } return output; } public ExecutorContext CreateContext() { return new CmdletContext(); } #endregion #region AWS Service Operation Call private Amazon.RDS.Model.CreateEventSubscriptionResponse CallAWSServiceOperation(IAmazonRDS client, Amazon.RDS.Model.CreateEventSubscriptionRequest request) { Utils.Common.WriteVerboseEndpointMessage(this, client.Config, "Amazon Relational Database Service", "CreateEventSubscription"); try { #if DESKTOP return client.CreateEventSubscription(request); #elif CORECLR return client.CreateEventSubscriptionAsync(request).GetAwaiter().GetResult(); #else #error "Unknown build edition" #endif } catch (AmazonServiceException exc) { var webException = exc.InnerException as System.Net.WebException; if (webException != null) { throw new Exception(Utils.Common.FormatNameResolutionFailureMessage(client.Config, webException.Message), webException); } throw; } } #endregion internal partial class CmdletContext : ExecutorContext { public System.Boolean? Enabled { get; set; } public List EventCategory { get; set; } public System.String SnsTopicArn { get; set; } public List SourceId { get; set; } public System.String SourceType { get; set; } public System.String SubscriptionName { get; set; } public List Tag { get; set; } public System.Func Select { get; set; } = (response, cmdlet) => response.EventSubscription; } } }