/******************************************************************************* * 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.ElastiCache; using Amazon.ElastiCache.Model; namespace Amazon.PowerShell.Cmdlets.EC { /// /// Creates a Redis (cluster mode disabled) or a Redis (cluster mode enabled) replication /// group. /// /// /// /// This API can be used to create a standalone regional replication group or a secondary /// replication group associated with a Global datastore. /// /// A Redis (cluster mode disabled) replication group is a collection of clusters, where /// one of the clusters is a read/write primary and the others are read-only replicas. /// Writes to the primary are asynchronously propagated to the replicas. /// /// A Redis cluster-mode enabled cluster is comprised of from 1 to 90 shards (API/CLI: /// node groups). Each shard has a primary node and up to 5 read-only replica nodes. The /// configuration can range from 90 shards and 0 replicas to 15 shards and 5 replicas, /// which is the maximum number or replicas allowed. /// /// The node or shard limit can be increased to a maximum of 500 per cluster if the Redis /// engine version is 5.0.6 or higher. For example, you can choose to configure a 500 /// node cluster that ranges between 83 shards (one primary and 5 replicas per shard) /// and 500 shards (single primary and no replicas). Make sure there are enough available /// IP addresses to accommodate the increase. Common pitfalls include the subnets in the /// subnet group have too small a CIDR range or the subnets are shared and heavily used /// by other clusters. For more information, see Creating /// a Subnet Group. For versions below 5.0.6, the limit is 250 per cluster. /// /// To request a limit increase, see Amazon /// Service Limits and choose the limit type Nodes per cluster per instance type. /// /// /// When a Redis (cluster mode disabled) replication group has been successfully created, /// you can add one or more read replicas to it, up to a total of 5 read replicas. If /// you need to increase or decrease the number of node groups (console: shards), you /// can avail yourself of ElastiCache for Redis' scaling. For more information, see Scaling /// ElastiCache for Redis Clusters in the ElastiCache User Guide. /// /// This operation is valid for Redis only. /// /// [Cmdlet("New", "ECReplicationGroup", SupportsShouldProcess = true, ConfirmImpact = ConfirmImpact.Medium)] [OutputType("Amazon.ElastiCache.Model.ReplicationGroup")] [AWSCmdlet("Calls the Amazon ElastiCache CreateReplicationGroup API operation.", Operation = new[] {"CreateReplicationGroup"}, SelectReturnType = typeof(Amazon.ElastiCache.Model.CreateReplicationGroupResponse))] [AWSCmdletOutput("Amazon.ElastiCache.Model.ReplicationGroup or Amazon.ElastiCache.Model.CreateReplicationGroupResponse", "This cmdlet returns an Amazon.ElastiCache.Model.ReplicationGroup object.", "The service call response (type Amazon.ElastiCache.Model.CreateReplicationGroupResponse) can also be referenced from properties attached to the cmdlet entry in the $AWSHistory stack." )] public partial class NewECReplicationGroupCmdlet : AmazonElastiCacheClientCmdlet, IExecutor { #region Parameter AtRestEncryptionEnabled /// /// /// A flag that enables encryption at rest when set to true.You cannot modify the value of AtRestEncryptionEnabled after the replication /// group is created. To enable encryption at rest on a replication group you must set /// AtRestEncryptionEnabled to true when you create the replication /// group. Required: Only available when creating a replication group in an Amazon VPC /// using redis version 3.2.6, 4.x or later.Default: false /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public System.Boolean? AtRestEncryptionEnabled { get; set; } #endregion #region Parameter AuthToken /// /// /// Reserved parameter. The password used to access a password protected server.AuthToken can be specified only on replication groups where TransitEncryptionEnabled /// is true.For HIPAA compliance, you must specify TransitEncryptionEnabled as true, /// an AuthToken, and a CacheSubnetGroup.Password constraints:For more information, see AUTH password /// at http://redis.io/commands/AUTH. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public System.String AuthToken { get; set; } #endregion #region Parameter AutomaticFailoverEnabled /// /// /// Specifies whether a read-only replica is automatically promoted to read/write primary /// if the existing primary fails.AutomaticFailoverEnabled must be enabled for Redis (cluster mode enabled) /// replication groups.Default: false /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public System.Boolean? AutomaticFailoverEnabled { get; set; } #endregion #region Parameter AutoMinorVersionUpgrade /// /// ///  If you are running Redis engine version 6.0 or later, set this parameter to yes if /// you want to opt-in to the next auto minor version upgrade campaign. This parameter /// is disabled for previous versions.  /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public System.Boolean? AutoMinorVersionUpgrade { get; set; } #endregion #region Parameter CacheNodeType /// /// /// The compute and memory capacity of the nodes in the node group (shard).The following node types are supported by ElastiCache. Generally speaking, the current /// generation types provide more memory and computational power at lower cost when compared /// to their equivalent previous generation counterparts.Additional node type info /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public System.String CacheNodeType { get; set; } #endregion #region Parameter CacheParameterGroupName /// /// /// The name of the parameter group to associate with this replication group. If this /// argument is omitted, the default cache parameter group for the specified engine is /// used.If you are running Redis version 3.2.4 or later, only one node group (shard), and /// want to use a default parameter group, we recommend that you specify the parameter /// group by name. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public System.String CacheParameterGroupName { get; set; } #endregion #region Parameter CacheSecurityGroupName /// /// /// A list of cache security group names to associate with this replication group. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] [Alias("CacheSecurityGroupNames")] public System.String[] CacheSecurityGroupName { get; set; } #endregion #region Parameter CacheSubnetGroupName /// /// /// The name of the cache subnet group to be used for the replication group.If you're going to launch your cluster in an Amazon VPC, you need to create a subnet /// group before you start creating a cluster. For more information, see Subnets /// and Subnet Groups. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public System.String CacheSubnetGroupName { get; set; } #endregion #region Parameter ClusterMode /// /// /// Enabled or Disabled. To modify cluster mode from Disabled to Enabled, you must first /// set the cluster mode to Compatible. Compatible mode allows your Redis clients to connect /// using both cluster mode enabled and cluster mode disabled. After you migrate all Redis /// clients to use cluster mode enabled, you can then complete cluster mode configuration /// and set the cluster mode to Enabled. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] [AWSConstantClassSource("Amazon.ElastiCache.ClusterMode")] public Amazon.ElastiCache.ClusterMode ClusterMode { get; set; } #endregion #region Parameter DataTieringEnabled /// /// /// Enables data tiering. Data tiering is only supported for replication groups using /// the r6gd node type. This parameter must be set to true when using r6gd nodes. For /// more information, see Data /// tiering. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public System.Boolean? DataTieringEnabled { get; set; } #endregion #region Parameter Engine /// /// /// The name of the cache engine to be used for the clusters in this replication group. /// The value must be set to Redis. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public System.String Engine { get; set; } #endregion #region Parameter EngineVersion /// /// /// The version number of the cache engine to be used for the clusters in this replication /// group. To view the supported cache engine versions, use the DescribeCacheEngineVersions /// operation.Important: You can upgrade to a newer engine version (see Selecting /// a Cache Engine and Version) in the ElastiCache User Guide, but you cannot /// downgrade to an earlier engine version. If you want to use an earlier engine version, /// you must delete the existing cluster or replication group and create it anew with /// the earlier engine version. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public System.String EngineVersion { get; set; } #endregion #region Parameter GlobalReplicationGroupId /// /// /// The name of the Global datastore /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public System.String GlobalReplicationGroupId { get; set; } #endregion #region Parameter IpDiscovery /// /// /// The network type you choose when creating a replication group, either ipv4 /// | ipv6. IPv6 is supported for workloads using Redis engine version 6.2 /// onward or Memcached engine version 1.6.6 on all instances built on the Nitro /// system. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] [AWSConstantClassSource("Amazon.ElastiCache.IpDiscovery")] public Amazon.ElastiCache.IpDiscovery IpDiscovery { get; set; } #endregion #region Parameter KmsKeyId /// /// /// The ID of the KMS key used to encrypt the disk in the cluster. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public System.String KmsKeyId { get; set; } #endregion #region Parameter LogDeliveryConfiguration /// /// /// Specifies the destination, format and type of the logs. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] [Alias("LogDeliveryConfigurations")] public Amazon.ElastiCache.Model.LogDeliveryConfigurationRequest[] LogDeliveryConfiguration { get; set; } #endregion #region Parameter MultiAZEnabled /// /// /// A flag indicating if you have Multi-AZ enabled to enhance fault tolerance. For more /// information, see Minimizing /// Downtime: Multi-AZ. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public System.Boolean? MultiAZEnabled { get; set; } #endregion #region Parameter NetworkType /// /// /// Must be either ipv4 | ipv6 | dual_stack. IPv6 /// is supported for workloads using Redis engine version 6.2 onward or Memcached engine /// version 1.6.6 on all instances built on the Nitro /// system. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] [AWSConstantClassSource("Amazon.ElastiCache.NetworkType")] public Amazon.ElastiCache.NetworkType NetworkType { get; set; } #endregion #region Parameter NodeGroupConfiguration /// /// /// A list of node group (shard) configuration options. Each node group (shard) configuration /// has the following members: PrimaryAvailabilityZone, ReplicaAvailabilityZones, /// ReplicaCount, and Slots.If you're creating a Redis (cluster mode disabled) or a Redis (cluster mode enabled) /// replication group, you can use this parameter to individually configure each node /// group (shard), or you can omit this parameter. However, it is required when seeding /// a Redis (cluster mode enabled) cluster from a S3 rdb file. You must configure each /// node group (shard) using this parameter because you must specify the slots for each /// node group. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public Amazon.ElastiCache.Model.NodeGroupConfiguration[] NodeGroupConfiguration { get; set; } #endregion #region Parameter NotificationTopicArn /// /// /// The Amazon Resource Name (ARN) of the Amazon Simple Notification Service (SNS) topic /// to which notifications are sent.The Amazon SNS topic owner must be the same as the cluster owner. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public System.String NotificationTopicArn { get; set; } #endregion #region Parameter NumCacheCluster /// /// /// The number of clusters this replication group initially has.This parameter is not used if there is more than one node group (shard). You should /// use ReplicasPerNodeGroup instead.If AutomaticFailoverEnabled is true, the value of this parameter /// must be at least 2. If AutomaticFailoverEnabled is false /// you can omit this parameter (it will default to 1), or you can explicitly set it to /// a value between 2 and 6.The maximum permitted value for NumCacheClusters is 6 (1 primary plus /// 5 replicas). /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] [Alias("NumCacheClusters")] public System.Int32? NumCacheCluster { get; set; } #endregion #region Parameter NumNodeGroup /// /// /// An optional parameter that specifies the number of node groups (shards) for this Redis /// (cluster mode enabled) replication group. For Redis (cluster mode disabled) either /// omit this parameter or set it to 1.Default: 1 /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] [Alias("NumNodeGroups")] public System.Int32? NumNodeGroup { get; set; } #endregion #region Parameter Port /// /// /// The port number on which each member of the replication group accepts connections. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public System.Int32? Port { get; set; } #endregion #region Parameter PreferredCacheClusterAZs /// /// /// A list of EC2 Availability Zones in which the replication group's clusters are created. /// The order of the Availability Zones in the list is the order in which clusters are /// allocated. The primary cluster is created in the first AZ in the list.This parameter is not used if there is more than one node group (shard). You should /// use NodeGroupConfiguration instead.If you are creating your replication group in an Amazon VPC (recommended), you can /// only locate clusters in Availability Zones associated with the subnets in the selected /// subnet group.The number of Availability Zones listed must equal the value of NumCacheClusters.Default: system chosen Availability Zones. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public System.String[] PreferredCacheClusterAZs { get; set; } #endregion #region Parameter PreferredMaintenanceWindow /// /// /// Specifies the weekly time range during which maintenance on the cluster is performed. /// It is specified as a range in the format ddd:hh24:mi-ddd:hh24:mi (24H Clock UTC). /// The minimum maintenance window is a 60 minute period. Valid values for ddd /// are:Specifies the weekly time range during which maintenance on the cluster is performed. /// It is specified as a range in the format ddd:hh24:mi-ddd:hh24:mi (24H Clock UTC). /// The minimum maintenance window is a 60 minute period.Valid values for ddd are:Example: sun:23:00-mon:01:30 /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public System.String PreferredMaintenanceWindow { get; set; } #endregion #region Parameter PrimaryClusterId /// /// /// The identifier of the cluster that serves as the primary for this replication group. /// This cluster must already exist and have a status of available.This parameter is not required if NumCacheClusters, NumNodeGroups, /// or ReplicasPerNodeGroup is specified. /// /// [System.Management.Automation.Parameter(Position = 0, ValueFromPipelineByPropertyName = true, ValueFromPipeline = true)] public System.String PrimaryClusterId { get; set; } #endregion #region Parameter ReplicasPerNodeGroup /// /// /// An optional parameter that specifies the number of replica nodes in each node group /// (shard). Valid values are 0 to 5. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public System.Int32? ReplicasPerNodeGroup { get; set; } #endregion #region Parameter ReplicationGroupDescription /// /// /// A user-created description for the replication group. /// /// #if !MODULAR [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] #else [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true, Mandatory = true)] [System.Management.Automation.AllowEmptyString] [System.Management.Automation.AllowNull] #endif [Amazon.PowerShell.Common.AWSRequiredParameter] public System.String ReplicationGroupDescription { get; set; } #endregion #region Parameter ReplicationGroupId /// /// /// The replication group identifier. This parameter is stored as a lowercase string.Constraints: /// /// #if !MODULAR [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] #else [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true, Mandatory = true)] [System.Management.Automation.AllowEmptyString] [System.Management.Automation.AllowNull] #endif [Amazon.PowerShell.Common.AWSRequiredParameter] public System.String ReplicationGroupId { get; set; } #endregion #region Parameter SecurityGroupId /// /// /// One or more Amazon VPC security groups associated with this replication group.Use this parameter only when you are creating a replication group in an Amazon Virtual /// Private Cloud (Amazon VPC). /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] [Alias("SecurityGroupIds")] public System.String[] SecurityGroupId { get; set; } #endregion #region Parameter SnapshotArn /// /// /// A list of Amazon Resource Names (ARN) that uniquely identify the Redis RDB snapshot /// files stored in Amazon S3. The snapshot files are used to populate the new replication /// group. The Amazon S3 object name in the ARN cannot contain any commas. The new replication /// group will have the number of node groups (console: shards) specified by the parameter /// NumNodeGroups or the number of node groups configured by NodeGroupConfiguration /// regardless of the number of ARNs specified here.Example of an Amazon S3 ARN: arn:aws:s3:::my_bucket/snapshot1.rdb /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] [Alias("SnapshotArns")] public System.String[] SnapshotArn { get; set; } #endregion #region Parameter SnapshotName /// /// /// The name of a snapshot from which to restore data into the new replication group. /// The snapshot status changes to restoring while the new replication group /// is being created. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public System.String SnapshotName { get; set; } #endregion #region Parameter SnapshotRetentionLimit /// /// /// The number of days for which ElastiCache retains automatic snapshots before deleting /// them. For example, if you set SnapshotRetentionLimit to 5, a snapshot /// that was taken today is retained for 5 days before being deleted.Default: 0 (i.e., automatic backups are disabled for this cluster). /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public System.Int32? SnapshotRetentionLimit { get; set; } #endregion #region Parameter SnapshotWindow /// /// /// The daily time range (in UTC) during which ElastiCache begins taking a daily snapshot /// of your node group (shard).Example: 05:00-09:00If you do not specify this parameter, ElastiCache automatically chooses an appropriate /// time range. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public System.String SnapshotWindow { get; set; } #endregion #region Parameter Tag /// /// /// A list of tags to be added to this resource. Tags are comma-separated key,value pairs /// (e.g. Key=myKey, Value=myKeyValue. You can include multiple /// tags as shown following: Key=myKey, Value=myKeyValue Key=mySecondKey, /// Value=mySecondKeyValue. Tags on replication groups will be replicated /// to all nodes. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] [Alias("Tags")] public Amazon.ElastiCache.Model.Tag[] Tag { get; set; } #endregion #region Parameter TransitEncryptionEnabled /// /// /// A flag that enables in-transit encryption when set to true.This parameter is valid only if the Engine parameter is redis, /// the EngineVersion parameter is 3.2.6, 4.x or /// later, and the cluster is being created in an Amazon VPC.If you enable in-transit encryption, you must also specify a value for CacheSubnetGroup.Required: Only available when creating a replication group in an Amazon VPC /// using redis version 3.2.6, 4.x or later.Default: falseFor HIPAA compliance, you must specify TransitEncryptionEnabled as true, /// an AuthToken, and a CacheSubnetGroup. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] public System.Boolean? TransitEncryptionEnabled { get; set; } #endregion #region Parameter TransitEncryptionMode /// /// /// A setting that allows you to migrate your clients to use in-transit encryption, with /// no downtime.When setting TransitEncryptionEnabled to true, you can set /// your TransitEncryptionMode to preferred in the same request, /// to allow both encrypted and unencrypted connections at the same time. Once you migrate /// all your Redis clients to use encrypted connections you can modify the value to required /// to allow encrypted connections only.Setting TransitEncryptionMode to required is a two-step /// process that requires you to first set the TransitEncryptionMode to preferred, /// after that you can set TransitEncryptionMode to required.This process will not trigger the replacement of the replication group. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] [AWSConstantClassSource("Amazon.ElastiCache.TransitEncryptionMode")] public Amazon.ElastiCache.TransitEncryptionMode TransitEncryptionMode { get; set; } #endregion #region Parameter UserGroupId /// /// /// The user group to associate with the replication group. /// /// [System.Management.Automation.Parameter(ValueFromPipelineByPropertyName = true)] [Alias("UserGroupIds")] public System.String[] UserGroupId { get; set; } #endregion #region Parameter Select /// /// Use the -Select parameter to control the cmdlet output. The default value is 'ReplicationGroup'. /// Specifying -Select '*' will result in the cmdlet returning the whole service response (Amazon.ElastiCache.Model.CreateReplicationGroupResponse). /// Specifying the name of a property of type Amazon.ElastiCache.Model.CreateReplicationGroupResponse 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; } = "ReplicationGroup"; #endregion #region Parameter PassThru /// /// Changes the cmdlet behavior to return the value passed to the PrimaryClusterId parameter. /// The -PassThru parameter is deprecated, use -Select '^PrimaryClusterId' instead. This parameter will be removed in a future version. /// [System.Obsolete("The -PassThru parameter is deprecated, use -Select '^PrimaryClusterId' 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.PrimaryClusterId), MyInvocation.BoundParameters); if (!ConfirmShouldProceed(this.Force.IsPresent, resourceIdentifiersText, "New-ECReplicationGroup (CreateReplicationGroup)")) { 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.PrimaryClusterId; } #pragma warning restore CS0618, CS0612 //A class member was marked with the Obsolete attribute context.AtRestEncryptionEnabled = this.AtRestEncryptionEnabled; context.AuthToken = this.AuthToken; context.AutomaticFailoverEnabled = this.AutomaticFailoverEnabled; context.AutoMinorVersionUpgrade = this.AutoMinorVersionUpgrade; context.CacheNodeType = this.CacheNodeType; context.CacheParameterGroupName = this.CacheParameterGroupName; if (this.CacheSecurityGroupName != null) { context.CacheSecurityGroupName = new List(this.CacheSecurityGroupName); } context.CacheSubnetGroupName = this.CacheSubnetGroupName; context.ClusterMode = this.ClusterMode; context.DataTieringEnabled = this.DataTieringEnabled; context.Engine = this.Engine; context.EngineVersion = this.EngineVersion; context.GlobalReplicationGroupId = this.GlobalReplicationGroupId; context.IpDiscovery = this.IpDiscovery; context.KmsKeyId = this.KmsKeyId; if (this.LogDeliveryConfiguration != null) { context.LogDeliveryConfiguration = new List(this.LogDeliveryConfiguration); } context.MultiAZEnabled = this.MultiAZEnabled; context.NetworkType = this.NetworkType; if (this.NodeGroupConfiguration != null) { context.NodeGroupConfiguration = new List(this.NodeGroupConfiguration); } context.NotificationTopicArn = this.NotificationTopicArn; context.NumCacheCluster = this.NumCacheCluster; context.NumNodeGroup = this.NumNodeGroup; context.Port = this.Port; if (this.PreferredCacheClusterAZs != null) { context.PreferredCacheClusterAZs = new List(this.PreferredCacheClusterAZs); } context.PreferredMaintenanceWindow = this.PreferredMaintenanceWindow; context.PrimaryClusterId = this.PrimaryClusterId; context.ReplicasPerNodeGroup = this.ReplicasPerNodeGroup; context.ReplicationGroupDescription = this.ReplicationGroupDescription; #if MODULAR if (this.ReplicationGroupDescription == null && ParameterWasBound(nameof(this.ReplicationGroupDescription))) { WriteWarning("You are passing $null as a value for parameter ReplicationGroupDescription 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 context.ReplicationGroupId = this.ReplicationGroupId; #if MODULAR if (this.ReplicationGroupId == null && ParameterWasBound(nameof(this.ReplicationGroupId))) { WriteWarning("You are passing $null as a value for parameter ReplicationGroupId 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.SecurityGroupId != null) { context.SecurityGroupId = new List(this.SecurityGroupId); } if (this.SnapshotArn != null) { context.SnapshotArn = new List(this.SnapshotArn); } context.SnapshotName = this.SnapshotName; context.SnapshotRetentionLimit = this.SnapshotRetentionLimit; context.SnapshotWindow = this.SnapshotWindow; if (this.Tag != null) { context.Tag = new List(this.Tag); } context.TransitEncryptionEnabled = this.TransitEncryptionEnabled; context.TransitEncryptionMode = this.TransitEncryptionMode; if (this.UserGroupId != null) { context.UserGroupId = new List(this.UserGroupId); } // 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.ElastiCache.Model.CreateReplicationGroupRequest(); if (cmdletContext.AtRestEncryptionEnabled != null) { request.AtRestEncryptionEnabled = cmdletContext.AtRestEncryptionEnabled.Value; } if (cmdletContext.AuthToken != null) { request.AuthToken = cmdletContext.AuthToken; } if (cmdletContext.AutomaticFailoverEnabled != null) { request.AutomaticFailoverEnabled = cmdletContext.AutomaticFailoverEnabled.Value; } if (cmdletContext.AutoMinorVersionUpgrade != null) { request.AutoMinorVersionUpgrade = cmdletContext.AutoMinorVersionUpgrade.Value; } if (cmdletContext.CacheNodeType != null) { request.CacheNodeType = cmdletContext.CacheNodeType; } if (cmdletContext.CacheParameterGroupName != null) { request.CacheParameterGroupName = cmdletContext.CacheParameterGroupName; } if (cmdletContext.CacheSecurityGroupName != null) { request.CacheSecurityGroupNames = cmdletContext.CacheSecurityGroupName; } if (cmdletContext.CacheSubnetGroupName != null) { request.CacheSubnetGroupName = cmdletContext.CacheSubnetGroupName; } if (cmdletContext.ClusterMode != null) { request.ClusterMode = cmdletContext.ClusterMode; } if (cmdletContext.DataTieringEnabled != null) { request.DataTieringEnabled = cmdletContext.DataTieringEnabled.Value; } if (cmdletContext.Engine != null) { request.Engine = cmdletContext.Engine; } if (cmdletContext.EngineVersion != null) { request.EngineVersion = cmdletContext.EngineVersion; } if (cmdletContext.GlobalReplicationGroupId != null) { request.GlobalReplicationGroupId = cmdletContext.GlobalReplicationGroupId; } if (cmdletContext.IpDiscovery != null) { request.IpDiscovery = cmdletContext.IpDiscovery; } if (cmdletContext.KmsKeyId != null) { request.KmsKeyId = cmdletContext.KmsKeyId; } if (cmdletContext.LogDeliveryConfiguration != null) { request.LogDeliveryConfigurations = cmdletContext.LogDeliveryConfiguration; } if (cmdletContext.MultiAZEnabled != null) { request.MultiAZEnabled = cmdletContext.MultiAZEnabled.Value; } if (cmdletContext.NetworkType != null) { request.NetworkType = cmdletContext.NetworkType; } if (cmdletContext.NodeGroupConfiguration != null) { request.NodeGroupConfiguration = cmdletContext.NodeGroupConfiguration; } if (cmdletContext.NotificationTopicArn != null) { request.NotificationTopicArn = cmdletContext.NotificationTopicArn; } if (cmdletContext.NumCacheCluster != null) { request.NumCacheClusters = cmdletContext.NumCacheCluster.Value; } if (cmdletContext.NumNodeGroup != null) { request.NumNodeGroups = cmdletContext.NumNodeGroup.Value; } if (cmdletContext.Port != null) { request.Port = cmdletContext.Port.Value; } if (cmdletContext.PreferredCacheClusterAZs != null) { request.PreferredCacheClusterAZs = cmdletContext.PreferredCacheClusterAZs; } if (cmdletContext.PreferredMaintenanceWindow != null) { request.PreferredMaintenanceWindow = cmdletContext.PreferredMaintenanceWindow; } if (cmdletContext.PrimaryClusterId != null) { request.PrimaryClusterId = cmdletContext.PrimaryClusterId; } if (cmdletContext.ReplicasPerNodeGroup != null) { request.ReplicasPerNodeGroup = cmdletContext.ReplicasPerNodeGroup.Value; } if (cmdletContext.ReplicationGroupDescription != null) { request.ReplicationGroupDescription = cmdletContext.ReplicationGroupDescription; } if (cmdletContext.ReplicationGroupId != null) { request.ReplicationGroupId = cmdletContext.ReplicationGroupId; } if (cmdletContext.SecurityGroupId != null) { request.SecurityGroupIds = cmdletContext.SecurityGroupId; } if (cmdletContext.SnapshotArn != null) { request.SnapshotArns = cmdletContext.SnapshotArn; } if (cmdletContext.SnapshotName != null) { request.SnapshotName = cmdletContext.SnapshotName; } if (cmdletContext.SnapshotRetentionLimit != null) { request.SnapshotRetentionLimit = cmdletContext.SnapshotRetentionLimit.Value; } if (cmdletContext.SnapshotWindow != null) { request.SnapshotWindow = cmdletContext.SnapshotWindow; } if (cmdletContext.Tag != null) { request.Tags = cmdletContext.Tag; } if (cmdletContext.TransitEncryptionEnabled != null) { request.TransitEncryptionEnabled = cmdletContext.TransitEncryptionEnabled.Value; } if (cmdletContext.TransitEncryptionMode != null) { request.TransitEncryptionMode = cmdletContext.TransitEncryptionMode; } if (cmdletContext.UserGroupId != null) { request.UserGroupIds = cmdletContext.UserGroupId; } 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.ElastiCache.Model.CreateReplicationGroupResponse CallAWSServiceOperation(IAmazonElastiCache client, Amazon.ElastiCache.Model.CreateReplicationGroupRequest request) { Utils.Common.WriteVerboseEndpointMessage(this, client.Config, "Amazon ElastiCache", "CreateReplicationGroup"); try { #if DESKTOP return client.CreateReplicationGroup(request); #elif CORECLR return client.CreateReplicationGroupAsync(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? AtRestEncryptionEnabled { get; set; } public System.String AuthToken { get; set; } public System.Boolean? AutomaticFailoverEnabled { get; set; } public System.Boolean? AutoMinorVersionUpgrade { get; set; } public System.String CacheNodeType { get; set; } public System.String CacheParameterGroupName { get; set; } public List CacheSecurityGroupName { get; set; } public System.String CacheSubnetGroupName { get; set; } public Amazon.ElastiCache.ClusterMode ClusterMode { get; set; } public System.Boolean? DataTieringEnabled { get; set; } public System.String Engine { get; set; } public System.String EngineVersion { get; set; } public System.String GlobalReplicationGroupId { get; set; } public Amazon.ElastiCache.IpDiscovery IpDiscovery { get; set; } public System.String KmsKeyId { get; set; } public List LogDeliveryConfiguration { get; set; } public System.Boolean? MultiAZEnabled { get; set; } public Amazon.ElastiCache.NetworkType NetworkType { get; set; } public List NodeGroupConfiguration { get; set; } public System.String NotificationTopicArn { get; set; } public System.Int32? NumCacheCluster { get; set; } public System.Int32? NumNodeGroup { get; set; } public System.Int32? Port { get; set; } public List PreferredCacheClusterAZs { get; set; } public System.String PreferredMaintenanceWindow { get; set; } public System.String PrimaryClusterId { get; set; } public System.Int32? ReplicasPerNodeGroup { get; set; } public System.String ReplicationGroupDescription { get; set; } public System.String ReplicationGroupId { get; set; } public List SecurityGroupId { get; set; } public List SnapshotArn { get; set; } public System.String SnapshotName { get; set; } public System.Int32? SnapshotRetentionLimit { get; set; } public System.String SnapshotWindow { get; set; } public List Tag { get; set; } public System.Boolean? TransitEncryptionEnabled { get; set; } public Amazon.ElastiCache.TransitEncryptionMode TransitEncryptionMode { get; set; } public List UserGroupId { get; set; } public System.Func Select { get; set; } = (response, cmdlet) => response.ReplicationGroup; } } }