/**
* Get db instance details
*
* @param Aws $aws
* @param DBInstanceData $dbinstance
* @param SecurityGroupList|null $vpcSglist optional
* @param DBClusterList|null $clusters optional
* @return mixed
* @throws Scalr_Exception_Core
*/
private function getDbInstanceData(Aws $aws, DBInstanceData $dbinstance, $vpcSglist = null, $clusters = null)
{
$cloudLocation = $aws->getRegion();
$createdTime = $dbinstance->instanceCreateTime;
$dbinstance = $dbinstance->toArray(true);
foreach ($dbinstance['VpcSecurityGroups'] as &$vpcSg) {
$vpcSecurityGroupName = null;
if (isset($vpcSglist)) {
foreach ($vpcSglist as $vpcSqData) {
/* @var $vpcSqData \Scalr\Service\Aws\Ec2\DataType\SecurityGroupData */
if ($vpcSqData->groupId == $vpcSg['VpcSecurityGroupId']) {
$vpcSecurityGroupName = $vpcSqData->groupName;
$vpcId = $vpcSqData->vpcId;
break;
}
}
}
$vpcSg = ['vpcSecurityGroupId' => $vpcSg['VpcSecurityGroupId'], 'vpcSecurityGroupName' => $vpcSecurityGroupName];
}
$dbinstance['VpcId'] = !empty($vpcId) ? $vpcId : null;
$dbinstance['DBSubnetGroupName'] = isset($dbinstance['DBSubnetGroup']['DBSubnetGroupName']) ? $dbinstance['DBSubnetGroup']['DBSubnetGroupName'] : null;
foreach ($dbinstance['DBSecurityGroups'] as &$dbSg) {
$dbSg = $dbSg['DBSecurityGroupName'];
}
foreach ($dbinstance['OptionGroupMembership'] as &$member) {
$dbinstance['OptionGroupName'] = $member['OptionGroupName'];
break;
}
foreach ($dbinstance['DBParameterGroups'] as &$param) {
$dbinstance['DBParameterGroup'] = $param['DBParameterGroupName'];
break;
}
$dbinstance['Address'] = $dbinstance['Endpoint']['Address'];
$dbinstance['Port'] = (string) $dbinstance['Endpoint']['Port'];
$dbinstance['InstanceCreateTime'] = Scalr_Util_DateTime::convertTz($createdTime);
$dbinstance['AllocatedStorage'] = (string) $dbinstance['AllocatedStorage'];
if ($dbinstance['StorageEncrypted']) {
/* @var $key Aws\Kms\DataType\AliasData */
foreach ($aws->kms->alias->list() as $key) {
if (str_replace($key->aliasName, "key/{$key->targetKeyId}", $key->aliasArn) == $dbinstance['KmsKeyId']) {
$dbinstance['KmsKeyId'] = $key->aliasName;
break;
}
}
}
if (!empty($dbinstance['DBClusterIdentifier']) && isset($clusters)) {
foreach ($clusters as $cluster) {
/* @var $cluster DBClusterData */
if ($cluster->dBClusterIdentifier == $dbinstance['DBClusterIdentifier']) {
foreach ($cluster->dBClusterMembers as $member) {
/* @var $member ClusterMemberData */
if ($dbinstance['DBInstanceIdentifier'] == $member->dBInstanceIdentifier) {
$dbinstance['isReplica'] = !$member->isClusterWriter;
break;
}
}
$dbinstance['MultiAZ'] = true;
break;
}
}
} else {
$dbinstance['isReplica'] = !empty($dbinstance['ReadReplicaSourceDBInstanceIdentifier']) ? true : false;
$dbinstance['MultiAZ'] = $dbinstance['MultiAZ'];
}
/* @var $cloudResource CloudResource */
$cloudResource = CloudResource::findPk($dbinstance['DBInstanceIdentifier'], CloudResource::TYPE_AWS_RDS, $this->getEnvironmentId(), \SERVER_PLATFORMS::EC2, $cloudLocation);
if ($cloudResource) {
$dbinstance['farmId'] = $cloudResource->farmId;
$dbinstance['farmName'] = $this->db->GetOne("SELECT name FROM farms WHERE id=? LIMIT 1", [$cloudResource->farmId]);
}
return $dbinstance;
}