예제 #1
0
 public function getMemory($units = 'B')
 {
     $mem_array = $this->virtualsystem->getMemory();
     $all_mem = array_sum($mem_array);
     switch ($units) {
         case 'B':
             $all_mem = Etva::MB_to_Byteconvert($all_mem);
             break;
         default:
             break;
     }
     return $all_mem;
 }
예제 #2
0
 public function send_create(EtvaNode $etva_node, $size, $format = '', $persnapshotusage = null)
 {
     $method = self::LVCREATE;
     $lv = $this->etva_lv->getLv();
     $etva_vg = $this->etva_lv->getEtvaVolumegroup();
     $vg = $etva_vg->getVg();
     $is_DiskFile = $vg == sfConfig::get('app_volgroup_disk_flag') ? 1 : 0;
     $params = array('lv' => $is_DiskFile ? $etva_node->getStoragedir() . '/' . $lv : $lv, 'vg' => $vg, 'size' => $size, 'format' => $format);
     if ($persnapshotusage) {
         $params['usagesize'] = Etva::MB_to_Byteconvert($size) * (1 - $persnapshotusage / 100);
     }
     $response = $etva_node->soapSend($method, $params);
     $result = $this->processResponse($etva_node, $response, $method);
     return $result;
 }
예제 #3
0
 public function canResizeTo($sizeMB)
 {
     $vg = $this->getEtvaVolumegroup();
     $size_bytes = Etva::MB_to_Byteconvert($sizeMB);
     $total_available_size = $vg->getFreesize() + $this->size;
     if ($size_bytes > 0 && $size_bytes <= $total_available_size) {
         return true;
     } else {
         return false;
     }
 }
예제 #4
0
파일: EtvaNode.php 프로젝트: ketheriel/ETVA
 public function canAssignServer(EtvaServer $server)
 {
     $server_mem = Etva::MB_to_Byteconvert($server->getMem());
     if ($this->getCputotal() >= $server->getVcpu() && $this->getMaxMem() > $server_mem && !$server->getDevices_VA() && !$server->getHasSnapshots()) {
         if ($server->getVmState() !== EtvaServer::RUNNING || $this->getMemfree() > $server_mem) {
             error_log("canAssignServer OK node=" . $this->getName() . " server=" . $server->getName() . " vmstate=" . $server->getVmState() . " maxmem=" . $this->getMaxMem() . " memfree=" . $this->getMemfree() . " server_mem=" . $server_mem);
             return true;
         }
     }
     error_log("canAssignServer NOK node=" . $this->getName() . " server=" . $server->getName() . " vmstate=" . $server->getVmState() . " maxmem=" . $this->getMaxMem() . " memfree=" . $this->getMemfree() . " server_mem=" . $server_mem);
     return false;
 }
예제 #5
0
 public function send_start(EtvaNode $etva_node, $extra = null, $ignoreAdmissionGate = false)
 {
     $etva_server = $this->etva_server;
     $method = self::SERVER_START;
     $mem_available = $etva_node->getMemfree();
     $server_mem_mb = $etva_server->getMem();
     $server_mem = Etva::MB_to_Byteconvert($server_mem_mb);
     error_log(" start_vm mem_available=" . $mem_available . " server_mem=" . $server_mem);
     if ($server_mem > $mem_available) {
         //notify event log
         $msg_i18n = Etva::makeNotifyLogMessage($error['agent'], EtvaNodePeer::_ERR_MEM_AVAILABLE_, array('name' => $etva_node->getName(), 'info' => $server_mem_mb), EtvaServerPeer::_ERR_START_, array('name' => $server));
         $error = array('success' => false, 'agent' => $etva_node->getName(), 'info' => $msg_i18n, 'error' => $msg_i18n);
         return $error;
     }
     $etva_cluster = $etva_node->getEtvaCluster();
     if (!$ignoreAdmissionGate && $etva_cluster->getHasNodeHA()) {
         $admissiongate_response = $etva_cluster->getAdmissionGate($etva_server);
         if (!$admissiongate_response['success']) {
             //notify event log
             $msg_i18n = Etva::makeNotifyLogMessage($error['agent'], EtvaClusterPeer::_ERR_ADMISSION_GATE_FAIL_, array('name' => $etva_server->getName(), 'info' => $admissiongate_response['info']), EtvaServerPeer::_ERR_START_, array('name' => $server));
             $error = array('success' => false, 'agent' => $etva_node->getName(), 'info' => $msg_i18n, 'error' => $msg_i18n);
             return $error;
         }
     }
     $params = $extra ? $extra : array();
     $params['uuid'] = $etva_server->getUuid();
     $boot = $etva_server->getBoot();
     $location = $etva_server->getLocation();
     $vm_type = $etva_server->getVmType();
     $first_boot = $etva_server->getFirstBoot();
     if ($first_boot) {
         $params['first_boot'] = $first_boot;
         if ($location && $vm_type == 'pv') {
             $boot = 'location';
         }
     }
     $params['boot'] = $boot;
     if ($boot == 'location' || $boot == 'cdrom') {
         $params['location'] = $location;
     }
     $params['vnc_keymap'] = $etva_server->getVncKeymap();
     $response = $etva_node->soapSend($method, $params);
     return $this->processStartStop($etva_node, $response, $method);
 }