Changeset 9b3627e for fedd/federation
- 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
- Location:
- fedd/federation
- Files:
-
- 4 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,
Note: See TracChangeset
for help on using the changeset viewer.