public RedisResource CreateCache(string resourceGroupName, string cacheName, string location, string skuFamily, int skuCapacity, string skuName,
                                         Hashtable redisConfiguration, bool?enableNonSslPort, Hashtable tenantSettings, int?shardCount, string minimumTlsVersion, string subnetId,
                                         string staticIP, Hashtable tags, IList <string> zones, string redisVersion, string identityType, string[] userAssignedIdentities)
        {
            try
            {
                _resourceManagementClient.Providers.Register("Microsoft.Cache");
            }
            catch
            {
            }
            var parameters = new RedisCreateParameters
            {
                Location = location,
                Sku      = new Microsoft.Azure.Management.Redis.Models.Sku
                {
                    Name     = skuName,
                    Family   = skuFamily,
                    Capacity = skuCapacity
                },
                RedisVersion = redisVersion
            };

            parameters.Identity = Utility.BuildManagedServiceIdentity(identityType, userAssignedIdentities);

            if (zones != null && zones.Count != 0)
            {
                parameters.Zones = zones;
            }

            if (tags != null)
            {
                parameters.Tags = new Dictionary <string, string>();
                foreach (object key in tags.Keys)
                {
                    parameters.Tags.Add(key.ToString(), tags[key].ToString());
                }
            }

            if (redisConfiguration != null)
            {
                parameters.RedisConfiguration = new RedisCommonPropertiesRedisConfiguration(additionalProperties: new Dictionary <string, object>());
                foreach (object key in redisConfiguration.Keys)
                {
                    parameters.RedisConfiguration.AdditionalProperties.Add(key.ToString(), redisConfiguration[key].ToString());
                }
            }

            if (enableNonSslPort.HasValue)
            {
                parameters.EnableNonSslPort = enableNonSslPort.Value;
            }

            if (tenantSettings != null)
            {
                parameters.TenantSettings = new Dictionary <string, string>();
                foreach (object key in tenantSettings.Keys)
                {
                    parameters.TenantSettings.Add(key.ToString(), tenantSettings[key].ToString());
                }
            }

            if (shardCount.HasValue)
            {
                parameters.ShardCount = shardCount.Value;
            }

            if (!string.IsNullOrEmpty(minimumTlsVersion))
            {
                parameters.MinimumTlsVersion = minimumTlsVersion;
            }

            if (!string.IsNullOrWhiteSpace(subnetId))
            {
                parameters.SubnetId = subnetId;
            }

            if (!string.IsNullOrWhiteSpace(staticIP))
            {
                parameters.StaticIP = staticIP;
            }

            RedisResource response = _client.Redis.BeginCreate(resourceGroupName: resourceGroupName, name: cacheName, parameters: parameters);

            return(response);
        }
        public RedisResource UpdateCache(string resourceGroupName, string cacheName, string skuFamily, int skuCapacity, string skuName,
                                         Hashtable redisConfiguration, bool?enableNonSslPort, Hashtable tenantSettings, int?shardCount, string MinimumTlsVersion,
                                         string redisVersion, Hashtable tags, string identityType, string[] userAssignedIdentities)
        {
            try
            {
                _resourceManagementClient.Providers.Register("Microsoft.Cache");
            }
            catch
            {
            }
            var parameters = new RedisUpdateParameters
            {
                Sku = new Microsoft.Azure.Management.Redis.Models.Sku
                {
                    Name     = skuName,
                    Family   = skuFamily,
                    Capacity = skuCapacity
                }
            };

            if (tags != null)
            {
                parameters.Tags = new Dictionary <string, string>();
                foreach (object key in tags.Keys)
                {
                    parameters.Tags.Add(key.ToString(), tags[key].ToString());
                }
            }

            if (redisConfiguration != null)
            {
                parameters.RedisConfiguration = new RedisCommonPropertiesRedisConfiguration(additionalProperties: new Dictionary <string, object>());
                foreach (object key in redisConfiguration.Keys)
                {
                    parameters.RedisConfiguration.AdditionalProperties.Add(key.ToString(), redisConfiguration[key].ToString());
                }
            }

            parameters.Identity = Utility.BuildManagedServiceIdentity(identityType, userAssignedIdentities);

            parameters.EnableNonSslPort = enableNonSslPort;
            parameters.RedisVersion     = redisVersion;

            if (tenantSettings != null)
            {
                parameters.TenantSettings = new Dictionary <string, string>();
                foreach (object key in tenantSettings.Keys)
                {
                    // RP should disregard "InternalDependencyList" passed from user (it happens because of piping scenario)
                    string stringKey = key.ToString();
                    if (stringKey.Equals("InternalDependencyList", StringComparison.InvariantCultureIgnoreCase))
                    {
                        continue;
                    }
                    parameters.TenantSettings.Add(key.ToString(), tenantSettings[key].ToString());
                }
            }

            parameters.ShardCount = shardCount;

            if (!string.IsNullOrEmpty(MinimumTlsVersion))
            {
                parameters.MinimumTlsVersion = MinimumTlsVersion;
            }

            RedisResource response = _client.Redis.Update(resourceGroupName: resourceGroupName, name: cacheName, parameters: parameters);

            return(response);
        }