Example #1
0
 public function initData($arr)
 {
     if (array_key_exists(self::NAME_MAP, $arr)) {
         $this->setName($arr[self::NAME_MAP]);
     }
     if (array_key_exists(self::MEMORY_MAP, $arr)) {
         $memory = Etva::Byte_to_MBconvert($arr[self::MEMORY_MAP]);
         $this->setMem($memory);
     }
     if (array_key_exists(self::VCPU_MAP, $arr)) {
         $this->setCpus($arr[self::VCPU_MAP]);
     }
     if (array_key_exists(self::VNC_PORT_MAP, $arr)) {
         $this->setVncPort($arr[self::VNC_PORT_MAP]);
     }
     if (array_key_exists(self::VNC_KEYMAP_MAP, $arr)) {
         $this->setVncKeymap($arr[self::VNC_KEYMAP_MAP]);
     }
     if (array_key_exists(self::VM_STATE_MAP, $arr)) {
         $this->setVmState($arr[self::VM_STATE_MAP]);
     }
     if (array_key_exists(self::DISKS_MAP, $arr)) {
         $this->setDisks($arr[self::DISKS_MAP]);
     }
     if (array_key_exists(self::NETWORKS_MAP, $arr)) {
         $this->setNetworks($arr[self::NETWORKS_MAP]);
     }
     if (array_key_exists(self::FEATURES_MAP, $arr)) {
         $this->setFeatures(json_encode($arr[self::FEATURES_MAP]));
     }
 }
 protected function execute($arguments = array(), $options = array())
 {
     // initialize the database connection
     $databaseManager = new sfDatabaseManager($this->configuration);
     $con = $databaseManager->getDatabase($options['connection'])->getConnection();
     // add networks from config file to the givel cluster (optional)
     $flag = 0;
     //write or not to stdout
     if ($options['cluster_id']) {
         $cluster_id = $options['cluster_id'];
         $flag = 1;
     } else {
         $default_cluster = EtvaClusterPeer::retrieveDefaultCluster();
         $cluster_id = $default_cluster->getId();
     }
     error_log("LOADCONFTASK[INFO] Loading config file");
     error_log($cluster_id);
     $model = Etva::getEtvaModelFile();
     $networks = isset($model['networks']) ? $model['networks'] : $model[ucfirst('networks')];
     if ($this->initialize_networks($networks, $cluster_id)) {
         if ($flag == 0) {
             echo "Done!\n";
         }
         return 1;
     } else {
         if ($flag == 0) {
             echo "Failed!\n";
         }
         return 0;
     }
 }
 protected function execute($arguments = array(), $options = array())
 {
     $context = sfContext::createInstance(sfProjectConfiguration::getApplicationConfiguration('app', $options['env'], true));
     // initialize the database connection
     $databaseManager = new sfDatabaseManager($this->configuration);
     $connection = $databaseManager->getDatabase($options['connection'])->getConnection();
     // add your code here
     // get parameters
     $lv = $arguments['name'];
     $size = $arguments['size'];
     $vg = $arguments['volumegroup'];
     $node_id = $options['node'];
     $format = $options['format'];
     $persnapshotusage = $options['persnapshotusage'];
     /*
      * check if lv is a file disk instead
      * if is a file disk check if special volume group exists. if not create
      */
     $is_DiskFile = $vg == sfConfig::get('app_volgroup_disk_flag') ? 1 : 0;
     // get etva_node
     $etva_node = EtvaNodePeer::getOrElectNodeFromArray(array_merge($options, $arguments));
     if (!$etva_node) {
         $msg_i18n = $context->getI18N()->__(EtvaNodePeer::_ERR_NOTFOUND_ID_, array('%id%' => $node_id));
         $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
         $this->log("[ERROR] " . $error['error']);
         return $error;
     }
     // get logical volume
     if ($etva_lv = $etva_node->retrieveLogicalvolumeByLv($lv)) {
         $msg_type = $is_DiskFile ? EtvaLogicalvolumePeer::_ERR_DISK_EXIST_ : EtvaLogicalvolumePeer::_ERR_LV_EXIST_;
         $msg = Etva::getLogMessage(array('name' => $lv), $msg_type);
         $msg_i18n = $context->getI18N()->__($msg_type, array('%name%' => $lv));
         $error = array('success' => false, 'agent' => $etva_node->getName(), 'error' => $msg_i18n, 'info' => $msg_i18n);
         $this->log("[ERROR] " . $error['error']);
         return $error;
     }
     if (!($etva_vg = $etva_node->retrieveVolumegroupByVg($vg))) {
         $msg = Etva::getLogMessage(array('name' => $vg), EtvaVolumegroupPeer::_ERR_NOTFOUND_);
         $msg_i18n = $context->getI18N()->__(EtvaVolumegroupPeer::_ERR_NOTFOUND_, array('%name%' => $vg));
         $error = array('success' => false, 'agent' => $etva_node->getName(), 'error' => $msg_i18n, 'info' => $msg_i18n);
         $this->log("[ERROR] " . $error['error']);
         return $error;
     }
     // prepare soap info....
     $etva_lv = new EtvaLogicalvolume();
     $etva_lv->setEtvaVolumegroup($etva_vg);
     $etva_lv->setLv($lv);
     $lv_va = new EtvaLogicalvolume_VA($etva_lv);
     $response = $lv_va->send_create($etva_node, $size, $format, $persnapshotusage);
     if (!$response['success']) {
         $this->log("[ERROR] " . $response['error']);
     } else {
         $this->log("[INFO] " . $response['response']);
     }
     return $response;
 }
Example #4
0
 public static function checkDbVersion()
 {
     $etva_data = Etva::getEtvaModelFile();
     $curr = $etva_data['dbversion'];
     $min = floatval(sfConfig::get('app_dbrequired'));
     if ($curr < $min) {
         return "Incompatible database version. Please upgrade.";
     } else {
         return "OK";
     }
 }
Example #5
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;
 }
Example #6
0
 protected function execute($arguments = array(), $options = array())
 {
     // Context
     $context = sfContext::createInstance(sfProjectConfiguration::getApplicationConfiguration('app', $options['env'], true));
     // initialize the database connection
     $databaseManager = new sfDatabaseManager($this->configuration);
     $connection = $databaseManager->getDatabase($options['connection'])->getConnection();
     // add your code here
     // server id
     $server = $arguments['server'];
     $this->log("[INFO] Shutdown server with '{$server}'");
     $etva_server = EtvaServerPeer::retrieveByPK($server);
     if (!$etva_server) {
         $etva_server = EtvaServerPeer::retrieveByUuid($server);
     }
     if (!$etva_server) {
         $etva_server = EtvaServerPeer::retrieveByName($server);
     }
     if (!$etva_server) {
         $msg_i18n = $context->getI18N()->__(EtvaServerPeer::_ERR_NOTFOUND_, array('name' => $server));
         $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
         $this->log("[ERROR] " . $error['error']);
         return $error;
     } else {
         if ($nid = $options['node']) {
             $etva_node = EtvaNodePeer::retrieveByPK($nid);
         } else {
             $etva_node = $etva_server->getEtvaNode();
         }
         if (!$etva_node) {
             //notify event log
             $msg_i18n = Etva::makeNotifyLogMessage(sfConfig::get('config_acronym'), EtvaNodePeer::_ERR_NOTFOUND_ID_, array('id' => $nid), EtvaServerPeer::_ERR_STOP_, array('name' => $server));
             $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
             $this->log("[ERROR] " . $error['error']);
             return $error;
         }
         $destroy = $options['destroy'] ? 1 : 0;
         $force = $options['force'] ? 1 : 0;
         $extra = array('destroy' => $destroy, 'force' => $force);
         $server_va = new EtvaServer_VA($etva_server);
         $response = $server_va->send_stop($etva_node, $extra);
         if ($response['success']) {
             $this->log("[INFO] " . $response['response']);
         } else {
             $this->log("[ERROR] " . $response['error']);
         }
         return $response;
     }
 }
 protected function execute($arguments = array(), $options = array())
 {
     $context = sfContext::createInstance(sfProjectConfiguration::getApplicationConfiguration('app', $options['env'], true));
     // initialize the database connection
     $databaseManager = new sfDatabaseManager($this->configuration);
     $connection = $databaseManager->getDatabase($options['connection'])->getConnection();
     // add your code here
     // get node
     $node_id = $options['node'];
     $etva_node = EtvaNodePeer::getOrElectNodeFromArray(array_merge($options, $arguments));
     if (!$etva_node) {
         $msg_i18n = $context->getI18N()->__(EtvaNodePeer::_ERR_NOTFOUND_ID_, array('%id%' => $node_id));
         $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
         $this->log("[ERROR] " . $error['error']);
         return $error;
     }
     // logical volume to clone
     $lv = $arguments['logicalvolume'];
     $vg = $options['volumegroup'];
     // check if a logical volume exists
     if (!($etva_lv = $etva_node->retrieveLogicalvolumeByAny($lv, $vg))) {
         $msg = Etva::getLogMessage(array('name' => $lv), EtvaLogicalvolumePeer::_ERR_NOTFOUND_);
         $msg_i18n = $context->getI18N()->__(EtvaLogicalvolumePeer::_ERR_NOTFOUND_, array('%name%' => $lv));
         $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
         $this->log("[ERROR] " . $error['error']);
         return $error;
     }
     // original logical volume
     $original_lv = $arguments['original'];
     $original_vg = $options['original-volumegroup'];
     // if cannot find logical volume
     if (!($etva_original_lv = $etva_node->retrieveLogicalvolumeByAny($original_lv, $original_vg))) {
         $msg = Etva::getLogMessage(array('name' => $original_lv), EtvaLogicalvolumePeer::_ERR_NOTFOUND_);
         $msg_i18n = $context->getI18N()->__(EtvaLogicalvolumePeer::_ERR_NOTFOUND_, array('%name%' => $original_lv));
         $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
         $this->log("[ERROR] " . $error['error']);
         return $error;
     }
     // prepare soap info....
     $lv_va = new EtvaLogicalvolume_VA($etva_lv);
     $response = $lv_va->send_clone($etva_node, $etva_original_lv);
     if (!$response['success']) {
         $this->log("[ERROR] " . $response['error']);
     } else {
         $this->log("[INFO] " . $response['response']);
     }
     return $response;
 }
