Revision bad9404c snf-cyclades-app/synnefo/api/management/commands/server-list.py

b/snf-cyclades-app/synnefo/api/management/commands/server-list.py
34 34
from optparse import make_option
35 35

  
36 36
from django.core.management.base import BaseCommand, CommandError
37
from synnefo.management.common import format_vm_state, get_backend
38

  
37
from synnefo.management.common import (format_vm_state, get_backend,
38
                                       filter_results)
39 39
from synnefo.api.util import get_image
40 40
from synnefo.db.models import VirtualMachine
41 41

  
42 42

  
43
FIELDS = VirtualMachine._meta.get_all_field_names()
44

  
45

  
43 46
class Command(BaseCommand):
44 47
    help = "List servers"
45 48

  
......
59 62
            dest='build',
60 63
            default=False,
61 64
            help="List only servers in the building state"),
62
        make_option('--deleted', action='store_true', dest='deleted',
63
                    default=False,
64
                    help="Include deletd servers"),
65
        make_option('--backend-id', dest='backend_id',
66
                    help="List only servers of the specified backend")
65
        make_option('--deleted',
66
            action='store_true',
67
            dest='deleted',
68
            default=False,
69
            help="Include deleted servers"),
70
        make_option('--backend-id',
71
            dest='backend_id',
72
            help="List only servers of the specified backend"),
73
        make_option('--filter-by',
74
            dest='filter_by',
75
            help="Filter results. Comma seperated list of key `cond` val pairs"
76
                 " that displayed entries must satisfy. e.g."
77
                 " --filter-by \"operstate=STARTED,id>=22\"."
78
                 " Available keys are: %s" % ", ".join(FIELDS))
67 79
        )
68 80

  
69 81
    def handle(self, *args, **options):
......
87 99
        if options['build']:
88 100
            servers = servers.filter(operstate='BUILD')
89 101

  
102
        filter_by = options['filter_by']
103
        if filter_by:
104
            servers = filter_results(servers, filter_by)
105

  
90 106
        labels = ('id', 'name', 'owner', 'flavor', 'image', 'state',
91 107
                  'backend')
92 108
        columns = (3, 12, 20, 11, 12, 9, 40)

Also available in: Unified diff