protected function execute($arguments = array(), $options = array()) { // initialize the database connection $databaseManager = new sfDatabaseManager($this->configuration); $con = $databaseManager->getDatabase($options['connection'])->getConnection(); // add networks from config file to the givel cluster (optional) $flag = 0; //write or not to stdout if ($options['cluster_id']) { $cluster_id = $options['cluster_id']; $flag = 1; } else { $default_cluster = EtvaClusterPeer::retrieveDefaultCluster(); $cluster_id = $default_cluster->getId(); } error_log("LOADCONFTASK[INFO] Loading config file"); error_log($cluster_id); $model = Etva::getEtvaModelFile(); $networks = isset($model['networks']) ? $model['networks'] : $model[ucfirst('networks')]; if ($this->initialize_networks($networks, $cluster_id)) { if ($flag == 0) { echo "Done!\n"; } return 1; } else { if ($flag == 0) { echo "Failed!\n"; } return 0; } }
public function configure() { // get last datacenter id $c = new Criteria(); $c->addDescendingOrderByColumn(EtvaClusterPeer::ID); $cluster = EtvaClusterPeer::doSelectOne($c); error_log("VLANFORM[INFO] Last cluster id: " . $cluster->getId()); $this->setValidators(array('cluster_id' => new sfValidatorInteger(array('min' => 1, 'max' => $cluster->getId(), 'required' => true)), 'name' => new sfValidatorString(array('min_length' => 3, 'max_length' => 10)), 'vlanid' => new sfValidatorInteger(array('min' => 1, 'max' => 4094, 'required' => false)), 'tagged' => new sfValidatorChoice(array('choices' => array(0, 1))))); }
private static function ElectNode(EtvaNode $etva_node) { $cluster_id = $etva_node->getClusterId(); $etva_cluster = EtvaClusterPeer::retrieveByPK($cluster_id); return EtvaNode::getFirstActiveNode($etva_cluster); }
protected function execute($arguments = array(), $options = array()) { $context = sfContext::createInstance(sfProjectConfiguration::getApplicationConfiguration('app', $options['env'], true)); parent::execute($arguments, $options); // initialize the database connection $databaseManager = new sfDatabaseManager($this->configuration); $connection = $databaseManager->getDatabase($options['connection'])->getConnection(); // add your code here $this->log('Checking shared storage cluster consistency...' . "\n"); $ok = 1; $affected = 0; $errors = array(); $clusters = EtvaClusterPeer::doSelect(new Criteria()); foreach ($clusters as $cluster) { $bulk_response_lvs = $cluster->soapSend('getlvs_arr', array('force' => 1)); $bulk_response_dtable = $cluster->soapSend('device_table'); $lv_va = new EtvaLogicalvolume_VA(); foreach ($bulk_response_lvs as $node_id => $node_response) { if ($node_response['success']) { //response received ok $lvs = (array) $node_response['response']; $node = EtvaNodePeer::retrieveByPK($node_id); //$consist = $lv_va->check_shared_consistency($node,$lvs); $response_dtable = (array) $bulk_response_dtable[$node_id]; $dtable = array(); if ($response_dtable['success']) { $dtable = (array) $response_dtable['response']; //$consist_dtable = $lv_va->check_shared_devicetable_consistency($node,$dtable,$bulk_response_dtable); } $check_res = $lv_va->check_consistency($node, $lvs, $dtable, $bulk_response_dtable); if (!$check_res['success']) { $err = $check_res['errors']; $msg = sfContext::getInstance()->getI18N()->__(EtvaLogicalvolumePeer::_ERR_INCONSISTENT_, array('%info%' => '')); $err_msg = sprintf(" node with id=%s is not consistent: %s \n", $node_id, $msg); $errors[] = array('message' => $err_msg, 'debug' => $err); $affected++; $node->setErrorMessage(EtvaLogicalvolume_VA::LVINIT); } else { $node->clearErrorMessage(EtvaLogicalvolume_VA::LVINIT); } /*if( !$consist || !$consist_dtable ){ $errors = $lv_va->get_missing_lv_devices(); $msg = $errors ? $errors['message'] : sfContext::getInstance()->getI18N()->__(EtvaLogicalvolumePeer::_ERR_INCONSISTENT_,array('%info%'=>'')); $err_msg = sprintf( " node with id=%s is not consistent: %s \n", $node_id, $msg ); $errors[] = array( 'message'=> $err_msg, 'debug'=>array( 'consist_lvs'=>$consist, 'consist_dtable'=>$consist_dtable ) ); $affected++; $node->setErrorMessage(EtvaLogicalvolume_VA::LVINIT); } else { $node->clearErrorMessage(EtvaLogicalvolume_VA::LVINIT); }*/ } else { $errors[] = $node_response; $affected++; } } $bulk_response_pvs = $cluster->soapSend('hash_phydisks', array('force' => 1)); $pv_va = new EtvaPhysicalvolume_VA(); foreach ($bulk_response_pvs as $node_id => $node_response) { if ($node_response['success']) { //response received ok $pvs = (array) $node_response['response']; $node = EtvaNodePeer::retrieveByPK($node_id); $check_res = $pv_va->check_consistency($node, $pvs); if (!$check_res['success']) { $err = $check_res['errors']; $msg = sfContext::getInstance()->getI18N()->__(EtvaPhysicalvolumePeer::_ERR_INCONSISTENT_, array('%info%' => '')); $err_msg = sprintf(" node with id=%s is not consistent: %s \n", $node_id, $msg); $errors[] = array('message' => $err_msg, 'debug' => $err); $affected++; $node->setErrorMessage(EtvaPhysicalvolume_VA::PVINIT); } else { $node->clearErrorMessage(EtvaPhysicalvolume_VA::PVINIT); } } else { $errors[] = $node_response; $affected++; } } $bulk_responses_vgs = $cluster->soapSend('getvgpvs', array('force' => 1)); $vg_va = new EtvaVolumegroup_VA(); foreach ($bulk_response_vgs as $node_id => $node_response) { if ($node_response['success']) { //response received ok $vgs = (array) $node_response['response']; $node = EtvaNodePeer::retrieveByPK($node_id); $check_res = $vg_va->check_consistency($node, $vgs); if (!$check_res['success']) { $err = $check_res['errors']; $msg = sfContext::getInstance()->getI18N()->__(EtvaVolumegroupPeer::_ERR_INCONSISTENT_, array('%info%' => '')); $err_msg = sprintf(" node with id=%s is not consistent: %s \n", $node_id, $msg); $errors[] = array('message' => $err_msg, 'debug' => $err); $affected++; $node->setErrorMessage(EtvaVolumegroup_VA::VGINIT); } else { $node->clearErrorMessage(EtvaVolumegroup_VA::VGINIT); } } else { $errors[] = $node_response; $affected++; } } } if (!empty($errors)) { $this->log($message); } else { // log the message! $this->log("The check shared storage cluster consistency task ran!", 6); } }
public function executeJsonListCluster(sfWebRequest $request) { $filterBy = ''; if ($request->hasParameter('sid')) { $filterBy = 'sid'; } if ($request->hasParameter('cid')) { $filterBy = 'cid'; } $cluster_nodes = array(); $criteria = new Criteria(); if ($request->hasParameter('initialize')) { // filter by initialized nodes only $criteria->add(EtvaNodePeer::INITIALIZE, 'ok', Criteria::EQUAL); } switch ($filterBy) { case 'sid': $value = $request->getParameter($filterBy); $server = EtvaServerPeer::retrieveByPK($value); $node = $server->getEtvaNode(); $criteria->add(EtvaNodePeer::ID, $node->getId(), Criteria::NOT_EQUAL); $cluster_nodes = $node->getNodesCluster($criteria); break; case 'cid': $value = $request->getParameter($filterBy); if ($cluster = EtvaClusterPeer::retrieveByPK($value)) { $criteria->add(EtvaNodePeer::CLUSTER_ID, $cluster->getId()); $cluster_nodes = EtvaNodePeer::doSelect($criteria); } break; default: $cluster_nodes = EtvaNodePeer::doSelect($criteria); break; } $elements = array(); foreach ($cluster_nodes as $node) { $node_array = $node->toArray(); // get max allocatable memory $node_array['maxmem'] = $node->getMaxmem(); $elements[] = $node_array; } $result = array('success' => true, 'total' => count($elements), 'data' => $elements); $return = json_encode($result); if (sfConfig::get('sf_environment') == 'soap') { return $return; } $this->getResponse()->setHttpHeader('Content-type', 'application/json'); return $this->renderText($return); }
public function executeJsonGridNoPager($request) { $isAjax = $request->isXmlHttpRequest(); if (!$isAjax) { return $this->redirect('@homepage'); } $sid = $this->getRequestParameter('sid'); if ($sid) { $server = EtvaServerPeer::retrieveByPK($sid); $cid = $server->getClusterId(); } else { // get cluster id $cid = $this->getRequestParameter('cid'); if (!$cid) { $etva_cluster = EtvaClusterPeer::retrieveDefaultCluster(); $cid = $etva_cluster->getId(); } } //Get networks from cluster $c_vlan = new Criteria(); $c_vlan->add(EtvaVlanPeer::CLUSTER_ID, $cid); $etva_vlans = EtvaVlanPeer::doSelect($c_vlan); //get networks with server $c = new Criteria(); $vlan_flag = false; $server_flag = false; $query = $this->getRequestParameter('query') ? json_decode($this->getRequestParameter('query'), true) : array(); foreach ($query as $key => $val) { $column = EtvaNetworkPeer::translateFieldName(sfInflector::camelize($key), BasePeer::TYPE_PHPNAME, BasePeer::TYPE_COLNAME); if ($key == 'vlan_id') { $vlan_flag = true; } if ($key == 'server_id') { $server_flag = true; } $c->add($column, $val); } //error_log($c->toString()); //get vlans from cluster if (!$vlan_flag && !$server_flag) { // && !$server_flag && $cid){ //error_log('!(!$vlan_flag && !$server_flag)'); foreach ($etva_vlans as $etva_vlan) { if ($this->getRequestParameter('query')) { $c->addOr(EtvaNetworkPeer::VLAN_ID, $etva_vlan->getId()); } else { $c->addAnd(EtvaNetworkPeer::VLAN_ID, $etva_vlan->getId()); } } } // add sort criteria to sort elements $this->addSortCriteria($c); // add server criteria $this->addServerCriteria($c); //error_log($c->toString()); $etva_network_list = EtvaNetworkPeer::doSelectJoinEtvaServer($c); $elements = array(); $i = 0; foreach ($etva_network_list as $item) { $etva_server = $item->getEtvaServer(); $etva_vlan = $item->getEtvaVlan(); if ($etva_server && $etva_vlan) { $etva_server_name = $etva_server->getName(); $etva_server_type = $etva_server->getVmType(); $etva_vm_state = $etva_server->getVmState(); $etva_vlan_name = $etva_vlan->getName(); $elements[$i] = $item->toArray(); $elements[$i]['ServerName'] = $etva_server_name; $elements[$i]['VmType'] = $etva_server_type; $elements[$i]['Vlan'] = $etva_vlan_name; $elements[$i]['Vm_state'] = $etva_vm_state; $etva_node = $etva_server->getEtvaNode(); if ($etva_node) { $etva_node_name = $etva_node->getName(); $elements[$i]['NodeName'] = $etva_node_name; $elements[$i]['NodeId'] = $etva_node->getId(); } $i++; } } $final = array('total' => count($etva_network_list), 'data' => $elements); $result = json_encode($final); $this->getResponse()->setHttpHeader('Content-type', 'application/json'); return $this->renderText($result); }
public function initialize($data) { $uuid = $data['uuid']; $etva_data = Etva::getEtvaModelFile(); if (!$etva_data) { $error_msg = 'Could not process etva-model.conf'; $error = array('success' => false, 'error' => $error_msg); //notify system log $message = Etva::getLogMessage(array('name' => $data['name'], 'info' => $error_msg), EtvaNodePeer::_ERR_SOAPINIT_); sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR))); return $error; } $etvamodel = $etva_data['model']; $c = new Criteria(); $c->add(EtvaNodePeer::UUID, $uuid); $etva_node = EtvaNodePeer::doSelectOne($c); if ($etva_node) { if ($etva_node->getState() < EtvaNode::NODE_INACTIVE) { // dont touch //$data['state'] = $etva_node->getState(); $data['state'] = $this->calcState($etva_node, EtvaNode::NODE_ACTIVE); } if (!isset($data['isSpareNode'])) { $data['isSpareNode'] = $etva_node->getIssparenode() ? 1 : 0; } if (!isset($data['fencingconf'])) { $data['fencingconf'] = $etva_node->getFencingconf(); } $data['cluster_id'] = $etva_node->getClusterId(); $node_initialize = $etva_node->getInitialize(); $data['initialize'] = $node_initialize; if (empty($node_initialize)) { $data['initialize'] = self::INITIALIZE_PENDING; } if ($etvamodel == 'standard') { $data['initialize'] = self::INITIALIZE_OK; } else { if ($node_initialize != self::INITIALIZE_OK) { return array('success' => true); } } $data['id'] = $etva_node->getId(); /* * calculate free mem */ $etva_node->setMemtotal($data['memtotal']); $etva_node->updateMemFree(); $data['memfree'] = $etva_node->getMemfree(); $uuid = $etva_node->getUuid(); $form = new EtvaNodeForm($etva_node); } else { /* * add default cluster ID to node */ if (!($default_cluster = EtvaClusterPeer::retrieveDefaultCluster())) { $error_msg = sprintf('Default Object etva_cluster does not exist '); $error = array('success' => false, 'error' => $error_msg); //notify system log $cluster_message = Etva::getLogMessage(array('info' => $error_msg), EtvaClusterPeer::_ERR_DEFAULT_CLUSTER_); $message = Etva::getLogMessage(array('name' => $data['name'], 'info' => $cluster_message), EtvaNodePeer::_ERR_SOAPINIT_); sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR))); return $error; } $data['cluster_id'] = $default_cluster->getId(); $form = new EtvaNodeForm(); $uuid = EtvaNodePeer::generateUUID(); $data['initialize'] = self::INITIALIZE_PENDING; if ($etvamodel == 'standard') { $data['initialize'] = self::INITIALIZE_OK; } /* * calculate free mem */ $etva_node = new EtvaNode(); $etva_node->setMemtotal($data['memtotal']); $etva_node->updateMemFree(); $etva_node->setClusterId($default_cluster->getId()); $data['memfree'] = $etva_node->getMemfree(); $data['uuid'] = $uuid; } $this->clearLastMessage(); $result = $this->processNodeForm($data, $form); if (!$result['success']) { return $result; } // reset guest agent info $this->reset_gas_info($etva_node); /* * * check if has restore to perform.... */ $apli = new Appliance(); $action = $apli->getStage(Appliance::RESTORE_STAGE); if ($action) { $backup_url = $apli->get_backupconf_url(Appliance::VA_ARCHIVE_FILE, $uuid, 'VA'); if ($backup_url) { $result['reset'] = 1; $result['backup_url'] = $backup_url; /* * send pvs, vgs, lvs */ $node_devs = $etva_node->getEtvaNodePhysicalvolumesJoinEtvaPhysicalvolume(); $devs_va = array(); foreach ($node_devs as $data) { $dev = $data->getEtvaPhysicalvolume(); $devs_va[] = $dev->_VA(); } $result['pvs'] = $devs_va; $node_vgs = $etva_node->getEtvaNodeVolumegroupsJoinEtvaVolumegroup(); $vgs_va = array(); foreach ($node_vgs as $data) { $vg = $data->getEtvaVolumegroup(); $vgs_va[] = $vg->_VA(); } $result['vgs'] = $vgs_va; $node_lvs = $etva_node->getEtvaNodeLogicalvolumesJoinEtvaLogicalvolume(); $lvs_va = array(); foreach ($node_lvs as $data) { $lv = $data->getEtvaLogicalvolume(); $lvs_va[] = $lv->_VA(); } $result['lvs'] = $lvs_va; } $apli->setStage(Appliance::RESTORE_STAGE, Appliance::VA_INIT); } return $result; }
public function executeJsonDelete(sfWebRequest $request) { $isAjax = $request->isXmlHttpRequest(); if (!$isAjax) { return $this->redirect('@homepage'); } if (!($etva_cluster = EtvaClusterPeer::retrieveByPk($request->getParameter('id')))) { $error_msg = sprintf('Object etva_cluster does not exist (%s).', $request->getParameter('id')); $info = array('success' => false, 'error' => $error_msg); $error = $this->setJsonError($info); return $this->renderText($error); } $etva_cluster->delete(); $result = array('success' => true); $result = json_encode($result); $this->getResponse()->setHttpHeader('Content-type', 'application/json'); return $this->renderText($result); }
protected function generateTree() { $dc_criteria = new Criteria(); $dc_criteria->addJoin(EtvaClusterPeer::ID, EtvaNodePeer::CLUSTER_ID, Criteria::LEFT_JOIN); $dc_criteria->setDistinct(); $datacenters = EtvaClusterPeer::doSelect($dc_criteria); $show_cluster_contextmenu = $this->getUser()->isSuperAdmin(); $aux_datacenter = array(); foreach ($datacenters as $datacenter) { $dc_nodes = $datacenter->getEtvaNodes(); $datacenter_name = $datacenter->getName(); $datacenter_id = $datacenter->getId(); if (count($dc_nodes) == 0) { $aux_datacenter[] = array('text' => $datacenter->getName(), 'type' => 'cluster', 'id' => "d" . $datacenter->getId(), 'singleClickExpand' => false, 'children' => array(), 'contextmenu' => $show_cluster_contextmenu, 'expanded' => true, 'cls' => 'x-tree-node-collapsed '); continue; } // only nodes from the datacenter $criteria = new Criteria(); $sparenode_isFree = false; $sparenode_id = null; $sparenode = $datacenter->getSpareNode(); if ($sparenode) { $sparenode_id = $sparenode->getId(); $sparenode_isFree = $sparenode->isNodeFree() ? true : false; } error_log("TREE[INFO] Numer of '" . $datacenter_name . "' nodes : " + count($dc_nodes)); //********************** old code $user_id = $this->getUser()->getId(); $perm_dc = $this->getUser()->hasDatacenterCredential(array('admin', $datacenter->getId())); $aux = array(); // unassigned servers $unassigned_servers = array(); //BaseEtvaNode foreach ($dc_nodes as $node) { // $node_name = $node->getName(); $state = $node->getState(); $initialize = $node->getInitialize(); $node_qtip = $this->getContext()->getI18N()->__(EtvaNodePeer::_STATE_UP_, array('%name%' => $node_name)); switch ($initialize) { case EtvaNode_VA::INITIALIZE_OK: $cls_node = 'active'; break; case EtvaNode_VA::INITIALIZE_PENDING: $cls_node = 'pending'; $node_qtip = $this->getContext()->getI18N()->__(EtvaNodePeer::_INITIALIZE_PENDING_, array('%name%' => $node_name)); break; } if ($state == EtvaNode::NODE_MAINTENANCE_UP) { $cls_node = 'active'; } elseif ($state == EtvaNode::NODE_FAIL_UP) { $cls_node = 'active'; } elseif ($state != EtvaNode::NODE_ACTIVE) { $cls_node = 'no-active'; $node_qtip = $this->getContext()->getI18N()->__(EtvaNodePeer::_STATE_DOWN_, array('%name%' => $node_name)); } $last_message = $node->getLastMessage(); $iconCls = ''; if ($node->getIssparenode()) { $iconCls = 'icon-sparenode'; } switch ($node->getState()) { case EtvaNode::NODE_FAIL_UP: case EtvaNode::NODE_FAIL: $iconCls = 'icon-fail'; break; case EtvaNode::NODE_MAINTENANCE_UP: case EtvaNode::NODE_MAINTENANCE: $iconCls = 'icon-maintenance'; break; } $message_decoded = json_decode($last_message, true); switch ($message_decoded['priority']) { case EtvaEventLogger::ERR: $iconCls = 'icon-error'; break; } if ($message_decoded['message']) { $node_qtip = $this->getContext()->getI18N()->__($message_decoded['message']); } $has_servers_running = false; $aux_servers = array(); foreach ($node->getServers() as $i => $server) { if ($perm_dc or $this->getUser()->hasServerCredential(array('op', $server->getId()))) { $state_server = $server->getState(); $agent_server_port = $server->getAgentPort(); $agent_tmpl = $server->getAgentTmpl(); $vm_state = $server->getVmState(); $vm_is_running = $server->isRunning() ? true : false; $cls_server = 'no-active'; if ($vm_is_running) { $has_servers_running = true; if ($aoncontextmenugent_server_port) { if (!$state_server) { $cls_server = 'some-active'; } else { $cls_server = 'active'; } } else { $cls_server = 'active'; } } else { if ($agent_server_port) { if ($state_server) { $cls_server = 'some-active'; } } } $child_id = 's' . $server->getID(); $srv_qtip = ''; $draggable = $perm_dc ? true : false; $all_shared = $server->isAllSharedLogicalvolumes(); $has_snapshots = $server->hasSnapshots(); $has_disks = $server->hasEtvaServerLogicals(); $has_devs = $server->hasDevices(); $srv_iconCls = $vm_is_running ? 'icon-vm-stat-ok' : 'icon-vm-stat-nok'; $join_cls_server = $cls_server . " " . $srv_iconCls; # check if vm has etasp info $ga_info = $server->getGaInfo(); $ga_obj = json_decode($ga_info); $plone = $ga_obj->etasp ? 1 : 0; $aux_servers[] = array('text' => $server->getName(), 'type' => 'server', 'id' => $child_id, 'node_id' => $node->getID(), 'state' => $state_server, 'agent_tmpl' => $agent_tmpl, 'cls' => $join_cls_server, 'url' => $this->getController()->genUrl('server/view?id=' . $server->getID()), 'vm_state' => $vm_state, 'vm_is_running' => $vm_is_running, 'unassigned' => false, 'all_shared' => $all_shared, 'has_snapshots' => $has_snapshots, 'has_disks' => $has_disks, 'has_devices' => $has_devs, 'leaf' => true, 'draggable' => $perm_dc && $server->canMove(), 'qtip' => $srv_qtip, 'ga_state' => $server->getGaState(), 'ga_info' => $server->getGaInfo(), 'plone' => $plone, 'contextmenu' => $perm_dc); } } //node array fulfilling if (empty($aux_servers)) { if ($perm_dc) { // only show node with empty servers if have permission on that node $aux[] = array('text' => $node_name, 'type' => 'node', 'iconCls' => $iconCls, 'state' => $state, 'id' => $node->getID(), 'initialize' => $initialize, 'url' => $this->getController()->genUrl('node/view?id=' . $node->getID()), 'cluster_id' => $node->getClusterId(), 'can_create_vms' => $node->canCreateVms(), 'children' => $aux_servers, 'expanded' => true, 'qtip' => $node_qtip, 'cls' => 'x-tree-node-collapsed ' . $cls_node, 'contextmenu' => $perm_dc, 'initialize' => $node->getInitialize(), 'sparenodeid' => $sparenode_id, 'has_servers_running' => $has_servers_running, 'sparenodeIsFree' => $sparenode_isFree); } } else { $aux[] = array('text' => $node_name, 'type' => 'node', 'iconCls' => $iconCls, 'state' => $state, 'id' => $node->getID(), 'initialize' => $initialize, 'cls' => $cls_node, 'url' => $this->getController()->genUrl('node/view?id=' . $node->getID()), 'cluster_id' => $node->getClusterId(), 'can_create_vms' => $node->canCreateVms(), 'singleClickExpand' => true, 'qtip' => $node_qtip, 'children' => $aux_servers, 'contextmenu' => $perm_dc, 'initialize' => $node->getInitialize(), 'sparenodeid' => $sparenode_id, 'has_servers_running' => $has_servers_running, 'sparenodeIsFree' => $sparenode_isFree); } } $etva_unassigned_servers = EtvaServerQuery::create()->filterByClusterId($datacenter->getId())->useEtvaServerAssignQuery('ServerAssign', 'LEFT JOIN')->filterByNodeId(null)->endUse()->find(); foreach ($etva_unassigned_servers as $i => $server) { if ($perm_dc or $this->getUser()->hasServerCredential(array('op', $server->getId()))) { $state_server = $server->getState(); $agent_server_port = $server->getAgentPort(); $agent_tmpl = $server->getAgentTmpl(); $vm_state = $server->getVmState(); $vm_is_running = $server->isRunning() ? true : false; $cls_server = 'no-active'; if ($vm_is_running) { $has_servers_running = true; if ($aoncontextmenugent_server_port) { if (!$state_server) { $cls_server = 'some-active'; } else { $cls_server = 'active'; } } else { $cls_server = 'active'; } } else { if ($agent_server_port) { if ($state_server) { $cls_server = 'some-active'; } } } $child_id = 's' . $server->getID(); $srv_qtip = ''; $draggable = $perm_dc ? true : false; $all_shared = false; $has_snapshots = $server->hasSnapshots(); $has_disks = $server->hasEtvaServerLogicals(); $has_devs = $server->hasDevices(); $nodes_toassign_arr = array(); $nodes_toassign = $server->listNodesAssignTo(); foreach ($nodes_toassign as $i => $node) { error_log("NodeAssignTo server id=" . $server->getId() . " name=" . $server->getName() . "id=" . $node->getId() . " name=" . $node->getName() . " per_res=" . $node->getper_res() . " per_mem=" . $node->getper_mem() . " per_cpu=" . $node->getper_cpu()); array_push($nodes_toassign_arr, $node->getId()); } $srv_iconCls = $vm_is_running ? 'icon-vm-stat-ok' : 'icon-vm-stat-nok'; $join_cls_server = $cls_server . " " . $srv_iconCls; # check if vm has etasp info $ga_info = $server->getGaInfo(); $ga_obj = json_decode($ga_info); $plone = $ga_obj->etasp ? 1 : 0; $unassigned_servers[] = array('text' => $server->getName(), 'type' => 'server', 'id' => $child_id, 'node_id' => null, 'state' => $state_server, 'agent_tmpl' => $agent_tmpl, 'cls' => $join_cls_server, 'url' => $this->getController()->genUrl('server/view?id=' . $server->getID()), 'vm_state' => $vm_state, 'vm_is_running' => $vm_is_running, 'unassigned' => true, 'all_shared' => $all_shared, 'has_snapshots' => $has_snapshots, 'has_disks' => $has_disks, 'has_devices' => $has_devs, 'nodes_toassign' => $nodes_toassign_arr, 'leaf' => true, 'draggable' => $draggable, 'qtip' => $srv_qtip, 'ga_state' => $server->getGaState(), 'ga_info' => $server->getGaInfo(), 'plone' => $plone, 'contextmenu' => $perm_dc); } } $unassigned_node_name = $this->getContext()->getI18N()->__('unassigned'); if (empty($unassigned_servers)) { if ($perm_dc) { $aux[] = array('text' => $unassigned_node_name, 'type' => 'unassignednode', 'iconCls' => '', 'state' => 1, 'id' => 0, 'initialize' => 'ok', 'url' => $this->getController()->genUrl('node/viewUnassigned?cluster_id=' . $datacenter->getId()), 'cluster_id' => $datacenter->getId(), 'draggable' => false, 'children' => $unassigned_servers, 'expanded' => true, 'qtip' => '', 'cls' => 'x-tree-node-collapsed ', 'contextmenu' => $perm_dc); } } else { $aux[] = array('text' => $unassigned_node_name, 'type' => 'unassignednode', 'iconCls' => '', 'state' => 1, 'id' => 0, 'initialize' => 'ok', 'url' => $this->getController()->genUrl('node/viewUnassigned?cluster_id=' . $datacenter->getId()), 'cluster_id' => $datacenter->getId(), 'draggable' => false, 'children' => $unassigned_servers, 'qtip' => '', 'cls' => '', 'contextmenu' => $perm_dc); } //datacenter node if ($perm_dc || !empty($aux)) { $aux_datacenter[] = array('text' => $datacenter->getName(), 'type' => 'cluster', 'id' => "d" . $datacenter->getId(), 'singleClickExpand' => true, 'children' => $aux, 'contextmenu' => $show_cluster_contextmenu); } } return $aux_datacenter; }
public function executeJsonListAllocatable(sfWebRequest $request) { $elements = array(); //adding cluster id filter $cid = $request->getParameter('cid'); $nid = $request->getParameter('nid'); $level = $request->getParameter('level'); if (!$level) { $level = 'node'; } //get the $filter = json_decode($request->getParameter('filter'), true); $criteria = new Criteria(); $criteria->add(EtvaPhysicalvolumePeer::ALLOCATABLE, 1); $criteria->add(EtvaPhysicalvolumePeer::PVINIT, 1); foreach ($filter as $field => $value) { $column = EtvaPhysicalvolumePeer::translateFieldName(sfInflector::camelize($field), BasePeer::TYPE_PHPNAME, BasePeer::TYPE_COLNAME); $criteria->add($column, $value); } if ($level == 'cluster') { $etva_cluster = EtvaClusterPeer::retrieveByPK($cid); $etva_pvs = $etva_cluster->getEtvaPhysicalvolumes($criteria); } elseif ($level == 'node') { $etva_node = EtvaNodePeer::retrieveByPK($nid); $etva_pvs = $etva_node->getEtvaNodePhysicalVolumesJoinEtvaPhysicalvolume($criteria); } else { return; } if (!$etva_pvs) { $msg_i18n = $this->getContext()->getI18N()->__(EtvaPhysicalvolumePeer::_NONE_AVAILABLE_); $info = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'info' => $msg_i18n, 'error' => $msg_i18n); if (sfConfig::get('sf_environment') == 'soap') { return json_encode($info); } $error = $this->setJsonError($info); return $this->renderText($error); } if (sfConfig::get('sf_environment') == 'soap') { foreach ($etva_pvs as $elem) { $etva_pv = $elem->getEtvaPhysicalVolume(); $uuid = $etva_pv->getUuid(); $id = $etva_pv->getId(); $name = $etva_pv->getName(); $pv = $etva_pv->getPv(); $elements[$id] = array('id' => $id, 'pv' => $pv, 'name' => $name, 'uuid' => $uuid); } } else { foreach ($etva_pvs as $elem) { if ($level == 'node') { $etva_pv = $elem->getEtvaPhysicalVolume(); } elseif ($level == 'cluster') { $etva_pv = $elem; } $uuid = $etva_pv->getUuid(); $id = $etva_pv->getId(); $name = $etva_pv->getName(); $pv = $etva_pv->getPv(); $elements[] = array('id' => $id, 'pv' => $pv, 'name' => $name, 'uuid' => $uuid); } } $result = array('success' => true, 'total' => count($elements), 'response' => $elements); $return = json_encode($result); if (sfConfig::get('sf_environment') == 'soap') { return $return; } $this->getResponse()->setHttpHeader('Content-type', 'application/json'); return $this->renderText($return); }
/** * returns json array encoded list of vlans * */ public function executeJsonList(sfWebRequest $request) { $isAjax = $request->isXmlHttpRequest(); if (!$isAjax) { return $this->redirect('@homepage'); } $p_cluster_id = $this->getRequestParameter('id'); $p_level = $this->getRequestParameter('level'); if ($p_level) { if (!$p_cluster_id) { $error_msg = 'No cluster id defined.'; $error = array('success' => false, 'error' => $error_msg, 'info' => $error_msg); return $error; } if ($p_level == 'node') { $dc_c = new Criteria(); //convert node id in cluster id $dc_c->add(EtvaNodePeer::ID, $p_cluster_id); $node = EtvaNodePeer::doSelectOne($dc_c); $p_cluster_id = $node->getClusterId(); } elseif ($p_level == 'server') { $dc_c = new Criteria(); //convert server id in cluster id $dc_c->add(EtvaServerPeer::ID, $p_cluster_id, Criteria::EQUAL); $server = EtvaServerPeer::doSelectOne($dc_c); $p_cluster_id = $server->getClusterId(); } elseif ($p_level == 'cluster') { //do nothing } else { error_log('NETWORK:[ERROR] executejsonlist invalid parameters'); } } elseif (!$p_cluster_id) { $defaultCluster = EtvaClusterPeer::retrieveDefaultCluster(); $p_cluster_id = $defaultCluster->getId(); } $c = new Criteria(); $c->add(EtvaVlanPeer::CLUSTER_ID, $p_cluster_id, Criteria::EQUAL); $vlan_nodes = EtvaVlanPeer::doSelect($c); $list = array(); foreach ($vlan_nodes as $vlan) { $list[] = $vlan->toArray(BasePeer::TYPE_FIELDNAME); } $untagged_vlan = EtvaVlanPeer::retrieveUntagged($p_cluser_id); $hasUntagged = 0; if ($untagged_vlan) { $hasUntagged = 1; } $result = array('total' => count($list), 'data' => $list, 'hasUntagged' => $hasUntagged); $result = json_encode($result); if (sfConfig::get('sf_environment') == 'soap') { $soap_result = array(success => true, 'total' => count($list), 'response' => $list); return json_encode($soap_result); } $this->getResponse()->setHttpHeader('Content-type', 'application/json'); return $this->renderText($result); }