Exemplo n.º 1
0
 public function initialize($data)
 {
     $uuid = $data['uuid'];
     $etva_data = Etva::getEtvaModelFile();
     if (!$etva_data) {
         $error_msg = 'Could not process etva-model.conf';
         $error = array('success' => false, 'error' => $error_msg);
         //notify system log
         $message = Etva::getLogMessage(array('name' => $data['name'], 'info' => $error_msg), EtvaNodePeer::_ERR_SOAPINIT_);
         sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
         return $error;
     }
     $etvamodel = $etva_data['model'];
     $c = new Criteria();
     $c->add(EtvaNodePeer::UUID, $uuid);
     $etva_node = EtvaNodePeer::doSelectOne($c);
     if ($etva_node) {
         if ($etva_node->getState() < EtvaNode::NODE_INACTIVE) {
             // dont touch
             //$data['state'] = $etva_node->getState();
             $data['state'] = $this->calcState($etva_node, EtvaNode::NODE_ACTIVE);
         }
         if (!isset($data['isSpareNode'])) {
             $data['isSpareNode'] = $etva_node->getIssparenode() ? 1 : 0;
         }
         if (!isset($data['fencingconf'])) {
             $data['fencingconf'] = $etva_node->getFencingconf();
         }
         $data['cluster_id'] = $etva_node->getClusterId();
         $node_initialize = $etva_node->getInitialize();
         $data['initialize'] = $node_initialize;
         if (empty($node_initialize)) {
             $data['initialize'] = self::INITIALIZE_PENDING;
         }
         if ($etvamodel == 'standard') {
             $data['initialize'] = self::INITIALIZE_OK;
         } else {
             if ($node_initialize != self::INITIALIZE_OK) {
                 return array('success' => true);
             }
         }
         $data['id'] = $etva_node->getId();
         /*
          * calculate free mem
          */
         $etva_node->setMemtotal($data['memtotal']);
         $etva_node->updateMemFree();
         $data['memfree'] = $etva_node->getMemfree();
         $uuid = $etva_node->getUuid();
         $form = new EtvaNodeForm($etva_node);
     } else {
         /*
          * add default cluster ID to node
          */
         if (!($default_cluster = EtvaClusterPeer::retrieveDefaultCluster())) {
             $error_msg = sprintf('Default Object etva_cluster does not exist ');
             $error = array('success' => false, 'error' => $error_msg);
             //notify system log
             $cluster_message = Etva::getLogMessage(array('info' => $error_msg), EtvaClusterPeer::_ERR_DEFAULT_CLUSTER_);
             $message = Etva::getLogMessage(array('name' => $data['name'], 'info' => $cluster_message), EtvaNodePeer::_ERR_SOAPINIT_);
             sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
             return $error;
         }
         $data['cluster_id'] = $default_cluster->getId();
         $form = new EtvaNodeForm();
         $uuid = EtvaNodePeer::generateUUID();
         $data['initialize'] = self::INITIALIZE_PENDING;
         if ($etvamodel == 'standard') {
             $data['initialize'] = self::INITIALIZE_OK;
         }
         /*
          * calculate free mem
          */
         $etva_node = new EtvaNode();
         $etva_node->setMemtotal($data['memtotal']);
         $etva_node->updateMemFree();
         $etva_node->setClusterId($default_cluster->getId());
         $data['memfree'] = $etva_node->getMemfree();
         $data['uuid'] = $uuid;
     }
     $this->clearLastMessage();
     $result = $this->processNodeForm($data, $form);
     if (!$result['success']) {
         return $result;
     }
     // reset guest agent info
     $this->reset_gas_info($etva_node);
     /*
      *
      * check if has restore to perform....
      */
     $apli = new Appliance();
     $action = $apli->getStage(Appliance::RESTORE_STAGE);
     if ($action) {
         $backup_url = $apli->get_backupconf_url(Appliance::VA_ARCHIVE_FILE, $uuid, 'VA');
         if ($backup_url) {
             $result['reset'] = 1;
             $result['backup_url'] = $backup_url;
             /*
              * send pvs, vgs, lvs
              */
             $node_devs = $etva_node->getEtvaNodePhysicalvolumesJoinEtvaPhysicalvolume();
             $devs_va = array();
             foreach ($node_devs as $data) {
                 $dev = $data->getEtvaPhysicalvolume();
                 $devs_va[] = $dev->_VA();
             }
             $result['pvs'] = $devs_va;
             $node_vgs = $etva_node->getEtvaNodeVolumegroupsJoinEtvaVolumegroup();
             $vgs_va = array();
             foreach ($node_vgs as $data) {
                 $vg = $data->getEtvaVolumegroup();
                 $vgs_va[] = $vg->_VA();
             }
             $result['vgs'] = $vgs_va;
             $node_lvs = $etva_node->getEtvaNodeLogicalvolumesJoinEtvaLogicalvolume();
             $lvs_va = array();
             foreach ($node_lvs as $data) {
                 $lv = $data->getEtvaLogicalvolume();
                 $lvs_va[] = $lv->_VA();
             }
             $result['lvs'] = $lvs_va;
         }
         $apli->setStage(Appliance::RESTORE_STAGE, Appliance::VA_INIT);
     }
     return $result;
 }
Exemplo n.º 2
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);
 }