add a non-primary interface : user to select for virtual or physical interface (set...
[plewww.git] / planetlab / common / actions.php
index a2dfd11..c93a326 100644 (file)
@@ -108,6 +108,14 @@ $known_actions []= "delete-node-tags";
 $known_actions []= "delete-interface-tags";
 //     expects:        interface_id & interface_tag_ids
 
+//////////////////////////////////////// nodegroups
+$known_actions []= "update-nodegroup";
+//     expects nodegroup_id groupname value
+$known_actions []= "add-nodegroup";
+//     expects groupname, tag_type_id, value
+$known_actions []= 'delete-nodegroups';
+//     expects nodegroup_ids
+
 ////////////////////////////////////////////////////////////
 $interface_details= array ('method','type', 'ip', 'gateway', 'network', 
                           'broadcast', 'netmask', 'dns1', 'dns2', 
@@ -159,19 +167,23 @@ switch ($action) {
  case 'remove-roles-from-person' : {
    $role_ids=$_POST['role_ids'];
    if ( ! $role_ids) {
-     drupal_set_message("action=$action - No role selected");
-     return;
-   }
-   foreach( $role_ids as $role_id)  {
-     $api->DeleteRoleFromPerson( intval( $role_id ), intval( $person_id ) );
+     drupal_set_error("You have not selected role(s) to remove");
+   } else {
+     foreach( $role_ids as $role_id)  
+       if ( $api->DeleteRoleFromPerson( intval( $role_id ), intval( $person_id ) ) != 1 ) 
+        drupal_set_error ("Could not remove role $role_id from person $person_id");
    }
-   plc_redirect (l_person($person_id));
+   plc_redirect (l_person_roles($person_id));
  }
      
  case 'add-role-to-person' : {
    $role_id=$_POST['role_id'];
-   $api->AddRoleToPerson( intval( $role_id ), intval( $person_id ) );
-   plc_redirect (l_person($person_id));
+   if ( ! $role_id) {
+     drupal_set_error ("You have not selected a role to add");
+   } else if ($api->AddRoleToPerson( intval( $role_id ), intval( $person_id ) ) != 1) {
+     drupal_set_error("Could not add role $role_id to person $person_id");
+   }
+   plc_redirect (l_person_roles($person_id));
  }
 
  case 'enable-person' : {
@@ -385,32 +397,46 @@ switch ($action) {
      drupal_set_error ("Could not delete all selected interfaces, only $counter were removed");
    plc_redirect(l_node($_POST['node_id']));
  }
+
  case 'new-interface': {
    plc_redirect(l_interface_add($_POST['node_id']));
  }
+
  case 'add-interface': {
-   $node_id=$_POST['node_id'];
+   $node_id=intval($_POST['node_id']);
    foreach ($interface_details as $field) {
      $interface[$field]= $_POST[$field];
+     // these must be integers
      if( in_array( $field, array( 'bwlimit', 'node_id' ) ) ) {
-       $interface[$field]= intval( $interface[$field] );
+       if ( empty ($interface[$field]) ) 
+        unset ($interface[$field]);
+       else 
+        $interface[$field]= intval( $interface[$field] );
      }
    }
-   $interface_id =$api->AddInterface( intval( $node_id ), $interface );
-   if ($interface_id >0 ) {
-     $api->begin();
-        $api->AddInterfaceTag($interface_id,"alias",strval($interface_id));
-        $api->AddInterfaceTag($interface_id,"ifname","eth0");
-     list($id1, $id2) = $api->commit();
-     if ( $id1 > 0 && $id2 > 0 ) {
-         drupal_set_message ("Interface $interface_id added into node $node_id");
-     } else {
-         drupal_set_error ("Could not add interface tags to interface $interface_id");
-     }
-   } else {
+   $interface_id =$api->AddInterface( $node_id , $interface );
+   if ($interface_id <= 0 ) {
      drupal_set_error ("Could not create interface");
+     drupal_set_error ($api->error());
+   } else {
+     $ip=$interface['ip'];
+     drupal_set_message ("Interface $ip added into node $node_id");
+     if ($_POST['is-virtual']) {
+       $ifname=$_POST['ifname'];
+       if ($api->AddInterfaceTag($interface_id,"ifname",$ifname) <= 0) 
+        drupal_set_error ("Could not set tag 'ifname'=$ifname");
+       else 
+        drupal_set_message ("Set tag 'ifname'=$ifname");
+       $alias=$_POST['alias'];
+       // deafult to interface_id
+       if ( ! $alias ) $alias=strval($interface_id);
+       if ($api->AddInterfaceTag($interface_id,"alias",$alias) <= 0) 
+        drupal_set_error ("Could not set tag 'alias'=$alias");
+       else 
+        drupal_set_message ("Set tag 'alias'=$alias");
+     }
    }
-   plc_redirect (l_node($node_id));
+   plc_redirect (l_node_interfaces($node_id));
  }
    
  case 'update-interface': {
@@ -635,7 +661,7 @@ Our support team will be glad to answer any question that you might have.
      drupal_set_message ("Removed $count node(s)");
    else
      drupal_set_error ("Could not remove selected nodes");
-   plc_redirect(l_slice($slice_id) . " &show_nodes=true");
+   plc_redirect(l_slice_nodes($slice_id));
    break;
  }
 
@@ -647,7 +673,7 @@ Our support team will be glad to answer any question that you might have.
      drupal_set_message ("Added $count node(s)");
    else
      drupal_set_error ("Could not add all selected nodes");
-   plc_redirect(l_slice($slice_id) . "&show_nodes=true" );
+   plc_redirect(l_slice_nodes($slice_id));
    break;
  }
 
@@ -717,6 +743,7 @@ Our support team will be glad to answer any question that you might have.
    else 
      drupal_set_error ("Could not update tag type $tag_type_id\n".$api->error());
    plc_redirect(l_tag($tag_type_id));
+   break;
  }
 
  case 'add-tag-type': {
@@ -740,6 +767,7 @@ Our support team will be glad to answer any question that you might have.
    else
      drupal_set_error ("Could not create tag type $tagname");
    plc_redirect( l_tags());
+   break;
  }
 
  case 'delete-tag-types': {
@@ -811,9 +839,9 @@ Our support team will be glad to answer any question that you might have.
    }
    
    if ($node_mode)
-     plc_redirect (l_node($node_id));
+     plc_redirect (l_node_tags($node_id));
    else
-     plc_redirect (l_interface($interface_id));
+     plc_redirect (l_interface_tags($interface_id));
  }
 
  case 'delete-node-tags' : 
@@ -848,11 +876,73 @@ Our support team will be glad to answer any question that you might have.
    else
      drupal_set_error ("Could not delete all selected tags, only $counter were removed");
    if ($node_mode)
-     plc_redirect(l_node($_POST['node_id']));
+     plc_redirect(l_node_tags($_POST['node_id']));
+   else
+     plc_redirect(l_interface_tags($_POST['interface_id']));
+ }
+
+//////////////////////////////////////// nodegroups
+ case 'update-nodegroup': {
+   $nodegroup_id = $_POST['nodegroup_id'];
+   $groupname = $_POST['groupname'];
+   $value = $_POST['value'];
+
+   $fields=array();
+   $fields['groupname']=$groupname;
+   $fields['value']=$value;
+   if ( $api->UpdateNodeGroup($nodegroup_id,$fields) == 1) 
+     drupal_set_message ('Nodegroup updated');
+   else 
+     drupal_set_error ("Could not update nodegroup $groupname");
+   
+   plc_redirect(l_nodegroup($nodegroup_id));
+
+ }
+
+ case 'add-nodegroup': {
+   $groupname=$_POST['groupname'];
+   if ( ! $groupname ) {
+     drupal_set_error ('Empty groupname');
+     plc_redirect (l_nodegroups());
+   }
+   $tag_type_id=intval($_POST['tag_type_id']);
+   if ( ! $tag_type_id ) {
+     drupal_set_error ('You must select a tag in the dropdown list');
+     plc_redirect (l_nodegroups());
+   }
+   $value=$_POST['value'];
+   if ( ! $value ) {
+     drupal_set_message ("Empty value.. let's see ..");
+   }
+   if ( $api->AddNodeGroup ($groupname,$tag_type_id,$value) > 0) 
+     drupal_set_message ("Nodegroup $groupname created");
    else
-     plc_redirect(l_interface($_POST['interface_id']));
+     drupal_set_error ("Could not create nodegroup $groupname");
+
+   plc_redirect (l_nodegroups());
+   break;
  }
 
+ case 'delete-nodegroups': {
+   $nodegroup_ids=$_POST['nodegroup_ids'];
+   if ( ! $nodegroup_ids ) {
+     drupal_set_message("action=delete-nodegroups - No group selected");
+     plc_redirect(l_nodegroups());
+   }
+   $success=true;
+   $counter=0;
+   foreach ($nodegroup_ids as $nodegroup_id) 
+     if ($api->DeleteNodeGroup(intval($nodegroup_id)) != 1) 
+       $success=false;
+     else
+       $counter++;
+   if ($success) 
+     drupal_set_message ("Deleted $counter group(s)");
+   else
+     drupal_set_error ("Could not delete all selected groups, only $counter were removed");
+   plc_redirect (l_nodegroups());
+   break;
+ }
 
 ////////////////////////////////////////