Example #8
0
 /**
  * Expanad the physical volume
  *
  * Expand size of physical volume,
  *
  * $request may contain the following keys:
  * - nid: virt agent node ID
  * - dev: device name Ex: /dev/sdb1
  *
  * Returns json array('success'=>true,'response'=>$resp) on success
  *  <br>or<br>
  * json array('success'=>false,'error'=>$error) on error
  *
  */
 public function executeJsonExpand(sfWebRequest $request)
 {
     $nid = $request->getParameter('nid');
     $dev = $request->getParameter('dev');
     $etva_node = EtvaNodePeer::getOrElectNode($request);
     if (!$etva_node) {
         $msg_i18n = $this->getContext()->getI18N()->__(EtvaNodePeer::_ERR_NOTFOUND_ID_, array('%id%' => $nid));
         $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
         //notify system log
         $node_log = Etva::getLogMessage(array('id' => $nid), EtvaNodePeer::_ERR_NOTFOUND_ID_);
         $message = Etva::getLogMessage(array('name' => $dev, 'info' => $node_log), EtvaPhysicalvolumePeer::_ERR_UNINIT_);
         $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
         // if is a CLI soap request return json encoded data
         if (sfConfig::get('sf_environment') == 'soap') {
             return json_encode($error);
         }
         // if is browser request return text renderer
         $error = $this->setJsonError($error);
         return $this->renderText($error);
     }
     // get DB info
     if (!($etva_pv = $etva_node->retrievePhysicalvolumeByDevice($dev))) {
         $msg = Etva::getLogMessage(array('name' => $etva_node->getName(), 'dev' => $dev), EtvaNodePeer::_ERR_NODEV_);
         $msg_i18n = $this->getContext()->getI18N()->__(EtvaNodePeer::_ERR_NODEV_, array('%name%' => $etva_node->getName(), '%dev%' => $dev));
         $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
         //notify system log
         $message = Etva::getLogMessage(array('name' => $dev, 'info' => $msg), EtvaPhysicalvolumePeer::_ERR_UNINIT_);
         $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
         // if is a CLI soap request return json encoded data
         if (sfConfig::get('sf_environment') == 'soap') {
             return json_encode($error);
         }
         $error = $this->setJsonError($error);
         return $this->renderText($error);
     }
     /*
      * send physical volume to VA
      */
     $pv_va = new EtvaPhysicalvolume_VA($etva_pv);
     $response = $pv_va->send_expand($etva_node);
     if ($response['success']) {
         $return = json_encode($response);
         // if the request is made throught soap request...
         if (sfConfig::get('sf_environment') == 'soap') {
             return $return;
         }
         // if is browser request return text renderer
         $this->getResponse()->setHttpHeader('Content-type', 'application/json');
         return $this->renderText($return);
     } else {
         if (sfConfig::get('sf_environment') == 'soap') {
             return json_encode($response);
         }
         $return = $this->setJsonError($response);
         return $this->renderText($return);
     }
 }
Example #9
0
 public function executeIsoJsonDelete(sfWebRequest $request)
 {
     $directory = sfConfig::get("config_isos_dir");
     $file = $request->getParameter('file');
     $file_path = $directory . '/' . $file;
     $sys_msg = exec('stat -c "%F" ' . escapeshellarg($file_path), $sys_call);
     if (empty($sys_call)) {
         $info_message = Etva::getLogMessage(array('name' => $file, 'info' => ''), ETVA::_ERR_ISO_PROBLEM_);
         $msg_i18n = $this->getContext()->getI18N()->__(ETVA::_ERR_ISO_DELETE_, array('%info%' => $info_message));
         $msg = array('success' => false, 'message' => $msg_i18n);
         $response = json_encode($msg);
         return $this->renderText($response);
     }
     $errors = Etva::verify_iso_usage($file);
     if ($errors) {
         $info_message = Etva::getLogMessage(array('name' => $file, 'info' => ETVA::_CDROM_INUSE_), ETVA::_ERR_ISO_INUSE_);
         $message = Etva::getLogMessage(array('info' => $info_message), ETVA::_ERR_ISO_DELETE_);
         $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
         $i18n_br_sep = implode('<br>', $errors);
         $i18n_sp_sep = implode(' ', $errors);
         $i18n_iso_br_msg = $this->getContext()->getI18N()->__(ETVA::_ERR_ISO_INUSE_, array('%name%' => $file, '%info%' => '<br>' . $i18n_br_sep));
         $i18n_iso_sp_msg = $this->getContext()->getI18N()->__(ETVA::_ERR_ISO_INUSE_, array('%name%' => $file, '%info%' => $i18n_sp_sep));
         $message_i18n = $this->getContext()->getI18N()->__(ETVA::_ERR_ISO_PROBLEM_, array('%name%' => $file, '%info%' => ''));
         $msg = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'message' => $message_i18n, 'info' => $i18n_iso_br_msg, 'error' => $i18n_iso_sp_msg);
         $error = $this->setJsonError($msg);
         return $this->renderText($error);
     }
     if ($file && $request->isMethod('post') && stristr($sys_msg, 'file')) {
         if (unlink($file_path)) {
             $msg = array('success' => true);
         } else {
             $msg = array('success' => false, 'message' => $msg_i18n);
         }
     } else {
         $msg = array('success' => false, 'message' => $msg_i18n);
     }
     $response = json_encode($msg);
     return $this->renderText($response);
 }
Example #10
0
 public function executeJsonUpdate(sfWebRequest $request)
 {
     // create node entry
     $id = $request->getParameter('id');
     $etva_node = EtvaNodePeer::retrieveByPK($id);
     if (!$etva_node) {
         $form = new EtvaNodeForm();
     } else {
         $form = new EtvaNodeForm($etva_node);
     }
     $data = (array) json_decode($request->getParameter($form->getName()));
     if ($data['name'] && $data['name'] != $etva_node->getName()) {
         // if name changed
         $node_va = new EtvaNode_VA($etva_node);
         $response = $node_va->send_change_name($data['name']);
         // send to VA to change name
         if (!$response['success']) {
             if (sfConfig::get('sf_environment') == 'soap') {
                 return json_encode($response);
             }
             $return = $this->setJsonError($response);
             return $this->renderText($return);
         }
     }
     try {
         $etva_node->fromArray($data, BasePeer::TYPE_FIELDNAME);
         $etva_node->save();
     } catch (Exception $e) {
         $result = array('success' => false, 'error' => array('node' => $e->getMessage()), 'obj' => $etva_cluster);
         $error = $this->setJsonError($result);
         return $this->renderText($error);
     }
     $name = $etva_node->getName();
     $i18n_msg = $msg_i18n = $this->getContext()->getI18N()->__(EtvaNodePeer::_OK_UPDATE_, array('%name%' => $name));
     //notify system log
     $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => Etva::getLogMessage(array('name' => $name), EtvaNodePeer::_OK_UPDATE_))));
     $return = array('success' => true, 'agent' => sfConfig::get('config_acronym'), 'response' => $i18n_msg, 'node_id' => $etva_node->getId());
     $return = json_encode($return);
     error_log("getFencingconf_cmd " . $etva_node->getFencingconf_cmd('status'));
     $this->getResponse()->setHttpHeader('Content-type', 'application/json');
     return $this->renderText($return);
 }
 public function send_expand(EtvaNode $etva_node)
 {
     $msg_ok_type = EtvaPhysicalvolumePeer::_OK_EXPAND_;
     $msg_err_type = EtvaPhysicalvolumePeer::_ERR_EXPAND_;
     $method = self::DEVICERESIZE;
     $etva_pv_uuid = $this->etva_pv->getUuid();
     $etva_pv_type = $this->etva_pv->getStorageType();
     $etva_pv_device = $this->etva_pv->getDevice();
     $params = array('device' => $etva_pv_device, 'uuid' => $etva_pv_uuid);
     // check if physical volume is shared
     $shared = $this->etva_pv->getStorageType() != EtvaPhysicalvolume::STORAGE_TYPE_LOCAL_MAP;
     $etva_cluster = $etva_node->getEtvaCluster();
     $bulk_responses = array();
     if ($shared) {
         // call resize at all nodes
         $bulk_responses = $etva_cluster->soapSend($method, $params);
     } else {
         $node_id = $etva_node->getId();
         // call resize
         $bulk_responses[$node_id] = $etva_node->soapSend($method, $params);
     }
     // sync physical volumes size
     $errors = $this->send_update($etva_node);
     if (!empty($errors)) {
         $result = array('success' => false, 'errors' => $errors);
         $msg_i18n = Etva::makeNotifyLogMessage($etva_node->getName(), $msg_err_type, array('name' => $this->etva_pv->getName(), 'info' => ''));
         $result['error'] = $msg_i18n;
         return $result;
     } else {
         //notify system log
         $message = Etva::getLogMessage(array('name' => $this->etva_pv->getName()), $msg_ok_type);
         $msg_i18n = sfContext::getInstance()->getI18N()->__($msg_ok_type, array('%name%' => $this->etva_pv->getName()));
         sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent($etva_node->getName(), 'event.log', array('message' => $message)));
         $result = array('success' => true, 'agent' => $etva_node->getName(), 'response' => $msg_i18n);
         return $result;
     }
 }
