Exemplo n.º 1
0
 /**
  * Creates cluster
  * Does not create the default cluster
  *
  * @return 
  *
  */
 public function executeJsonCreate(sfWebRequest $request)
 {
     $clustername = $request->getParameter('name');
     $form_data = array();
     if ($clustername) {
         $form_data['name'] = $clustername;
         $form_data['isDefaultCluster'] = '0';
         $form_data['hasNodeHA'] = '0';
         $form_data['admissionGate_type'] = 0;
         $form_data['admissionGate_value'] = 0;
         error_log("CLUSTER[INFO] Creating cluster with name " . $clustername);
     } else {
         //invalid parameters
         $msg = "Invalid parameters";
         error_log("CLUSTER[ERROR] Invalid parameters");
         $msg_i18n = $this->getContext()->getI18N()->__($msg);
         $error_msg = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n);
         //notify system log
         $this->dispatcher->notify(new sfEvent($error['agent'], 'event.log', array('message' => Etva::getLogMessage(array('name' => $clustername, 'info' => $msg), EtvaClusterPeer::_ERR_CREATE_), 'priority' => EtvaEventLogger::ERR)));
         $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'info' => $msg_i18n, 'error' => array($error_msg));
         // 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);
     }
     if (!preg_match('/^[a-zA-Z][a-zA-Z0-9\\-\\_]+$/', $clustername)) {
         $msg = "Invalid name format";
         error_log("CLUSTER[ERROR]" . $msg);
         $msg_i18n = $this->getContext()->getI18N()->__($msg);
         $error_msg = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n);
         //notify system log
         $this->dispatcher->notify(new sfEvent($error['agent'], 'event.log', array('message' => Etva::getLogMessage(array('name' => $clustername, 'info' => $msg), EtvaClusterPeer::_ERR_CREATE_), 'priority' => EtvaEventLogger::ERR)));
         $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'info' => $msg_i18n, 'error' => array($error_msg));
         // 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);
     }
     //        $form_data['isDefaultCluster'];
     //cluster name validator
     $cluster_criteria = new Criteria();
     $cluster_criteria->add(EtvaClusterPeer::NAME, $clustername, Criteria::EQUAL);
     $exists = EtvaClusterPeer::doCount($cluster_criteria);
     if ($exists != 0) {
         //cluster already exists
         $msg = 'Cluster name not available';
         error_log("CLUSTER[INFO]" . $msg);
         $msg_i18n = $this->getContext()->getI18N()->__($msg);
         $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => Etva::getLogMessage(array('name' => $netname, 'info' => $msg_i18n), EtvaClusterPeer::_ERR_CREATE_), 'priority' => EtvaEventLogger::ERR)));
         $result = array('success' => false, 'avaialable' => true, 'info' => $msg_i18n, 'error' => $msg_i18n);
         $return = json_encode($result);
         // if is browser request return text renderer
         $this->getResponse()->setHttpHeader('Content-type', 'application/json');
         return $this->renderText($return);
     }
     // create cluster entry
     $form = new EtvaClusterForm();
     $result = $this->processJsonForm($request, $form, $form_data);
     if (!$result['success']) {
         error_log("CLUSTER[ERROR] Error processing cluster form");
         //$result['ok'] = $oks;
         //notify system log
         $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => Etva::getLogMessage(array('name' => $netname, 'info' => 'Could not insert cluster'), EtvaClusterPeer::_ERR_CREATE_), 'priority' => EtvaEventLogger::ERR)));
         $error = $this->setJsonError($result);
         return $this->renderText($error);
     } else {
         //Cluster creation well succeeded
         $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => Etva::getLogMessage(array('name' => $netname), EtvaClusterPeer::_OK_CREATE_))));
     }
     //get cluster object
     $etva_cluster = $result['object'];
     //create default network configuration
     error_log("CLUSTER[INFO] Loading cluster default networks");
     $res = $this->loadNetworkDefaults($etva_cluster);
     if ($res == 1) {
         $i18n_msg = $msg_i18n = $this->getContext()->getI18N()->__('Cluster added to the system!');
         //notify system log
         $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => Etva::getLogMessage(array('name' => $netname), EtvaVlanPeer::_OK_CREATE_))));
         $result = array('success' => true, 'agent' => sfConfig::get('config_acronym'), 'response' => $i18n_msg, 'cluster_id' => $etva_cluster->getId());
     } elseif ($res == 0) {
         error_log("CLUSTER[ERROR] Error creating datacenter default networks");
         $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => Etva::getLogMessage(array('name' => $netname, 'info' => 'Could not create vlans'), EtvaVlanPeer::_ERR_CREATE_), 'priority' => EtvaEventLogger::CRIT)));
         $error = $this->setJsonError($result);
         return $this->renderText($error);
     }
     $return = json_encode($result);
     // if is browser request return text renderer
     $this->getResponse()->setHttpHeader('Content-type', 'application/json');
     return $this->renderText($return);
 }