Statistics
| Branch: | Tag: | Revision:

root / lib / cmdlib / query.py @ 18397489

History | View | Annotate | Download (2.8 kB)

1
#
2
#
3

    
4
# Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Google Inc.
5
#
6
# This program is free software; you can redistribute it and/or modify
7
# it under the terms of the GNU General Public License as published by
8
# the Free Software Foundation; either version 2 of the License, or
9
# (at your option) any later version.
10
#
11
# This program is distributed in the hope that it will be useful, but
12
# WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
# General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License
17
# along with this program; if not, write to the Free Software
18
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19
# 02110-1301, USA.
20

    
21

    
22
"""Logical units for queries."""
23

    
24
from ganeti import constants
25
from ganeti import errors
26
from ganeti import query
27
from ganeti.cmdlib.backup import ExportQuery
28
from ganeti.cmdlib.base import NoHooksLU
29
from ganeti.cmdlib.cluster import ClusterQuery
30
from ganeti.cmdlib.group import GroupQuery
31
from ganeti.cmdlib.instance_query import InstanceQuery
32
from ganeti.cmdlib.misc import ExtStorageQuery
33
from ganeti.cmdlib.network import NetworkQuery
34
from ganeti.cmdlib.node import NodeQuery
35
from ganeti.cmdlib.operating_system import OsQuery
36

    
37

    
38
#: Query type implementations
39
_QUERY_IMPL = {
40
  constants.QR_CLUSTER: ClusterQuery,
41
  constants.QR_INSTANCE: InstanceQuery,
42
  constants.QR_NODE: NodeQuery,
43
  constants.QR_GROUP: GroupQuery,
44
  constants.QR_NETWORK: NetworkQuery,
45
  constants.QR_OS: OsQuery,
46
  constants.QR_EXTSTORAGE: ExtStorageQuery,
47
  constants.QR_EXPORT: ExportQuery,
48
  }
49

    
50
assert set(_QUERY_IMPL.keys()) == constants.QR_VIA_OP
51

    
52

    
53
def _GetQueryImplementation(name):
54
  """Returns the implemtnation for a query type.
55

56
  @param name: Query type, must be one of L{constants.QR_VIA_OP}
57

58
  """
59
  try:
60
    return _QUERY_IMPL[name]
61
  except KeyError:
62
    raise errors.OpPrereqError("Unknown query resource '%s'" % name,
63
                               errors.ECODE_INVAL)
64

    
65

    
66
class LUQuery(NoHooksLU):
67
  """Query for resources/items of a certain kind.
68

69
  """
70
  # pylint: disable=W0142
71
  REQ_BGL = False
72

    
73
  def CheckArguments(self):
74
    qcls = _GetQueryImplementation(self.op.what)
75

    
76
    self.impl = qcls(self.op.qfilter, self.op.fields, self.op.use_locking)
77

    
78
  def ExpandNames(self):
79
    self.impl.ExpandNames(self)
80

    
81
  def DeclareLocks(self, level):
82
    self.impl.DeclareLocks(self, level)
83

    
84
  def Exec(self, feedback_fn):
85
    return self.impl.NewStyleQuery(self)
86

    
87

    
88
class LUQueryFields(NoHooksLU):
89
  """Query for resources/items of a certain kind.
90

91
  """
92
  # pylint: disable=W0142
93
  REQ_BGL = False
94

    
95
  def CheckArguments(self):
96
    self.qcls = _GetQueryImplementation(self.op.what)
97

    
98
  def ExpandNames(self):
99
    self.needed_locks = {}
100

    
101
  def Exec(self, feedback_fn):
102
    return query.QueryFields(self.qcls.FIELDS, self.op.fields)