Example #12
0
 public function executeJsonUpdate(sfWebRequest $request)
 {
     // create cluster entry
     $id = $request->getParameter('id');
     $cluster = EtvaClusterPeer::retrieveByPK($id);
     if (!$cluster) {
         $error_msg = sprintf('Object etva_cluster does not exist (%s).', $request->getParameter('id'));
         $info = array('success' => false, 'error' => $error_msg);
         $error = $this->setJsonError($info);
         return $this->renderText($error);
     }
     /*if(!$cluster) $form = new EtvaClusterForm();
             else $form = new EtvaClusterForm($cluster);
     
             $result = $this->processJsonForm($request, $form);
     
             if(!$result['success']){
                 $error = $this->setJsonError($result);
                 return $this->renderText($error);
             }
     
             //get cluster object
             $etva_cluster =  $result['object'];*/
     $form_data = (array) json_decode($request->getParameter('etva_cluster'));
     $clustername = $form_data['name'];
     if (!preg_match('/^[a-zA-Z][a-zA-Z0-9\\-\\_]+$/', $clustername)) {
         $msg = "Invalid name format";
         error_log("CLUSTER[ERROR]" . $msg);
         $msg_i18n = $this->getContext()->getI18N()->__($msg);
         $error_msg = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n);
         //notify system log
         $this->dispatcher->notify(new sfEvent($error['agent'], 'event.log', array('message' => Etva::getLogMessage(array('name' => $clustername, 'info' => $msg), EtvaClusterPeer::_ERR_CREATE_), 'priority' => EtvaEventLogger::ERR)));
         $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'info' => $msg_i18n, 'error' => array($error_msg));
         // if is a CLI soap request return json encoded data
         if (sfConfig::get('sf_environment') == 'soap') {
             return json_encode($error);
         }
         // if is browser request return text renderer
         $error = $this->setJsonError($error);
         return $this->renderText($error);
     }
     $cluster->setName($clustername);
     $cluster->setIsDefaultCluster(0);
     if ($form_data['isDefaultCluster']) {
         $updatecluster = array('Isdefaultcluster' => 0);
         EtvaClusterQuery::create()->update($updatecluster);
         $cluster->setIsDefaultCluster(1);
     }
     $cluster->setHasNodeHA($form_data['hasNodeHA'] ? 1 : 0);
     $cluster->setAdmissionGateType($form_data['admissionGate_type']);
     $cluster->setAdmissionGateValue($form_data['admissionGate_value']);
     $cluster->save();
     $etva_cluster = $cluster;
     $updateNodes = array('Issparenode' => 0);
     if ($request->getParameter('fencingconf')) {
         $fencingconf = $request->getParameter('fencingconf');
         $updateNodes['Fencingconf'] = $fencingconf;
     }
     //clear spare node
     EtvaNodeQuery::create()->filterByClusterId($etva_cluster->getId())->update($updateNodes);
     if ($sparenode_id = $request->getParameter('sparenode')) {
         if ($etva_sparenode = EtvaNodePeer::retrieveByPK($sparenode_id)) {
             // and mark the spare node
             $etva_sparenode->setIsSpareNode(1);
             $etva_sparenode->save();
         }
     }
     $name = $etva_cluster->getName();
     $i18n_msg = $msg_i18n = $this->getContext()->getI18N()->__(EtvaClusterPeer::_OK_UPDATE_, array('%name%' => $name));
     //notify system log
     $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => Etva::getLogMessage(array('name' => $name), EtvaClusterPeer::_OK_UPDATE_))));
     $return = array('success' => true, 'agent' => sfConfig::get('config_acronym'), 'response' => $i18n_msg, 'cluster_id' => $etva_cluster->getId());
     $return = json_encode($return);
     $this->getResponse()->setHttpHeader('Content-type', 'application/json');
     return $this->renderText($return);
 }
Example #13
0
 public function executeJsonUnregister(sfWebRequest $request)
 {
     $msg_ok_type = EtvaLogicalvolumePeer::_OK_UNREGISTER_;
     $msg_err_type = EtvaLogicalvolumePeer::_ERR_UNREGISTER_;
     // get node id
     if (!($etva_node = EtvaNodePeer::retrieveByPK($request->getParameter('nid')))) {
         // ... or elect from cluster context
         $etva_node = EtvaNodePeer::getOrElectNode($request);
     }
     if (!$etva_node) {
         $msg_i18n = $this->getContext()->getI18N()->__(EtvaNodePeer::_ERR_NOTFOUND_ID_, array('%id%' => $nid));
         $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
         $node_log = Etva::getLogMessage(array('id' => $nid), EtvaNodePeer::_ERR_NOTFOUND_ID_);
         //notify system log
         $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => $node_log, 'priority' => EtvaEventLogger::ERR)));
         // if is a CLI soap request return json encoded data
         if (sfConfig::get('sf_environment') == 'soap') {
             return json_encode($error);
         }
         // if is browser request return text renderer
         $error = $this->setJsonError($error);
         return $this->renderText($error);
     }
     $lv = $request->getParameter('lv');
     $vg = $request->getParameter('vg');
     $uuid = $request->getParameter('uuid');
     if (!($etva_logicalvolume = $etva_node->retrieveLogicalvolume($uuid, $vg, $lv))) {
         //lv is the logical volume name
         $msg = Etva::getLogMessage(array('name' => $lv), EtvaLogicalvolumePeer::_ERR_NOTFOUND_);
         $msg_i18n = $this->getContext()->getI18N()->__(EtvaLogicalvolumePeer::_ERR_NOTFOUND_, array('%name%' => $lv));
         $error = array('success' => false, 'agent' => $etva_node->getName(), 'error' => $msg_i18n, 'info' => $msg_i18n);
         //notify system log
         $message = Etva::getLogMessage(array('name' => $lv, 'info' => $msg), EtvaLogicalvolumePeer::_ERR_UNREGISTER_);
         $this->dispatcher->notify(new sfEvent($error['agent'], 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
         // if is a CLI soap request return json encoded data
         if (sfConfig::get('sf_environment') == 'soap') {
             return json_encode($error);
         }
         // if is browser request return text renderer
         $error = $this->setJsonError($error);
         return $this->renderText($error);
     }
     $etva_lv_va = new EtvaLogicalvolume_VA($etva_logicalvolume);
     $response = $etva_lv_va->unregister($etva_node);
     if (!$response['success']) {
         $msg_i18n = $this->getContext()->getI18N()->__($msg_err_type, array('%name%' => $lv));
         $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
         $node_log = Etva::getLogMessage(array('name' => $lv), $msg_err_type);
         //notify system log
         $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => $node_log, 'priority' => EtvaEventLogger::ERR)));
         // if is a CLI soap request return json encoded data
         if (sfConfig::get('sf_environment') == 'soap') {
             return json_encode($error);
         }
         // if is browser request return text renderer
         $error = $this->setJsonError($error);
         return $this->renderText($error);
     }
     //notify system log
     $message = Etva::getLogMessage(array('name' => $lv), $msg_ok_type);
     $msg_i18n = sfContext::getInstance()->getI18N()->__($msg_ok_type, array('%name%' => $lv));
     sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent($etva_node->getName(), 'event.log', array('message' => $message)));
     $result = array('success' => true, 'agent' => $etva_node->getName(), 'response' => $msg_i18n);
     $return = json_encode($result);
     if (sfConfig::get('sf_environment') == 'soap') {
         return $return;
     }
     $this->getResponse()->setHttpHeader('Content-type', 'application/json');
     return $this->renderText($return);
 }
Example #14
0
 protected function execute($arguments = array(), $options = array())
 {
     // Context
     $context = sfContext::createInstance(sfProjectConfiguration::getApplicationConfiguration('app', $options['env'], true));
     // initialize the database connection
     $databaseManager = new sfDatabaseManager($this->configuration);
     $connection = $databaseManager->getDatabase($options['connection'])->getConnection();
     // add your code here
     // server id
     $server = $arguments['server'];
     $this->log("[INFO] Start server with '{$server}'");
     $etva_server = EtvaServerPeer::retrieveByPK($server);
     if (!$etva_server) {
         $etva_server = EtvaServerPeer::retrieveByUuid($server);
     }
     if (!$etva_server) {
         $etva_server = EtvaServerPeer::retrieveByName($server);
     }
     if (!$etva_server) {
         $msg_i18n = $context->getI18N()->__(EtvaServerPeer::_ERR_NOTFOUND_, array('name' => $server));
         $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
         $this->log("[ERROR] " . $error['error']);
         return $error;
     } else {
         if ($nid = $options['node']) {
             if (!($etva_node = EtvaNodePeer::retrieveByPK($nid))) {
                 //notify event log
                 $msg_i18n = Etva::makeNotifyLogMessage(sfConfig::get('config_acronym'), EtvaNodePeer::_ERR_NOTFOUND_ID_, array('id' => $nid), EtvaServerPeer::_ERR_START_, array('name' => $server));
                 $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
                 $this->log("[ERROR] " . $error['error']);
                 return $error;
             }
         } else {
             // get list of nodes that server can assign
             $nodes_toassign = $etva_server->listNodesAssignTo();
             if (count($nodes_toassign)) {
                 $etva_node = $nodes_toassign[0];
                 // get first
             } else {
                 //notify event log
                 $msg_i18n = Etva::makeNotifyLogMessage(sfConfig::get('config_acronym'), EtvaServerPeer::_ERR_NO_NODE_TO_ASSIGN_, array(), EtvaServerPeer::_ERR_START_, array('name' => $server));
                 $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
                 $this->log("[ERROR] " . $error['error']);
                 return $error;
             }
         }
         $server_va = new EtvaServer_VA($etva_server);
         if ($options['assign'] || $etva_server->getUnassigned()) {
             // Assign server to node
             $response = $server_va->send_assign($etva_node);
             if (!$response['success']) {
                 $this->log("[ERROR] " . $response['error']);
                 return $response;
             }
         }
         // start server
         $response = $server_va->send_start($etva_node);
         if ($response['success']) {
             // update GA Info
             $response_ga = $server_va->getGAInfo($etva_node);
             $this->log("[INFO] " . $response['response']);
         } else {
             $this->log("[ERROR] " . $response['error']);
         }
         return $response;
     }
 }
