function update_user_keys_on_slivers($sa_url, $signer, $slice_id, $slice_urn, $members_to_add, $members_to_change, $members_to_remove) { $username = $signer->username; $ma_url = sa_to_ma_url($sa_url); $am_urls = array(); // Get list of aggregates for slice $aggs_for_slice = aggregates_in_slice($sa_url, $signer, $slice_urn); // error_log("SLIVER_INFO.RES = " . print_r($aggs_for_slice, true)); foreach ($aggs_for_slice as $agg_info) { if (!array_key_exists(SERVICE_ATTRIBUTE_TAG, $agg_info)) { continue; } $agg_attributes = $agg_info[SERVICE_ATTRIBUTE_TAG]; $am_type = $agg_attributes[SERVICE_ATTRIBUTE_AM_TYPE]; if ($am_type != SERVICE_ATTRIBUTE_INSTAGENI_AM) { continue; } // This call only works for IG/PG racks $am_url = $agg_info[SR_TABLE_FIELDNAME::SERVICE_URL]; $am_urls[] = $am_url; } // error_log("AM_URLS = " . print_r($am_urls, true)); // If there are no AM URLs (e.g. no IG/PG AMs), then nothing to do here. Bail. if (count($am_urls) < 1) { return True; } // Generate slice_users list of dictionaries: [{"urn" : urn, "keys" : [key1, key2]}, ...] $slice_users_list = array(); $slice_members = get_slice_members($sa_url, $signer, $slice_id); // error_log("MEMBERS = " . print_r($slice_members, true)); foreach ($slice_members as $member_info) { $member_id = $member_info[MA_MEMBER_TABLE_FIELDNAME::MEMBER_ID]; $member_urn = get_member_urn($ma_url, $signer, $member_id); $keys_res = lookup_public_ssh_keys($ma_url, $signer, $member_id); // error_log("MEMBER_ID = " . print_r($member_id, true)); // error_log("KEYS_RES = " . print_r($keys_res, true)); $member_public_keys = array(); foreach ($keys_res as $key_info) { $public_key = $key_info[MA_SSH_KEY_TABLE_FIELDNAME::PUBLIC_KEY]; $member_public_keys[] = $public_key; } $member_entry = array('urn' => $member_urn, 'keys' => $member_public_keys); $slice_users_list[] = $member_entry; } // For each removed member, add an empty entry to list (to remove their SSH keys) foreach ($members_to_remove as $member_to_remove) { $member_entry = array('urn' => $member_to_remove, 'keys' => array()); $slice_users_list[] = $member_entry; } $slice_users = array('geni_users' => $slice_users_list); // error_log("GENI_USERS = " . print_r($slice_users, true)); // invoke omni to call the geni_update_users POA $slice_users_json = json_encode($slice_users); $slice_users_filename = writeDataToTempFile($slice_users_json); $args = array("--optionsfile", $slice_users_filename, "poa", $slice_urn, 'geni_update_users'); $res = invoke_omni_function($am_urls, $signer, $args, array(), 0, 0, false, NULL, 3); // error_log("Update_user_keys_on_slivers.RES = " . print_r($res, true)); // Clean up JSON file and invocation directory unlink($slice_users_filename); return $res; }
function get_aggregate_info($slice, $signer, $sa_url) { $aggregates = aggregates_in_slice($sa_url, $signer, $slice[SA_SLICE_TABLE_FIELDNAME::SLICE_URN]); $aggregate_info = "<b style='text-decoration: underline;'>Aggregates</b><br>"; foreach ($aggregates as $aggregate) { $aggregate_info .= $aggregate['service_name'] . ": " . $aggregate['service_description'] . "<br>"; } if (count($aggregates) == 0) { $aggregate_info .= "<i>No aggregates for this slice</i>"; } return $aggregate_info; }
if ($am_id != '') { error_log(": invalid am_id {$am_id} from REQUEST"); $am_id = null; $ams = array(); } } //$all_aggs = $ams; } else { if (array_key_exists('slice_id', $_REQUEST)) { /* Get all aggregates in the sliver info data for the given slice */ // User hasn't been loaded, so that's first $user = geni_loadUser(); // Get the slice if (!isset($sa_url)) { $sa_url = get_first_service_of_type(SR_SERVICE_TYPE::SLICE_AUTHORITY); } $slice_id = $_REQUEST['slice_id']; $slice = lookup_slice($sa_url, $user, $slice_id); // If no slice, set $ams = [] $slice_urn = $slice[SA_ARGUMENT::SLICE_URN]; // Get the AMs $ams = aggregates_in_slice($sa_url, $user, $slice_urn); } else { $ams = get_services_of_type(SR_SERVICE_TYPE::AGGREGATE_MANAGER); } } $agg_array = get_am_array($ams); // Set headers for json header("Cache-Control: public"); header("Content-Type: application/json"); print json_encode($agg_array);