Example #1
0
 /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */
 public function executeView(sfWebRequest $request)
 {
     $dispatcher_id = $request->getParameter('dispatcher_id');
     // used to get parent id component (extjs)
     //$this->containerId = $request->getParameter('containerId');
     // load modules file of dispatcher
     if ($dispatcher_id) {
         $criteria = new Criteria();
         $criteria->add(EtvaServicePeer::ID, $dispatcher_id);
         //$criteria->add(EtvaServicePeer::NAME_TMPL,$dispatcher);
         $etva_service = EtvaServicePeer::doSelectOne($criteria);
         $dispatcher = $etva_service->getNameTmpl();
         $etva_server = $etva_service->getEtvaServer();
         $tmpl = $etva_server->getAgentTmpl() . '_' . $dispatcher . '_modules';
         $directory = $this->context->getConfiguration()->getTemplateDir('etms', '_' . $tmpl . '.php');
         //echo 'dispatcher_id ---> '.$tmpl;
         if ($directory) {
             return $this->renderPartial($tmpl);
         } else {
             return $this->renderText('Template ' . $tmpl . ' not found');
         }
     } else {
         $this->etva_server = EtvaServerPeer::retrieveByPK($request->getParameter('sid'));
     }
 }
Example #2
0
 public function executeCreatewin(sfWebRequest $request)
 {
     $sid = $request->getParameter('sid');
     if ($sid) {
         $server = EtvaServerPeer::retrieveByPK($sid);
         $this->cid = $server->getClusterId();
     } else {
         $this->cid = $request->getParameter('cid');
     }
 }
Example #3
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;
     }
 }
Example #4
0
 public function executeJsonGetId(sfWebRequest $request)
 {
     $level = $request->getParameter('level');
     $id = $request->getParameter('id');
     if ($level == 'node') {
         $node = EtvaNodePeer::retrieveByPK($id);
         $cluster_id = $node->getClusterId();
     } elseif ($level == 'server') {
         $server = EtvaServerPeer::retrieveByPK($id);
         $cluster_id = $server->getClusterId();
     }
     $return = array('cluster_id' => $cluster_id);
     //        error_log(print_r($return, true));
     $result = json_encode($return);
     $this->getResponse()->setHttpHeader('Content-type', 'application/json');
     return $this->renderText($result);
 }
Example #5
0
 /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */
 public function executeView(sfWebRequest $request)
 {
     $dispatcher_id = $request->getParameter('dispatcher_id');
     // load modules file of dispatcher
     if ($dispatcher_id) {
         $criteria = new Criteria();
         $criteria->add(EtvaServicePeer::ID, $dispatcher_id);
         $etva_service = EtvaServicePeer::doSelectOne($criteria);
         $dispatcher = $etva_service->getNameTmpl();
         $etva_server = $etva_service->getEtvaServer();
         $tmpl = $etva_server->getAgentTmpl() . '_' . $dispatcher . '_modules';
         //if exists, load _DUMMY_main_modules.php file
         $directory = $this->context->getConfiguration()->getTemplateDir('dummy', '_' . $tmpl . '.php');
         if ($directory) {
             return $this->renderPartial($tmpl);
         } else {
             return $this->renderText('Template ' . $tmpl . ' not found');
         }
     } else {
         $this->etva_server = EtvaServerPeer::retrieveByPK($request->getParameter('sid'));
     }
 }
Example #6
0
 public function executeJsonGridNoPager($request)
 {
     $isAjax = $request->isXmlHttpRequest();
     if (!$isAjax) {
         return $this->redirect('@homepage');
     }
     $sid = $this->getRequestParameter('sid');
     if ($sid) {
         $server = EtvaServerPeer::retrieveByPK($sid);
         $cid = $server->getClusterId();
     } else {
         // get cluster id
         $cid = $this->getRequestParameter('cid');
         if (!$cid) {
             $etva_cluster = EtvaClusterPeer::retrieveDefaultCluster();
             $cid = $etva_cluster->getId();
         }
     }
     //Get networks from cluster
     $c_vlan = new Criteria();
     $c_vlan->add(EtvaVlanPeer::CLUSTER_ID, $cid);
     $etva_vlans = EtvaVlanPeer::doSelect($c_vlan);
     //get networks with server
     $c = new Criteria();
     $vlan_flag = false;
     $server_flag = false;
     $query = $this->getRequestParameter('query') ? json_decode($this->getRequestParameter('query'), true) : array();
     foreach ($query as $key => $val) {
         $column = EtvaNetworkPeer::translateFieldName(sfInflector::camelize($key), BasePeer::TYPE_PHPNAME, BasePeer::TYPE_COLNAME);
         if ($key == 'vlan_id') {
             $vlan_flag = true;
         }
         if ($key == 'server_id') {
             $server_flag = true;
         }
         $c->add($column, $val);
     }
     //error_log($c->toString());
     //get vlans from cluster
     if (!$vlan_flag && !$server_flag) {
         // && !$server_flag && $cid){
         //error_log('!(!$vlan_flag && !$server_flag)');
         foreach ($etva_vlans as $etva_vlan) {
             if ($this->getRequestParameter('query')) {
                 $c->addOr(EtvaNetworkPeer::VLAN_ID, $etva_vlan->getId());
             } else {
                 $c->addAnd(EtvaNetworkPeer::VLAN_ID, $etva_vlan->getId());
             }
         }
     }
     // add sort criteria to sort elements
     $this->addSortCriteria($c);
     // add server criteria
     $this->addServerCriteria($c);
     //error_log($c->toString());
     $etva_network_list = EtvaNetworkPeer::doSelectJoinEtvaServer($c);
     $elements = array();
     $i = 0;
     foreach ($etva_network_list as $item) {
         $etva_server = $item->getEtvaServer();
         $etva_vlan = $item->getEtvaVlan();
         if ($etva_server && $etva_vlan) {
             $etva_server_name = $etva_server->getName();
             $etva_server_type = $etva_server->getVmType();
             $etva_vm_state = $etva_server->getVmState();
             $etva_vlan_name = $etva_vlan->getName();
             $elements[$i] = $item->toArray();
             $elements[$i]['ServerName'] = $etva_server_name;
             $elements[$i]['VmType'] = $etva_server_type;
             $elements[$i]['Vlan'] = $etva_vlan_name;
             $elements[$i]['Vm_state'] = $etva_vm_state;
             $etva_node = $etva_server->getEtvaNode();
             if ($etva_node) {
                 $etva_node_name = $etva_node->getName();
                 $elements[$i]['NodeName'] = $etva_node_name;
                 $elements[$i]['NodeId'] = $etva_node->getId();
             }
             $i++;
         }
     }
     $final = array('total' => count($etva_network_list), 'data' => $elements);
     $result = json_encode($final);
     $this->getResponse()->setHttpHeader('Content-type', 'application/json');
     return $this->renderText($result);
 }
