From: Thierry Parmentelat Date: Tue, 4 Oct 2011 11:03:34 +0000 (+0200) Subject: admins can change nodes to reservable/regular in the node page X-Git-Tag: plewww-4.3-68~7 X-Git-Url: http://git.onelab.eu/?p=plewww.git;a=commitdiff_plain;h=9d5da0d9968a075070eb8c5b75d8267d082bec31 admins can change nodes to reservable/regular in the node page --- diff --git a/planetlab/common/actions.php b/planetlab/common/actions.php index dd6a661..8c4beab 100644 --- a/planetlab/common/actions.php +++ b/planetlab/common/actions.php @@ -49,7 +49,7 @@ $known_actions []= "node-boot-state"; $known_actions []= "delete-node"; // expects: node_id $known_actions []= "update-node"; -// expects: node_id, hostname, model +// expects: node_id, hostname, model, node_type $known_actions []= "attach-pcu"; // expects: node_id, pcu_id, port (pcu_id <0 means detach) $known_actions []= "reboot-node-with-pcu"; @@ -349,8 +349,9 @@ switch ($action) { $node_id=intval($_POST['node_id']); $hostname= $_POST['hostname']; $model= $_POST['model']; + $node_type= $_POST['node_type']; - $fields= array( "hostname"=>$hostname, "model"=>$model ); + $fields= array( "hostname"=>$hostname, "model"=>$model, "node_type"=>$node_type ); $api->UpdateNode( $node_id, $fields ); $error= $api->error(); diff --git a/planetlab/includes/plc_functions.php b/planetlab/includes/plc_functions.php index 8de54c5..d40de74 100644 --- a/planetlab/includes/plc_functions.php +++ b/planetlab/includes/plc_functions.php @@ -511,12 +511,21 @@ function plc_redirect ($url) { } //////////////////// the options for an nodetype - suitable for plekit/form -function node_type_selectors ($api,$nodetype) { - $builtin_types = array ( "regular" => "Regular/Shared", - "reservable" => "Reservable (requires to get leases)"); - foreach ($builtin_types as $value=>$display) { +global $builtin_node_types; +$builtin_node_types = array ( "regular" => "Regular/Shared", + "reservable" => "Reservable (requires to get leases)"); +function node_type_display ($api, $node_type) { + global $builtin_node_types; + $val=$builtin_node_types[$node_type]; + if ( ! $val) $val="??undefined??"; + return $val; +} + +function node_type_selectors ($api,$node_type) { + global $builtin_node_types; + foreach ($builtin_node_types as $value=>$display) { $selector=array('display'=>$display, 'value'=>$value); - if ($value == $nodetype) $selector['selected']=true; + if ($value == $node_type) $selector['selected']=true; $selectors []= $selector; } return $selectors; diff --git a/planetlab/nodes/node.php b/planetlab/nodes/node.php index 4d8ccb5..f7c5e6f 100644 --- a/planetlab/nodes/node.php +++ b/planetlab/nodes/node.php @@ -42,8 +42,8 @@ $boot_state= $node['boot_state']; $run_level = $node['run_level']; $site_id= $node['site_id']; $model= $node['model']; +$node_type= $node['node_type']; $version= $node['version']; -$node_type = $node['node_type']; // arrays of ids of node info $slice_ids= $node['slice_ids']; @@ -99,7 +99,8 @@ $local_peer= ! $peer_id; // extra privileges to admins, and (pi||tech) on this site -$privileges = (plc_is_admin () && $local_peer) || ( plc_in_site($site_id) && ( plc_is_pi() || plc_is_tech())); +$admin_privileges=(plc_is_admin () && $local_peer); +$privileges = $admin_privileges || ( plc_in_site($site_id) && ( plc_is_pi() || plc_is_tech())); $tabs=array(); // available actions @@ -146,6 +147,15 @@ $details->form_start(l_actions(),array("action"=>"update-node", "node_id"=>$node //$details->th_td("Hostname",$hostname,"hostname"); $details->th_td("Hostname",$hostname); $details->th_td("Model",$model,"model"); +// reservation ? +if ( $admin_privileges) { + $reservation_value = $details->form->select_html("node_type", + node_type_selectors ($api, $node_type)); +} else { + $reservation_value = node_type_display ($api,$node_type); +} +$details->th_td("Reservation",$reservation_value); + $details->tr_submit("submit","Update Node"); $details->form_end(); if ($privileges) $details->space(); @@ -276,7 +286,6 @@ I've experienced a problem rebooting $hostname with the pcu_id $pcu_id; $details->space(); //////////////////// type & version -$details->th_td("Type",$node_type); $details->th_td("Version",$version); // let's use plc_objects $Node = new Node($node);