4 require_once 'plc_login.php';
6 // Get session and API handles
7 require_once 'plc_session.php';
11 require_once 'plc_functions.php';
12 require_once 'details.php';
13 require_once 'table.php';
14 require_once 'toggle.php';
16 //plc_debug('POST',$_POST);
18 // if not a PI or admin then redirect to slice index
19 $has_privileges = plc_is_admin() || plc_is_pi();
20 if ( ! $has_privileges ) {
21 drupal_set_error("Insufficient privilege to add a slice");
22 header( "index.php" );
26 // find out which site the slice should be added to
27 // without site_id set in GET, we use the first site that this user is in
28 if (isset($_GET['site_id'])) {
29 $site_id=intval($_GET['site_id']);
30 } else if (isset ($_POST['site_id'])) {
31 $site_id=intval($_POST['site_id']);
33 $site_id=plc_my_site_id();
36 //////////////////// action
37 if ( $_POST['add-slice'] ) {
40 $instantiation= $_POST['instantiation'];
41 $name= $_POST['name'];
42 $description= $_POST['description'];
43 $person_ids = $_POST['person_ids'];
47 $sites=$api->GetSites(array('site_id'=>$site_id));
49 drupal_set_error("Cannot find site_id $site_id");
53 $base=$site['login_base'] . '_';
56 if( $name == $base ) {
57 drupal_set_error("You must enter a name for your slice");
59 } else if (strpos($name,$base) != 0) {
60 drupal_set_error("Slice name $name should begin with $base");
63 // make sure slice name doesnt exist
64 $slices = $api->GetSlices( array( $name ), array( "slice_id" ) );
65 if ( count($slices) != 0) {
66 drupal_set_error("Slice name $name already in use, please choose another");
71 if ( ($url == "http://") || ( $url=="" ) ) {
72 drupal_set_error("You must enter a URL for your slice's info");
76 if( $description == "" ) {
77 drupal_set_error("Your must enter a description for you slice.");
81 // if no errors then add
83 $fields= array( "url" => $url,
84 "instantiation" => $instantiation,
86 "description" => $description );
88 $slice_id= $api->AddSlice( $fields );
91 drupal_set_message ("Slice $slice_id created");
92 if (isset($_POST['omf-control'])) {
93 if ($api->SetSliceOmfControl($slice_id,'yes') != 'yes') {
94 drupal_set_error("Could not set the 'omf_control' tag on newly created slice...");
96 drupal_set_message("Successfully set the 'omf_control' tag on slice");
104 foreach ($person_ids as $person_id) {
105 $person_id=intval($person_id);
106 if ($api->AddPersonToSlice($person_id,$slice_id) != 1) {
107 drupal_set_error("Could not add person $person_id in slice :" . $api->error());
114 drupal_set_message ("Added $counter person(s)");
116 drupal_set_error ("Could not add all selected persons, only $counter were added");
118 plc_redirect(l_slice($slice_id) );
120 drupal_set_error("Could not create slice $name " . $api->error() );
126 //////////////////// still here : either it's a blank form or something was wrong
129 require_once 'plc_drupal.php';
130 include 'plc_header.php';
132 $sites=$api->GetSites(array($site_id));
134 $sitename=$site['name'];
135 if ( ! $_POST['name'])
136 $base= $site['login_base'] ."_";
138 // propose to add all 'reachable' persons
139 $site_person_ids=$site['person_ids'];
140 $persons_filter=array("person_id"=>$site_person_ids,
142 $persons=$api->GetPersons($persons_filter,array('email','enabled','first_name','last_name','person_id'));
144 drupal_set_title('Create slice in site "' . $sitename . '"');
147 $url = $_POST['url'];
148 if( !$url ) $url= "http://";
150 // check for errors and set error styles
152 $name_error= " class='plc-warning'";
155 $url_error= " class='plc-warning'";
157 if( $error['description'] )
158 $desc_error= " class='plc-warning'";
161 // is there a need to consider several sites ?
162 $multiple_sites=false;
163 $site_columns=array('name','login_base','site_id');
164 if (plc_is_admin ()) {
165 $multiple_sites=true;
166 $filter=array('-SORT'=>'name');
167 } else if (count (plc_my_site_ids()) > 1) {
168 $multiple_sites=true;
169 $filter=array('-SORT'=>'name','site_id'=>plc_my_site_ids());
172 if ($multiple_sites) {
173 print "<div id='create-slice-in-site'>";
174 $other_sites=$api->GetSites($filter,$site_columns);
176 foreach ($other_sites as $other_site) {
177 $selector=array('display'=>$other_site['name'],
178 'value'=>$other_site['site_id']);
179 if ($other_site['site_id']==$site_id) $selector['selected']='selected';
180 $selectors []= $selector;
183 $site_form = new PleKitForm (l_slice_add(),array(),array('method'=>'get'));
185 print $site_form->label_html('site_id','Or choose some other site');
186 print $site_form->select_html('site_id',$selectors,array('autosubmit'=>true,
187 'id'=>'create-slice-choose-site'));
193 <div class='create-slice-instantiations'>
194 <p>You <span class='bold'>must</span> provide a short description,
195 as well as a link to a project website, before creating it.
197 <br/> Please make sure to provide reasonable details on <span class='bold'>
198 the kind of traffic</span>, and <span class='bold'>copyrights</span> if relevant.
199 Do <span class='bold'>not</span> provide bogus information; if a complaint is lodged against
200 your slice and your PlanetLab Operations Center is unable to determine what the normal behavior
201 of your slice is, your slice may be deleted to resolve the complaint.</p>
203 <p><span class='bold'>NOTE</span>: All PlanetLab users are <span class='bold'>strongly</span>
204 encouraged to join the PlanetLab
205 <a href='https://lists.planet-lab.org/mailman/listinfo/users'>Users</a>
206 mailing list. Most questions about running software on PlanetLab can be answered by
207 posting to this list.
208 <br/>Site administrators often use this list to post announcements about service outages.
209 New software releases and available services are announced here as well.
214 $toggle = new PlekitToggle ('create-slice-details','Slice Details',
215 array ('visible'=>get_arg('show_slice',true)));
216 $details = new PlekitDetails(TRUE);
218 $form_variables = array('site_id'=>plc_my_site_id());
219 $form = $details -> form_start("/db/slices/slice_add.php",$form_variables);
220 print $form->hidden_html("site_id",$site_id);
225 $running=count($site['slice_ids']);
226 $max=$site['max_slices'];
227 $allocated = " $running running / $max max";
228 if ($running >= $max) $allocated = plc_warning_html($allocated);
229 $details->th_td("Allocated slices",$allocated);
230 $details->th_td("Name",$name ? $name : $base, "name");
231 $details->th_td("URL",$url,"url");
232 $details->th_td("Description",$description,"description",
233 array('input_type'=>'textarea',
234 'width'=>50,'height'=>5));
235 $selectors=array(array('display'=>"PLC",'value'=>'plc-instantiated'),
236 array('display'=>"Delegated",'value'=>'delegated'),
237 array('display'=>"Controller",'value'=>'nm-controller'),
238 array('display'=>"None",'value'=>'not-instantiated'));
240 $instantiation_select = $form->select_html ("instantiation", $selectors);
241 $details->th_td("Instantiation",$instantiation_select,"instantiation",
242 array('input_type'=>'select', 'value'=>$instantiation));
244 // display the current settings if any (like, we've screwed up the first time)
245 if (isset($_POST['omf-control'])) {
246 $omf_options=array('checked'=>'checked');
248 $omf_options=array();
250 $details->th_td("OMF friendly",
251 $form->checkbox_html('omf-control','yes',$omf_options));
253 $instantiation_text = <<< EOF
254 <div class='create-slice-instantiations'>
255 <p>There are four possible "instantiation" states for a slice.</p>
257 <li> <span class='bold'>PLC</span> creates a slice with default settings. </li>
258 <li><span class='bold'>Delegated</span> creates a ticket to use on each node. </li>
259 <li><span class='bold'>Controller</span> creates a slice on all nodes to manipulate Delegated slices. </li>
260 <li><span class='bold'>None</span> allows you to reserve a slice name; you may instantiate the slice later.</li>
262 <p>PLC instantiated slices can be defined as <span class='bold'>OMF friendly</span>,
263 in which case slivers come with the OMF <span class='bold'>Resource Controller</span> pre-installed and pre-configured.
264 Such slivers can then be easily managed through a centralized tool, the OMF Experiment Controller.
265 Using these <a href="http://omf.mytestbed.net">OMF tools</a>, a user can describe, instrument,
266 and automatically execute their experiments across many slivers.
267 Please refer to <a href="http://mytestbed.net/wiki/omf/OMF_User_Guide">the OMF User Guide</a>
268 to learn more on how to use this feature.
273 $details->tr($instantiation_text);
279 $title = count($persons) . " people can be added in slice";
280 $toggle=new PlekitToggle ('create-slice-persons',$title,
281 array('visible'=>get_arg('show_persons',true)));
285 $headers['email']='string';
286 $headers['first']='string';
287 $headers['last']='string';
288 $headers['+']='none';
289 $table = new PlekitTable ('persons_in_slice',$headers,0);
291 foreach ($persons as $person) {
293 $table->cell($person['email']);
294 $table->cell($person['first_name']);
295 $table->cell($person['last_name']);
296 $table->cell ($form->checkbox_html('person_ids[]',$person['person_id']));
303 $add_button = $form->submit_html ("add-slice","Create Slice");
304 print ("<div id='slice_add_button'> $add_button </div>");
309 include 'plc_footer.php';