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