Example #7
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 #8
0
 public function deleteServer($keep_fs = true)
 {
     $server_node = $this->getEtvaNode();
     $con = Propel::getConnection(EtvaServerPeer::DATABASE_NAME, Propel::CONNECTION_WRITE);
     //$con->setAttribute(PDO::ATTR_TIMEOUT,10);
     try {
         $con->beginTransaction();
         $this->deleteNetworks($con);
         $this->deleteRRAFiles();
         $this->deleteDisks($keep_fs, $con);
         EtvaServerPeer::doDelete($this, $con);
         $server_node->updateMemFree();
         $server_node->save();
         $con->commit();
     } catch (PropelException $e) {
         $con->rollBack();
         throw $e;
     }
 }
Example #9
0
 /**
  * List logical volumes by server ID or node ID
  *
  *
  * Returns json array('id'=>id,'lv'=> lv name)
  *
  *
  */
 public function executeJsonList(sfWebRequest $request)
 {
     $nid = $request->getParameter('nid');
     $sid = $request->getParameter('sid');
     $listBy = $sid ? 'server' : 'node';
     if ($nid && !($etva_ = 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);
         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 ($sid && !($etva_ = 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);
         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);
     }
     $lvs = array();
     switch ($listBy) {
         case 'server':
             $criteria = new Criteria();
             $criteria->addAscendingOrderByColumn(EtvaServerLogicalPeer::BOOT_DISK);
             $list = $etva_->getEtvaServerLogical($criteria);
             $pos = 0;
             foreach ($list as $elem) {
                 $disk_type = $elem->getDiskType();
                 $lv = $elem->getEtvaLogicalVolume();
                 $lv_array = $lv->toArray(BasePeer::TYPE_FIELDNAME);
                 $lv_array['disk_type'] = $disk_type;
                 $lv_array['pos'] = $pos;
                 $lv_array['per_usage'] = $lv_array['virtual_size'] / $lv_array['size'];
                 $lv_array['per_usage_snapshots'] = $lv->getPerUsageSnapshots();
                 $lvs[] = $lv_array;
                 $pos++;
             }
             break;
         default:
             $criteria = new Criteria();
             $criteria->addAscendingOrderByColumn(EtvaServerLogicalPeer::BOOT_DISK);
             $list = $etva_->getEtvaLogicalvolumes($criteria);
             foreach ($list as $elem) {
                 $id = $elem->getId();
                 $lv = $elem->getLv();
                 $lvs[$id] = array('id' => $id, 'lv' => $lv, 'target');
             }
     }
     $result = array('success' => true, 'total' => count($lvs), 'data' => $lvs);
     $return = json_encode($result);
     if (sfConfig::get('sf_environment') == 'soap') {
         return $return;
     }
     $this->getResponse()->setHttpHeader('Content-type', 'application/json');
     return $this->renderText($return);
 }
Example #10
0
 /**
  * Executes view action
  *
  * @param sfRequest $request A request object
  */
 public function executeView(sfWebRequest $request)
 {
     $this->etva_server = EtvaServerPeer::retrieveByPK($request->getParameter('sid'));
 }
Example #11
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 #12
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 #13
0
 public function getEtvaServers(PropelPDO $con = null)
 {
     $criteria = new Criteria();
     $criteria->add(EtvaServerLogicalPeer::LOGICALVOLUME_ID, $this->getId());
     $criteria->addJoin(EtvaServerPeer::ID, EtvaServerLogicalPeer::SERVER_ID);
     return EtvaServerPeer::doSelect($criteria, $con);
 }
