Ejemplo n.º 1
0
 /**
  * Creates vlan
  *
  * Issues soap request to all nodes
  *
  * @return json array string
  * 
  */
 public function executeJsonCreate(sfWebRequest $request)
 {
     $form_data = array();
     $netname = $request->getParameter('name');
     if ($netname) {
         $form_data['name'] = $netname;
     }
     $re_inv_name = EtvaVlanPeer::_REGEXP_INVALID_NAME_;
     if (preg_match($re_inv_name, $netname)) {
         $msg = EtvaVlanPeer::_ERR_NAME_;
         $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' => $netname, 'info' => $msg), EtvaVlanPeer::_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);
     }
     $clusterid = $request->getParameter('cluster_id');
     if (!$clusterid) {
         $defaultCluster = EtvaClusterPeer::retrieveDefaultCluster();
         $clusterid = $defaultCluster->getId();
     }
     $form_data['cluster_id'] = $clusterid;
     $netid = $request->getParameter('vlanid');
     if ($netid) {
         $form_data['vlanid'] = $netid;
     }
     $nodes_criteria = new Criteria();
     $nodes_criteria->add(EtvaNodePeer::CLUSTER_ID, $clusterid);
     $etva_nodes = EtvaNodePeer::doSelect($nodes_criteria);
     $oks = array();
     $errors = array();
     $method = 'create_network';
     $params = array('vlanid' => $netid, 'name' => $netname);
     $tagged = $request->getParameter('vlan_tagged');
     if ($tagged) {
         $params['vlan_tagged'] = 1;
         $form_data['tagged'] = 1;
     }
     $untagged = $request->getParameter('vlan_untagged');
     if ($untagged) {
         $params['vlan_untagged'] = 1;
         $form_data['tagged'] = 0;
     }
     /*
      * if type of vlan is untagged check if there is already an untagged VLAN
      */
     if ($params['vlan_untagged']) {
         $untagged_vlan = EtvaVlanPeer::retrieveUntagged($clusterid);
         if ($untagged_vlan) {
             $msg = 'Untagged network already exist!';
             $msg_i18n = $this->getContext()->getI18N()->__($msg);
             $error = 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' => $netname, 'info' => $msg), EtvaVlanPeer::_ERR_CREATE_), 'priority' => EtvaEventLogger::ERR)));
             $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'info' => $msg_i18n, 'error' => array($error));
             // 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);
         }
     } else {
         // if not untagged
         $untagged_vlan = EtvaVlanPeer::retrieveUntagged($clusterid);
         // use untagged ifout to create vlan tagged
         if ($untagged_vlan) {
             $params['ifout'] = $untagged_vlan->getIntf();
         }
     }
     // if network exists stop
     if ($etva_vlan = EtvaVlanPeer::isUnique($netid, $netname, $clusteid)) {
         if ($etva_vlan->getName() == $netname) {
             $msg = "Network {$netname} already exist!";
             $msg_i18n = $this->getContext()->getI18N()->__('Network %1% already exist!', array('%1%' => $netname));
         } else {
             $msg = "Network ID {$netid} already exist!";
             $msg_i18n = $this->getContext()->getI18N()->__('Network %1% already exist!', array('%1%' => 'ID ' . $netid));
         }
         $error = 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' => $netname, 'info' => $msg), EtvaVlanPeer::_ERR_CREATE_), 'priority' => EtvaEventLogger::ERR)));
         $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'info' => $msg_i18n, 'error' => array($error));
         // 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 = new EtvaVlanForm();
     //        error_log(print_r($form_data, true));
     $result = $this->processJsonForm($form_data, $form);
     if (!$result['success']) {
         //$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 network'), EtvaVlanPeer::_ERR_CREATE_), 'priority' => EtvaEventLogger::CRIT)));
         $error = $this->setJsonError($result);
         return $this->renderText($error);
     }
     //notify system log
     $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => Etva::getLogMessage(array('name' => $netname), EtvaVlanPeer::_OK_CREATE_))));
     $etva_vlan = $result['object'];
     // send soap request to all nodes (agents)
     foreach ($etva_nodes as $etva_node) {
         // send soap request
         $response = $etva_node->soapSend($method, $params);
         if ($response['success']) {
             $msg_i18n = $this->getContext()->getI18N()->__(EtvaVlanPeer::_OK_CREATE_, array('%name%' => $netname));
             $response['info'] = $msg_i18n;
             $oks[] = $response;
             //notify system log
             $this->dispatcher->notify(new sfEvent($etva_node->getName(), 'event.log', array('message' => Etva::getLogMessage(array('name' => $netname), EtvaVlanPeer::_OK_CREATE_))));
         } else {
             $info = $response['info'];
             $info_i18n = $this->getContext()->getI18N()->__($info);
             $response['info'] = $info_i18n;
             $errors[] = $response;
             //notify system log
             $this->dispatcher->notify(new sfEvent($etva_node->getName(), 'event.log', array('message' => Etva::getLogMessage(array('name' => $netname, 'info' => $info), EtvaVlanPeer::_ERR_CREATE_), 'priority' => EtvaEventLogger::ERR)));
         }
     }
     if (!empty($errors)) {
         $result = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'ok' => $oks, 'error' => $errors);
         if (sfConfig::get('sf_environment') == 'soap') {
             return json_encode($result);
         }
         $return = $this->setJsonError($result);
         return $this->renderText($return);
     }
     $result = array('success' => true, 'agent' => sfConfig::get('config_acronym'), 'response' => $oks);
     $return = json_encode($result);
     // 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);
 }