Scalr\Modules\Platforms\GoogleCE\GoogleCEPlatformModule::CheckServerSnapshotStatus PHP Method

CheckServerSnapshotStatus() public method

See also: Scalr\Modules\PlatformModuleInterface::CheckServerSnapshotStatus()
public CheckServerSnapshotStatus ( BundleTask $BundleTask )
$BundleTask BundleTask
    public function CheckServerSnapshotStatus(BundleTask $BundleTask)
    {
        if ($BundleTask->status != \SERVER_SNAPSHOT_CREATION_STATUS::IN_PROGRESS) {
            return;
        }
        if ($BundleTask->osFamily != 'windows') {
            return;
        }
        $meta = $BundleTask->getSnapshotDetails();
        $env = \Scalr_Environment::init()->loadById($BundleTask->envId);
        $gce = $this->getClient($env);
        $projectId = $env->keychain(SERVER_PLATFORMS::GCE)->properties[Entity\CloudCredentialsProperty::GCE_PROJECT_ID];
        if ($meta['gceSnapshotOpPhase3Id']) {
            try {
                $op3 = $gce->globalOperations->get($projectId, $meta['gceSnapshotOpPhase3Id']);
                if ($op3->status == 'DONE') {
                    $BundleTask->SnapshotCreationComplete($BundleTask->snapshotId, $meta);
                } else {
                    $BundleTask->Log("CreateImage operation status: {$op3->status}");
                }
            } catch (Exception $e) {
                $BundleTask->Log("CheckServerSnapshotStatus(2): {$e->getMessage()}");
                return;
            }
        } else {
            //Check operations status
            try {
                $op1 = $gce->zoneOperations->get($projectId, $meta['gceSnapshotZone'], $meta['gceSnapshotOpPhase1Id']);
                $op2 = $gce->zoneOperations->get($projectId, $meta['gceSnapshotZone'], $meta['gceSnapshotOpPhase2Id']);
            } catch (Exception $e) {
                $BundleTask->Log("CheckServerSnapshotStatus(1): {$e->getMessage()}");
                return;
            }
            if ($op1->status == 'DONE' && $op2->status == 'DONE') {
                try {
                    // identifier of google cloud resource must start from [a-z]
                    $imageName = (preg_match('/^[^a-z]/', $BundleTask->roleName) ? 'i' : '') . $BundleTask->roleName . '-' . date('YmdHi');
                    $postBody = new \Google_Service_Compute_Image();
                    $postBody->setName($imageName);
                    $postBody->setSourceDisk($this->getObjectUrl($meta['gceSnapshotDeviceName'], 'disks', $projectId, $meta['gceSnapshotZone']));
                    $op3 = $gce->images->insert($projectId, $postBody);
                    $BundleTask->setMetaData(array('gceSnapshotOpPhase3Id' => $op3->name, 'gceSnapshotTargetLink' => $op3->targetLink));
                    $BundleTask->snapshotId = "{$projectId}/global/images/{$this->getObjectName($op3->targetLink)}";
                    $BundleTask->Log(sprintf(_("Snapshot initialized (ID: %s). Operation: {$op3->name}"), $BundleTask->snapshotId));
                    $BundleTask->Save();
                } catch (Exception $e) {
                    $BundleTask->Log("CheckServerSnapshotStatus(3): {$e->getMessage()}");
                }
            } else {
                $BundleTask->Log("CheckServerSnapshotStatus(0): {$op1->status}:{$op2->status}");
            }
        }
    }