Ejemplo n.º 1
0
 /**
  * Updates a volume group
  *
  * If volume group is new it will be created
  * else it will be updated
  *
  * $request may contain the following keys:
  * - nid: node ID
  * - vg: volume group name
  * - pvs: json encoded array with physical volumes
  * @return json array('success'=>true,'response'=>$data)
  * @return json array('success'=>false,'error'=>$errordata)
  */
 public function executeJsonUpdate(sfWebRequest $request)
 {
     $cid = $request->getParameter('cid');
     $level = $request->getParameter('level');
     $nid = $request->getParameter('nid');
     // volume group name to create...
     $vg = $request->getParameter('vg');
     // physical volume id to be inserted into new volume group
     //TODO : Currently only accept one physicalvolume!!!
     $pvs = json_decode($request->getParameter('pvs'), true);
     $params = array();
     $etva_pvs = array();
     $i = 0;
     $etva_node = EtvaNodePeer::getOrElectNode($request);
     if (!$etva_node) {
         $msg_i18n = $this->getContext()->getI18N()->__(EtvaNodePeer::_ERR_NOTFOUND_ID_, array('%id%' => $nid));
         $error = array('success' => false, 'error' => $msg_i18n);
         //notify event log
         $node_log = Etva::getLogMessage(array('id' => $nid), EtvaNodePeer::_ERR_NOTFOUND_ID_);
         $message = Etva::getLogMessage(array('name' => $vg, 'info' => $node_log), EtvaVolumegroupPeer::_ERR_CREATE_EXTEND_);
         $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);
     }
     // if volgroup doesnt exist then method is to create
     if (!($etva_volgroup = $etva_node->retrieveVolumegroupByVg($vg))) {
         $etva_volgroup = new EtvaVolumegroup();
         $etva_volgroup->setVg($vg);
         $vg_va = new EtvaVolumegroup_VA($etva_volgroup);
         $response = $vg_va->send_create($etva_node, $pvs);
     } else {
         // vgextend
         $vg_va = new EtvaVolumegroup_VA($etva_volgroup);
         $response = $vg_va->send_extend($etva_node, $pvs);
     }
     if ($response['success']) {
         $return = json_encode($response);
         // 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 {
         if (sfConfig::get('sf_environment') == 'soap') {
             return json_encode($response);
         }
         $return = $this->setJsonError($response);
         return $this->renderText($return);
     }
 }