Changeset 14131


Ignore:
Timestamp:
03/15/12 16:12:38 (12 years ago)
Author:
ramonb
Message:

templatetags/cmts_extras.py:

  • added tags: getracks, getbasenets
  • see #4
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sara_cmt/sara_cmt/cluster/templatetags/cmts_extras.py

    r14130 r14131  
    159159
    160160from django.db.models import get_model
     161
     162@register.tag(name='getbasenets')
     163def do_getbasenets(parser, token):
     164
     165    try:
     166        tag, network_name, kw_as, varname = token.split_contents()
     167    except ValueError:
     168        raise template.TemplateSyntaxError, '%r tag requires exactly 4 arguments' % tag
     169
     170    return getBaseNets( varname, network_name )
     171
     172class getBaseNets(template.Node):
     173
     174    """
     175        Get list of basenets in a network (name)
     176
     177        Usage: {% getbasenets <network name> as <listname> %}
     178    """
     179
     180    def __init__(self, varname, network_name ):
     181
     182        self.varname = varname
     183        self.network_name = network_name.strip("'").strip('"').__str__()
     184        self.basenets = [ ]
     185
     186    def render(self, context):
     187
     188        if (self.network_name[0] == self.network_name[-1] and self.network_name[0] in ('"', "'")):
     189
     190            network_str = str( self.network_name.strip("'").strip('"') )
     191        else:
     192            # RB: Not quoted: must be a variable: attempt to resolve to value
     193            try:
     194                networkvar = template.Variable( str(self.network_name) )
     195                network_str = networkvar.resolve(context)
     196            except template.VariableDoesNotExist:
     197                #raise template.TemplateSyntaxError, '%r tag argument 1: not a variable %r' %( tag, path_str )
     198                pass
     199
     200        from IPy import IP
     201
     202        network_units = get_model('cluster', 'Network').objects.filter( name=str(network_str) )
     203
     204        for n in network_units:
     205
     206            for ipnum in IP( n.cidr ):
     207                if not base_net( ipnum ) in self.basenets:
     208                    self.basenets.append( str( base_net( ipnum ) ) )
     209
     210        context[ self.varname ] = self.basenets
     211        self.basenets = [ ]
     212
     213        return ''
     214
     215@register.tag(name='getracks')
     216def do_getracks(parser, token):
     217
     218    try:
     219        tag, cluster, kw_as, name = token.split_contents()
     220    except ValueError:
     221        raise template.TemplateSyntaxError, '%r tag requires exactly 4 arguments' % tag
     222
     223    return getRacks( name, cluster )
     224
     225class getRacks(template.Node):
     226
     227    """
     228        Get list of racks in a cluster
     229
     230        Usage: {% getracks <cluster> as <listname> %}
     231    """
     232
     233    def __init__(self, name, cluster):
     234
     235        self.name = name
     236        self.cluster = cluster.strip("'").strip('"').__str__()
     237        self.racks = [ ]
     238
     239    def render(self, context):
     240
     241        cluster_units = get_model('cluster', 'HardwareUnit').objects.filter( cluster__name=str(self.cluster) )
     242
     243        for u in cluster_units:
     244            if u.rack not in self.racks:
     245            self.racks.append( u.rack )
     246
     247        context[ self.name ] = self.racks
     248        return ''
    161249
    162250@register.tag(name='use')
Note: See TracChangeset for help on using the changeset viewer.