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; }
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); }