Example #14
0
 /**
  * returns json array encoded list of vlans
  * 
  */
 public function executeJsonList(sfWebRequest $request)
 {
     $isAjax = $request->isXmlHttpRequest();
     if (!$isAjax) {
         return $this->redirect('@homepage');
     }
     $p_cluster_id = $this->getRequestParameter('id');
     $p_level = $this->getRequestParameter('level');
     if ($p_level) {
         if (!$p_cluster_id) {
             $error_msg = 'No cluster id defined.';
             $error = array('success' => false, 'error' => $error_msg, 'info' => $error_msg);
             return $error;
         }
         if ($p_level == 'node') {
             $dc_c = new Criteria();
             //convert node id in cluster id
             $dc_c->add(EtvaNodePeer::ID, $p_cluster_id);
             $node = EtvaNodePeer::doSelectOne($dc_c);
             $p_cluster_id = $node->getClusterId();
         } elseif ($p_level == 'server') {
             $dc_c = new Criteria();
             //convert server id in cluster id
             $dc_c->add(EtvaServerPeer::ID, $p_cluster_id, Criteria::EQUAL);
             $server = EtvaServerPeer::doSelectOne($dc_c);
             $p_cluster_id = $server->getClusterId();
         } elseif ($p_level == 'cluster') {
             //do nothing
         } else {
             error_log('NETWORK:[ERROR] executejsonlist invalid parameters');
         }
     } elseif (!$p_cluster_id) {
         $defaultCluster = EtvaClusterPeer::retrieveDefaultCluster();
         $p_cluster_id = $defaultCluster->getId();
     }
     $c = new Criteria();
     $c->add(EtvaVlanPeer::CLUSTER_ID, $p_cluster_id, Criteria::EQUAL);
     $vlan_nodes = EtvaVlanPeer::doSelect($c);
     $list = array();
     foreach ($vlan_nodes as $vlan) {
         $list[] = $vlan->toArray(BasePeer::TYPE_FIELDNAME);
     }
     $untagged_vlan = EtvaVlanPeer::retrieveUntagged($p_cluser_id);
     $hasUntagged = 0;
     if ($untagged_vlan) {
         $hasUntagged = 1;
     }
     $result = array('total' => count($list), 'data' => $list, 'hasUntagged' => $hasUntagged);
     $result = json_encode($result);
     if (sfConfig::get('sf_environment') == 'soap') {
         $soap_result = array(success => true, 'total' => count($list), 'response' => $list);
         return json_encode($soap_result);
     }
     $this->getResponse()->setHttpHeader('Content-type', 'application/json');
     return $this->renderText($result);
 }
Example #15
0
 public function hasDatacenterCredential($credential, $useAnd = true)
 {
     if ($this->isSuperAdmin()) {
         return true;
     }
     $p_permtype = $credential[0];
     $p_user_id = $this->getId();
     //$p_cluster_id = $credential[1];
     if (is_array($credential[1])) {
         $p_type_credential = (array) $credential[1];
         if ($p_type_credential['node']) {
             error_log("MYUSER:[INFO]Node id: " . $p_type_credential['node']);
             $dc_c = new Criteria();
             $dc_c->add(EtvaNodePeer::ID, $p_type_credential['node']);
             $node = EtvaNodePeer::doSelectOne($dc_c);
             $p_cluster_id = $node->getClusterId();
         } elseif ($p_type_credential['server']) {
             error_log("MYUSER:[INFO]Server id: " . $p_type_credential['server']);
             $dc_c = new Criteria();
             $dc_c->add(EtvaServerPeer::ID, (int) $p_type_credential['server'], Criteria::EQUAL);
             $server = EtvaServerPeer::doSelectOne($dc_c);
             $p_cluster_id = $server->getClusterId();
         } elseif ($p_type_credential['cluster']) {
             error_log("MYUSER:[INFO]Cluster id: " . $p_type_credential['cluster']);
             $p_cluster_id = (int) $p_type_credential['cluster'];
         } else {
             error_log('MYUSER:[ERROR] hasDatacenterCredential invalid parameters');
             return false;
         }
     } else {
         $p_cluster_id = $credential[1];
     }
     // Check if user has permission
     $c = new Criteria();
     $c->add(EtvaPermissionUserPeer::USER_ID, $p_user_id, Criteria::EQUAL);
     $c->addJoin(EtvaPermissionUserPeer::ETVAPERM_ID, EtvaPermissionPeer::ID);
     $c->add(EtvaPermissionPeer::PERM_TYPE, $p_permtype, Criteria::EQUAL);
     $c->addJoin(EtvaPermissionPeer::ID, EtvaPermissionClusterPeer::ETVAPERM_ID);
     $c->add(EtvaPermissionClusterPeer::CLUSTER_ID, $p_cluster_id);
     //error_log($c->toString());
     $permission = EtvaPermissionUserPeer::doSelect($c);
     if ($permission) {
         return true;
     }
     // Check if user groups have permission
     $grps = $this->getGroups();
     foreach ($grps as $value) {
         foreach ($value->getEtvaPermissionGroups() as $relObj) {
             $perm = $relObj->getEtvaPermission();
             // validates the permission type
             if ($perm->getPermType() == $p_permtype) {
                 // check if user has permission on the cluster
                 foreach ($perm->getEtvaPermissionClusters() as $clusters) {
                     if ($clusters->getClusterId() == $p_cluster_id) {
                         error_log("Permission:  " . $clusters->getClusterId());
                         return true;
                     }
                 }
             }
         }
     }
     // Permission not found
     return false;
 }
