コード例 #1
0
 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;
     }
 }
コード例 #2
0
ファイル: EtvaVlanForm.class.php プロジェクト: ketheriel/ETVA
 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)))));
 }
コード例 #3
0
ファイル: EtvaNodePeer.php プロジェクト: ketheriel/ETVA
 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);
     }
 }
コード例 #5
0
ファイル: actions.class.php プロジェクト: ketheriel/ETVA
 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);
 }
コード例 #6
0
ファイル: actions.class.php プロジェクト: ketheriel/ETVA
 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);
 }
コード例 #7
0
ファイル: EtvaNode_VA.class.php プロジェクト: ketheriel/ETVA
 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;
 }
コード例 #8
0
ファイル: actions.class.php プロジェクト: ketheriel/ETVA
 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);
 }
コード例 #9
0
ファイル: actions.class.php プロジェクト: ketheriel/ETVA
 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;
 }
コード例 #10
0
ファイル: actions.class.php プロジェクト: ketheriel/ETVA
 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);
 }
コード例 #11
0
ファイル: actions.class.php プロジェクト: ketheriel/ETVA
 /**
  * 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);
 }