protected function run4()
{
$this->console->notice('Fill image_id in servers table');
// ec2
$this->db->Execute("\n UPDATE servers s JOIN server_properties sp ON s.server_id = sp.server_id\n SET s.image_id = sp.value\n WHERE sp.name = ? AND s.platform = ?\n ", [\EC2_SERVER_PROPERTIES::AMIID, \SERVER_PLATFORMS::EC2]);
// rackspace
$this->db->Execute("\n UPDATE servers s JOIN server_properties sp ON s.server_id = sp.server_id\n SET s.image_id = sp.value\n WHERE sp.name = ? AND s.platform = ?\n ", [\RACKSPACE_SERVER_PROPERTIES::IMAGE_ID, \SERVER_PLATFORMS::RACKSPACE]);
//cloudstack
foreach (PlatformFactory::getCloudstackBasedPlatforms() as $platform) {
foreach ($this->db->GetCol('SELECT server_id FROM servers WHERE platform = ?', [$platform]) as $serverId) {
try {
$dbServer = \DBServer::LoadByID($serverId);
$env = (new \Scalr_Environment())->loadById($dbServer->envId);
if ($dbServer->GetProperty(\CLOUDSTACK_SERVER_PROPERTIES::SERVER_ID)) {
$lst = $env->cloudstack($platform)->instance->describe(['id' => $dbServer->GetProperty(\CLOUDSTACK_SERVER_PROPERTIES::SERVER_ID)]);
if ($lst && $lst->count() == 1) {
$instance = $lst->offsetGet(0);
$dbServer->imageId = $instance->templateid;
$this->console->notice('Set imageId: %s for serverId: %s', $dbServer->imageId, $serverId);
$dbServer->save();
} else {
$this->console->warning('Instance not found: %s for serverId: %s', $dbServer->GetProperty(\CLOUDSTACK_SERVER_PROPERTIES::SERVER_ID), $serverId);
}
}
} catch (\Exception $e) {
$this->console->warning($e->getMessage());
}
}
}
// openstack
foreach (PlatformFactory::getOpenstackBasedPlatforms() as $platform) {
$this->db->Execute("\n UPDATE servers s LEFT JOIN server_properties sp ON s.server_id = sp.server_id\n SET s.image_id = sp.value\n WHERE sp.name = ? AND s.platform = ?\n ", [\OPENSTACK_SERVER_PROPERTIES::IMAGE_ID, $platform]);
}
}