Example #15
0
 public function updateLastMessage($response)
 {
     $node_name = $this->etva_node->getName();
     if (!$response['success']) {
         $message = Etva::getLogMessage(array('name' => $node_name, 'info' => $response['message']), EtvaNodePeer::_ERR_CHECK_MDSTAT_);
         sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent($node_name, 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
         $msg_i18n = sfContext::getInstance()->getI18N()->__(EtvaNodePeer::_ERR_CHECK_MDSTAT_, array('%name%' => $node_name, '%info%' => $response['message']));
         error_log($message);
         // send status to mastersite
         $apli = new Appliance();
         $apli->updateStatusMessage($message);
         // mark node with fail
         $this->etva_node->setErrorMessage(self::CHECK_MDSTAT, $msg_i18n);
     } else {
         $this->clearLastMessage($response);
     }
 }
 protected function execute($arguments = array(), $options = array())
 {
     $context = sfContext::createInstance(sfProjectConfiguration::getApplicationConfiguration('app', $options['env'], true));
     parent::execute($arguments, $options);
     // initialize the database connection
     $databaseManager = new sfDatabaseManager($this->configuration);
     $con = $databaseManager->getDatabase($options['connection'])->getConnection();
     // add your code here
     $this->log('[INFO] Checking Servers heartbeat...' . "\n");
     $servers_timeout = EtvaServerQuery::create()->filterByVmState(EtvaServer::RUNNING)->filterByGaState(EtvaServerPeer::_GA_RUNNING_)->filterByHasha(1)->where('hbtimeout>0 AND UNIX_TIMESTAMP(heartbeat) < (UNIX_TIMESTAMP(now()) - hbtimeout)')->useEtvaServerAssignQuery('ServerAssign', 'RIGHT JOIN')->useEtvaNodeQuery()->filterByState(EtvaNode::NODE_ACTIVE)->endUse()->endUse()->find();
     if (count($servers_timeout) > 0) {
         foreach ($servers_timeout as $etva_server) {
             $message = sprintf(' The server %s with id %s get heartbeat timed out (last heartbeat at %s and heartbeat timeout %s secods)', $etva_server->getName(), $etva_server->getId(), $etva_server->getHeartbeat(), $etva_server->getHbtimeout());
             $this->log($message);
             // add log message
             Etva::makeNotifyLogMessage($this->name, $message);
             $etva_node = $etva_server->getEtvaNode();
             $server_va = new EtvaServer_VA($etva_server);
             $response_ga = $etva_server->getGAInfo($etva_node);
             if (!$response_ga['success']) {
                 $msg = sprintf(' Something wrong with node %s agent, can\'t get GA state of the server %s with id %s run.', $etva_node->getName(), $etva_server->getName(), $etva_server->getId());
                 $this->log($msg);
                 // add log message
                 Etva::makeNotifyLogMessage($this->name, $msg);
                 $etva_server->setGaState(EtvaServerPeer::_GA_STOPPED_);
                 // mark GA as stopped
                 $etva_server->save();
             } else {
                 if ($reponse_ga['ga_state'] == EtvaServerPeer::_GA_RUNNING_) {
                     $message_ga = sprintf(' But the explicit check GA state of the server %s with id %s run with success.', $etva_server->getName(), $etva_server->getId());
                     $this->log($message_ga);
                     // add log message
                     Etva::makeNotifyLogMessage($this->name, $message_ga, array(), null, array(), EtvaEventLogger::INFO);
                 } else {
                     // go restart
                     $starttime = sfConfig::get('app_server_heartbeat_starttime');
                     $starttime_date = date("c", time() - $starttime);
                     if ($etva_server->getHblaststart() && $etva_server->getHblaststart() > $starttime_date) {
                         $msg = sprintf(' the server %s with id %s is in starttime.', $etva_server->getName(), $etva_server->getId());
                         $this->log($msg);
                         // add log message
                         Etva::makeNotifyLogMessage($this->name, $msg, array(), null, array(), EtvaEventLogger::INFO);
                     } else {
                         $last_nrestarts = $etva_server->getHbnrestarts();
                         if ($last_nrestarts >= sfConfig::get('app_server_heartbeat_number_of_restart')) {
                             $msg = sprintf(' the server %s with id %s exceed number of restart.', $etva_server->getName(), $etva_server->getId());
                             $this->log($msg);
                             // add log message
                             Etva::makeNotifyLogMessage($this->name, $msg);
                         } else {
                             $msg = sprintf(' the server %s with id %s is heartbeat out of date and will be restart.', $etva_server->getName(), $etva_server->getId());
                             $this->log($msg);
                             // add log message
                             Etva::makeNotifyLogMessage($this->name, $msg, array(), null, array(), EtvaEventLogger::INFO);
                             // force to stop
                             $response_stop = $server_va->send_stop($etva_node, array('force' => 1, 'destroy' => 1));
                             sleep(5);
                             // wait a few seconds
                             $response_start = $server_va->send_start($etva_node);
                             if (!$response_start['success']) {
                                 // start fail...
                                 sleep(10);
                                 // wait a few seconds
                                 $response_start = $server_va->send_start($etva_node);
                                 // start again
                             }
                             $etva_server->resetHeartbeat(EtvaServerPeer::_GA_STOPPED_);
                             // reset heartbeat and mark GA as stopped
                             $etva_server->setHbnrestarts($last_nrestarts + 1);
                             // inc number of restart
                             $etva_server->save();
                         }
                     }
                 }
             }
         }
     } else {
         $this->log("[INFO] No servers with heartbeat timed out.");
     }
     // log the message!
     $this->log("[INFO] The check servers heartbeat task ran!");
 }
 public function fix_consistency(EtvaNode $etva_node)
 {
     $ok = 1;
     $etva_lv = $this->etva_lv;
     $lv = $etva_lv->getLv();
     $etva_vg = $etva_lv->getEtvaVolumegroup();
     /*
             $vgInfo = $returned_object[EtvaLogicalvolume::VOLUMEGROUP_MAP];
             $vg_info = (array) $vgInfo;*/
     // removes logical volume
     $insert_id = $etva_lv->getId();
     $uuid = $etva_lv->getUuid();
     $lv_type = $etva_lv->getStorageType();
     $etva_lv->delete();
     // remove snapshots
     $snapshotsObject = $returned_object['SNAPSHOTS'];
     $snapshotsArray = (array) $snapshotsObject;
     foreach ($snapshotsArray as $slv_obj) {
         $slv = (array) $slv_obj;
         if ($etva_slv = $etva_node->retrieveLogicalvolumeByLv($slv[EtvaLogicalvolume::LV_MAP])) {
             $etva_slv->delete();
         }
     }
     /*$etva_vg->initData($vg_info);
       $etva_vg->save();*/
     if ($lv_type != EtvaLogicalvolume::STORAGE_TYPE_LOCAL_MAP) {
         /*
          * need syncronize device table
          */
         $this->sync_device_table_afterremove($etva_node);
         /*
          * if storage type not local send update to nodes...
          */
         $bulk_update = $this->send_update($etva_node);
         if (!empty($bulk_update)) {
             $errors = $this->get_missing_lv_devices();
             $msg_i18n = $errors ? $errors['message'] : sfContext::getInstance()->getI18N()->__(EtvaLogicalvolumePeer::_ERR_SHARED_INCONSISTENT_, array('%info%' => ' processResponse'));
             $response = array('success' => false, 'agent' => $etva_node->getName(), 'info' => $msg_i18n, 'msg_i18n' => $msg_i18n);
             $ok = 0;
         }
     }
     // Update volume groups
     $vg_va = new EtvaVolumegroup_VA($etva_vg);
     $bulk_update = $vg_va->send_update($etva_node);
     // TODO call fix consistency volume group
     if ($ok == 0) {
         $result = $response;
         $errors = $this->get_missing_lv_devices();
         if ($errors) {
             $message = $errors['message'];
             sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent($etva_node->getName(), 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
             return array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $message, 'action' => 'reload', 'info' => $message);
         } else {
             $message = Etva::getLogMessage(array('name' => $lv, 'info' => $response['info']), $msg_err_type);
             $msg_i18n = sfContext::getInstance()->getI18N()->__($msg_err_type, array('%name%' => $lv, '%info%' => $response['info']));
             $result['error'] = $msg_i18n;
             sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent($response['agent'], 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
             return $result;
         }
     } else {
         //notify system log
         $message = Etva::getLogMessage(array('name' => $lv), $msg_ok_type);
         $msg_i18n = sfContext::getInstance()->getI18N()->__($msg_ok_type, array('%name%' => $lv));
         sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent($etva_node->getName(), 'event.log', array('message' => $message)));
         $result = array('success' => true, 'agent' => $response['agent'], 'response' => $msg_i18n, 'insert_id' => $insert_id, 'uuid' => $uuid);
         return $result;
     }
 }
Example #18
0
 public function executeJsonFindSource(sfWebRequest $request)
 {
     /*$msg_ok_type = EtvaPoolPeer::_OK_FIND_SOURCE_;
       $msg_err_type = EtvaPoolPeer::_ERR_FIND_SOURCE_;*/
     // get node id from cluster context
     $etva_node = EtvaNodePeer::getOrElectNode($request);
     if (!$etva_node) {
         $msg_i18n = $this->getContext()->getI18N()->__(EtvaNodePeer::_ERR_NOTFOUND_ID_, array('%id%' => $nid));
         $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
         $node_log = Etva::getLogMessage(array('id' => $nid), EtvaNodePeer::_ERR_NOTFOUND_ID_);
         //notify system log
         $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => $node_log, 'priority' => EtvaEventLogger::ERR)));
         // if is a CLI soap request return json encoded data
         if (sfConfig::get('sf_environment') == 'soap') {
             return json_encode($error);
         }
         // if is browser request return text renderer
         $error = $this->setJsonError($error);
         return $this->renderText($error);
     }
     $type = $request->getParameter('type');
     $source_host = $request->getParameter('source_host');
     // call find storage pool source
     $response = $etva_node->soapSend('find_storage_pool_source', array('type' => $type, 'source_host' => $source_host));
     if ($response['success']) {
         $return = json_encode($response);
         // if the request is made throught soap request...
         if (sfConfig::get('sf_environment') == 'soap') {
             return $return;
         }
         // if is browser request return text renderer
         $this->getResponse()->setHttpHeader('Content-type', 'application/json');
         return $this->renderText($return);
     } else {
         if (sfConfig::get('sf_environment') == 'soap') {
             return json_encode($response);
         }
         $return = $this->setJsonError($response);
         return $this->renderText($return);
     }
 }
