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; } }
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; } } }
/** * * * 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; } }