$desc ) { if( trim($_POST[$field]) == "" ) { $errors[] = "$desc is required"; } elseif( !is_valid_ip(trim($_POST[$field])) ) { $errors[] = "$desc is not a valid address"; } } if( !is_valid_network_addr($network,$netmask) ) { $errors[] = "The network address does not match the netmask"; } } if( $hostname == "" ) { $errors[] = "Hostname is required"; } if( $ip == "" ) { $errors[] = "IP is required"; } else if ( ! is_valid_ip ($ip)) { $errors []= "Invalid IP $ip"; } if( !empty($errors) ) { drupal_set_error(plc_itemize($errors)); } else { // add new node and its interface $node_fields= array( "hostname"=>$hostname, "model"=>$model ); $site_id= plc_my_site_id(); $node_id= $api->AddNode( intval( $site_id ), $node_fields ); if ( empty($node_id) || ($node_id < 0) ) { drupal_set_error ("AddNode failed - hostname already present, or not valid ?"); } else { // now, try to add the network. $interface_fields= array(); $interface_fields['is_primary']= true; $interface_fields['ip']= $ip; $interface_fields['type']= $_POST['type']; $interface_fields['method']= $method; if (!empty($bwlimit)) $interface_fields['bwlimit']=$bwlimit; if ( $method == 'static' ) { $interface_fields['netmask']= $netmask; $interface_fields['network']= $network; $interface_fields['broadcast']= $broadcast; $interface_fields['gateway']= $gateway; $interface_fields['dns1']= $dns1; if (!empty($dns2)) $interface_fields['dns2']= $dns2; } $interface_id= $api->AddInterface( $node_id, $interface_fields); if ($interface_id > 0) { drupal_set_message ("Node successfully created"); drupal_set_message ("Download a boot image in the 'Download' drop down below"); plc_redirect (l_node($node_id)); } else { // if AddInterface fails, we have the node created, // but no primary interface is present. // The primary interface can be added later, // but take a look at the possible Methods, // if we specify TUN/TAP Method we will have // an error on download of the configuration file drupal_set_message ("Node created"); drupal_set_error ("But without an interface"); drupal_set_error ("Please review manually"); plc_redirect (l_node($node_id)); } } } } // Print header require_once 'plc_drupal.php'; include 'plc_header.php'; // include javacsript helpers require_once 'prototype.php'; drupal_set_html_head (' '); $sites=$api->GetSites(array(plc_my_site_id())); $site=$sites[0]; $sitename=$site['name']; drupal_set_title('Add a new node in site "' . $sitename . '"'); // defaults $method = $_POST['method']; if( ! $method ) $method= "static"; $model = $_POST['model']; if( ! $model ) $model= "Custom"; print <<< EOF

This page lets you declare a new machine in your site. This must be done before the machine is turned on, as it will allow you to download a boot image when complete for this node.
You must enter an IP address even if you use DHCP.

EOF; $details=new PlekitDetails($has_privileges); // xxx hardwire network type for now $form_variables = array('type'=>"ipv4"); //$form=$details->form_start(l_actions(),$form_variables); $form=$details->form_start('/db/nodes/node_add.php',$form_variables); $details->start(); $details->th_td("Hostname",$hostname,"hostname"); $details->th_td("Model",$model,"model"); $method_select = $form->select_html ("method", interface_method_selectors($api,$method,true), array('id'=>'method', 'onChange'=>'updateMethodFields()')); $details->th_td("Method",$method_select,"method", array('input_type'=>'select','value'=>$interface['method'])); // dont display the 'type' selector as it contains only ipv4 //>>> GetNetworkTypes() //[u'ipv4'] $details->th_td("IP address",$ip,"ip",array('width'=>15, 'onKeyup'=>'networkHelper()', 'onChange'=>'networkHelper()')); $details->th_td("Netmask",$netmask,"netmask",array('width'=>15, 'onKeyup'=>'networkHelper()', 'onChange'=>'networkHelper()')); $details->th_td("Network",$network,"network",array('width'=>15)); $details->th_td("Broadcast",$broadcast,"broadcast",array('width'=>15)); $details->th_td("Gateway",$gateway,"gateway",array('width'=>15, 'onChange'=>'subnetChecker("gateway",false)')); $details->th_td("DNS 1",$dns1,"dns1",array('width'=>15, 'onChange'=>'subnetChecker("dns1",false)')); $details->th_td("DNS 2",$dns2,"dns2",array('width'=>15, 'onChange'=>'subnetChecker("dns2",true)')); $details->space(); $details->th_td("BW limit (bps)",$bwlimit,"bwlimit",array('width'=>11)); // the buttons $add_button = $form->submit_html ("add-node","Add New Node", array('onSubmit'=>'interfaceSubmit()')); $details->tr($add_button,"right"); $details->end(); $form->end(); // Print footer include 'plc_footer.php'; ?>