From 4f521f3014f482102ee0689fa118ba5647306e21 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bar=C4=B1=C5=9F=20Metin?= Date: Fri, 27 Mar 2009 15:31:50 +0000 Subject: [PATCH] add support for adding/deleting slice tags. --- planetlab/common/actions.php | 47 +++++++++++++++- planetlab/slices/slice.php | 105 ++++++++++++++++++++++++++++++++--- 2 files changed, 144 insertions(+), 8 deletions(-) diff --git a/planetlab/common/actions.php b/planetlab/common/actions.php index 605c15f..010be21 100644 --- a/planetlab/common/actions.php +++ b/planetlab/common/actions.php @@ -81,6 +81,10 @@ $known_actions []= 'remove-nodes-from-slice'; // expects: slice_id & node_ids $known_actions []= 'add-nodes-in-slice'; // expects: slice_id & node_ids +$known_actions []= 'delete-slice-tags'; +// expects: slice_tag_id +$known_actions []= 'add-slice-tag'; +// expects: slice_id & tag_type_id & node_id & nodegroup_id //////////////////////////////////////// tag types $known_actions []= "update-tag-type"; @@ -561,6 +565,47 @@ switch ($action) { break; } + case 'delete-slice-tags': { + $slice_id = intval($_POST['slice_id']); + $slice_tag_ids = array_map("intval", $_POST['slice_tag_ids']); + $count = 0; + $success = true; + foreach($slice_tag_ids as $slice_tag_id) { + if ($api->DeleteSliceTag($slice_tag_id)) $count += 1; + else { + drupal_set_error("Could not delete slice tag: slice_tag_id = $slice_tag_id"); + $success = false; + } + } + if ($success) + drupal_set_message ("Deleted $count slice tag(s)"); + plc_redirect(l_slice($slice_id) . "&show_tags=true" ); + break; + } + + case 'add-slice-tag': { + $slice_id = intval($_POST['slice_id']); + $tag_type_id = intval($_POST['tag_type_id']); + $value = $_POST['value']; + $node_id = intval($_POST['node_id']); + $nodegroup_id = intval($_POST['nodegroup_id']); + + $result = null; + if ($node_id) { + $result = $api->AddSliceTag($slice_id, $tag_type_id, $value, $node_id); + } elseif ($nodegroup_id) { + $result = $api->AddSliceTag($slice_id, $tag_type_id, $value, null, $nodegroup_id); + } else { + $result = $api->AddSliceTag($slice_id, $tag_type_id, $value); + } + if ($result) + drupal_set_message ("Added slice tag."); + else + drupal_set_error("Could not add slice tag"); + plc_redirect(l_slice($slice_id) . "&show_tags=true" ); + break; + } + //////////////////////////////////////////////////////////// tag types case 'update-tag-type': { @@ -569,7 +614,7 @@ switch ($action) { $tagname = $_POST['tagname']; $min_role_id= intval( $_POST['min_role_id'] ); $description= $_POST['description']; - $category= $_POST['category']; + $category= $_POST['category']; // make tag_type_fields dict $tag_type_fields= array( "min_role_id" => $min_role_id, diff --git a/planetlab/slices/slice.php b/planetlab/slices/slice.php index 82e48c6..de6098e 100644 --- a/planetlab/slices/slice.php +++ b/planetlab/slices/slice.php @@ -401,8 +401,12 @@ $headers=array(); $headers['hostname']='string'; $headers['arch']='string'; if ($privileges) $headers[plc_delete_icon()]="none"; -$table=new PlekitTable('nodes',$headers,'0', - array('notes_area'=>false)); + +$table_options = array('notes_area'=>false, + 'search_width'=>15, + 'pagesize'=>20); +$table=new PlekitTable('nodes',$headers,'0',$table_options); + $form=new PlekitForm(l_actions(),array('slice_id'=>$slice['slice_id'])); $form->start(); $table->start(); @@ -443,11 +447,8 @@ if ($privileges) { $headers['hostname']='string'; $headers['arch']='string'; $headers['Add']="none"; - $options = array('notes_area'=>false, - 'search_width'=>15, - 'pagesize'=>20); - $table=new PlekitTable('add_nodes',$headers,'1',$options); + $table=new PlekitTable('add_nodes',$headers,'1', $table_options); $form=new PlekitForm(l_actions(), array('slice_id'=>$slice['slice_id'])); $form->start(); @@ -472,8 +473,98 @@ if ($privileges) { } $toggle->end(); -//////////////////// tags +//////////////////////////////////////////////////////////// Tags +if ( $local_peer ) { + $tags=$api->GetSliceTags (array('slice_id'=>$slice_id)); + function get_tagname ($tag) { return $tag['tagname'];} + $tagnames = array_map ("get_tagname",$tags); + + $toggle = new PlekitToggle ('slice-tags',count_english_warning($tags,'tag'), + array('bubble'=>'Inspect and set tags on tat slice', + 'visible'=>get_arg('show_tags',false))); + $toggle->start(); + + $headers=array( + "Name"=>"string", + "Value"=>"string", + "Node"=>"string", + "NodeGroup"=>"string"); + if ($privileges) $headers[plc_delete_icon()]="none"; + + $table_options=array("notes_area"=>false,"pagesize_area"=>false,"search_width"=>10); + $table=new PlekitTable("slice_tags",$headers,'0',$table_options); + $form=new PlekitForm(l_actions(), + array('slice_id'=>$slice['slice_id'])); + $form->start(); + $table->start(); + if ($tags) { + foreach ($tags as $tag) { + $node_name = "ALL"; + if ($tag['node_id']) { + $nodes = $api->GetNodes(array('node_id'=>$tag['node_id'])); + if($nodes) { + $node = $nodes[0]; + $node_name = $node['hostname']; + } + } + $nodegroup_name="n/a"; + if ($tag['nodegroup_id']) { + $nodegroup=$api->GetNodeGroups(array('nodegroup_id'=>$tag['nodegroup_id'])); + if ($nodegroup) { + $nodegroup = $nodegroup[0]; + $nodegroup_name = $nodegroup['groupname']; + } + } + $table->row_start(); + $table->cell(l_tag_obj($tag)); + $table->cell($tag['value']); + $table->cell($node_name); + $table->cell($nodegroup_name); + if ($privileges) $table->cell ($form->checkbox_html('slice_tag_ids[]',$tag['slice_tag_id'])); + $table->row_end(); + } + } + if ($privileges) { + $table->tfoot_start(); + $table->row_start(); + $table->cell($form->submit_html ("delete-slice-tags","Remove selected"), + array('hfill'=>true,'align'=>'right')); + $table->row_end(); + + $table->row_start(); + function tag_selector ($tag) { + return array("display"=>$tag['tagname'],"value"=>$tag['tag_type_id']); + } + $all_tags= $api->GetTagTypes( array ("category"=>"slice*"), array("tagname","tag_type_id")); + $selector_tag=array_map("tag_selector",$all_tags); + + function node_selector($node) { + return array("display"=>$node["hostname"],"value"=>$node['node_id']); + } + $all_nodes = $api->GetNodes( array ("node_id" => $slice['node_ids']), array("hostname","node_id")); + $selector_node=array_map("node_selector",$all_nodes); + + function nodegroup_selector($ng) { + return array("display"=>$ng["groupname"],"value"=>$ng['nodegroup_id']); + } + $all_nodegroups = $api->GetNodeGroups( array("groupname"=>"*"), array("groupname","nodegroup_id")); + $selector_nodegroup=array_map("nodegroup_selector",$all_nodegroups); + + $table->cell($form->select_html("tag_type_id",$selector_tag,array('label'=>"Choose Tag"))); + $table->cell($form->text_html("value","",array('width'=>8))); + $table->cell($form->select_html("node_id",$selector_node,array('label'=>"All Nodes"))); + $table->cell($form->select_html("nodegroup_id",$selector_nodegroup,array('label'=>"No Nodegroup"))); + $table->cell($form->submit_html("add-slice-tag","Set Tag"),array('columns'=>2,'align'=>'left')); + $table->row_end(); + } + + $form->end(); + $table->end(); + $toggle->end(); +} + +//////////////////////// renew slice if ($local_peer ) { if ( ! $renew_visible) renew_area ($slice,$site,false); } -- 2.47.0