Example #19
0
 protected function processStartStop(EtvaNode $etva_node, $response, $method)
 {
     $etva_server = $this->etva_server;
     switch ($method) {
         case self::SERVER_START:
             $msg_ok_type = EtvaServerPeer::_OK_START_;
             $msg_err_type = EtvaServerPeer::_ERR_START_;
             break;
         case self::SERVER_STOP:
             $msg_ok_type = EtvaServerPeer::_OK_STOP_;
             $msg_err_type = EtvaServerPeer::_ERR_STOP_;
             break;
     }
     if (!$response['success']) {
         $result = $response;
         $msg_i18n = Etva::makeNotifyLogMessage($response['agent'], $response['info'], array(), $msg_err_type, array('name' => $etva_server->getName()));
         $result['error'] = $msg_i18n;
         return $result;
     }
     $response_decoded = (array) $response['response'];
     $returned_status = $response_decoded['_okmsg_'];
     $returned_object = (array) $response_decoded['_obj_'];
     // get some info from response...
     //update some server data from agent response
     $etva_server->initData($returned_object);
     $etva_server->setFirstBoot(0);
     if ($first_boot) {
         $etva_server->setBoot('filesystem');
     } else {
         $boot_field = $etva_server->getBoot();
         switch ($boot_field) {
             case 'filesystem':
             case 'pxe':
                 if (!$etva_server->getCdrom()) {
                     $etva_server->setLocation(null);
                 }
                 break;
         }
     }
     switch ($method) {
         case self::SERVER_START:
             $etva_server->setHblaststart('NOW');
             // update hb last start
             break;
     }
     $etva_server->save();
     // update free memory
     $etva_node->updateMemFree();
     $etva_node->save();
     //notify event log
     $msg_i18n = Etva::makeNotifyLogMessage($response['agent'], $msg_ok_type, array('name' => $etva_server->getName()), null, array(), EtvaEventLogger::INFO);
     $result = array('success' => true, 'agent' => $response['agent'], 'response' => $msg_i18n);
     return $result;
 }
 public function initialize(EtvaNode $etva_node, $vgs, $force_regist = false)
 {
     $etva_cluster = $etva_node->getEtvaCluster();
     $volumegroup_names = array();
     $errors = array();
     /*
      * check shared vgs consistency
      */
     $check_res = $this->check_consistency($etva_node, $vgs);
     if (!$check_res['success']) {
         $errors = $check_res['errors'];
         $inconsistent_message = Etva::getLogMessage(array('info' => ''), EtvaVolumegroupPeer::_ERR_INCONSISTENT_);
         $etva_node->setErrorMessage(self::VGINIT);
         $message = Etva::getLogMessage(array('info' => $inconsistent_message), EtvaVolumegroupPeer::_ERR_SOAPUPDATE_);
         sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent($etva_node->getName(), 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
         //return array('success'=>false,'error'=>$errors);
     }
     /*$consist = $this->check_shared_consistency($etva_node,$vgs); 
     
             if(!$consist){
                 $errors = $this->missing_vgs[$etva_node->getId()];
     
                 $inconsistent_message = Etva::getLogMessage(array('info'=>''), EtvaVolumegroupPeer::_ERR_INCONSISTENT_);
     
                 $etva_node->setErrorMessage(self::VGINIT);
     
                 $message = Etva::getLogMessage(array('info'=>$inconsistent_message), EtvaVolumegroupPeer::_ERR_SOAPUPDATE_);
                 sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent($etva_node->getName(),'event.log',array('message' =>$message,'priority'=>EtvaEventLogger::ERR)));
     
                 return array('success'=>false,'error'=>$errors);
             }*/
     foreach ($vgs as $vgInfo) {
         $vg_info = (array) $vgInfo;
         $vg_name = $vg_info[EtvaVolumegroup::VG_MAP];
         $vg_type = $vg_info[EtvaVolumegroup::STORAGE_TYPE_MAP];
         //error_log(sprintf("node name=%s id=%d vg_name=%s uuid=%s type=%s",$etva_node->getName(),$etva_node->getId(),$vg_name,$vg_info[EtvaVolumegroup::UUID_MAP],$vg_type));
         //error_log(print_r($vg_info,true));
         if ($vg_type == EtvaVolumegroup::STORAGE_TYPE_LOCAL_MAP) {
             $etva_volgroup = EtvaVolumegroupPeer::retrieveByNodeTypeVg($etva_node->getId(), $vg_type, $vg_name);
         } else {
             $vg_uuid = $vg_info[EtvaVolumegroup::UUID_MAP];
             $etva_volgroup = EtvaVolumegroupPeer::retrieveByUUID($vg_uuid);
         }
         if ($force_regist && !$etva_volgroup) {
             // no vg in db... and force registration ... so create new one
             $etva_node_volgroup = new EtvaNodeVolumegroup();
             $etva_volgroup = new EtvaVolumegroup();
         } else {
             if ($etva_volgroup) {
                 //if vg  already in DB we need to make sure if already exists association with node. if not create new one
                 $etva_node_volgroup = EtvaNodeVolumegroupPeer::retrieveByPK($etva_node->getId(), $etva_volgroup->getId());
                 if (!$etva_node_volgroup) {
                     $etva_node_volgroup = new EtvaNodeVolumegroup();
                 }
             }
         }
         if ($etva_volgroup) {
             // only if vg in db...
             $etva_volgroup->initData($vg_info);
             $etva_volgroup->setEtvaCluster($etva_cluster);
             $etva_node_volgroup->setEtvaVolumegroup($etva_volgroup);
             $etva_node_volgroup->setEtvaNode($etva_node);
             $etva_node_volgroup->save();
             /*
              * associate pvs with vg
              */
             $pvs = isset($vg_info[EtvaVolumegroup::PHYSICALVOLUMES_MAP]) ? (array) $vg_info[EtvaVolumegroup::PHYSICALVOLUMES_MAP] : array();
             foreach ($pvs as $pvInfo) {
                 $pv_info = (array) $pvInfo;
                 $pv_type = $pv_info[EtvaPhysicalvolume::STORAGE_TYPE_MAP];
                 $pv_uuid = isset($pv_info[EtvaPhysicalvolume::UUID_MAP]) ? $pv_info[EtvaPhysicalvolume::UUID_MAP] : '';
                 $pv_device = $pv_info[EtvaPhysicalvolume::DEVICE_MAP];
                 //get physical volume based on node, type, uuid and device
                 $etva_physical = EtvaPhysicalvolumePeer::retrieveByNodeTypeUUIDDevice($etva_node->getId(), $pv_type, $pv_uuid, $pv_device);
                 $etva_node_physical = EtvaNodePhysicalvolumePeer::retrieveByPK($etva_node->getId(), $etva_physical->getId());
                 if (!$etva_node_physical) {
                     $etva_node_physical = new EtvaNodePhysicalvolume();
                     $etva_node_physical->setEtvaPhysicalvolume($etva_physical);
                     $etva_node_physical->setEtvaNode($etva_node);
                 }
                 $etva_node_physical->setDevice($pv_device);
                 $etva_node_physical->save();
                 $etva_volgroup_physical = EtvaVolumePhysicalPeer::retrieveByPK($etva_volgroup->getId(), $etva_physical->getId());
                 if (!$etva_volgroup_physical) {
                     $etva_volgroup_physical = new EtvaVolumePhysical();
                 }
                 $etva_volgroup_physical->setEtvaPhysicalvolume($etva_physical);
                 $etva_volgroup_physical->setEtvaVolumegroup($etva_volgroup);
                 $etva_volgroup_physical->save();
             }
             $volumegroup_names[] = $etva_volgroup->getVg();
         }
     }
     if (!empty($errors)) {
         // if have some errors, return it
         return array('success' => false, 'error' => $errors);
     } else {
         /*
          * check if is an appliance restore operation...
          */
         $apli = new Appliance();
         $action = $apli->getStage(Appliance::RESTORE_STAGE);
         if ($action) {
             $apli->setStage(Appliance::RESTORE_STAGE, Appliance::VA_UPDATE_VGS);
         }
         $etva_node->clearErrorMessage(self::VGINIT);
         $message = Etva::getLogMessage(array('info' => implode(', ', $volumegroup_names)), EtvaVolumegroupPeer::_OK_SOAPUPDATE_);
         sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent($etva_node->getName(), 'event.log', array('message' => $message)));
         return array('success' => true, 'response' => $volumegroup_names);
     }
 }