Example #16
0
 protected function _execute($arguments = array(), $options = array())
 {
     // get server id
     $sid = $arguments['serverid'];
     $etva_server = EtvaServerPeer::retrieveByPK($sid);
     // try by id
     if (!$etva_server) {
         $etva_server = EtvaServerPeer::retrieveByUuid($sid);
     }
     // try by uuid
     if (!$etva_server) {
         $etva_server = EtvaServerPeer::retrieveByName($sid);
     }
     // try by name
     if (!$etva_server) {
         $msg_i18n = sfContext::getInstance()->getI18N()->__(EtvaServerPeer::_ERR_NOTFOUND_ID_, array('%id%' => $sid));
         // Error
         $err_m = "[ERROR] {$msg_i18n}";
         $this->report .= $err_m . "\r\n";
         $this->log($err_m);
         array_push($this->errors, array('message' => $err_m));
         return -1;
     } else {
         $etva_node = $etva_server->getEtvaNode();
         if ($etva_node) {
             $info_m = '[INFO] Backup of the server ' . $etva_server->getName() . ' assign to node ' . $etva_node->getName() . '...';
             $this->log($info_m . "\n");
             $params = array('name' => $etva_server->getName(), 'uuid' => $etva_server->getUuid());
             if ($options['location']) {
                 // location set
                 $params['location'] = $options['location'];
                 if ($options['do_not_generate_tar'] && $options['do_not_generate_tar'] != 'false') {
                     // do not generate tar
                     $params['do_not_generate_tar'] = true;
                 }
             }
             if ($options['shutdown']) {
                 // set shutdown
                 $params['shutdown'] = true;
             }
             if ($options['delete_backups_n_days']) {
                 $params['clean_old_backups'] = true;
                 $n_days = intval($options['delete_backups_n_days']);
                 if ($n_days) {
                     $params['n_days'] = $n_days;
                 }
             }
             if (!$etva_server->getHasSnapshots() && !$options['shutdown'] && !$options['snapshot'] && !$options['newsnapshot'] && $etva_server->getVmState() != 'stop' && $etva_server->getVmState() != 'notrunning') {
                 // Error is running
                 $err_m = "[ERROR] Server '" . $etva_server->getName() . "' can't create backup file of running server without snapshots";
                 $this->report .= $err_m . "\r\n";
                 $this->log($err_m);
                 array_push($this->errors, array('message' => $err_m));
                 return -101;
             }
             $server_va = new EtvaServer_VA($etva_server);
             // use snapshot for backup
             if ($options['snapshot']) {
                 // set snapshot
                 $params['snapshot'] = $options['snapshot'];
             }
             if ($options['newsnapshot'] || !$options['shutdown']) {
                 // create new snapshot
                 $newsnapshot = $options['newsnapshot'];
                 if (!$etva_server->getHasSnapshots() || $newsnapshot) {
                     $response = $server_va->create_snapshot($etva_node, $newsnapshot);
                     if (!$response['success']) {
                         $msg_i18n = $response['info'];
                         $err_m = "[ERROR] Server '" . $etva_server->getName() . "' can't create snapshot: {$msg_i18n}";
                         $this->report .= $err_m . "\r\n";
                         $this->log($err_m);
                         array_push($this->errors, array('message' => $err_m, 'error' => $response));
                         // Error
                         return -110;
                     }
                     $params['snapshot'] = $newsnapshot;
                 }
             }
             // call backup
             $res = $this->call_backup($etva_node, $params, $options['filepath']);
             if ($res < 0) {
                 return $res;
             }
             if ($options['deletesnapshot'] && $options['deletesnapshot'] != 'false') {
                 // delete snapshot after
                 if ($newsnapshot) {
                     $server_va->remove_snapshot($etva_node, $newsnapshot);
                 } else {
                     if ($snapshot) {
                         $server_va->remove_snapshot($etva_node, $snapshot);
                     }
                 }
             }
             return 0;
         } else {
             $warn_m = '[WARN] ' . $etva_server->getName() . ' VM is not assigned and will be ignored.';
             $this->report .= $warn_m . "\r\n";
             $this->log($warn_m . "\n");
             return -1010;
         }
     }
 }
