Ignore:
Timestamp:
May 27, 2010 2:25:36 AM (14 years ago)
Author:
Ted Faber <faber@…>
Branches:
axis_example, compt_changes, info-ops, master, version-3.01, version-3.02
Children:
1962a5b
Parents:
0de1b94
Message:

Add service to selectively hide hosts from other testbeds

File:
1 edited

Legend:

Unmodified
Added
Removed
  • fedd/federation/experiment_control.py

    r0de1b94 r5334044  
    4646# Right now, no support for composition.
    4747class federated_service:
    48     def __init__(self, name, exporter=None, importers=[], params={ }, reqs=[]):
     48    def __init__(self, name, exporter=None, importers=None, params=None,
     49            reqs=None, portal=None):
    4950        self.name=name
    5051        self.exporter=exporter
    51         self.importers=importers
    52         self.params = params
    53         self.reqs = reqs
     52        if importers is None: self.importers = []
     53        else: self.importers=importers
     54        if params is None: self.params = { }
     55        else: self.params = params
     56        if reqs is None: self.reqs = []
     57        else: self.reqs = reqs
     58
     59        if portal is not None:
     60            self.portal = portal
     61        else:
     62            self.portal = (name in federated_service.needs_portal)
    5463
    5564    def __str__(self):
     
    5766                (self.name, self.exporter, self.importers, self.params,
    5867                        [ (r['name'], r['visibility']) for r in self.reqs] )
     68
     69    needs_portal = ('SMB', 'seer', 'tmcd', 'project_export', 'seer_master')
    5970
    6071class experiment_control_local:
     
    16891700                        if a.attribute == 'testbed'])
    16901701
     1702            tb_hosts = { }
     1703            for tb in testbeds:
     1704                tb_hosts[tb] = [ e.name for e in top.elements \
     1705                        if isinstance(e, topdl.Computer) and \
     1706                            e.get_attribute('testbed') and \
     1707                            e.get_attribute('testbed') == tb]
     1708
    16911709            masters = { }           # testbeds exporting services
     1710            pmasters = { }          # Testbeds exporting services that
     1711                                    # need portals
    16921712            for s in tb_services:
    1693                 # If this is a project_export request with the importall field
     1713                # If this is a service request with the importall field
    16941714                # set, fill it out.
    16951715
     
    17111731                                        a.get('value','')
    17121732
    1713                         masters[tb].append(federated_service(name=s['name'],
     1733                        fser = federated_service(name=s['name'],
    17141734                                exporter=tb, importers=s.get('import',[]),
    1715                                 params=params, reqs=[]))
     1735                                params=params)
     1736                        if fser.name == 'hide_hosts' \
     1737                                and 'hosts' not in fser.params:
     1738                            fser.params['hosts'] = \
     1739                                    ",".join(tb_hosts.get(fser.exporter, []))
     1740                        masters[tb].append(fser)
     1741
     1742                        if fser.portal:
     1743                            if tb not in pmasters: pmasters[tb] = [ fser ]
     1744                            else: pmasters[tb].append(fser)
    17161745                    else:
    17171746                        self.log.error('Testbed service does not have name " + \
     
    17221751            topo ={ }               # Sub topologies
    17231752            connInfo = { }          # Connection information
     1753
    17241754            self.get_access_to_testbeds(testbeds, access_user, allocated,
    17251755                    tbparams, masters)
     
    17611791            part = experiment_partition(self.auth, self.store_url, self.tbmap,
    17621792                    self.muxmax, self.direct_transit)
    1763             part.add_portals(top, topo, eid, masters, tbparams, ip_allocator,
     1793            part.add_portals(top, topo, eid, pmasters, tbparams, ip_allocator,
    17641794                    connInfo, expid)
    17651795            # Now get access to the dynamic testbeds (those added above)
Note: See TracChangeset for help on using the changeset viewer.