add rds stop-start
This commit is contained in:
parent
9ebcaf561e
commit
ecf77d64cd
@ -733,6 +733,37 @@ class RDS2Backend(BaseBackend):
|
|||||||
database = self.describe_databases(db_instance_identifier)[0]
|
database = self.describe_databases(db_instance_identifier)[0]
|
||||||
return database
|
return database
|
||||||
|
|
||||||
|
def _check_can_stop_rds_instance_(self, database=None):
|
||||||
|
# todo: certain rds types not allowed to be stopped at this time.
|
||||||
|
if database:
|
||||||
|
if database.is_replica or database.multi_az:
|
||||||
|
# should be 400 error
|
||||||
|
return RDSClientError('InvalidDBClusterStateFault', 'Invalid DB type, when trying to perform StopDBInstance. See AWS RDS documentation on rds.stop_db_instance')
|
||||||
|
return True
|
||||||
|
|
||||||
|
def stop_database(self, db_instance_identifier, snapshot_name=None):
|
||||||
|
database = self.describe_databases(db_instance_identifier)[0]
|
||||||
|
self._check_can_stop_rds_instance_(database)
|
||||||
|
if database.status != 'available':
|
||||||
|
return RDSClientError('InvalidDBInstanceState', 'when calling the StopDBInstance operation: Instance testdb is not in available state')
|
||||||
|
self.create_rds_snapshot(db_instance_identifier, db_instance_identifier)
|
||||||
|
database.status = 'shutdown'
|
||||||
|
return database
|
||||||
|
|
||||||
|
def start_database(self, db_instance_identifier):
|
||||||
|
database = self.describe_databases(db_instance_identifier)[0]
|
||||||
|
if database.status != 'shutdown':
|
||||||
|
# should be 400 error
|
||||||
|
return RDSClientError('InvalidDBInstanceState', 'when calling the StartDBInstance operation: Instance {} is not stopped, it cannot be started.' % db_instance_identifier)
|
||||||
|
database.status = 'available'
|
||||||
|
return
|
||||||
|
|
||||||
|
def create_rds_snapshot(self, db_instance_identifier, db_snapshot_identifier):
|
||||||
|
# todo
|
||||||
|
# DBSnapshotAlreadyExists
|
||||||
|
# SnapshotQuotaExceeded
|
||||||
|
return None
|
||||||
|
|
||||||
def find_db_from_id(self, db_id):
|
def find_db_from_id(self, db_id):
|
||||||
if self.arn_regex.match(db_id):
|
if self.arn_regex.match(db_id):
|
||||||
arn_breakdown = db_id.split(':')
|
arn_breakdown = db_id.split(':')
|
||||||
|
@ -23,6 +23,7 @@ class RDS2Response(BaseResponse):
|
|||||||
"db_instance_identifier": self._get_param('DBInstanceIdentifier'),
|
"db_instance_identifier": self._get_param('DBInstanceIdentifier'),
|
||||||
"db_name": self._get_param("DBName"),
|
"db_name": self._get_param("DBName"),
|
||||||
"db_parameter_group_name": self._get_param("DBParameterGroupName"),
|
"db_parameter_group_name": self._get_param("DBParameterGroupName"),
|
||||||
|
"db_snapshot_identifier": self._get_param('DBSnapshotIdentifier'),
|
||||||
"db_subnet_group_name": self._get_param("DBSubnetGroupName"),
|
"db_subnet_group_name": self._get_param("DBSubnetGroupName"),
|
||||||
"engine": self._get_param("Engine"),
|
"engine": self._get_param("Engine"),
|
||||||
"engine_version": self._get_param("EngineVersion"),
|
"engine_version": self._get_param("EngineVersion"),
|
||||||
@ -193,6 +194,19 @@ class RDS2Response(BaseResponse):
|
|||||||
template = self.response_template(REMOVE_TAGS_FROM_RESOURCE_TEMPLATE)
|
template = self.response_template(REMOVE_TAGS_FROM_RESOURCE_TEMPLATE)
|
||||||
return template.render()
|
return template.render()
|
||||||
|
|
||||||
|
def stop_db_instance(self):
|
||||||
|
db_instance_identifier = self._get_param('DBInstanceIdentifier')
|
||||||
|
db_snapshot_identifier = self._get_param('DBInstanceIdentifier')
|
||||||
|
database = self.backend.stop_database(db_instance_identifier, db_snapshot_identifier)
|
||||||
|
template = self.response_template(STOP_DATABASE_TEMPLATE)
|
||||||
|
return template.render(database=database)
|
||||||
|
|
||||||
|
def start_db_instance(self):
|
||||||
|
db_instance_identifier = self._get_param('DBInstanceIdentifier')
|
||||||
|
database = self.backend.start_database(db_instance_identifier)
|
||||||
|
template = self.response_template(START_DATABASE_TEMPLATE)
|
||||||
|
return template.render(database=database)
|
||||||
|
|
||||||
def create_db_security_group(self):
|
def create_db_security_group(self):
|
||||||
group_name = self._get_param('DBSecurityGroupName')
|
group_name = self._get_param('DBSecurityGroupName')
|
||||||
description = self._get_param('DBSecurityGroupDescription')
|
description = self._get_param('DBSecurityGroupDescription')
|
||||||
@ -410,8 +424,25 @@ REBOOT_DATABASE_TEMPLATE = """<RebootDBInstanceResponse xmlns="http://rds.amazon
|
|||||||
</ResponseMetadata>
|
</ResponseMetadata>
|
||||||
</RebootDBInstanceResponse>"""
|
</RebootDBInstanceResponse>"""
|
||||||
|
|
||||||
|
START_DATABASE_TEMPLATE = """<StartDBInstanceResponse xmlns="http://rds.amazonaws.com/doc/2014-09-01/">
|
||||||
|
<StartDBInstanceResult>
|
||||||
|
{{ database.to_xml() }}
|
||||||
|
</StartDBInstanceResult>
|
||||||
|
<ResponseMetadata>
|
||||||
|
<RequestId>523e3218-afc7-11c3-90f5-f90431260ab9</RequestId>
|
||||||
|
</ResponseMetadata>
|
||||||
|
</StartDBInstanceResponse>"""
|
||||||
|
|
||||||
DELETE_DATABASE_TEMPLATE = """<DeleteDBInstanceResponse xmlns="http://rds.amazonaws.com/doc/2014-09-01/">
|
STOP_DATABASE_TEMPLATE = """<StopDBInstanceResponse xmlns="http://rds.amazonaws.com/doc/2014-09-01/">
|
||||||
|
<StopDBInstanceResult>
|
||||||
|
{{ database.to_xml() }}
|
||||||
|
</StopDBInstanceResult>
|
||||||
|
<ResponseMetadata>
|
||||||
|
<RequestId>523e3218-afc7-11c3-90f5-f90431260ab8</RequestId>
|
||||||
|
</ResponseMetadata>
|
||||||
|
</StopDBInstanceResponse>"""
|
||||||
|
|
||||||
|
DELETE_DATABASE_TEMPLATE = """<DeleteDBInstanceResponse xmlns="http://rds.amazonaws.com/doc/2014-10-31/">
|
||||||
<DeleteDBInstanceResult>
|
<DeleteDBInstanceResult>
|
||||||
{{ database.to_xml() }}
|
{{ database.to_xml() }}
|
||||||
</DeleteDBInstanceResult>
|
</DeleteDBInstanceResult>
|
||||||
@ -420,7 +451,7 @@ DELETE_DATABASE_TEMPLATE = """<DeleteDBInstanceResponse xmlns="http://rds.amazon
|
|||||||
</ResponseMetadata>
|
</ResponseMetadata>
|
||||||
</DeleteDBInstanceResponse>"""
|
</DeleteDBInstanceResponse>"""
|
||||||
|
|
||||||
CREATE_SNAPSHOT_TEMPLATE = """<CreateDBSnapshotResponse xmlns="http://rds.amazonaws.com/doc/2014-09-01/">
|
CREATE_SNAPSHOT_TEMPLATE = """<CreateDBSnapshotResponse xmlns="http://rds.amazonaws.com/doc/2014-10-31/">
|
||||||
<CreateDBSnapshotResult>
|
<CreateDBSnapshotResult>
|
||||||
{{ snapshot.to_xml() }}
|
{{ snapshot.to_xml() }}
|
||||||
</CreateDBSnapshotResult>
|
</CreateDBSnapshotResult>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user