protected function execute($arguments = array(), $options = array()) { $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 $nid = $arguments['id']; $this->log("[INFO] node check id={$nid}"); if (!($etva_node = EtvaNodePeer::retrieveByPK($nid))) { $msg_i18n = $context->getI18N()->__(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; } else { $etva_node_va = new EtvaNode_VA($etva_node); $response = $etva_node_va->checkState(); if (!$response['success']) { $this->log("[ERROR] " . $response['error']); } else { $this->log("[INFO] " . $response['response']); } return $response; } }
protected function execute($arguments = array(), $options = array()) { $context = sfContext::createInstance(sfProjectConfiguration::getApplicationConfiguration('app', $options['env'], true)); parent::execute($arguments, $options); // initialize the database connection $databaseManager = new sfDatabaseManager($this->configuration); $connection = $databaseManager->getDatabase($options['connection'])->getConnection(); // add your code here $this->log('Refreshing Guest Agents Info...' . "\n"); $nodes = EtvaNodeQuery::create()->filterByState(EtvaNode::NODE_ACTIVE)->find(); foreach ($nodes as $node) { $node_va = new EtvaNode_VA($node); $this->log('Collecting info for node: ' . $node->getName() . "\n"); $bulk_response_gas = $node_va->send_get_gas_info(); //$this->log('The following servers info were updated: '.implode('; ', $bulk_response_gas)); $message = 'The following servers info were updated: ' . implode('; ', $bulk_response_gas); $this->log($message); $context->getEventDispatcher()->notify(new sfEvent($node->getName(), 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::INFO))); } }
public function executeJsonListSyncLogicalVolumes(sfWebRequest $request) { //adding cluster id filter $elements = array(); // get node id from cluster context $etva_node = EtvaNodePeer::getOrElectNode($request); if (!$etva_node) { $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); $node_log = Etva::getLogMessage(array('id' => $nid), EtvaNodePeer::_ERR_NOTFOUND_ID_); //notify system log $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => $node_log, '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); } $sharedonly = false; $force = false; if ($request->getParameter('force')) { $force = true; } if ($request->getParameter('level') == 'cluster') { $sharedonly = true; } $etva_node_va = new EtvaNode_VA($etva_node); $elements = $etva_node_va->get_sync_logicalvolumes($force, $sharedonly); // return array $result = array('success' => true, 'total' => count($elements), 'data' => $elements, 'agent' => $etva_node->getName()); $return = json_encode($result); if (sfConfig::get('sf_environment') == 'soap') { return $return; } $this->getResponse()->setHttpHeader('Content-type', 'application/json'); return $this->renderText($return); }
public function restore($backup_id) { //clear stage cache $this->delStage(self::RESTORE_STAGE); chdir(sfConfig::get('sf_root_dir')); /* * TELL VA to reset stuff */ $node_list = EtvaNodePeer::doSelect(new Criteria()); $node_num = count($node_list); if ($node_num != 1) { /* * ERROR should be only one element (standard ETVA release only) */ $msg = "Sould only be one Virtualization Agent! {$node_num} found!"; $data = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'info' => $msg, 'error' => $msg); return $data; } $node = $node_list[0]; /* * check node state ok to comm with agent */ if (!$node->getState()) { $node_name = $node->getName(); $msg = sfContext::getInstance()->getI18N()->__(EtvaNodePeer::_STATE_DOWN_, array('%name%' => $node_name)); $data = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'action' => 'check_nodes', 'info' => $msg, 'error' => $msg); return $data; } $this->disable(); /* * * FIRST THING....CLEANUP DESTINATION FOLDER AND GET RESTORE ARCHIVE * */ IOFile::unlinkRecursive($this->archive_base_dir, false); $full_path = $this->archive_base_dir . '/' . self::ARCHIVE_FILE; $this->setStage(self::RESTORE_STAGE, self::GET_RESTORE); $response = $this->getApplianceBackup($backup_id, $full_path); /* * * DECOMPRESS BACKUP ARCHIVE * */ $this->setStage(self::RESTORE_STAGE, self::ARCHIVE_RESTORE); $create_gz = new gzip_file($full_path); $base_dir = $this->archive_base_dir; $create_gz->set_options(array('basedir' => $base_dir, 'overwrite' => 1)); $create_gz->extract_files(); /* * get DB file and put in tmp_db_filename */ $db_filename = $base_dir . '/' . self::DB_FILE; if (!file_exists($db_filename)) { return array('success' => false, 'error' => 'no file'); } // move DB backup to correct folder... rename($db_filename, $this->tmp_db_filename); /* * * CLEAN DB ???? * */ /* * delete tables and build again.... */ $command = "symfony propel:insert-sql --no-confirmation"; $path = sfConfig::get('sf_root_dir') . DIRECTORY_SEPARATOR . "utils"; ob_start(); passthru('echo ' . $command . ' | sudo /usr/bin/php -f ' . $path . DIRECTORY_SEPARATOR . 'sudoexec.php', $return); $result = ob_get_contents(); ob_end_clean(); if ($result != 0 || $return != 0) { $msg = 'An error occurred while deleting DB. Aborted!' . $status; $data = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'action' => self::DB_RESTORE, 'info' => $msg, 'error' => $msg); return $data; } /* * * RESTORE CENTRAL MANAGEMENT BACKUP (DB) * * */ $this->setStage(self::RESTORE_STAGE, self::DB_RESTORE); /* * load data to DB */ //sfContext::getInstance()->getStorage()->regenerate(true); exec("symfony propel:data-load " . $this->tmp_db_filename, $output, $status); if ($status != 0) { // aconteceu erro $msg = 'An error occurred while generating DB dump. Aborted!' . $status; $data = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'action' => self::DB_RESTORE, 'info' => $msg, 'error' => $msg); return $data; } /* * * generate session to stay logged in... * */ sfContext::getInstance()->getStorage()->regenerate(); $this->setStage(self::RESTORE_STAGE, self::VA_RESET); $node_va = new EtvaNode_VA($node); /* * get new uuid from DB */ $backup_node = EtvaNodePeer::doSelectOne(new Criteria()); $uuid = $backup_node->getUuid(); $response = $node_va->send_change_uuid($uuid); if (!$response['success']) { return $response; } $response = array('success' => true); return $response; }
public function executeJsonUpdate(sfWebRequest $request) { // create node entry $id = $request->getParameter('id'); $etva_node = EtvaNodePeer::retrieveByPK($id); if (!$etva_node) { $form = new EtvaNodeForm(); } else { $form = new EtvaNodeForm($etva_node); } $data = (array) json_decode($request->getParameter($form->getName())); if ($data['name'] && $data['name'] != $etva_node->getName()) { // if name changed $node_va = new EtvaNode_VA($etva_node); $response = $node_va->send_change_name($data['name']); // send to VA to change name if (!$response['success']) { if (sfConfig::get('sf_environment') == 'soap') { return json_encode($response); } $return = $this->setJsonError($response); return $this->renderText($return); } } try { $etva_node->fromArray($data, BasePeer::TYPE_FIELDNAME); $etva_node->save(); } catch (Exception $e) { $result = array('success' => false, 'error' => array('node' => $e->getMessage()), 'obj' => $etva_cluster); $error = $this->setJsonError($result); return $this->renderText($error); } $name = $etva_node->getName(); $i18n_msg = $msg_i18n = $this->getContext()->getI18N()->__(EtvaNodePeer::_OK_UPDATE_, array('%name%' => $name)); //notify system log $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => Etva::getLogMessage(array('name' => $name), EtvaNodePeer::_OK_UPDATE_)))); $return = array('success' => true, 'agent' => sfConfig::get('config_acronym'), 'response' => $i18n_msg, 'node_id' => $etva_node->getId()); $return = json_encode($return); error_log("getFencingconf_cmd " . $etva_node->getFencingconf_cmd('status')); $this->getResponse()->setHttpHeader('Content-type', 'application/json'); return $this->renderText($return); }
protected function execute($arguments = array(), $options = array()) { $context = sfContext::createInstance(sfProjectConfiguration::getApplicationConfiguration('app', 'dev', true)); parent::execute($arguments, $options); // initialize the database connection $databaseManager = new sfDatabaseManager($this->configuration); $con = $databaseManager->getDatabase($options['connection'])->getConnection(); // add your code here $this->log('[INFO] Send explicit check to VirtAgents...' . "\n"); $inactive_nodes = EtvaNodeQuery::create()->filterByState(EtvaNode::NODE_INACTIVE)->find(); if (count($inactive_nodes) > 0) { $queue = new processCheckQueuing($this); foreach ($inactive_nodes as $node) { $cluster = $node->getEtvaCluster(); // only if cluster has HA if ($cluster->getHasNodeHA()) { $message = sprintf('Node %s is inactive and the cluster %s has Node HA configured.', $node->getName(), $cluster->getName()); $this->log($message); Etva::makeNotifyLogMessage($this->name, $message); // if fail mark as coma $etva_node_va = new EtvaNode_VA($node); $response = $etva_node_va->checkState(EtvaNode::NODE_COMA); if (!$response['success']) { $msg_fail = sprintf(' agent %s getstate fail ', $node->getName()); $this->log($msg_fail); Etva::makeNotifyLogMessage($this->name, $msg_fail); $queue->enqueueProcess($node, 180); } else { $msg_ok = sprintf(' agent %s getstate with success ', $node->getName()); $this->log($msg_ok); Etva::makeNotifyLogMessage($this->name, $msg_ok, array(), null, array(), EtvaEventLogger::INFO); } } else { $msg_noha = sprintf('Node %s is inactive but the cluster %s doesn\'t have Node HA configured.', $node->getName(), $cluster->getName()); $this->log($msg_noha); } } $queue->loop(); } else { $this->log('No inactive nodes found!'); } }
/** * 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)); }