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