Skip to content

Commit 22f6208

Browse files
authored
Merge pull request GENI-NSF#1706 from tcmitchell/iss1393-update-keys
Update SSH keys on existing resources
2 parents a59d071 + be6c658 commit 22f6208

11 files changed

+380
-89
lines changed

CHANGES.md

+4
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,12 @@
44

55
## Changes
66

7+
* Provide a way to update SSH keys on existing resources
8+
([#1393](https://github.com/GENI-NSF/geni-portal/issues/1393))
79
* Add some notes to geni-fetch-aggmon for testing
10+
([#1703](https://github.com/GENI-NSF/geni-portal/issues/1703))
811
* Update the Jacks URL per Emulab's request
12+
([#1704](https://github.com/GENI-NSF/geni-portal/issues/1704))
913

1014
## Installation Notes
1115

geni-portal.spec

+4
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,7 @@ rm -rf $RPM_BUILD_ROOT
346346
%{webdir}/secure/do-renew.php
347347
%{webdir}/secure/do-slice-search.php
348348
%{webdir}/secure/do-update-user-preferences.php
349+
%{webdir}/secure/do-update-keys.php
349350
%{webdir}/secure/do-upload-project-members.php
350351
%{webdir}/secure/do-user-admin.php
351352
%{webdir}/secure/do-user-search.php
@@ -438,6 +439,7 @@ rm -rf $RPM_BUILD_ROOT
438439
%{webdir}/secure/slice-map-view.php
439440
%{webdir}/secure/slice-member.php
440441
%{webdir}/secure/slice-table.css
442+
%{webdir}/secure/slice.js
441443
%{webdir}/secure/slice.php
442444
%{webdir}/secure/slicecred.php
443445
%{webdir}/secure/sliceresource.php
@@ -454,6 +456,8 @@ rm -rf $RPM_BUILD_ROOT
454456
%{webdir}/secure/tool-omniconfig.php
455457
%{webdir}/secure/tool-slices.js
456458
%{webdir}/secure/tools-user.js
459+
%{webdir}/secure/updatekeys.js
460+
%{webdir}/secure/updatekeys.php
457461
%{webdir}/secure/upload-file.php
458462
%{webdir}/secure/upload-project-members.php
459463
%{webdir}/secure/uploadsshkey.php

lib/php/sa_client.php

+30-32
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
// get_slices_for_member(sa_url, member_id, is_member, role=null)
3636
// lookup_slice_details(sa_url, slice_uuids)
3737
// get_slices_for_projects(sa_url, project_uuids, allow_expired=false)
38-
// modify_slice_membership(sa_url, slice_id,
38+
// modify_slice_membership(sa_url, slice_id,
3939
// members_to_add, members_to_change_role, members_to_remove)
4040
// add_slice_member(sa_url, project_id, member_id, role)
4141
// remove_slice_member(sa_url, slice_id, member_id)
@@ -58,7 +58,7 @@
5858
'SLICE_EXPIRED' => SA_SLICE_TABLE_FIELDNAME::EXPIRED,
5959
'SLICE_DESCRIPTION' => SA_SLICE_TABLE_FIELDNAME::SLICE_DESCRIPTION);
6060

61-
$SAMEMBERCHAPI2PORTAL = array('SLICE_ROLE' => SA_SLICE_MEMBER_TABLE_FIELDNAME::ROLE,
61+
$SAMEMBERCHAPI2PORTAL = array('SLICE_ROLE' => SA_SLICE_MEMBER_TABLE_FIELDNAME::ROLE,
6262
'SLICE_MEMBER_UID' => SA_SLICE_MEMBER_TABLE_FIELDNAME::MEMBER_ID);
6363

6464
$SADETAILSKEYS = array('SLICE_UID',
@@ -125,12 +125,12 @@ function create_slice($sa_url, $signer, $project_id, $project_name, $slice_name,
125125
$options);
126126
$project_urns = array_keys($lookup_project_urn_return);
127127
$project_urn = $project_urns[0];
128-
$options = array('fields' =>
128+
$options = array('fields' =>
129129
array('SLICE_NAME' => $slice_name,
130130
'SLICE_DESCRIPTION' => $description,
131131
'SLICE_PROJECT_URN' => $project_urn));
132132
$options = array_merge($options, $client->options());
133-
$slice = $client->create_slice($client->creds(), $options);
133+
$slice = $client->create_slice($client->creds(), $options);
134134
$converted_slice = slice_details_chapi2portal($slice);
135135
// CHAPI: TODO reformat return arguments
136136
return $converted_slice;
@@ -179,7 +179,7 @@ function lookup_slice_ids($sa_url, $signer, $project_id)
179179

180180
/* lookup a set of slices by name, project_id, member_id */
181181
/* That is, the set of slices for which this member_id is a member */
182-
function lookup_slices($sa_url, $signer, $project_id, $member_id) //
182+
function lookup_slices($sa_url, $signer, $project_id, $member_id) //
183183
{
184184
$client = XMLRPCClient::get_client($sa_url, $signer);
185185

@@ -280,11 +280,9 @@ function _conv_mid2urn_map_s($sa_url, $signer, $amap)
280280
// Make a POA geni_update_users call on all aggregates at which this slice
281281
// has resources, updating keys for existing members, removing keys
282282
// for removed members
283-
function update_user_keys_on_slivers($sa_url, $signer, $slice_id,
284-
$slice_urn,
285-
$members_to_add,
286-
$members_to_change,
287-
$members_to_remove)
283+
function update_user_keys_on_slivers($sa_url, $signer, $slice_id, $slice_urn,
284+
$members_to_add, $members_to_change,
285+
$members_to_remove)
288286
{
289287
$username = $signer->username;
290288
$ma_url = sa_to_ma_url($sa_url);
@@ -339,7 +337,7 @@ function update_user_keys_on_slivers($sa_url, $signer, $slice_id,
339337
// invoke omni to call the geni_update_users POA
340338
$slice_users_json = json_encode($slice_users);
341339
$slice_users_filename = writeDataToTempFile($slice_users_json);
342-
$args = array("--optionsfile", $slice_users_filename,
340+
$args = array("--optionsfile", $slice_users_filename,
343341
"poa", $slice_urn, 'geni_update_users');
344342
$res = invoke_omni_function($am_urls, $signer, $args,
345343
array(), 0, 0, false, NULL, 3);
@@ -349,16 +347,16 @@ function update_user_keys_on_slivers($sa_url, $signer, $slice_id,
349347
unlink($slice_users_filename);
350348

351349
return $res;
352-
350+
353351
}
354352

355353
// Modify slice membership according to given lists to add/change_role/remove
356354
// $members_to_add and $members_to_change role are both
357355
// dictionaries of {member_id => role, ....}
358356
// $members_to_delete is a list of member_ids
359-
function modify_slice_membership($sa_url, $signer, $slice_id,
360-
$members_to_add,
361-
$members_to_change,
357+
function modify_slice_membership($sa_url, $signer, $slice_id,
358+
$members_to_add,
359+
$members_to_change,
362360
$members_to_remove)
363361
{
364362
$slice_urn = get_slice_urn($sa_url, $signer, $slice_id);
@@ -367,7 +365,7 @@ function modify_slice_membership($sa_url, $signer, $slice_id,
367365
$members_to_add = _conv_mid2urn_map_s($sa_url, $signer, $members_to_add);
368366
$members_to_change = _conv_mid2urn_map_s($sa_url, $signer, $members_to_change);
369367
$members_to_remove = _conv_mid2urn_s($sa_url, $signer, $members_to_remove);
370-
368+
371369
$options = array();
372370
if (sizeof($members_to_add)>0) { $options['members_to_add'] = $members_to_add; }
373371
if (sizeof($members_to_change)>0) { $options['members_to_change'] = $members_to_change; }
@@ -385,16 +383,16 @@ function modify_slice_membership($sa_url, $signer, $slice_id,
385383
function add_slice_member($sa_url, $signer, $slice_id, $member_id, $role)
386384
{
387385
$member_roles = array($member_id => $role);
388-
$result = modify_slice_membership($sa_url, $signer, $slice_id,
386+
$result = modify_slice_membership($sa_url, $signer, $slice_id,
389387
$member_roles, array(), array());
390388
return $result;
391389
}
392390

393-
// Remove a member from given slice
391+
// Remove a member from given slice
394392
function remove_slice_member($sa_url, $signer, $slice_id, $member_id)
395393
{
396394
$member_to_remove = array($member_id);
397-
$result = modify_slice_membership($sa_url, $signer, $slice_id,
395+
$result = modify_slice_membership($sa_url, $signer, $slice_id,
398396
array(), array(), $member_to_remove);
399397
return $result;
400398
}
@@ -403,7 +401,7 @@ function remove_slice_member($sa_url, $signer, $slice_id, $member_id)
403401
function change_slice_member_role($sa_url, $signer, $slice_id, $member_id, $role)
404402
{
405403
$member_roles = array($member_id => $role);
406-
$result = modify_slice_membership($sa_url, $signer, $slice_id,
404+
$result = modify_slice_membership($sa_url, $signer, $slice_id,
407405
array(), $member_roles, array());
408406
return $result;
409407
}
@@ -423,20 +421,20 @@ function get_slice_members($sa_url, $signer, $slice_id, $role=null)
423421
$options = array_merge($options, $client->options());
424422
$result = $client->lookup_slice_members($slice_urn, $client->creds(), $options);
425423
$converted_result = array();
426-
foreach($result as $row) {
424+
foreach($result as $row) {
427425
$converted_row = convert_role(slice_member_chapi2portal($row));
428426
$converted_result[] = $converted_row;
429427
}
430-
return $converted_result;
428+
return $converted_result;
431429
}
432430

433431
// Return list of slice_id's, member ID's and roles associated with slice of a given project
434432
// If role is provided, filter to members of given role
435433
// CHAPI: This should be [{'slice_id' => slice1, 'role' => role1, 'member_id' => mem1}*]
436-
//
434+
//
437435

438436
// slice-> PROJECT_URN
439-
//
437+
//
440438
function get_slice_members_for_project($sa_url, $signer, $project_id, $role=null)
441439
{
442440
// this probably wont work unless you are an operator
@@ -477,12 +475,12 @@ function get_slice_members_for_project($sa_url, $signer, $project_id, $role=null
477475
// Exclude slices of which I'm not a member
478476
if (!array_key_exists($surn, $my_slice_urns))
479477
continue;
480-
478+
481479
$options = array_merge($moptions, $client->options());
482480
$mems = $client->lookup_slice_members($surn, $client->creds(), $options);
483481
foreach ($mems as $mtup) {
484-
$slice_member = array(SA_SLICE_TABLE_FIELDNAME::SLICE_ID => $sid,
485-
SA_SLICE_MEMBER_TABLE_FIELDNAME::MEMBER_ID => $mtup['SLICE_MEMBER_UID'],
482+
$slice_member = array(SA_SLICE_TABLE_FIELDNAME::SLICE_ID => $sid,
483+
SA_SLICE_MEMBER_TABLE_FIELDNAME::MEMBER_ID => $mtup['SLICE_MEMBER_UID'],
486484
SA_SLICE_MEMBER_TABLE_FIELDNAME::ROLE => $mtup['SLICE_ROLE']);
487485
$slice_member = convert_role($slice_member);
488486
$results[] = $slice_member;
@@ -494,7 +492,7 @@ function get_slice_members_for_project($sa_url, $signer, $project_id, $role=null
494492
// Return list of slice ID's and Roles for given member_id for slices to which member belongs
495493
// If is_member is true, return slices for which member is a member
496494
// If is_member is false, return slices for which member is NOT a member
497-
// If role is provided, filter on slices
495+
// If role is provided, filter on slices
498496
// for which member has given role (is_member = true)
499497
// for which member does NOT have given role (is_member = false)
500498
// FIXME: optional project_id to constrain to a given project?
@@ -520,7 +518,7 @@ function get_slices_for_member($sa_url, $signer, $member_id, $is_member, $role=n
520518
// Convert columns from 'external' to 'internal' format
521519
$converted_results = array();
522520
foreach($results as $row) {
523-
$converted_row = array(SA_SLICE_MEMBER_TABLE_FIELDNAME::SLICE_ID => $row['SLICE_UID'],
521+
$converted_row = array(SA_SLICE_MEMBER_TABLE_FIELDNAME::SLICE_ID => $row['SLICE_UID'],
524522
SA_SLICE_MEMBER_TABLE_FIELDNAME::ROLE => $row['SLICE_ROLE'],
525523
SA_SLICE_TABLE_FIELDNAME::EXPIRED => $row['EXPIRED']);
526524
$converted_row = convert_role($converted_row);
@@ -558,7 +556,7 @@ function get_slices_in_projects($sa_url, $signer, $slice_uuids, $project_uuids,
558556
{
559557
$client = XMLRPCClient::get_client($sa_url, $signer);
560558
$projects = array();
561-
foreach($project_uuids as $project_uuid) {
559+
foreach($project_uuids as $project_uuid) {
562560
$projects[$project_uuid] = array();
563561
}
564562
// error_log("GSFP.PROJECT_UUIDS = " . print_r($project_uuids, true));
@@ -581,9 +579,9 @@ function get_slices_in_projects($sa_url, $signer, $slice_uuids, $project_uuids,
581579

582580
// Convert from external to internal field names
583581
// error_log("GSFP.PROJECTS = " . print_r($projects, true));
584-
// return map of (project_uid_1 => (slice_data_1, ...),
582+
// return map of (project_uid_1 => (slice_data_1, ...),
585583
// project_uid_2 => (slice_data_2, ..), ..)
586-
return $projects;
584+
return $projects;
587585
}
588586

589587

lib/php/tool-breadcrumbs.php

+9-8
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,9 @@
101101
"sshkeyedit.php" => "profile.php",
102102
"generatesshkey.php" => "profile.php",
103103
"tool-omniconfig.php" => "profile.php",
104-
"edit-slice-member.php" => "slice.php",
105-
"edit-project-member.php" => "project.php",
106-
"upload-project-members.php" => "project.php",
104+
"edit-slice-member.php" => "slice.php",
105+
"edit-project-member.php" => "project.php",
106+
"upload-project-members.php" => "project.php",
107107
"accept-project-invite.php" => "project.php",
108108
"rspecupload.php" => "profile.php",
109109
"tool-rspecs.php" => "profile.php",
@@ -113,7 +113,8 @@
113113
"gemini.php" => "slice.php",
114114
"tool-aggwarning.php" => "slice.php",
115115
"send_bug_report.php" => "slice.php",
116-
"contact-us.php" => "home.php");
116+
"contact-us.php" => "home.php",
117+
"updatekeys.php" => "slice.php");
117118

118119
// Array from script name to a pretty name
119120
// FIXME: From a DB that the script uses too?
@@ -168,8 +169,8 @@
168169
"sshkeyedit.php" => "Edit SSH Public Key Attributes",
169170
"generatesshkey.php" => "Generate SSH Keypair",
170171
"tool-omniconfig.php" => "Omni command line tool",
171-
"edit-slice-member.php" => "Edit Slice Membership: %slice_name",
172-
"edit-project-member.php" => "Edit Project Membership: %project_name",
172+
"edit-slice-member.php" => "Edit Slice Membership: %slice_name",
173+
"edit-project-member.php" => "Edit Project Membership: %project_name",
173174
"upload-project-members.php" => "Upload Project Members : %project_name",
174175
"accept-project-invite.php" => "Accept Project Invite : %project_name",
175176
"rspecupload.php" => "Edit Resource Specification",
@@ -180,7 +181,8 @@
180181
"gemini.php" => "GENI Desktop",
181182
"tool-aggwarning.php" => "Query All Aggregates",
182183
"send_bug_report.php" => "Send Problem Report",
183-
"contact-us.php" => "Contact Us");
184+
"contact-us.php" => "Contact Us",
185+
"updatekeys.php" => "Update SSH Keys");
184186

185187
// Look up in the 2 arrays above
186188
// Carefully checking for the project_id variant
@@ -268,4 +270,3 @@ function getCrumbString($href, $thisname)
268270
}
269271

270272
print "<div id='breadcrumb'>" . $crumb . "</div>\n";
271-

portal/Makefile.am

+4
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ dist_svcweb_DATA = \
116116
www/portal/do-renew-slice.php \
117117
www/portal/do-renew.php \
118118
www/portal/do-slice-search.php \
119+
www/portal/do-update-keys.php \
119120
www/portal/do-update-user-preferences.php \
120121
www/portal/do-upload-project-members.php \
121122
www/portal/do-user-admin.php \
@@ -197,6 +198,7 @@ dist_svcweb_DATA = \
197198
www/portal/slice-map-view.php \
198199
www/portal/slice-map-data.php \
199200
www/portal/slice-member.php \
201+
www/portal/slice.js \
200202
www/portal/slice.php \
201203
www/portal/slice-jacks.css \
202204
www/portal/slice-table.css \
@@ -215,6 +217,8 @@ dist_svcweb_DATA = \
215217
www/portal/tool-omniconfig.php \
216218
www/portal/tool-slices.js \
217219
www/portal/tools-user.js \
220+
www/portal/updatekeys.js \
221+
www/portal/updatekeys.php \
218222
www/portal/upload-file.php \
219223
www/portal/upload-project-members.php \
220224
www/portal/uploadsshkey.php \

0 commit comments

Comments
 (0)