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;
     }
 }
Exemple #2
0
 private function jsonImportCheck(sfWebRequest $request)
 {
     $nid = $request->getParameter('nid');
     $import_data = json_decode($request->getParameter('import'), true);
     $server = $import_data;
     $server['name'] = $import_data['name'];
     $server['vm_type'] = $import_data['vm_type'];
     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)));
         return $error;
     }
     /*
      * check if name is unique
      */
     if ($etva_server = EtvaServerPeer::retrieveByName($server['name'])) {
         $msg_i18n = $this->getContext()->getI18N()->__(EtvaServerPeer::_ERR_EXIST_, array('%name%' => $server['name']));
         $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
         //notify event log
         $server_log = Etva::getLogMessage(array('name' => $server['name']), EtvaServerPeer::_ERR_EXIST_);
         $message = Etva::getLogMessage(array('info' => $server_log), OvfEnvelope_VA::_ERR_IMPORT_);
         $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
         return $error;
     }
     if (isset($import_data['disks'])) {
         $disks = $import_data['disks'];
         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)));
                 return $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)));
                 return $error;
             }
         }
     }
     if (isset($import_data['networks'])) {
         $networks = $import_data['networks'];
         $networks_va = $import_data['networks'];
         // check if networks are available
         foreach ($networks as $network) {
             $etva_vlan = EtvaVlanPeer::retrieveByPk($network['vlan_id']);
             $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)));
                 return $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)));
                 return $error;
             }
         }
     }
     $msg_i18n = $this->getContext()->getI18N()->__(OvfEnvelope_VA::_OK_OVF_IMPORT_VALIDATION_, array());
     $message = Etva::getLogMessage(array(), OvfEnvelope_VA::_OK_OVF_IMPORT_VALIDATION_);
     $this->dispatcher->notify(new sfEvent($etva_node->getName(), 'event.log', array('message' => $message)));
     $result = array('success' => true, 'agent' => $response['agent'], 'response' => $msg_i18n);
     return $result;
 }
 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;
     }
 }
 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;
         }
     }
 }
Exemple #5
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;
 }
 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;
     }
 }