/**
* @param string $platform
* @param string $cloudLocation
* @param string $cloudServerId
* @param string $name
* @param bool $createImage
* @throws Exception
*/
public function xInitiateImportAction($platform, $cloudLocation, $cloudServerId, $name, $createImage = false)
{
if (!Role::isValidName($name)) {
throw new Exception(_("Name is incorrect"));
}
if (!$createImage) {
$this->request->restrictAccess(Acl::RESOURCE_ROLES_ENVIRONMENT, Acl::PERM_ROLES_ENVIRONMENT_MANAGE);
}
if (!$createImage && Role::isNameUsed($name, $this->user->getAccountId(), $this->getEnvironmentId())) {
throw new Exception('Selected role name is already used. Please select another one.');
}
$cryptoKey = Scalr::GenerateRandomKey(40);
$creInfo = new ServerCreateInfo($platform, null, 0, 0);
$creInfo->clientId = $this->user->getAccountId();
$creInfo->envId = $this->getEnvironmentId();
$creInfo->farmId = 0;
$creInfo->SetProperties(array(SERVER_PROPERTIES::SZR_IMPORTING_ROLE_NAME => $name, SERVER_PROPERTIES::SZR_IMPORTING_OBJECT => $createImage ? BundleTask::BUNDLETASK_OBJECT_IMAGE : BundleTask::BUNDLETASK_OBJECT_ROLE, SERVER_PROPERTIES::SZR_KEY => $cryptoKey, SERVER_PROPERTIES::SZR_KEY_TYPE => SZR_KEY_TYPE::PERMANENT, SERVER_PROPERTIES::SZR_VESION => "0.14.0", SERVER_PROPERTIES::SZR_IMPORTING_VERSION => 2, SERVER_PROPERTIES::SZR_IMPORTING_STEP => 1, SERVER_PROPERTIES::LAUNCHED_BY_ID => $this->user->id, SERVER_PROPERTIES::LAUNCHED_BY_EMAIL => $this->user->getEmail()));
$platformObj = PlatformFactory::NewPlatform($platform);
$availZone = null;
$osType = '';
if ($platform == SERVER_PLATFORMS::EC2) {
$client = $this->environment->aws($cloudLocation)->ec2;
$r = $client->instance->describe($cloudServerId);
$instance = $r->get(0)->instancesSet->get(0);
$availZone = $instance->placement->availabilityZone;
$osType = $instance->platform == 'windows' ? 'windows' : 'linux';
$creInfo->SetProperties(array(EC2_SERVER_PROPERTIES::REGION => $cloudLocation, EC2_SERVER_PROPERTIES::INSTANCE_ID => $cloudServerId, EC2_SERVER_PROPERTIES::AMIID => $instance->imageId, EC2_SERVER_PROPERTIES::AVAIL_ZONE => $instance->placement->availabilityZone));
} else {
if ($platform == SERVER_PLATFORMS::GCE) {
$gce = $platformObj->getClient($this->environment);
$result = $gce->instances->get($this->environment->keychain(SERVER_PLATFORMS::GCE)->properties[CloudCredentialsProperty::GCE_PROJECT_ID], $cloudLocation, $cloudServerId);
$creInfo->SetProperties(array(GCE_SERVER_PROPERTIES::SERVER_NAME => $cloudServerId, GCE_SERVER_PROPERTIES::CLOUD_LOCATION => $cloudLocation));
} else {
if ($platform == SERVER_PLATFORMS::AZURE) {
//$this->getEnvironment()->azure()->compute->virtualMachine->getInstanceViewInfo()
// $r->properties->osProfile->linuxConfiguration != NULL
} else {
if (PlatformFactory::isOpenstack($platform)) {
$creInfo->SetProperties(array(OPENSTACK_SERVER_PROPERTIES::CLOUD_LOCATION => $cloudLocation, OPENSTACK_SERVER_PROPERTIES::SERVER_ID => $cloudServerId));
} else {
if (PlatformFactory::isCloudstack($platform)) {
$creInfo->SetProperties(array(CLOUDSTACK_SERVER_PROPERTIES::CLOUD_LOCATION => $cloudLocation, CLOUDSTACK_SERVER_PROPERTIES::SERVER_ID => $cloudServerId));
}
}
}
}
}
$dbServer = DBServer::Create($creInfo, true);
$dbServer->osType = $osType;
$ips = $platformObj->GetServerIPAddresses($dbServer);
$dbServer->localIp = $ips['localIp'];
$dbServer->remoteIp = $ips['remoteIp'];
$dbServer->cloudLocation = $cloudLocation;
if ($platform == SERVER_PLATFORMS::GCE) {
$dbServer->cloudLocationZone = $cloudLocation;
} else {
$dbServer->cloudLocationZone = $availZone;
}
$dbServer->Save();
$this->response->data(array('command' => $this->getSzrCmd($dbServer), 'installCommand' => $this->getInstallCmd($dbServer), 'osType' => $dbServer->osType, 'serverId' => $dbServer->serverId));
}