add support for adding/deleting slice tags.
authorBarış Metin <Talip-Baris.Metin@sophia.inria.fr>
Fri, 27 Mar 2009 15:31:50 +0000 (15:31 +0000)
committerBarış Metin <Talip-Baris.Metin@sophia.inria.fr>
Fri, 27 Mar 2009 15:31:50 +0000 (15:31 +0000)
planetlab/common/actions.php
planetlab/slices/slice.php

index 605c15f..010be21 100644 (file)
@@ -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, 
index 82e48c6..de6098e 100644 (file)
@@ -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);
  }