Esempio n. 1
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;
         }
     }
 }
Esempio n. 2
0
 public function executeJsonCreateSnapshot(sfWebRequest $request)
 {
     if ($sid = $request->getParameter('uuid')) {
         $etva_server = EtvaServerPeer::retrieveByUuid($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));
         $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->create_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);
     }
 }