Changeset 9b3627e
- Timestamp:
- Mar 9, 2010 1:08:05 AM (15 years ago)
- Branches:
- axis_example, compt_changes, info-ops, master, version-3.01, version-3.02
- Children:
- 4e9719b
- Parents:
- c2c153b
- Files:
-
- 1 added
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
fedd/federation/emulab_access.py
rc2c153b r9b3627e 56 56 Initializer. Pulls parameters out of the ConfigParser's access section. 57 57 """ 58 59 def software_list(v): 60 l = [ ] 61 if v: 62 ps = v.split(" ") 63 while len(ps): 64 loc, file = ps[0:2] 65 del ps[0:2] 66 l.append((loc, file)) 67 return l 68 58 69 59 70 # Make sure that the configuration is in place … … 73 84 self.userconfcmd = config.get("access","userconfcmd") 74 85 self.userconfurl = config.get("access","userconfurl") 86 self.federation_software = config.get("access", "federation_software") 87 self.portal_software = config.get("access", "portal_software") 75 88 self.ssh_privkey_file = config.get("access","ssh_privkey_file") 76 89 self.ssh_pubkey_file = config.get("access","ssh_pubkey_file") … … 79 92 self.cleanup = not config.getboolean("access", "leave_tmpfiles") 80 93 self.access_type = config.get("access", "type") 94 95 self.federation_software = software_list(self.federation_software) 96 self.portal_software = software_list(self.portal_software) 81 97 82 98 self.access_type = self.access_type.lower() … … 968 984 'userconfig': client_null, 969 985 } 986 987 def server_port(f, s): 988 p = urlparse(s.get('server', 'http://localhost')) 989 print >>f, 'port: remote:%s:%s:%s' % (p.port, p.hostname, p.port) 990 991 def server_null(f,s): pass 992 993 def server_seer(f, s): 994 print >>f, 'seer: true' 995 996 server_service_out = { 997 'SMB': server_port, 998 'tmcd': server_port, 999 'userconfig': server_null, 1000 'seer': server_seer, 1001 } 970 1002 # XXX: end un hardcode this 971 1003 … … 1006 1038 for s in [s for s in services \ 1007 1039 if s.get('name', "") in self.imports]: 1008 p = urlparse(s.get('server', 'http://localhost')) 1009 print >>f, 'port: remote:%s:%s:%s' % \ 1010 (p.port, p.hostname, p.port) 1040 server_service_out[s['name']](f, s) 1011 1041 1012 1042 if tunnelconfig: … … 1026 1056 1027 1057 # XXX: This little seer config file needs to go away. 1028 if not seer_out:1029 try:1030 seerfn = "%s/seer.conf" % tmpdir1031 f = open(seerfn, "w")1032 if not master:1033 print >>f, "ControlNode: control.%s.%s%s" % \1034 (meid.lower(), mproj.lower(), mdomain)1035 print >>f, "ExperimentID: %s" % mexp1036 f.close()1037 except IOError, e:1038 raise service_error(service_error.internal,1039 "Can't write seer.conf: %s" %e)1040 seer_out = True1058 #if not seer_out: 1059 #try: 1060 #seerfn = "%s/seer.conf" % tmpdir 1061 #f = open(seerfn, "w") 1062 #if not master: 1063 #print >>f, "ControlNode: control.%s.%s%s" % \ 1064 #(meid.lower(), mproj.lower(), mdomain) 1065 #print >>f, "ExperimentID: %s" % mexp 1066 #f.close() 1067 #except IOError, e: 1068 #raise service_error(service_error.internal, 1069 #"Can't write seer.conf: %s" %e) 1070 #seer_out = True 1041 1071 1042 1072 if not client_out and type in ('control', 'both'): … … 1050 1080 s.get('visibility','') == 'import': 1051 1081 client_service_out[s['name']](f, s) 1052 # Does seer need this? (evidently so)1082 # Seer uses this? 1053 1083 print >>f, "ExperimentID: %s/%s" % (mproj, meid) 1054 1084 f.close() … … 1105 1135 return e.name[0] not in self.nodes 1106 1136 1137 def add_kit(e, kit): 1138 """ 1139 Add a Software object created from the list of (install, location) 1140 tuples passed as kit to the software attribute of an object e. We 1141 do this enough to break out the code, but it's kind of a hack to 1142 avoid changing the old tuple rep. 1143 """ 1144 1145 s = [ topdl.Software(install=i, location=l) for i, l in kit] 1146 1147 if isinstance(e.software, list): e.software.extend(s) 1148 else: e.software = s 1149 1150 1107 1151 t = topo.clone() 1108 1152 … … 1149 1193 if isinstance(e, topdl.Segment): 1150 1194 t.elements.remove(e) 1151 # Fix software paths1152 for s in getattr(e, 'software', []):1153 s.location = re.sub("^.*/", softdir, s.location)1154 1195 if isinstance(e, topdl.Computer): 1196 add_kit(e, self.federation_software) 1155 1197 if e.get_attribute('portal') and gate_cmd: 1198 # Add local portal support software 1199 add_kit(e, self.portal_software) 1156 1200 # Portals never have a user-specified start command 1157 1201 e.set_attribute('startup', gate_cmd) … … 1167 1211 e.interface = [i for i in e.interface \ 1168 1212 if not i.get_attribute('portal') or i.name in dinf ] 1213 # Fix software paths 1214 for s in getattr(e, 'software', []): 1215 s.location = re.sub("^.*/", softdir, s.location) 1169 1216 1170 1217 t.substrates = [ s.clone() for s in t.substrates ] … … 1368 1415 get_url(s, certfile, softdir) 1369 1416 1417 # Copy local portal node software to the tempdir 1418 for l, f in self.portal_software: 1419 base = os.path.basename(f) 1420 copy_file(f, "%s/%s" % (softdir, base)) 1421 1370 1422 for a in attrs: 1371 1423 if a['attribute'] in configs: -
fedd/federation/experiment_control.py
rc2c153b r9b3627e 1698 1698 master, eid, myname, desthost, portal_type, 1699 1699 infs, conn_type="ssh", conn_attrs=[], expid=expid) 1700 if self.fedkit:1701 self.add_kit(portal, self.fedkit)1702 if self.gatewaykit:1703 self.add_kit(portal, self.gatewaykit)1700 #if self.fedkit: 1701 #self.add_kit(portal, self.fedkit) 1702 #if self.gatewaykit: 1703 #self.add_kit(portal, self.gatewaykit) 1704 1704 1705 1705 topo[st].elements.append(portal) -
fedd/federation/protogeni_access.py
rc2c153b r9b3627e 56 56 """ 57 57 58 def software_list(v): 59 l = [ ] 60 if v: 61 ps = v.split(" ") 62 while len(ps): 63 loc, file = ps[0:2] 64 del ps[0:2] 65 l.append((loc, file)) 66 return l 67 58 68 # Make sure that the configuration is in place 59 69 if not config: … … 68 78 self.userconfcmd = config.get("access","userconfcmd") 69 79 self.userconfurl = config.get("access","userconfurl") 80 self.federation_software = config.get("access", "federation_software") 81 self.portal_software = config.get("access", "portal_software") 70 82 self.ssh_port = config.get("access","ssh_port") or "22" 71 83 self.sshd = config.get("access","sshd") … … 77 89 self.staging_host = config.get("access", "staging_host") \ 78 90 or "ops.emulab.net" 91 92 self.federation_software = software_list(self.federation_software) 93 self.portal_software = software_list(self.portal_software) 79 94 80 95 self.renewal_interval = config.get("access", "renewal") or (3 * 60 * 60) … … 970 985 get_url(s, certfile, softdir) 971 986 987 # Copy local portal node software to the tempdir 988 for s in (self.portal_software, self.federation_software): 989 for l, f in s: 990 base = os.path.basename(f) 991 copy_file(f, "%s/%s" % (softdir, base)) 992 993 # Ick. Put this python rpm in a place that it will get moved into 994 # the staging area. It's a hack to install a modern (in a Roman 995 # sense of modern) python on ProtoGENI 996 python_rpm ="python2.4-2.4-1pydotorg.i586.rpm" 997 if os.access("./%s" % python_rpm, os.R_OK): 998 copy_file("./%s" % python_rpm, "%s/%s" % (softdir, python_rpm)) 999 972 1000 for a in attrs: 973 1001 if a['attribute'] in configs: -
fedd/federation/proxy_protogeni_segment.py
rc2c153b r9b3627e 191 191 'userconfig': client_null, 192 192 } 193 194 def server_port(f, s): 195 p = urlparse(s.get('server', 'http://localhost')) 196 print >>f, 'port: remote:%s:%s:%s' % (p.port, p.hostname, p.port) 197 198 def server_null(f,s): pass 199 200 def server_seer(f, s): 201 print >>f, 'seer: true' 202 203 server_service_out = { 204 'SMB': server_port, 205 'tmcd': server_port, 206 'userconfig': server_null, 207 'seer': server_seer, 208 } 193 209 # XXX: end un hardcode this 194 210 … … 231 247 for s in [s for s in services \ 232 248 if s.get('name', "") in parent.imports]: 233 p = urlparse(s.get('server', 'http://localhost')) 234 print >>f, 'port: remote:%s:%s:%s' % \ 235 (p.port, p.hostname, p.port) 249 server_service_out[s['name']](f, s) 236 250 237 251 if tunnelconfig: … … 251 265 252 266 # XXX: This little seer config file needs to go away. 253 if not seer_out:254 try:255 seerfn = "%s/seer.conf" % tmpdir256 f = open(seerfn, "w")257 if not master:258 print >>f, "ControlNode: control.%s.%s%s" % \259 (meid.lower(), mproj.lower(), mdomain)260 print >>f, "ExperimentID: %s" % mexp261 f.close()262 except IOError, e:263 raise service_error(service_error.internal,264 "Can't write seer.conf: %s" %e)265 seer_out = True267 #if not seer_out: 268 #try: 269 #seerfn = "%s/seer.conf" % tmpdir 270 #f = open(seerfn, "w") 271 #if not master: 272 #print >>f, "ControlNode: control.%s.%s%s" % \ 273 #(meid.lower(), mproj.lower(), mdomain) 274 #print >>f, "ExperimentID: %s" % mexp 275 #f.close() 276 #except IOError, e: 277 #raise service_error(service_error.internal, 278 #"Can't write seer.conf: %s" %e) 279 #seer_out = True 266 280 267 281 if not client_out and type in ('control', 'both'): … … 273 287 s.get('visibility','') == 'import': 274 288 client_service_out[s['name']](f, s) 275 # Does seer need this? 276 # print >>f, "ExperimentID: %s/%s" % (mproj, meid) 289 # Seer uses this to find credentials in the shared project 290 # dir. 291 print >>f, "ExperimentID: %s/%s" % (mproj, meid) 277 292 f.close() 278 293 except IOError, e: … … 326 341 327 342 def configure_nodes(self, topo, nodes, user, host, sshd, sshd_config, 328 gate_cmd, node_cmd, pubkey, secretkey, stagingdir, tmpdir): 343 gate_cmd, node_cmd, pubkey, secretkey, federation_software, 344 portal_software, stagingdir, tmpdir): 329 345 330 346 fed_dir = "/usr/local/federation" … … 354 370 % i.name) 355 371 372 for l, f in federation_software: 373 base = os.path.basename(f) 374 print >>script, "%s %s@%s:%s/%s ." % \ 375 (scp, user, host, stagingdir, base) 376 print >>script, \ 377 "%s -C %s -xzf %s" % (tar, l, base) 378 356 379 for s in e.software: 357 380 # XXX: Just tarfiles for now … … 364 387 "%s -C %s -xzf %s" % (tar, s.install, s_base) 365 388 for f in ('hosts', pubkey, secretkey, 'client.conf', 366 'userconf' , 'seer.conf'):389 'userconf'): 367 390 print >>script, "%s %s@%s:%s/%s %s/etc" % \ 368 391 (scp, user, host, stagingdir, f, fed_dir) … … 379 402 (scp, user, host, stagingdir, vname, fed_dir) 380 403 404 # Hackery dackery dock: the ProtoGENI python is really ancient. 405 # Get a modern version (though packaged for Mandrake (remember 406 # Mandrake? good times, good times)) and install it for SEER. 407 python_rpm="python2.4-2.4-1pydotorg.i586.rpm" 408 print >>script, "%s %s@%s:%s/%s ." % \ 409 (scp, user, host, stagingdir, python_rpm) 410 print >>script, "rpm --install ./%s" % python_rpm 411 print >>script, "rm /usr/bin/python" 412 print >>script, "ln /usr/bin/python2.4 /usr/bin/python" 413 # Back to less hacky stuff 381 414 382 415 # Start commands 383 416 if e.get_attribute('portal') and gate_cmd: 417 # Install portal software 418 for l, f in portal_software: 419 base = os.path.basename(f) 420 print >>script, "%s %s@%s:%s/%s ." % \ 421 (scp, user, host, stagingdir, base) 422 print >>script, \ 423 "%s -C %s -xzf %s" % (tar, l, base) 424 384 425 # Portals never have a user-specified start command 385 426 print >>script, gate_cmd … … 548 589 549 590 # With manifest in hand, we can export the portal node names. 550 nodes = self.manifest_to_dict(manifest , ignore_debug=True)591 nodes = self.manifest_to_dict(manifest) 551 592 self.export_store_info(export_certfile, nodes, parent.ssh_port, 552 593 connInfo) … … 612 653 self.configure_nodes(topo, nodes, user, parent.staging_host, 613 654 parent.sshd, parent.sshd_config, gate_cmd, node_cmd, 614 pubkey, secretkey, stagingdir, tmpdir) 655 pubkey, secretkey, parent.federation_software, 656 parent.portal_software, stagingdir, tmpdir) 615 657 616 658 self.start_nodes(user, parent.staging_host, -
fedkit/Makefile
rc2c153b r9b3627e 3 3 config_from_tunnelip.pl active_config.pl combo.pl \ 4 4 prep_gateway.pl port_forward.pl setup_bridge.pl import_key.pl \ 5 protogeni_routing.pl 5 protogeni_routing.pl start_seer.pl 6 6 7 7 LIBRARIES=gateway_lib.pm -
fedkit/combo.pl
rc2c153b r9b3627e 18 18 my $iface_file = "/var/emulab/boot/ifmap"; 19 19 my $ssh = "/usr/bin/ssh"; 20 my $seer; 20 21 my $ssh_port = 22; 21 22 my @ports; … … 35 36 'ssh_port=s' => \$ssh_port, 36 37 'use_file' => \$use_file, 38 'seer' => \$seer, 37 39 ); 38 40 … … 61 63 "--ssh=$ssh --ssh_port=$ssh_port $portparam"); 62 64 exit(20) if $?; 65 66 if ($seer ) { 67 system("$perl -I$fedkit_dir/lib $fedkit_dir/bin/start_seer.pl " . 68 "--peer=$peer --seer --fedkit=$fedkit_dir --perl=$perl " . 69 "--ssh=$ssh --ssh_privkey=$ssh_privkey"); 70 exit(20) if $?; 71 } 72 63 73 } 64 74 else { -
fedkit/federate.pl
rc2c153b r9b3627e 58 58 $from->close(); 59 59 $to->close(); 60 # Now, samba 61 system('/usr/bin/yum -y install samba-client'); 60 # Now, samba. Because of the python dance on PG, we need to call python2.2 61 # explicitly 62 system('/usr/bin/python2.2 /usr/bin/yum -y install samba-client'); 62 63 # These tools expect the fstab to include smbfs instead 63 64 $smb_type = 'smbfs'; -
fedkit/gateway_lib.pm
rc2c153b r9b3627e 367 367 368 368 369 sub client_conf_filename { 370 # Find the configuration file in the usual places, if there is one in 371 # /usr/local/federation/etc, use it, otherwise look in the emulab standard 372 # filesystems which depends on what experiment and project we're in. 373 my $pid; 374 my $eid; 375 my $filename; 376 my $fed_dir = "/usr/local/federation/etc/"; 377 378 return "$fed_dir/client.conf" if -r "$fed_dir/client.conf"; 379 380 my $tmcd = new IO::Pipe() || die "Can't create pipe: $!\n"; 381 382 $tmcd->reader("$TMCC status"); 383 384 while (<$tmcd>) { 385 chomp; 386 /ALLOCATED=([^\/]+)\/(\S+)/ && do { 387 $pid = $1; 388 $eid = $2; 389 }; 390 } 391 $tmcd->close(); 392 $filename = "/proj/$pid/exp/$eid/tmp/client.conf" 393 if $pid and $eid; 394 395 return $filename; 396 } 397 369 398 sub wait_for_port { 370 399 my($addr, $port, $timeout, $sleep) = @_; … … 376 405 377 406 while (!$s) { 407 # We've seen some arp pollution, so be proactive about clearing the 408 # cache if we're waiting to get out. 409 system("arp -d -a"); 378 410 if (!($s = new IO::Socket(Domain => &AF_INET, PeerAddr => $addr, 379 411 PeerPort => $port))) { -
fedkit/prep_gateway.pl
rc2c153b r9b3627e 49 49 $from->close(); 50 50 $to->close(); 51 # Now, bridging 52 system('/usr/bin/ yum -y install bridge-utils');51 # Now, bridging (use old python...) 52 system('/usr/bin/python2.2 /usr/bin/yum -y install bridge-utils'); 53 53 #and keys 54 54 gateway_lib::import_key($ssh_pubkey,'/root/.ssh/authorized_keys') -
fedkit/smbmount.Linux.pl
rc2c153b r9b3627e 59 59 /GID=(\S+)/ && do { $gid = $1; }; 60 60 /HOMEDIR=(\S+)/ && do { $homedir = $1; }; 61 my $ids = $FSTYPE == 'smbfs' ? ",uid=$uid,gid=$gid" : ""; 61 62 62 63 open(PWDFILE, ">/tmp/$user.cifs_creds") || … … 70 71 print FSTAB "//$SHARE/$user\t"; 71 72 print FSTAB "$homedir\t$FSTYPE\t"; 72 print FSTAB "auto,rw,credentials=/tmp/$user.cifs_creds ,ip=$ADDR\t0\t0\n";73 print FSTAB "auto,rw,credentials=/tmp/$user.cifs_creds$ids,ip=$ADDR\t0\t0\n"; 73 74 74 75 # … … 83 84 if($user =~ m/$PUSER/i) { 84 85 print FSTAB "//$SHARE/proj-$PNAME\t"; 85 print FSTAB "$PROJROOT/$PNAME\tcifs\t"; 86 print FSTAB "rw,credentials=/tmp/$user.cifs_creds,ip=$ADDR\t0\t0\n"; 86 print FSTAB "$PROJROOT/$PNAME\t$FSTYPE\t"; 87 print FSTAB "rw,credentials=/tmp/$user.cifs_creds$ids,ip=$ADDR\t0\t0\n"; 88 mkdir("/$PROJROOT/$PNAME") unless -d "/$PROJROOT/$PNAME"; 87 89 if ( $share) { 88 90 print FSTAB "//$SHARE/share\t"; 89 91 print FSTAB "/share\t$FSTYPE\t"; 90 print FSTAB "rw,credentials=/tmp/$user.cifs_creds ,ip=$ADDR\t0\t0\n";92 print FSTAB "rw,credentials=/tmp/$user.cifs_creds$ids,ip=$ADDR\t0\t0\n"; 91 93 92 94 mkdir("/share") unless -d "/share";
Note: See TracChangeset
for help on using the changeset viewer.