Ignore:
Timestamp:
Feb 20, 2010 5:27:56 PM (14 years ago)
Author:
Ted Faber <faber@…>
Branches:
axis_example, compt_changes, info-ops, master, version-3.01, version-3.02
Children:
6af3226
Parents:
0f06528
Message:

More dragon cleanup. Config files look right, but need to be tested.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • fedd/federation/experiment_control.py

    r0f06528 r617592b  
    831831        # Add attributes to parameter space.  We don't allow attributes to
    832832        # overlay any parameters already installed.
    833         for a in r['fedAttr']:
     833        for a in r.get('fedAttr', []):
    834834            try:
    835835                if a['attribute'] and \
     
    923923            try:
    924924                self.log.debug("Calling StartSegment at %s " % uri)
    925                 print req
    926925                r = self.caller(uri, req, self.cert_file, self.cert_pwd,
    927926                        self.trusted_certs)
     
    10391038                vlan = get_vlan(ss.response)
    10401039                if vlan is not None:
    1041                     for k, t in topo.items():
    1042                         for e in t.elements:
    1043                             for i in e.interface:
    1044                                 vl = i.get_attribute('dragon_vlan')
    1045                                 if vl is not None and vl == to_repl:
    1046                                     i.set_attribute('dragon_vlan', vlan)
     1040                    for v in connInfo.values():
     1041                        for i in v:
     1042                            for a in i.get('fedAttr', []):
     1043                                if a.get('attribute', "") == 'vlan_id' and \
     1044                                        a.get('value', "") == to_repl:
     1045                                    a['value'] = vlan
    10471046            else:
    10481047                break
     
    13551354                    )
    13561355            ifaces.append(inf)
    1357         info = {
    1358                 "type" : conn_type,
    1359                 "portal": myname,
    1360                 'peer': desthost,
    1361                 'fedAttr': [
    1362                         { 'attribute': 'masterdomain', 'value': mdomain},
    1363                         { 'attribute': 'masterexperiment', 'value':
    1364                             "%s/%s" % (mproject, eid)},
    1365                         { 'attribute': 'active', 'value': active},
    1366                         # Move to SMB service description
    1367                         { 'attribute': 'masteruser', 'value': muser},
    1368                         { 'attribute': 'smbshare', 'value': smbshare},
    1369                     ],
    1370                 }
    1371 
    1372         if conn_type == 'transit':
    1373             info['member'] = [ { 'element': myname, 'interface': 'inf000'} ]
    1374         if conn_attrs:
    1375             info['fedAttr'].extend(con_attrs)
     1356        if conn_type == "ssh":
     1357            info = {
     1358                    "type" : conn_type,
     1359                    "portal": myname,
     1360                    'peer': desthost,
     1361                    'fedAttr': [
     1362                            { 'attribute': 'masterdomain', 'value': mdomain},
     1363                            { 'attribute': 'masterexperiment', 'value':
     1364                                "%s/%s" % (mproject, eid)},
     1365                            { 'attribute': 'active', 'value': active},
     1366                            # Move to SMB service description
     1367                            { 'attribute': 'masteruser', 'value': muser},
     1368                            { 'attribute': 'smbshare', 'value': smbshare},
     1369                        ],
     1370                    }
     1371        else:
     1372            info = None
    13761373
    13771374        return (topdl.Computer(
     
    14551452
    14561453    def create_dragon_substrate(self, sub, topo, tbs, tbparams, master, eid,
    1457             connInfo):
     1454            connInfo, peer={ }):
    14581455        """
    14591456        Add attribiutes to the various elements indicating that they are to be
     
    14671464            else: return None
    14681465
     1466        mdomain = tbparams[master].get('domain', '.example.com')
     1467        mproject = tbparams[master].get('project', 'project')
    14691468        # dn is the number of previously created dragon nets.  This routine
    14701469        # creates a net numbered by dn
     
    14731472        # the global topology
    14741473        count = { }
     1474        node = { }
    14751475        for e in [ i.element for i in sub.interfaces ]:
    14761476            tb = e.get_attribute('testbed')
    14771477            count[tb] = count.get(tb, 0) + 1
     1478            node[tb] = i.get_attribute('ip4_address')
     1479
    14781480
    14791481        # Set the attributes in the copies that will allow setup of dragon
     
    14841486                if not connInfo.has_key(tb):
    14851487                    connInfo[tb] = [ ]
     1488
     1489                # This may need another look, but only a service gateway will
     1490                # look at the active parameter, and these are only inserted to
     1491                # connect to the master.
     1492                active = "%s" % ( tb == 'master')
    14861493                info = {
    14871494                        'type': 'transit',
     
    14891496                            'element': i.element.name[0],
    14901497                            'interface': i.name
    1491                             } for i in s.interfaces ],
    1492                         'fedAttr': [ {
    1493                             'attribute': 'vlan_id',
    1494                             'value': 'unassigned%d' % dn
    1495                             } ]
     1498                            } for i in s.interfaces \
     1499                                    if isinstance(i.element, topdl.Computer) ],
     1500                        'fedAttr': [
     1501                            { 'attribute': 'vlan_id',
     1502                                'value': 'unassigned%d' % dn },
     1503                            { 'attribute': 'masterdomain', 'value': mdomain},
     1504                            { 'attribute': 'masterexperiment', 'value':
     1505                                "%s/%s" % (mproject, eid)},
     1506                            { 'attribute': 'active', 'value': active},
     1507                            ],
    14961508                        }
     1509                if peer.has_key(tb):
     1510                    info['peer'] = peer[tb]
    14971511                connInfo[tb].append(info)
    14981512            else:
     
    16311645                    ('portal','true'),
    16321646                    ('ip4_address', "%s" % ip_addr(myip)),)),),
    1633                 conn_type="transit",
    1634                 conn_attrs = [ {
    1635                     'attribute': 'vlan_id', 'value': 'unassigned%d' % idx
    1636                     }])
     1647                conn_type="transit")
    16371648        if self.fedkit:
    16381649            self.add_kit(portal, self.fedkit)
     
    16401651            self.add_kit(portal, self.gatewaykit)
    16411652
    1642         return portal, info
     1653        return portal
    16431654
    16441655    def add_portals(self, top, topo, eid, master, tbparams, ip_allocator,
     
    17211732                                ],
    17221733                            )
    1723                     portal, info = self.new_dragon_portal(tb, master,
     1734                    portal = self.new_dragon_portal(tb, master,
    17241735                            master, eid, dip, mip, idx, csub, tbparams)
    17251736                    topo[tb].substrates.append(csub)
    17261737                    topo[tb].elements.append(portal)
    17271738                    topo[tb].elements.append(seg)
    1728                     if not connInfo.has_key(tb):
    1729                         connInfo[tb] = [info]
    1730                     else:
    1731                         connInfo[tb].append(info)
    17321739
    17331740                    mcsub = csub.clone()
     
    17521759                                ],
    17531760                            )
    1754                     portal, info = self.new_dragon_portal(master, tb, master,
     1761                    portal = self.new_dragon_portal(master, tb, master,
    17551762                            eid, mip, dip, idx, mcsub, tbparams)
    17561763                    topo[master].substrates.append(mcsub)
    17571764                    topo[master].elements.append(portal)
    17581765                    topo[master].elements.append(seg)
    1759                     if not connInfo.has_key(master):
    1760                         connInfo[master] = [info]
    1761                     else:
    1762                         connInfo[master].append(info)
     1766                    for t in (master, tb):
     1767                        topo[t].incorporate_elements()
    17631768
    17641769                    self.create_dragon_substrate(csub, topo,
    1765                             {tb: 1, master:1}, tbparams, master, eid)
     1770                            {tb: 1, master:1}, tbparams, master, eid, connInfo,
     1771                            {tb: ip_addr(mip), master: ip_addr(dip)})
    17661772                else:
    17671773                    self.add_control_portal(master, tb, master, eid, topo,
     
    21042110                tb = t.get_attribute('testbed')
    21052111                if tb:
    2106                     self.get_access(tb, None, user, tbparams, master,
     2112                    self.get_access(tb, None, tbparams, master,
    21072113                            export_project, access_user, services)
    21082114                    tbparams[k] = tbparams[tb]
     
    21962202            ]
    21972203
     2204        # transit and disconnected testbeds may not have a connInfo entry.
     2205        # Fill in the blanks.
     2206        for t in allocated.keys():
     2207            if not connInfo.has_key(t):
     2208                connInfo[t] = { }
     2209
    21982210        # Start a thread to do the resource allocation
    21992211        t  = Thread(target=self.allocate_resources,
Note: See TracChangeset for help on using the changeset viewer.