/** * 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); } }