示例#1
0
 /**
  *
  * @return      
  */
 public function executeJsonListFreeDevices(sfWebRequest $request)
 {
     $server_id = $request->getParameter('sid');
     $dev_type = $request->getParameter('type');
     # get server's node
     $etva_node = EtvaNodeQuery::create()->useEtvaServerAssignQuery()->filterByServerId($server_id)->endUse()->findOne();
     if ($etva_node && $etva_node->getState() != 0) {
         $node_va = new EtvaNode_VA($etva_node);
         $response = $node_va->send_get_devs($dev_type);
         if ($response['success']) {
             $devs = $response['data'];
             $rsp_devs = array();
             $devs_in_use = EtvaNodePeer::getDevicesInUse($etva_node);
             foreach ($devs as $k => $dev) {
                 $dev->id = $dev->idvendor . $dev->idproduct;
                 // check if device is already attached
                 $testid = $dev->id . $dev->type;
                 foreach ($devs_in_use as $du) {
                     if ($du == $testid) {
                         unset($response['data'][$k]);
                     }
                 }
             }
             # reindexing array
             $response['data'] = array_values($response['data']);
             $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);
         }
     } else {
         if ($etva_node && $etva_node->getState() == 0) {
             # report that node is down
             # EtvaNodePeer::_STATE_DOWN_
         }
     }
     return $response;
 }
示例#2
0
 public function send_edit(EtvaNode $etva_node, $orig_server, $server_data)
 {
     $method = self::SERVER_EDIT;
     $etva_server = $this->etva_server;
     $etva_server->fromArray($server_data, BasePeer::TYPE_FIELDNAME);
     /*
      * process networks
      */
     $this->networks_changed = isset($server_data['networks']);
     if ($this->networks_changed) {
         $check_nics_available = $this->check_nics_availability($etva_node, $server_data['networks'], $method);
         if (!$check_nics_available['success']) {
             return $check_nics_available;
         }
     } else {
         /*
          * clone networks and add to server copy
          */
         $networks = $orig_server->getEtvaNetworks();
         foreach ($networks as $network) {
             $etva_server->addEtvaNetwork($network);
         }
     }
     /*
      * process devices
      */
     $devices_changed = isset($server_data['devices']);
     if ($devices_changed) {
         // ensure if devices are not attached to other vms
         $devs_in_use = EtvaNodePeer::getDevicesInUse($etva_node, $etva_server);
         $srv_name = $etva_server->getName();
         foreach ($server_data['devices'] as $k => $dev) {
             // check if device is already attached
             $testid = $dev['idvendor'] . $dev['idproduct'] . $dev['type'];
             foreach ($devs_in_use as $du) {
                 if ($du == $testid) {
                     //                            $msg_i18n = $this->getContext()->getI18N()->__(EtvaNodePeer::_ERR_DEVICE_ATTACHED_,array('%dev%'=>$dev['description']));
                     $error = EtvaNodePeer::_ERR_DEVICE_ATTACHED_;
                     $response = array('success' => False, 'error' => $error, 'agent' => $srv_name, 'dev' => $dev['description']);
                     return $response;
                 }
             }
         }
         //            $check_nics_available = $this->check_nics_availability($etva_node, $server_data['devices'],$method);
         //            if(!$check_nics_available['success']) return $check_nics_available;
         //
         $check_devs_available = $this->check_devices_availability($etva_node, $server_data['devices'], $method);
         if (!$check_devs_available['success']) {
             return $check_devs_available;
         }
         //
     } else {
         /*
          * clone devices and add to server copy
          */
         $devices = $orig_server->getDevices();
         $etva_server->setDevices($devices);
     }
     /*
      * process disks
      */
     $this->disks_changed = isset($server_data['disks']);
     $disks = $server_data['disks'];
     if ($this->disks_changed) {
         /*
          * create disks objects and add to server copy
          */
         $check_disks_available = $this->check_disks_availability($etva_node, $server_data['disks'], $method);
         //error processing parameters
         if (!$check_disks_available['success']) {
             return $check_disks_available;
         }
     } else {
         /*
          * clone disks and add to server copy
          */
         $disks = $orig_server->getEtvaServerLogicals();
         foreach ($disks as $disk) {
             $etva_server->addEtvaServerLogical($disk);
         }
     }
     $this->buildServer($method);
     $params = $etva_server->_VA();
     if ($etva_server->getVmState() == 'running') {
         $params['live'] = 1;
     }
     # if don't has snapshots and try to change name, send force_to_change_name= flag
     if (!$orig_server->getHassnapshots() && $orig_server->getName() != $etva_server->getName()) {
         $params['force_to_change_name'] = 1;
     }
     if (!$etva_server->getUnassigned()) {
         $response = $etva_node->soapSend($method, $params);
     } else {
         $response = array('success' => true);
     }
     $result = $this->processEditResponse($etva_node, $orig_server, $response);
     return $result;
 }