Example #21
0
 public function backup($force, $diagnostic = false)
 {
     if (!$diagnostic) {
         $serial_number = $this->serial_number;
         //clear stage cache
         $this->delStage(self::BACKUP_STAGE);
         $this->delStage(self::MA_BACKUP);
     } else {
         $response_msg = '';
         $va_down = array();
     }
     /*
      * VIRT AGENTS
      */
     $node_list = EtvaNodePeer::getWithServers();
     $node_num = count($node_list);
     if (!$diagnostic) {
         if ($node_num != 1) {
             /*
              * ERROR should be only one element (standard ETVA release only)
              */
             $msg = "Sould only be one Virtualization Agent! {$node_num} found!";
             $data = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'info' => $msg, 'error' => $msg);
             return $data;
         }
     }
     $archive_files = array();
     foreach ($node_list as $node) {
         /*
          * check node state ok to comm with agent
          */
         if (!$diagnostic) {
             if (!$node->getState()) {
                 $node_name = $node->getName();
                 $msg = sfContext::getInstance()->getI18N()->__(EtvaNodePeer::_STATE_DOWN_, array('%name%' => $node_name));
                 $data = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'info' => $msg, 'error' => $msg);
                 return $data;
             }
         } else {
             if ($node->getInitialize() == EtvaNodePeer::_INITIALIZE_PENDING_) {
                 continue;
             }
             if (!$node->getState()) {
                 $response_msg .= $node->getName();
                 $response_msg .= ', ';
                 $va_down[] = $node->getName();
                 $command = "touch ";
                 $command .= $this->archive_base_dir . "/";
                 $command .= $node->getName() . "_down";
                 exec($command);
                 continue;
             }
         }
         if (!$diagnostic) {
             $servers_list = $node->getEtvaServers();
             $servers_down = array();
             /*
              * Firs pass, check for servers down...
              */
             foreach ($servers_list as $server) {
                 $server_name = $server->getName();
                 $server_state = $server->getState();
                 $server_vm = $server->getVmState();
                 $server_ma = $server->getAgentTmpl();
                 /*
                  * if there's an agent in VM and if vm not running or agent is down add to servers down
                  */
                 if ($server_ma && !$server_state) {
                     $servers_down[] = Etva::getLogMessage(array('agent' => $server->getName(), 'msg' => 'Down'), Etva::_AGENT_MSG_);
                 }
             }
             /*
              * First pass return errors found
              */
             if (!empty($servers_down) && !$force) {
                 $data = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'action' => self::MA_BACKUP, 'info' => implode('<br>', $servers_down), 'error' => implode(' ', $servers_down));
                 return $data;
             }
             /*
              * Second pass...user has been warn
              */
             $servers_error = array();
             $this->setStage(self::BACKUP_STAGE, self::MA_BACKUP);
             foreach ($servers_list as $server) {
                 $server_name = $server->getName();
                 $server_state = $server->getState();
                 $server_vm = $server->getVmState();
                 $server_ma = $server->getAgentTmpl();
                 $server_uuid = $server->getUuid();
                 /*
                  * if there's an agent in VM send backup command
                  */
                 if ($server_ma && $server_state) {
                     /*
                      * take care of MA backup stuff here....
                      */
                     $this->setStage(self::MA_BACKUP, $server_ma);
                     $ma_filename = sprintf(self::MA_ARCHIVE_FILE, $server_uuid, $server_ma);
                     // filename path without extension yet. it will be given by get_backupconf result
                     $full_path = $this->archive_base_dir . '/' . $ma_filename;
                     $ma_backup = $this->get_backupconf($server_name, $server->getIp(), $server->getAgentPort(), $full_path);
                     if (!$ma_backup['success']) {
                         $servers_error[] = $ma_backup['error'];
                         continue;
                     }
                     $archive_files[] = $ma_backup['path'];
                 }
             }
             // end servers backup agents
         }
         /*
          * get VA backup
          *
          */
         $node_uuid = $node->getUuid();
         $node_name = $node->getName();
         $va_filename = sprintf(self::VA_ARCHIVE_FILE, $node_uuid, 'VA');
         // filename path without extension yet. it will be given by get_backupconf result
         $full_path = $this->archive_base_dir . '/' . $va_filename;
         $va_backup = $this->get_backupconf($node_name, $node->getIp(), $node->getPort(), $full_path, $diagnostic);
         if ($va_backup['success']) {
             $archive_files[] = $va_backup['path'];
         }
     }
     if (!$diagnostic) {
         if (!empty($servers_error)) {
             $data = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'action' => self::MA_BACKUP, 'info' => implode('<br>', $servers_error), 'error' => implode(' ', $servers_error));
             return $data;
         }
     }
     /*
      *
      * CENTRAL MANAGEMENT BACKUP (DB)
      *
      *
      */
     $db_filename = $this->tmp_db_filename;
     $this->setStage(self::BACKUP_STAGE, self::DB_BACKUP);
     // do NOT store session info in backup
     $data = new MyPropelData();
     $data->dumpData($db_filename, 'all', array('Sessions'), null);
     $archive_files[] = $db_filename;
     error_log('CM BACKUP');
     error_log($db_filename);
     if (!$diagnostic) {
         $response = $this->uploadApplianceBackup($archive_files);
         if (!empty($servers_error)) {
             $response['errors'] = implode('<br>', $servers_error);
         }
     } else {
         $response_msg .= ' reported down. Their state was not included.';
         $response = array('success' => true, 'agent' => sfConfig::get('config_acronym'), 'info' => $response_msg, 'va_down' => $va_down);
     }
     return $response;
 }
Example #22
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;
     }
 }
