Example #1
0
 public function executeJsonReplace(sfWebRequest $request)
 {
     $sid = $request->getParameter('sid');
     $networks = json_decode($request->getParameter('networks'), true);
     if (!($etva_server = EtvaServerPeer::retrieveByPK($sid))) {
         $msg_i18n = $this->getContext()->getI18N()->__(EtvaServerPeer::_ERR_NOTFOUND_ID_, array('%id%' => $sid));
         $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n, 'info' => $msg_i18n);
         //notify system log
         $server_log = Etva::getLogMessage(array('id' => $sid), EtvaServerPeer::_ERR_NOTFOUND_ID_);
         $message = Etva::getLogMessage(array('info' => $server_log), EtvaNetworkPeer::_ERR_REMOVEALL_);
         $this->dispatcher->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => $message, '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);
     }
     //get cluster id from server
     $cluster_id = $etva_server->getClusterId();
     $etva_node = $etva_server->getEtvaNode();
     $method = 'detachall_interfaces';
     $params = array('uuid' => $etva_server->getUuid());
     $response = $etva_node->soapSend($method, $params);
     if (!$response['success']) {
         $error_decoded = $response['error'];
         //$error = 'Detaching '.$server.' interfaces: '.$error_decoded;
         $msg_i18n = $this->getContext()->getI18N()->__(EtvaNetworkPeer::_ERR_REMOVEALL_, array('%info%' => $error_decoded));
         $response['error'] = $msg_i18n;
         $result = $response;
         //notify system log
         $message = Etva::getLogMessage(array('info' => $response['info']), EtvaNetworkPeer::_ERR_REMOVEALL_);
         $this->dispatcher->notify(new sfEvent($response['agent'], 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
         if (sfConfig::get('sf_environment') == 'soap') {
             return json_encode($result);
         }
         $return = $this->setJsonError($result);
         return $this->renderText($return);
     }
     $response_decoded = (array) $response['response'];
     $returned_status = $response_decoded['_okmsg_'];
     $etva_server->deleteNetworks();
     //notify system log
     $message = Etva::getLogMessage(array('server' => $etva_server->getName()), EtvaNetworkPeer::_OK_REMOVEALL_);
     $this->dispatcher->notify(new sfEvent($response['agent'], 'event.log', array('message' => $message)));
     $method = 'attach_interface';
     $netSend = array();
     foreach ($networks as $network) {
         $netSend[] = "name=" . $network['vlan'] . ",macaddr=" . $network['mac'];
     }
     $network_string = implode(';', $netSend);
     $params = array('uuid' => $etva_server->getUuid(), 'network' => $network_string);
     $response = $etva_node->soapSend($method, $params);
     if ($response['success']) {
         $response_decoded = (array) $response['response'];
         $returned_status = $response_decoded['_okmsg_'];
         foreach ($networks as $network) {
             $c_dc_nm = new Criteria();
             $c_dc_nm->addAnd(EtvaVlanPeer::CLUSTER_ID, $cluster_id);
             $etva_vlan = EtvaVlanPeer::retrieveByName($network['vlan'], $c_dc_nm);
             $etva_network = new EtvaNetwork();
             $etva_network->fromArray($network, BasePeer::TYPE_FIELDNAME);
             $etva_network->setEtvaServer($etva_server);
             $etva_network->setEtvaVlan($etva_vlan);
             $etva_network->save();
         }
         //$msg = $server.' attached interfaces: '.$returned_status;
         $msg_i18n = $this->getContext()->getI18N()->__(EtvaNetworkPeer::_OK_CREATEALL_, array('%server%' => $etva_server->getName()));
         $response['response'] = $msg_i18n;
         $message = Etva::getLogMessage(array('server' => $etva_server->getName()), EtvaNetworkPeer::_OK_CREATEALL_);
         $this->dispatcher->notify(new sfEvent($response['agent'], 'event.log', array('message' => $message)));
         $result = $response;
         $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);
     } else {
         $error_decoded = $response['error'];
         $msg_i18n = $this->getContext()->getI18N()->__(EtvaNetworkPeer::_ERR_CREATEALL_, array('%info%' => $error_decoded));
         //$error = 'Attaching '.$server.' interfaces: '.$error_decoded;
         $response['error'] = $msg_i18n;
         //notify system log
         $message = Etva::getLogMessage(array('info' => $response['info']), EtvaNetworkPeer::_ERR_CREATEALL_);
         $this->dispatcher->notify(new sfEvent($response['agent'], 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR)));
         if (sfConfig::get('sf_environment') == 'soap') {
             return json_encode($response);
         }
         $return = $this->setJsonError($response);
         return $this->renderText($return);
     }
 }