Ignore:
Timestamp:
Sep 21, 2009 6:48:12 PM (15 years ago)
Author:
Ted Faber <faber@…>
Branches:
axis_example, compt_changes, info-ops, master, version-2.00, version-3.01, version-3.02
Children:
ae0f69a
Parents:
adcbdaf
Message:

Looks like Dragon is being called correctly. Internals remain a bit messy.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • fedd/federation/emulab_access.py

    radcbdaf r69692a9  
    6969        self.ssh_privkey_file = config.get("access","ssh_privkey_file")
    7070        self.create_debug = config.getboolean("access", "create_debug")
     71        self.cleanup = not config.getboolean("access", "leave_tmpfiles")
    7172        self.access_type = config.get("access", "type")
    7273
     
    915916
    916917    def generate_ns2(self, topo, expfn, softdir, master):
     918        def dragon_commands(e):
     919            s = ""
     920            if isinstance(e, topdl.Computer):
     921                for i in e.interface:
     922                    vlan = i.get_attribute('dragon_vlan')
     923                    if vlan:
     924                        type = i.get_attribute('dragon_type')
     925                        ip = i.get_attribute('ip4_address')
     926                        if type == 'link':
     927                            s = ("tb-allow-external $%s dragonportal " + \
     928                                    "ip %s vlan %s\n") % \
     929                                    (topdl.to_tcl_name(e.name[0]), ip, vlan)
     930                        elif type == 'lan':
     931                            s = ("tb-allow-external $%s dragonportal " + \
     932                                    "ip %s vlan %s usurp %s\n") % \
     933                                    (topdl.to_tcl_name(e.name[0]), ip, vlan,
     934                                        i.substrate[0])
     935                        else:
     936                            raise service_error(service_error_internal,
     937                                    "Unknown DRAGON type %s" % type)
     938            return s
     939
     940        def not_dragon(e):
     941            return all([not i.get_attribute('dragon_vlan') \
     942                    for i in e.interface])
     943
    917944        t = topo.clone()
    918945
     
    925952            if isinstance(e, topdl.Computer):
    926953                e.interface = [i for i in e.interface \
    927                         if not i.get_attribute('portal')]
    928         t.substrates = [ s for s in t.substrates \
    929                 if not s.get_attribute('portal')]
     954                        if not i.get_attribute('portal') or \
     955                            i.get_attribute('dragon_vlan')]
     956        t.substrates = [ s.clone() for s in t.substrates ]
     957        #t.substrates = [ s for s in t.substrates \
     958        #       if not s.get_attribute('portal')]
    930959        t.incorporate_elements()
    931960
     
    941970        else:cmdname = 'SlaveConnectorCmd'
    942971
     972        if self.attrs.has_key('dragon'):
     973            add_filter = not_dragon
     974            filters.append(dragon_commands)
     975        else:
     976            add_filter = None
     977
    943978        if self.attrs.has_key(cmdname):
    944979            filters.append(topdl.generate_portal_command_filter(
    945                 self.attrs.get(cmdname)))
     980                self.attrs.get(cmdname), add_filter=add_filter))
    946981
    947982        if self.attrs.has_key('connectorImage'):
     
    10861121            err = e
    10871122
    1088         self.log.debug("[StartSegment]: removing %s" % tmpdir)
    10891123        # Walk up tmpdir, deleting as we go
    1090         for path, dirs, files in os.walk(tmpdir, topdown=False):
    1091             for f in files:
    1092                 os.remove(os.path.join(path, f))
    1093             for d in dirs:
    1094                 os.rmdir(os.path.join(path, d))
    1095         os.rmdir(tmpdir)
     1124        if self.cleanup:
     1125            self.log.debug("[StartSegment]: removing %s" % tmpdir)
     1126            for path, dirs, files in os.walk(tmpdir, topdown=False):
     1127                for f in files:
     1128                    os.remove(os.path.join(path, f))
     1129                for d in dirs:
     1130                    os.rmdir(os.path.join(path, d))
     1131            os.rmdir(tmpdir)
     1132        else:
     1133            self.log.debug("[StartSegment]: not removing %s" % tmpdir)
    10961134
    10971135        if rv:
Note: See TracChangeset for help on using the changeset viewer.