Example #23
0
 public function executeJsonImport(sfWebRequest $request)
 {
     $nid = $request->getParameter('nid');
     $import_data = json_decode($request->getParameter('import'), true);
     $server = $import_data;
     $vnc_keymap = EtvaSettingPeer::retrieveByPk('vnc_keymap');
     $server['vnc_keymap'] = $vnc_keymap->getValue();
     $server['uuid'] = EtvaServerPeer::generateUUID();
     $server['name'] = $import_data['name'];
     $server['vm_type'] = $import_data['vm_type'];
     $server['ip'] = '000.000.000.000';
     $server['boot'] = 'filesystem';
     $import_data['uuid'] = $server['uuid'];
     $import_data['vnc_keymap'] = $server['vnc_keymap'];
     // import validation check
     $result = $this->jsonImportCheck($request);
     if (!$result['success']) {
         // if is a CLI soap request return json encoded data
         if (sfConfig::get('sf_environment') == 'soap') {
             return json_encode($result);
         }
         // if is browser request return text renderer
         $error = $this->setJsonError($result);
         return $this->renderText($error);
     }
     if (!($etva_node = EtvaNodePeer::retrieveByPK($nid))) {
         $msg_i18n = $this->getContext()->getI18N()->__(EtvaNodePeer::_ERR_NOTFOUND_ID_, array('%id%' => $nid));
         $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
         //notify event log
         $node_log = Etva::getLogMessage(array('id' => $nid), EtvaNodePeer::_ERR_NOTFOUND_ID_);
         $message = Etva::getLogMessage(array('info' => $node_log), OvfEnvelope_VA::_ERR_IMPORT_);
         $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
         // if is a CLI soap request return json encoded data
         if (sfConfig::get('sf_environment') == 'soap') {
             return json_encode($error);
         }
         // if is browser request return text renderer
         $error = $this->setJsonError($error);
         return $this->renderText($error);
     }
     $disks = $import_data['disks'];
     $collVgs = array();
     foreach ($disks as $id => $info) {
         $vg = $info['vg'];
         $lv = $info['lv'];
         if ($etva_lv = $etva_node->retrieveLogicalvolumeByLv($lv)) {
             $msg_type = $is_DiskFile ? EtvaLogicalvolumePeer::_ERR_DISK_EXIST_ : EtvaLogicalvolumePeer::_ERR_LV_EXIST_;
             $msg = Etva::getLogMessage(array('name' => $lv), $msg_type);
             $msg_i18n = $this->getContext()->getI18N()->__($msg_type, array('%name%' => $lv));
             $error = array('success' => false, 'agent' => $etva_node->getName(), 'error' => $msg_i18n, 'info' => $msg_i18n);
             //notify system log
             $message = Etva::getLogMessage(array('name' => $lv, 'info' => $msg), OvfEnvelope_VA::_ERR_IMPORT_);
             $this->dispatcher->notify(new sfEvent($error['agent'], 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
             // if is a CLI soap request return json encoded data
             if (sfConfig::get('sf_environment') == 'soap') {
                 return json_encode($error);
             }
             // if is browser request return text renderer
             $error = $this->setJsonError($error);
             return $this->renderText($error);
         }
         if (!($etva_vg = $etva_node->retrieveVolumegroupByVg($vg))) {
             $msg = Etva::getLogMessage(array('name' => $vg), EtvaVolumegroupPeer::_ERR_NOTFOUND_);
             $msg_i18n = $this->getContext()->getI18N()->__(EtvaVolumegroupPeer::_ERR_NOTFOUND_, array('%name%' => $vg));
             $error = array('success' => false, 'agent' => $etva_node->getName(), 'error' => $msg_i18n, 'info' => $msg_i18n);
             //notify system log
             $message = Etva::getLogMessage(array('name' => $lv, 'info' => $msg), OvfEnvelope_VA::_ERR_IMPORT_);
             $this->dispatcher->notify(new sfEvent($error['agent'], 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
             // if is a CLI soap request return json encoded data
             if (sfConfig::get('sf_environment') == 'soap') {
                 return json_encode($error);
             }
             // if is browser request return text renderer
             $error = $this->setJsonError($error);
             return $this->renderText($error);
         }
         // fix lv path
         $is_DiskFile = $vg == sfConfig::get('app_volgroup_disk_flag') ? 1 : 0;
         $import_data['disks'][$id]['lv'] = $is_DiskFile ? $etva_node->getStoragedir() . '/' . $lv : $lv;
         $collVgs[$vg] = $etva_vg;
     }
     $networks = $import_data['networks'];
     $networks_va = $import_data['networks'];
     $collNetworks = array();
     $i = 0;
     // check if networks are available
     foreach ($networks as $network) {
         if ($etva_vlan = EtvaVlanPeer::retrieveByPk($network['vlan_id'])) {
             $import_data['networks'][$i]['network'] = $etva_vlan->getName();
             $import_data['networks'][$i]['macaddr'] = $network['mac'];
         }
         $etva_mac = EtvaMacPeer::retrieveByMac($network['mac']);
         /*
          * TODO improve this to add Mac Address to the pool
          */
         if (!$etva_mac || !$etva_vlan) {
             $msg = Etva::getLogMessage(array(), EtvaNetworkPeer::_ERR_);
             $msg_i18n = $this->getContext()->getI18N()->__(EtvaNetworkPeer::_ERR_, array());
             if (!$etva_mac) {
                 $msg = Etva::getLogMessage(array('%mac%' => $network['mac']), EtvaMacPeer::_ERR_INVALID_MAC_);
                 $msg_i18n = $this->getContext()->getI18N()->__(EtvaMacPeer::_ERR_INVALID_MAC_, array('%mac%' => $network['mac']));
             }
             $error = array('success' => false, 'agent' => $etva_node->getName(), 'error' => $msg_i18n, 'info' => $msg_i18n);
             //notify event log
             $message = Etva::getLogMessage(array('name' => $server['name'], 'info' => $msg), OvfEnvelope_VA::_ERR_IMPORT_);
             $this->dispatcher->notify(new sfEvent($error['agent'], 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
             // if is a CLI soap request return json encoded data
             if (sfConfig::get('sf_environment') == 'soap') {
                 return json_encode($error);
             }
             // if is browser request return text renderer
             $error = $this->setJsonError($error);
             return $this->renderText($error);
         }
         if ($etva_mac->getInUse()) {
             $msg = Etva::getLogMessage(array('%name%' => $etva_mac->getMac()), EtvaMacPeer::_ERR_ASSIGNED_);
             $msg_i18n = $this->getContext()->getI18N()->__(EtvaMacPeer::_ERR_ASSIGNED_, array('%name%' => $etva_mac->getMac()));
             $error = array('success' => false, 'agent' => $etva_node->getName(), 'info' => $msg_i18n, 'error' => $msg_i18n);
             //notify event log
             $message = Etva::getLogMessage(array('name' => $server['name'], 'info' => $msg), OvfEnvelope_VA::_ERR_IMPORT_);
             $this->dispatcher->notify(new sfEvent($error['agent'], 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
             // if is a CLI soap request return json encoded data
             if (sfConfig::get('sf_environment') == 'soap') {
                 return json_encode($error);
             }
             // if is browser request return text renderer
             $error = $this->setJsonError($error);
             return $this->renderText($error);
         }
         $etva_network = new EtvaNetwork();
         $etva_network->fromArray($network, BasePeer::TYPE_FIELDNAME);
         $collNetworks[] = $etva_network;
         $i++;
     }
     $env = new OvfEnvelope_VA();
     $env->fromArray($import_data);
     /* get server copy VA server representation */
     $params = $env->_VA();
     $method = 'vm_ovf_import_may_fork';
     $response = $etva_node->soapSend($method, $params);
     if (!$response['success']) {
         $error_decoded = $response['error'];
         $result = $response;
         $msg_i18n = $this->getContext()->getI18N()->__(EtvaServerPeer::_ERR_CREATE_, array('%name%' => $server['name'], '%info%' => $error_decoded));
         $result['error'] = $msg_i18n;
         //notify event log
         $message = Etva::getLogMessage(array('name' => $server['name'], 'info' => $response['info']), EtvaServerPeer::_ERR_CREATE_);
         $this->dispatcher->notify(new sfEvent($response['agent'], 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
         if (sfConfig::get('sf_environment') == 'soap') {
             return json_encode($result);
         }
         $return = $this->setJsonError($result);
         return $this->renderText($return);
     }
     $response_decoded = (array) $response['response'];
     $returned_object = (array) $response_decoded['_obj_'];
     $returned_lvs = (array) $returned_object['LVS'];
     $collLvs = array();
     foreach ($returned_lvs as $disk) {
         $disk_array = (array) $disk;
         $vg_info = (array) $disk_array[EtvaLogicalvolume::VOLUMEGROUP_MAP];
         $vg = $vg_info[EtvaVolumegroup::VG_MAP];
         $fake_lv_response = array('success' => true, 'response' => array('_obj_' => $disk_array));
         // create logical volume
         $etva_lv = new EtvaLogicalvolume();
         $etva_lv->setEtvaVolumegroup($collVgs[$vg]);
         $lv_va = new EtvaLogicalvolume_VA($etva_lv);
         $lv_response = $lv_va->processResponse($etva_node, $fake_lv_response, 'lvcreate');
         if (!$lv_response['success']) {
             $return = $this->setJsonError($lv_response);
             return $this->renderText($return);
         }
         $collLvs[] = $etva_lv;
     }
     $etva_server = new EtvaServer();
     $etva_server->fromArray($server, BasePeer::TYPE_FIELDNAME);
     $user_groups = $this->getUser()->getGroups();
     $server_sfgroup = array_shift($user_groups);
     //if user has group then put one of them otherwise put DEFAULT GROUP ID
     if ($server_sfgroup) {
         $etva_server->setsfGuardGroup($server_sfgroup);
     } else {
         $etva_server->setsfGuardGroup(sfGuardGroupPeer::getDefaultGroup());
     }
     foreach ($collNetworks as $coll) {
         $etva_server->addEtvaNetwork($coll);
     }
     $i = 0;
     foreach ($collLvs as $coll) {
         $server_disk = new EtvaServerLogical();
         $server_disk->setEtvaLogicalvolume($coll);
         $server_disk->setBootDisk($i);
         $etva_server->addEtvaServerLogical($server_disk);
         $i++;
     }
     //update some data from agent response
     $vm = (array) $returned_object['VM'];
     $etva_server->initData($vm);
     //$etva_server->setEtvaNode($etva_node);
     $etva_server->setEtvaCluster($etva_node->getEtvaCluster());
     try {
         $etva_server->save();
     } catch (Exception $e) {
         $msg = $e->getMessage();
         $result = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg, 'info' => $msg);
         $return = $this->setJsonError($result);
         return $this->renderText($return);
     }
     // assign To etva_node
     $etva_server->assignTo($etva_node);
     $msg_i18n = $this->getContext()->getI18N()->__(EtvaServerPeer::_OK_CREATE_, array('%name%' => $server['name']));
     $message = Etva::getLogMessage(array('name' => $server['name']), EtvaServerPeer::_OK_CREATE_);
     $this->dispatcher->notify(new sfEvent($etva_node->getName(), 'event.log', array('message' => $message)));
     $result = array('success' => true, 'agent' => $response['agent'], 'insert_id' => $etva_server->getId(), 'response' => $msg_i18n);
     $return = json_encode($result);
     $this->getResponse()->setHttpHeader('Content-type', 'application/json');
     // if is browser request return text renderer
     return $this->renderText($return);
 }
Example #24
0
 protected function execute($arguments = array(), $options = array())
 {
     // Context
     $context = sfContext::createInstance(sfProjectConfiguration::getApplicationConfiguration('app', $options['env'], true));
     // initialize the database connection
     $databaseManager = new sfDatabaseManager($this->configuration);
     $connection = $databaseManager->getDatabase($options['connection'])->getConnection();
     // add your code here
     // server id
     $server = $arguments['server'];
     $this->log("[INFO] Check status of server '{$server}'");
     $etva_server = EtvaServerPeer::retrieveByPK($server);
     if (!$etva_server) {
         $etva_server = EtvaServerPeer::retrieveByUuid($server);
     }
     if (!$etva_server) {
         $etva_server = EtvaServerPeer::retrieveByName($server);
     }
     if (!$etva_server) {
         $msg_i18n = $context->getI18N()->__(EtvaServerPeer::_ERR_NOTFOUND_, array('name' => $server));
         $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
         $this->log("[ERROR] " . $error['error']);
         return $error;
     } else {
         if ($nid = $options['node']) {
             $etva_node = EtvaNodePeer::retrieveByPK($nid);
         } else {
             $etva_node = $etva_server->getEtvaNode();
         }
         /*if(!$etva_node){
         
                     //notify event log
                     $msg_i18n = Etva::makeNotifyLogMessage(sfConfig::get('config_acronym'),
                                                                             EtvaNodePeer::_ERR_NOTFOUND_ID_, array('id'=>$nid));
                     $error = array('success'=>false,'agent'=>sfConfig::get('config_acronym'),'error'=>$msg_i18n,'info'=>$msg_i18n);
         
                     $this->log("[ERROR] ".$error['error']);
                     return $error;
                 }
         
                 $server_va = new EtvaServer_VA($etva_server);
                 $response = $server_va->getGAInfo($etva_node);   // update GA Info
                 */
         // TODO force check
         $response = array('success' => true, 'response' => 'check ok', 'agent' => sfConfig::get('config_acronym'));
         if ($etva_node) {
             $response['agent'] = $etva_node->getName();
         }
         if ($options['check']) {
             if (!$options['request_id']) {
                 $options['request_id'] = UUID::generate(UUID::UUID_RANDOM, UUID::FMT_STRING);
             }
             $response['_request_id'] = $options['request_id'];
             $response['_request_status'] = EtvaAsynchronousJob::PENDING;
             if ($etva_server->getVmState() == $options['check']) {
                 $response['_request_status'] = EtvaAsynchronousJob::FINISHED;
                 $msg_ok_type = '';
                 if ($options['check'] == EtvaServer::STATE_RUNNING) {
                     $msg_ok_type = EtvaServerPeer::_OK_START_;
                 } elseif ($options['check'] == EtvaServer::STATE_STOP) {
                     $msg_ok_type = EtvaServerPeer::_OK_STOP_;
                 }
                 if ($msg_ok_type) {
                     $response['response'] = Etva::makeNotifyLogMessage($response['agent'], $msg_ok_type, array('name' => $etva_server->getName()), null, array(), EtvaEventLogger::INFO);
                 }
             }
             //$this->log("[DEBUG] status=".$response['_request_status']." state=".$etva_server->getVmState()." == ".$options['check']);
         }
         if ($response['success']) {
             $this->log("[INFO] " . $response['response']);
             //$this->log("[DEBUG ".print_r($response,true));
         } else {
             $this->log("[ERROR] " . $response['error']);
         }
         return $response;
     }
 }
Example #25
0
 public function processResponse($etva_node, $response, $method, $params)
 {
     $etva_pool = $this->etva_pool;
     $pool_name = $etva_pool->getName();
     switch ($method) {
         case self::POOL_CREATE:
             $msg_ok_type = EtvaPoolPeer::_OK_CREATE_;
             $msg_err_type = EtvaPoolPeer::_ERR_CREATE_;
             break;
         case self::POOL_DESTROY:
             $msg_ok_type = EtvaPoolPeer::_OK_REMOVE_;
             $msg_err_type = EtvaPoolPeer::_ERR_REMOVE_;
             break;
         case self::POOL_RELOAD:
             $msg_ok_type = EtvaPoolPeer::_OK_RELOAD_;
             $msg_err_type = EtvaPoolPeer::_ERR_RELOAD_;
             break;
     }
     if (!$response['success']) {
         $result = $response;
         $message = Etva::getLogMessage(array('name' => $pool_name, 'info' => $response['info']), $msg_err_type);
         $msg_i18n = sfContext::getInstance()->getI18N()->__($msg_err_type, array('%name%' => $pool_name, '%info%' => $response['info']));
         $result['error'] = $msg_i18n;
         sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent($response['agent'], 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
         return $result;
     }
     if ($method == self::POOL_CREATE) {
         // save object
         $etva_pool->save();
         // create relation to node
         $etva_nodepool = new EtvaNodePool();
         $etva_nodepool->setNodeId($etva_node->getId());
         $etva_nodepool->setPoolId($etva_pool->getId());
         $etva_nodepool->save();
     }
     $pool_id = $etva_pool->getId();
     $etva_cluster = $etva_node->getEtvaCluster();
     $error_messages = array();
     if ($etva_pool->getShared()) {
         // send call to all nodes
         $bulk_responses = $etva_cluster->soapSend($method, $params, $etva_node);
         //error_log(print_r($bulk_responses,true));
         foreach ($bulk_responses as $node_id => $node_response) {
             $node = EtvaNodePeer::retrieveByPK($node_id);
             if ($node_response['success']) {
                 if ($method == self::POOL_CREATE || $method == self::POOL_RELOAD) {
                     if (!EtvaNodePoolPeer::retrieveByPK($node_id, $pool_id)) {
                         // create relation to node
                         $etva_nodepool = new EtvaNodePool();
                         $etva_nodepool->setNodeId($node_id);
                         $etva_nodepool->setPoolId($pool_id);
                         $etva_nodepool->save();
                         $node->clearErrorMessage(self::POOL_CREATE);
                         if ($method == self::POOL_RELOAD) {
                             // clear error message for reload
                             $node->clearErrorMessage($method);
                         }
                     }
                 }
             } else {
                 $message = Etva::getLogMessage(array('name' => $pool_name, 'info' => $node_response['info']), $msg_err_type);
                 sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent($node_response['agent'], 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
                 $msg_i18n = sfContext::getInstance()->getI18N()->__($msg_err_type, array('%name%' => $pool_name, '%info%' => $node_response['info']));
                 array_push($error_messages, array('success' => false, 'agent' => $node_response['agent'], 'response' => $msg_i18n));
                 // mark node with fail
                 $node->setErrorMessage($method, $msg_i18n);
             }
         }
     }
     if ($method == self::POOL_DESTROY) {
         // remove object
         $etva_pool->delete();
     }
     $response_decoded = (array) $response['response'];
     $returned_object = (array) $response_decoded['_obj_'];
     $message = Etva::getLogMessage(array('name' => $pool_name), $msg_ok_type);
     $msg_i18n = sfContext::getInstance()->getI18N()->__($msg_ok_type, array('%name%' => $pool_name));
     sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent($response['agent'], 'event.log', array('message' => $message)));
     $result = array('success' => true, 'agent' => $etva_node->getName(), 'response' => $msg_i18n, 'errors' => $error_messages);
     return $result;
 }
Example #26
0
 public function executeJsonRemoveSnapshot(sfWebRequest $request)
 {
     $sid = $request->getParameter('id');
     if (!($etva_server = EtvaServerPeer::retrieveByPK($sid))) {
         $msg_i18n = $this->getContext()->getI18N()->__(EtvaServerPeer::_ERR_NOTFOUND_ID_, array('%id%' => $sid));
         $error = array('agent' => sfConfig::get('config_acronym'), 'success' => false, 'error' => $msg_i18n);
         //notify event log
         $server_log = Etva::getLogMessage(array('id' => $sid), EtvaServerPeer::_ERR_NOTFOUND_ID_);
         $message = Etva::getLogMessage(array('info' => $server_log), EtvaServerPeer::_ERR_MIGRATE_UNKNOWN_);
         $this->dispatcher->notify(new sfEvent($error['agent'], 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
         // if is browser request return text renderer
         $error = $this->setJsonError($error);
         return $this->renderText($error);
     }
     $etva_node = $etva_server->getEtvaNode();
     $snapshot = $request->getParameter('snapshot');
     $server_va = new EtvaServer_VA($etva_server);
     $response = $server_va->remove_snapshot($etva_node, $snapshot);
     if ($response['success']) {
         $return = json_encode($response);
         // if the request is made throught soap request...
         if (sfConfig::get('sf_environment') == 'soap') {
             return $return;
         }
         // if is browser request return text renderer
         $this->getResponse()->setHttpHeader('Content-type', 'application/json');
         return $this->renderText($return);
     } else {
         if (sfConfig::get('sf_environment') == 'soap') {
             return json_encode($response);
         }
         $return = $this->setJsonError($response);
         return $this->renderText($return);
     }
 }
Example #27
0
 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;
 }
Example #28
0
 public function executeJsonRemove(sfWebRequest $request)
 {
     $sid = $request->getParameter('sid');
     $mac = $request->getParameter('macaddr');
     if (!($etva_server = EtvaServerPeer::retrieveByPK($sid))) {
         $msg_i18n = $this->getContext()->getI18N()->__(EtvaServerPeer::_ERR_NOTFOUND_ID_, array('%id%' => $sid));
         $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
         //notify system log
         $server_log = Etva::getLogMessage(array('id' => $sid), EtvaServerPeer::_ERR_NOTFOUND_ID_);
         $message = Etva::getLogMessage(array('name' => $mac, 'info' => $server_log), EtvaNetworkPeer::_ERR_REMOVE_);
         $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
         // if is a CLI soap request return json encoded data
         if (sfConfig::get('sf_environment') == 'soap') {
             return json_encode($error);
         }
         // if is browser request return text renderer
         $error = $this->setJsonError($error);
         return $this->renderText($error);
     }
     $etva_node = $etva_server->getEtvaNode();
     $method = 'detach_interface';
     $params = array('uuid' => $etva_server->getUuid(), 'macaddr' => $mac);
     $response = $etva_node->soapSend($method, $params);
     if ($response['success']) {
         $response_decoded = (array) $response['response'];
         $returned_status = $response_decoded['_okmsg_'];
         $etva_server->deleteNetworkByMac($mac);
         $msg_i18n = $this->getContext()->getI18N()->__(EtvaNetworkPeer::_OK_REMOVE_, array('%name%' => $mac, '%server%' => $etva_server->getName()));
         $result = $response;
         $result['response'] = $msg_i18n;
         //notify system log
         $message = Etva::getLogMessage(array('name' => $mac, 'server' => $etva_server->getName()), EtvaNetworkPeer::_OK_REMOVE_);
         $this->dispatcher->notify(new sfEvent($response['agent'], 'event.log', array('message' => $message)));
         $return = json_encode($result);
         // if the request is made throught soap request...
         if (sfConfig::get('sf_environment') == 'soap') {
             return $return;
         }
         // if is browser request return text renderer
         $this->getResponse()->setHttpHeader('Content-type', 'application/json');
         return $this->renderText($return);
     } else {
         $error_decoded = $response['error'];
         //$error = 'Interface '.$mac.': '.$error_decoded;
         $msg_i18n = $this->getContext()->getI18N()->__(EtvaNetworkPeer::_ERR_REMOVE_, array('%name%' => $mac, '%info%' => $error_decoded));
         $response['error'] = $msg_i18n;
         //notify system log
         $message = Etva::getLogMessage(array('name' => $mac, 'info' => $response['info']), EtvaNetworkPeer::_ERR_REMOVE_);
         $this->dispatcher->notify(new sfEvent($response['agent'], 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
         $result = $response;
         if (sfConfig::get('sf_environment') == 'soap') {
             return json_encode($result);
         }
         $return = $this->setJsonError($result);
         return $this->renderText($return);
     }
 }
Example #29
0
<?php

//load partial files code... based on DB service module name.
//in this case it should be in service name=>main and will load js code from _ETFS_main.php
Etva::loadServicesPartials($etva_server);
?>
<script>

Ext.ns('ETFS');

/*
* .View
*
* Build all panels. Entry point for module
*
*/

ETFS.View = function(config) {
    Ext.apply(this,config);
    console.log(this);

    //load services ID from BD
    var conn = new Ext.data.Connection({
        listeners:{
            // wait message.....
            beforerequest:function(){
                Ext.MessageBox.show({
                    title: <?php 
echo json_encode(__('Please wait...'));
?>
,
Example #30
0
 private function loadModelConf()
 {
     $this->etva_model = Etva::getEtvaModelFile();
 }