示例#1
0
文件: RdsApi.php 项目: recipe/scalr
 /**
  * CreateDBInstance action
  *
  * Creates a new DB instance.
  *
  * @param   CreateDBInstanceRequestData $request Created DB Instance request object
  * @return  DBInstanceData  Returns created DBInstance
  * @throws  ClientException
  * @throws  RdsException
  */
 public function createDBInstance(CreateDBInstanceRequestData $request)
 {
     $result = null;
     $options = $request->getQueryArray();
     if ($this->rds->getApiClientType() === Aws::CLIENT_SOAP) {
         if (isset($options['DBSecurityGroups.member.1']) || isset($options['VpcSecurityGroupIds.member.1'])) {
             foreach ($options as $k => $v) {
                 if (strpos($k, 'DBSecurityGroups.member.') !== false) {
                     $options['DBSecurityGroups']['DBSecurityGroupName'][] = $v;
                     unset($options[$k]);
                 } elseif (strpos($k, 'VpcSecurityGroupIds.member.') !== false) {
                     $options['VpcSecurityGroupIds']['VpcSecurityGroupId'][] = $v;
                     unset($options[$k]);
                 }
             }
         }
     }
     $response = $this->client->call(ucfirst(__FUNCTION__), $options);
     if ($response->getError() === false) {
         $sxml = simplexml_load_string($response->getRawContent());
         if (!$this->exist($sxml->CreateDBInstanceResult)) {
             throw new RdsException(sprintf(self::UNEXPECTED, 'create DBIntance'));
         }
         $result = $this->_loadDBInstanceData($sxml->CreateDBInstanceResult->DBInstance);
     }
     return $result;
 }
示例#2
0
文件: Clusters.php 项目: mheydt/scalr
 /**
  * xRestoreClusterAction
  *
  * @param string   $cloudLocation           Ec2 region
  * @param string   $DBClusterIdentifier     DBClusterIdentifier field
  * @param string   $DBSnapshotIdentifier    DBSnapshotIdentifier field
  * @param string   $Engine                  Aurora engine
  * @param string   $VpcId                   Vpc id
  * @param int      $Port                    Port value
  * @param string   $DBInstanceClass         Db instance class
  * @param bool     $PublicAccessible        True if instance is public accessible
  * @param RawData  $MasterUserPassword      DB Password
  * @param JsonData $SubnetIds               optional List of subnet ids
  * @param string   $OptionGroupName         optional Option group name
  * @param JsonData $AvailabilityZones       optional List of availability zones
  * @param string   $DBSubnetGroupName       optional Subnet group name
  * @param bool     $AutoMinorVersionUpgrade optional Auto minor version upgrade
  */
 public function xRestoreClusterAction($cloudLocation, $DBClusterIdentifier, $DBSnapshotIdentifier, $Engine, $VpcId, $Port, $DBInstanceClass, $PublicAccessible, RawData $MasterUserPassword, JsonData $SubnetIds = null, $OptionGroupName = null, JsonData $AvailabilityZones = null, $DBSubnetGroupName = null, $AutoMinorVersionUpgrade = null)
 {
     $this->request->restrictAccess(Acl::RESOURCE_AWS_RDS, Acl::PERM_AWS_RDS_MANAGE);
     $aws = $this->getAwsClient($cloudLocation);
     $request = new RestoreDBClusterFromSnapshotRequestData($DBClusterIdentifier, $DBSnapshotIdentifier);
     //NOTE: Options groups currently not supported for db clusters
     //        $optionList = $aws->rds->optionGroup->describe($Engine);
     //
     //        foreach ($optionList as $option) {
     //            /* @var $option OptionGroupData */
     //            if ($option->optionGroupName == $OptionGroupName) {
     //                $optionGroup = $option;
     //                break;
     //            }
     //        }
     //
     //        if (isset($optionGroup)) {
     //            $request->optionGroupName = $optionGroup->optionGroupName;
     //        }
     $request->port = $Port ?: null;
     $request->availabilityZones = count($AvailabilityZones) > 0 ? (array) $AvailabilityZones : null;
     $request->dBSubnetGroupName = $DBSubnetGroupName ?: null;
     $request->engine = $Engine;
     $result = self::loadController('Aws', 'Scalr_UI_Controller_Tools')->checkVpcPolicy($VpcId, $SubnetIds, $cloudLocation);
     if ($result === true) {
         $restoreResponse = $aws->rds->dbCluster->restoreFromSnapshot($request);
         try {
             $instance = $aws->rds->dbInstance->describe($DBClusterIdentifier)->get();
         } catch (Exception $e) {
             $instance = false;
         }
         if (!$instance) {
             $dbInstanceIdentifier = $DBClusterIdentifier;
         } else {
             $dbInstanceIdentifier = $DBClusterIdentifier . '-restored';
         }
         $createRequest = new CreateDBInstanceRequestData($dbInstanceIdentifier, $DBInstanceClass, $Engine);
         $createRequest->dBSubnetGroupName = $DBSubnetGroupName;
         $createRequest->publiclyAccessible = $PublicAccessible;
         $createRequest->licenseModel = 'general-public-license';
         $createRequest->engineVersion = $restoreResponse->engineVersion;
         $createRequest->storageType = 'aurora';
         $createRequest->setTags($this->environment->getAwsTags());
         $createRequest->autoMinorVersionUpgrade = $AutoMinorVersionUpgrade;
         $createRequest->dBClusterIdentifier = $restoreResponse->dBClusterIdentifier;
         $aws->rds->dbInstance->create($createRequest);
         CloudResource::deletePk($dbInstanceIdentifier, CloudResource::TYPE_AWS_RDS, $this->getEnvironmentId(), \SERVER_PLATFORMS::EC2, $cloudLocation);
         $this->response->success("DB Cluster has been successfully restored from Snapshot");
     } else {
         $this->response->failure($result);
     }
 }