mirror of
https://github.com/fog/fog-aws.git
synced 2022-11-09 13:50:52 -05:00
98 lines
5.4 KiB
Ruby
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
|