diff --git a/lib/fog/aws/requests/rds/create_db_instance.rb b/lib/fog/aws/requests/rds/create_db_instance.rb index 4fe21d287..3c6f64001 100644 --- a/lib/fog/aws/requests/rds/create_db_instance.rb +++ b/lib/fog/aws/requests/rds/create_db_instance.rb @@ -73,7 +73,7 @@ module Fog "PreferredMaintenanceWindow"=>"mon:04:30-mon:05:00", "Engine"=> options["Engine"], "EngineVersion"=> options["EngineVersion"] || "5.1.57", - "PendingModifiedValues"=>{}, + "PendingModifiedValues"=>{"MasterUserPassword"=>"****"}, # This clears when is available "MultiAZ"=>false, "MasterUsername"=> options["MasterUsername"], "DBInstanceClass"=> options["DBInstanceClass"], diff --git a/lib/fog/aws/requests/rds/describe_db_instances.rb b/lib/fog/aws/requests/rds/describe_db_instances.rb index 4b55e8848..7e1f0a63b 100644 --- a/lib/fog/aws/requests/rds/describe_db_instances.rb +++ b/lib/fog/aws/requests/rds/describe_db_instances.rb @@ -53,8 +53,15 @@ module Fog server["availability_zone"] = region + 'a' server["Endpoint"] = {"Port"=>3306, "Address"=> Fog::AWS::Mock.rds_address(server["DBInstanceIdentifier"],region) } - server["PendingModifiedValues"] = {"MasterUserPassword"=>"****"} + server["PendingModifiedValues"] = {} end + when "rebooting" + # it applies pending modified values + if server["PendingModifiedValues"] + server.merge!(server["PendingModifiedValues"]) + server["PendingModifiedValues"] = {} + server["DBInstanceStatus"] = 'available' + end end end diff --git a/lib/fog/aws/requests/rds/modify_db_instance.rb b/lib/fog/aws/requests/rds/modify_db_instance.rb index c6e51282e..abfe64467 100644 --- a/lib/fog/aws/requests/rds/modify_db_instance.rb +++ b/lib/fog/aws/requests/rds/modify_db_instance.rb @@ -45,7 +45,30 @@ module Fog class Mock def modify_db_instance(db_name, apply_immediately, options={}) - Fog::Mock.not_implemented + response = Excon::Response.new + if server = self.data[:servers][db_name] + if server["DBInstanceStatus"] != "available" + raise Fog::AWS::RDS::NotFound.new("DBInstance #{db_name} not available for modification") + else + # TODO verify the params options + # if apply_immediately is false, all the options go to pending_modified_values and then apply and clear after either + # a reboot or the maintainance window + if apply_immediately + modified_server = server.merge(options) + else + modified_server = server["PendingModifiedValues"].merge!(options) # it appends + end + response.status = 200 + response.body = { + "ResponseMetadata"=>{ "RequestId"=> Fog::AWS::Mock.request_id }, + "ModifyDBInstanceResult" => { "DBInstance" => modified_server } + } + response + + end + else + raise Fog::AWS::RDS::NotFound.new("DBInstance #{db_name} not found") + end end end diff --git a/lib/fog/aws/requests/rds/reboot_db_instance.rb b/lib/fog/aws/requests/rds/reboot_db_instance.rb index 7d54b70a8..ef04120bd 100644 --- a/lib/fog/aws/requests/rds/reboot_db_instance.rb +++ b/lib/fog/aws/requests/rds/reboot_db_instance.rb @@ -25,7 +25,23 @@ module Fog class Mock def reboot_db_instance(instance_identifier) - Fog::Mock.not_implemented + response = Excon::Response.new + if server = self.data[:servers][instance_identifier] + if server["DBInstanceStatus"] != "available" + raise Fog::AWS::RDS::NotFound.new("DBInstance #{db_name} not available for rebooting") + else + server["DBInstanceStatus"] = 'rebooting' + response.status = 200 + response.body = { + "ResponseMetadata"=>{ "RequestId"=> Fog::AWS::Mock.request_id }, + "RebootDBInstanceResult" => { "DBInstance" => server } + } + response + + end + else + raise Fog::AWS::RDS::NotFound.new("DBInstance #{db_name} not found") + end end end