Example #17
0
 public function buildServer($method)
 {
     $etva_server = $this->etva_server;
     if ($method == self::SERVER_CREATE) {
         $etva_server->setUuid(EtvaServerPeer::generateUUID());
         $vnc_keymap = EtvaSettingPeer::retrieveByPk('vnc_keymap');
         $etva_server->setVncKeymap($vnc_keymap->getValue());
         $user_groups = sfContext::getInstance()->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 ($this->collNetworks as $coll) {
         $etva_server->addEtvaNetwork($coll);
     }
     foreach ($this->collDisks as $coll) {
         $etva_server->addEtvaServerLogical($coll);
     }
     if (isset($this->collDevices)) {
         $str = json_encode($this->collDevices);
         $etva_server->setDevices($str);
     }
 }
Example #18
0
 static function verify_iso_usage($iso)
 {
     $directory = sfConfig::get("config_isos_dir");
     $iso_path = $directory . '/' . $iso;
     /*
      *
      * check ISO DIR in use
      *
      */
     $errors = array();
     $criteria = new Criteria();
     $criteria->add(EtvaServerPeer::LOCATION, $iso_path);
     $servers_running_iso = EtvaServerPeer::doSelect($criteria);
     foreach ($servers_running_iso as $server) {
         $errors[] = sfContext::getInstance()->getI18N()->__(EtvaServerPeer::_CDROM_INUSE_, array('%name%' => $server->getName()));
     }
     return $errors;
 }
Example #19
0
 /**
  *
  *
  * Download server backup from snapshot
  *
  * request object is like this;
  * <code>
  * $request['id'] = $id; //server ID
  * $request['snapshot'] = $snapshot; //using snapshot
  * </code>
  *
  * @param sfWebRequest $request A request object
  *
  * donwload machine in OVF format
  *
  */
 public function executeDownloadBackupSnapshot(sfWebRequest $request)
 {
     if ($sid = $request->getParameter('uuid')) {
         $etva_server = EtvaServerPeer::retrieveByUuid($sid);
     } else {
         if ($sid = $request->getParameter('name')) {
             $etva_server = EtvaServerPeer::retrieveByName($sid);
         } else {
             $sid = $request->getParameter('id');
             $etva_server = EtvaServerPeer::retrieveByPK($sid);
         }
     }
     /*if(!$etva_server){
                 $msg_i18n = $this->getContext()->getI18N()->__(EtvaServerPeer::_ERR_NOTFOUND_ID_,array('%id%'=>$sid));            
                 return $this->renderText($msg_i18n);
             }
     
             $newsnapshot = $request->getParameter('newsnapshot');
             $snapshot = $request->getParameter('snapshot');
             $delete = $request->getParameter('delete');
     
             if(!$etva_server->getHasSnapshots() && !$snapshot && !$newsnapshot && ($etva_server->getVmState() != 'stop') && ($etva_server->getVmState() != 'notrunning') ){
                 $msg_i18n = $this->getContext()->getI18N()->__(EtvaServerPeer::_ERR_NOTFOUND_ID_,array('%id%'=>$sid));            
                 return $this->renderText($msg_i18n);
             }
             
             $etva_node = $etva_server->getEtvaNode();
             
             $server_va = new EtvaServer_VA($etva_server);
     
             if( !$etva_server->getHasSnapshots() || $newsnapshot ){
                 $response = $server_va->create_snapshot($etva_node,$newsnapshot);
                 if( !$response['success'] ){
                     $msg_i18n = $response['info'];
                     return $this->renderText($msg_i18n);
                 }
             }
     
             $url = "http://".$etva_node->getIp();
             $request_body = "uuid=".$etva_server->getUuid();
     
             if( $snapshot ){
                 $request_body .= "&snapshot=$snapshot";
             }
     
             $filename = $etva_server->getName().".tar";
             
             $port = $etva_node->getPort();
             if($port) $url.=":".$port;        
             $url.="/vm_backup_snapshot_may_fork";*/
     /*
      * get response stream data
      */
     /*$ovf_curl = new ovfcURL($url);
             $ovf_curl->post($request_body);
             $ovf_curl->setFilename($filename);
             $ovf_curl->exec();
     
             if($ovf_curl->getStatus()==500) return $this->renderText('Error 500');*/
     $options_task_server_backup = array('filepath' => 'STDOUT');
     $snapshot = $request->getParameter('snapshot');
     if ($snapshot) {
         $options_task_server_backup['snapshot'] = $snapshot;
     }
     $newsnapshot = $request->getParameter('newsnapshot');
     if ($newsnapshot) {
         $options_task_server_backup['newsnapshot'] = $newsnapshot;
     }
     $delete = $request->getParameter('delete');
     if ($delete && $delete != 'false') {
         // delete after
         $options_task_server_backup['deletesnapshot'] = true;
     }
     $task_server_backup = new serverBackupTask($this->dispatcher, new sfFormatter());
     $res_task = $task_server_backup->run(array('serverid' => $sid), $options_task_server_backup);
     if ($res_task < 0) {
         // TODO treat error
         return $this->renderText('Error 500');
     }
     return sfView::NONE;
 }
Example #20
0
 public function executeJsonListCluster(sfWebRequest $request)
 {
     $filterBy = '';
     if ($request->hasParameter('sid')) {
         $filterBy = 'sid';
     }
     if ($request->hasParameter('cid')) {
         $filterBy = 'cid';
     }
     $cluster_nodes = array();
     $criteria = new Criteria();
     if ($request->hasParameter('initialize')) {
         // filter by initialized nodes only
         $criteria->add(EtvaNodePeer::INITIALIZE, 'ok', Criteria::EQUAL);
     }
     switch ($filterBy) {
         case 'sid':
             $value = $request->getParameter($filterBy);
             $server = EtvaServerPeer::retrieveByPK($value);
             $node = $server->getEtvaNode();
             $criteria->add(EtvaNodePeer::ID, $node->getId(), Criteria::NOT_EQUAL);
             $cluster_nodes = $node->getNodesCluster($criteria);
             break;
         case 'cid':
             $value = $request->getParameter($filterBy);
             if ($cluster = EtvaClusterPeer::retrieveByPK($value)) {
                 $criteria->add(EtvaNodePeer::CLUSTER_ID, $cluster->getId());
                 $cluster_nodes = EtvaNodePeer::doSelect($criteria);
             }
             break;
         default:
             $cluster_nodes = EtvaNodePeer::doSelect($criteria);
             break;
     }
     $elements = array();
     foreach ($cluster_nodes as $node) {
         $node_array = $node->toArray();
         // get max allocatable memory
         $node_array['maxmem'] = $node->getMaxmem();
         $elements[] = $node_array;
     }
     $result = array('success' => true, 'total' => count($elements), 'data' => $elements);
     $return = json_encode($result);
     if (sfConfig::get('sf_environment') == 'soap') {
         return $return;
     }
     $this->getResponse()->setHttpHeader('Content-type', 'application/json');
     return $this->renderText($return);
 }
Example #21
0
 public function executeVncviewer(sfWebRequest $request)
 {
     if ($request->getParameter('sleep')) {
         $tsleep = $request->getParameter('sleep');
         sleep($tsleep);
     }
     $etva_server = EtvaServerPeer::retrieveByPk($request->getParameter('id'));
     if (!$etva_server) {
         return sfView::NONE;
     }
     $etva_node = $etva_server->getEtvaNode();
     $user = $this->getUser();
     $tokens = $user->getGuardUser()->getEtvaVncTokens();
     $this->username = $tokens[0]->getUsername();
     $this->token = $tokens[0]->getToken();
     $proxyhost1 = $request->getHost();
     $proxyhost1_arr = split(':', $proxyhost1);
     $proxyhost1 = $proxyhost1_arr[0];
     $proxyport1 = $request->isSecure() ? 443 : 80;
     //$proxyport1 = 80;
     if ($proxyhost1_arr[1]) {
         $proxyport1 = $proxyhost1_arr[1];
     }
     $this->proxyhost1 = $proxyhost1;
     $this->proxyport1 = $proxyport1;
     $this->socketFactory = $request->isSecure() ? 'AuthHTTPSConnectSSLSocketFactory' : 'AuthHTTPConnectSocketFactory';
     $this->host = $etva_node->getIp();
     //if host is localhost address then is the same machine
     if ($this->host == '127.0.0.1') {
         $this->host = $proxyhost1;
     }
     $this->port = $etva_server->getVncPort();
     $response = $this->getResponse();
     $response->setTitle($etva_server->getName() . ' :: Console');
 }
Example #22
0
 public function executeJsonMainETFW(sfWebRequest $request)
 {
     $etva_server = EtvaServerPeer::retrieveByPK($request->getParameter('sid'));
     $method = $request->getParameter('method');
     $mode = $request->getParameter('mode');
     $params = json_decode($request->getParameter('params'), true);
     if (!$params) {
         $params = array();
     }
     $ret = $this->ETFW_main($etva_server, $method, $params, $mode);
     if ($ret['success']) {
         $result = json_encode($ret);
     } else {
         $result = $this->setJsonError($ret);
     }
     $result = array();
     $this->getResponse()->setHttpHeader('Content-type', 'application/json; charset=utf-8');
     $this->getResponse()->setHttpHeader("X-JSON", '()');
     return $this->renderText($result);
 }
Example #23
0
 /**
  * Perform update on table setting
  *
  * @param      string $param parameter name to perform operation
  * @param      string $value value for the $param
  *
  */
 public function executeJsonUpdateSetting(sfWebRequest $request)
 {
     $isAjax = $request->isXmlHttpRequest();
     if (!$isAjax) {
         return $this->redirect('@homepage');
     }
     $settings = $request->getParameter('settings');
     $settings_decoded = json_decode($settings, true);
     $force = $request->getParameter('force');
     $networks = $request->getParameter('networks');
     $network_decoded = json_decode($networks, true);
     if ($networks) {
         $etva_data = Etva::getEtvaModelFile();
         $etvamodel = $etva_data['model'];
         /*
          * get nodes....and call node agent script
          */
         $remote_errors = array();
         $change_networks = 0;
         $cm_networks = new SystemNetworkUtil();
         $interfaces_devices = sfConfig::get('app_device_interfaces');
         $devices = $interfaces_devices[$etvamodel];
         $cm_networks->loadCMNetworks($devices);
         $sys_networks = $cm_networks->getNetworks();
         if ($etvamodel == 'standard') {
             $local = $network_decoded['lan'];
             $remote = $network_decoded['cm_management'];
             $cm_ip = $remote['ip'];
             $local_net = new SystemNetwork();
             $local_net->fromArray($local);
             $remote_net = new SystemNetwork();
             $remote_net->fromArray($remote);
             $sys_lan_if = $devices['lan'];
             $sys_manag_if = $devices['cm_management'];
             $sys_lan_net = $sys_networks[$sys_lan_if];
             $sys_manag_net = $sys_networks[$sys_manag_if];
             if (!$local_net->equals($sys_lan_net) || !$remote_net->equals($sys_manag_net)) {
                 $change_networks = 1;
             }
         } else {
             $local = $network_decoded['cm_management'];
             $remote = array();
             $cm_ip = $local['ip'];
             $local_net = new SystemNetwork();
             $local_net->fromArray($local);
             $sys_manag_if = $devices['cm_management'];
             $sys_manag_net = $sys_networks[$sys_manag_if];
             if (!$local_net->equals($sys_manag_net)) {
                 $change_networks = 1;
             }
         }
         if ($change_networks) {
             $criteria = new Criteria();
             $etva_nodes = EtvaNodePeer::doSelect($criteria);
             if (!$force) {
                 // check for nodes state if not force
                 foreach ($etva_nodes as $etva_node) {
                     $node_state = $etva_node->getState();
                     if (!$node_state) {
                         $remote_errors[] = Etva::getLogMessage(array('agent' => $etva_node->getName(), 'msg' => 'Down'), Etva::_AGENT_MSG_);
                     }
                     /*
                      * check if servers has an MA and are down...send error
                      */
                     $etva_servers = $etva_node->getEtvaServers();
                     foreach ($etva_servers as $etva_server) {
                         $server_ma = $etva_server->getAgentTmpl();
                         $server_state = $etva_server->getState();
                         if (!$server_state && $server_ma) {
                             $remote_errors[] = Etva::getLogMessage(array('agent' => $etva_server->getName(), 'msg' => 'Down'), Etva::_AGENT_MSG_);
                         }
                     }
                 }
                 //end foreach
             }
             if ($remote_errors && !$force) {
                 $msg = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'action' => 'check_nodes', 'info' => implode('<br>', $remote_errors), 'error' => implode(' ', $remote_errors));
                 $error = $this->setJsonError($msg);
                 return $this->renderText($error);
             }
             if ($etvamodel != 'standard') {
                 // only if not standard version
                 /*
                  * 
                  * check ISO DIR in use
                  *
                  */
                 $isosdir = sfConfig::get("config_isos_dir");
                 $criteria = new Criteria();
                 $criteria->add(EtvaServerPeer::LOCATION, "%{$isosdir}%", Criteria::LIKE);
                 $criteria->add(EtvaServerPeer::VM_STATE, 'running');
                 $servers_running_iso = EtvaServerPeer::doSelect($criteria);
                 foreach ($servers_running_iso as $server) {
                     $remote_errors[] = $this->getContext()->getI18N()->__(EtvaServerPeer::_CDROM_INUSE_, array('%name%' => $server->getName()));
                 }
                 if ($remote_errors) {
                     $message = Etva::getLogMessage(array('info' => ETVA::_CDROM_INUSE_), ETVA::_ERR_ISODIR_INUSE_);
                     $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
                     $i18n_br_sep = implode('<br>', $remote_errors);
                     $i18n_sp_sep = implode(' ', $remote_errors);
                     //$iso_br_msg = Etva::getLogMessage(array('info'=>'<br>'.$br_sep), ETVA::_ERR_ISODIR_INUSE_);
                     $i18n_iso_br_msg = $this->getContext()->getI18N()->__(ETVA::_ERR_ISODIR_INUSE_, array('%info%' => '<br>' . $i18n_br_sep));
                     //$iso_sp_msg = Etva::getLogMessage(array('info'=>$sp_sep), ETVA::_ERR_ISODIR_INUSE_);
                     $i18n_iso_sp_msg = $this->getContext()->getI18N()->__(ETVA::_ERR_ISODIR_INUSE_, array('%info%' => $i18n_sp_sep));
                     $msg = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'info' => $i18n_iso_br_msg, 'error' => $i18n_iso_sp_msg);
                     $error = $this->setJsonError($msg);
                     return $this->renderText($error);
                 }
                 /*
                  * if all ok so far.....send nodes umount ISO DIR
                  */
                 foreach ($etva_nodes as $etva_node) {
                     $node_va = new EtvaNode_VA($etva_node);
                     $response = array('success' => true);
                     if ($force && $etva_node->getState()) {
                         $response = $node_va->send_umount_isosdir();
                     }
                     $success = $response['success'];
                     if (!$success) {
                         $node_msg = Etva::getLogMessage(array('name' => $response['agent'], 'info' => $response['error']), EtvaNodePeer::_ERR_ISODIR_UMOUNT_);
                         $remote_errors[] = $node_msg;
                         $message = Etva::getLogMessage(array('info' => $node_msg), EtvaSettingPeer::_ERR_SETTING_REMOTE_CONNECTIVITY_SAVE_);
                         $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
                     }
                 }
                 if (!empty($remote_errors)) {
                     $msg = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'info' => implode('<br>', $remote_errors), 'error' => implode(' ', $remote_errors));
                     $error = $this->setJsonError($msg);
                     return $this->renderText($error);
                 }
             }
             /*
              * update using local script
              */
             $local_updated = $this->localUpdate($local);
             if (!$local_updated) {
                 $intf = $local['if'];
                 $msg_i18n = $this->getContext()->getI18N()->__(SystemNetwork::_ERR_NOTFOUND_INTF_, array('%name%' => $intf, '%info%' => ''));
                 $info = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n);
                 $error = $this->setJsonError($info);
                 return $this->renderText($error);
             }
             if (empty($remote_errors)) {
                 foreach ($etva_nodes as $etva_node) {
                     // send update to nodes if force
                     $etva_node->setSoapTimeout(5);
                     $remote_updated = $this->remoteUpdate($etva_node, $remote, $cm_ip);
                     if ($remote_updated !== true) {
                         if ($remote_updated === false) {
                             $intf = $remote['intf'];
                             $msg_i18n = $this->getContext()->getI18N()->__(SystemNetwork::_ERR_NOTFOUND_INTF_, array('%name%' => $intf, '%info%' => ''));
                             $remote_errors[] = $msg_i18n;
                             //$error = array('success'=>false,'agent'=>sfConfig::get('config_acronym'),'error'=>$msg_i18n);
                         } else {
                             $agent_msg = Etva::getLogMessage(array('agent' => $remote_updated['agent'], 'msg' => $remote_updated['error']), Etva::_AGENT_MSG_);
                             $message = Etva::getLogMessage(array('info' => $agent_msg), EtvaSettingPeer::_ERR_SETTING_REMOTE_CONNECTIVITY_SAVE_);
                             $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
                             $remote_errors[] = $agent_msg;
                         }
                     }
                     /*
                      * update MA if any...
                      *
                      */
                     $etva_servers = $etva_node->getEtvaServers();
                     foreach ($etva_servers as $etva_server) {
                         $server_ma = $etva_server->getAgentTmpl();
                         $server_state = $etva_server->getState();
                         if ($server_state && $server_ma) {
                             $aux_ip = $etva_server->getIp();
                             $etva_server->setSoapTimeout(5);
                             $remote_updated = $this->remoteUpdate($etva_server, $remote, $cm_ip);
                             if ($remote_updated === false) {
                                 $intf = $remote['intf'];
                                 $msg_i18n = $this->getContext()->getI18N()->__(SystemNetwork::_ERR_NOTFOUND_INTF_, array('%name%' => $intf, '%info%' => ''));
                                 $remote_errors[] = $msg_i18n;
                                 //$error = array('success'=>false,'agent'=>sfConfig::get('config_acronym'),'error'=>$msg_i18n);
                             } else {
                                 $agent_msg = Etva::getLogMessage(array('agent' => $remote_updated['agent'], 'msg' => $remote_updated['error']), Etva::_AGENT_MSG_);
                                 $message = Etva::getLogMessage(array('info' => $agent_msg), EtvaSettingPeer::_ERR_SETTING_REMOTE_CONNECTIVITY_SAVE_);
                                 $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
                                 $remote_errors[] = $agent_msg;
                             }
                         }
                     }
                 }
             }
             if (!empty($remote_errors)) {
                 $msg = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'info' => implode('<br>', $remote_errors), 'error' => implode(' ', $remote_errors));
                 $error = $this->setJsonError($msg);
                 return $this->renderText($error);
             }
         }
         // end if changed networks
     }
     foreach ($settings_decoded as $data) {
         $param = $data['param'];
         $value = $data['value'];
         if (!($etva_setting = EtvaSettingPeer::retrieveByPk($param))) {
             $msg_i18n = $this->getContext()->getI18N()->__(EtvaSettingPeer::_ERR_NOTFOUND_PARAM_, array('%id%' => $param));
             $info = array('success' => false, 'error' => $msg_i18n);
             $error = $this->setJsonError($info);
             return $this->renderText($error);
         }
         $etva_setting->setValue($value);
         switch ($param) {
             case 'vnc_keymap':
                 if ($etva_setting->saveVNCkeymap()) {
                     //notify system log
                     $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => Etva::getLogMessage(array('name' => $etva_setting->getValue()), EtvaSettingPeer::_OK_VNCKEYMAP_CHANGE_))));
                 } else {
                     //notify system log
                     $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => Etva::getLogMessage(array('name' => $value), EtvaSettingPeer::_ERR_VNCKEYMAP_CHANGE_), 'priority' => EtvaEventLogger::ERR)));
                 }
                 break;
             default:
                 try {
                     $etva_setting->save();
                     //notify system log
                     $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => Etva::getLogMessage(array('name' => $etva_setting->getParam(), 'value' => $etva_setting->getValue()), EtvaSettingPeer::_OK_SETTING_CHANGE_))));
                 } catch (Exception $e) {
                     //notify system log
                     $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => Etva::getLogMessage(array('name' => $value), EtvaSettingPeer::_ERR_SETTING_CHANGE_), 'priority' => EtvaEventLogger::ERR)));
                 }
                 break;
         }
     }
     // end foreach
     $msg_i18n = $this->getContext()->getI18N()->__(EtvaSettingPeer::_OK_SETTING_CONNECTIVITY_SAVE_);
     $message = EtvaSettingPeer::_OK_SETTING_CONNECTIVITY_SAVE_;
     $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => $message)));
     $info = array('success' => true, 'agent' => sfConfig::get('config_acronym'), 'response' => $msg_i18n);
     return $this->renderText(json_encode($info));
 }