1
0
Fork 0
mirror of https://github.com/fog/fog-aws.git synced 2022-11-09 13:50:52 -05:00
fog--fog-aws/lib/fog/aws/requests/rds/create_db_cluster.rb
2016-03-01 11:54:55 -05:00

98 lines
5.4 KiB
Ruby

module Fog
module AWS
class RDS
class Real
require 'fog/aws/parsers/rds/create_db_cluster'
# Create a db cluster
#
# @see http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBCluster.html
#
# ==== Parameters ====
# * AvailabilityZones<~Array> - A list of EC2 Availability Zones that instances in the DB cluster can be created in
# * BackupRetentionPeriod<~String> - The number of days for which automated backups are retained
# * CharacterSetName<~String> - A value that indicates that the DB cluster should be associated with the specified CharacterSet
# * DatabaseName<~String> - The name for your database of up to 8 alpha-numeric characters. If you do not provide a name, Amazon RDS will not create a database in the DB cluster you are creating
# * DBClusterIdentifier<~String> - The DB cluster identifier. This parameter is stored as a lowercase string
# * DBClusterParameterGroupName<~String> - The name of the DB cluster parameter group to associate with this DB cluster
# * DBSubnetGroupName<~String> - A DB subnet group to associate with this DB cluster
# * Engine<~String> - The name of the database engine to be used for this DB cluster
# * EngineVersion<~String> - The version number of the database engine to use
# * KmsKeyId<~String> - The KMS key identifier for an encrypted DB cluster
# * MasterUsername<~String> - The name of the master user for the client DB cluster
# * MasterUserPassword<~String> - The password for the master database user
# * OptionGroupName<~String> - A value that indicates that the DB cluster should be associated with the specified option group
# * Port<~Integer> - The port number on which the instances in the DB cluster accept connections
# * PreferredBackupWindow<~String> - The daily time range during which automated backups are created if automated backups are enabled using the BackupRetentionPeriod parameter
# * PreferredMaintenanceWindow<~String> - The weekly time range during which system maintenance can occur, in Universal Coordinated Time (UTC)
# * StorageEncrypted<~Boolean> - Specifies whether the DB cluster is encrypted
# * Tags<~Array> - A list of tags
# * VpcSecurityGroups<~Array> - A list of EC2 VPC security groups to associate with this DB cluster
#
# ==== Returns ====
# * response<~Excon::Response>:
# * body<~Hash>:
def create_db_cluster(cluster_name, options={})
if security_groups = options.delete('VpcSecurityGroups')
options.merge!(Fog::AWS.indexed_param('VpcSecurityGroupIds.member.%d', [*security_groups]))
end
request({
'Action' => 'CreateDBCluster',
'DBClusterIdentifier' => cluster_name,
:parser => Fog::Parsers::AWS::RDS::CreateDBCluster.new,
}.merge(options))
end
end
class Mock
def create_db_cluster(cluster_name, options={})
response = Excon::Response.new
if self.data[:clusters][cluster_name]
raise Fog::AWS::RDS::IdentifierTaken.new("DBClusterAlreadyExists")
end
required_params = %w(Engine MasterUsername MasterUserPassword)
required_params.each do |key|
unless options.key?(key) && options[key] && !options[key].to_s.empty?
raise Fog::AWS::RDS::NotFound.new("The request must contain the parameter #{key}")
end
end
vpc_security_groups = Array(options.delete("VpcSecurityGroups")).map do |group_id|
{"VpcSecurityGroupId" => group_id }
end
data = {
'AllocatedStorage' => "1",
'BackupRetentionPeriod' => (options["BackupRetentionPeriod"] || 35).to_s,
'ClusterCreateTime' => Time.now,
'DBClusterIdentifier' => cluster_name,
'DBClusterMembers' => [],
'DBClusterParameterGroup' => options['DBClusterParameterGroup'] || "default.aurora5.6",
'DBSubnetGroup' => options["DBSubnetGroup"] || "default",
'Endpoint' => "#{cluster_name}.cluster-#{Fog::Mock.random_hex(8)}.#{@region}.rds.amazonaws.com",
'Engine' => options["Engine"] || "aurora5.6",
'EngineVersion' => options["EngineVersion"] || "5.6.10a",
'MasterUsername' => options["MasterUsername"],
'Port' => options["Port"] || "3306",
'PreferredBackupWindow' => options["PreferredBackupWindow"] || "04:45-05:15",
'PreferredMaintenanceWindow' => options["PreferredMaintenanceWindow"] || "sat:05:56-sat:06:26",
'Status' => "available",
'StorageEncrypted' => options["StorageEncrypted"] || false,
'VpcSecurityGroups' => vpc_security_groups,
}
self.data[:clusters][cluster_name] = data
response.body = {
"ResponseMetadata" => { "RequestId" => Fog::AWS::Mock.request_id },
"CreateDBClusterResult" => { "DBCluster" => data.dup.reject { |k,v| k == 'ClusterCreateTime' } }
}
response.status = 200
response
end
end
end
end
end