Statistics
| Branch: | Tag: | Revision:

root / lib / opcodes.py @ 150e978f

History | View | Annotate | Download (7.7 kB)

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

24 a8083063 Iustin Pop
This module implements the data structures which define the cluster
25 a8083063 Iustin Pop
operations - the so-called opcodes.
26 a8083063 Iustin Pop

27 a8083063 Iustin Pop

28 a8083063 Iustin Pop
This module implements the logic for doing operations in the cluster. There
29 a8083063 Iustin Pop
are two kinds of classes defined:
30 a8083063 Iustin Pop
  - opcodes, which are small classes only holding data for the task at hand
31 a8083063 Iustin Pop
  - logical units, which know how to deal with their specific opcode only
32 a8083063 Iustin Pop

33 a8083063 Iustin Pop
"""
34 a8083063 Iustin Pop
35 a8083063 Iustin Pop
# this are practically structures, so disable the message about too
36 a8083063 Iustin Pop
# few public methods:
37 a8083063 Iustin Pop
# pylint: disable-msg=R0903
38 a8083063 Iustin Pop
39 a8083063 Iustin Pop
class OpCode(object):
40 a8083063 Iustin Pop
  """Abstract OpCode"""
41 a8083063 Iustin Pop
  OP_ID = "OP_ABSTRACT"
42 a8083063 Iustin Pop
  __slots__ = []
43 a8083063 Iustin Pop
44 a8083063 Iustin Pop
  def __init__(self, **kwargs):
45 a8083063 Iustin Pop
    for key in kwargs:
46 a8083063 Iustin Pop
      if key not in self.__slots__:
47 3ecf6786 Iustin Pop
        raise TypeError("OpCode %s doesn't support the parameter '%s'" %
48 3ecf6786 Iustin Pop
                        (self.__class__.__name__, key))
49 a8083063 Iustin Pop
      setattr(self, key, kwargs[key])
50 a8083063 Iustin Pop
51 a8083063 Iustin Pop
52 a8083063 Iustin Pop
class OpInitCluster(OpCode):
53 a8083063 Iustin Pop
  """Initialise the cluster."""
54 a8083063 Iustin Pop
  OP_ID = "OP_CLUSTER_INIT"
55 a8083063 Iustin Pop
  __slots__ = ["cluster_name", "secondary_ip", "hypervisor_type",
56 880478f8 Iustin Pop
               "vg_name", "mac_prefix", "def_bridge", "master_netdev"]
57 a8083063 Iustin Pop
58 a8083063 Iustin Pop
59 a8083063 Iustin Pop
class OpDestroyCluster(OpCode):
60 a8083063 Iustin Pop
  """Destroy the cluster."""
61 a8083063 Iustin Pop
  OP_ID = "OP_CLUSTER_DESTROY"
62 a8083063 Iustin Pop
  __slots__ = []
63 a8083063 Iustin Pop
64 a8083063 Iustin Pop
65 a8083063 Iustin Pop
class OpQueryClusterInfo(OpCode):
66 fdc267f4 Iustin Pop
  """Query cluster information."""
67 a8083063 Iustin Pop
  OP_ID = "OP_CLUSTER_QUERY"
68 a8083063 Iustin Pop
  __slots__ = []
69 a8083063 Iustin Pop
70 a8083063 Iustin Pop
71 a8083063 Iustin Pop
class OpClusterCopyFile(OpCode):
72 fdc267f4 Iustin Pop
  """Copy a file to multiple nodes."""
73 a8083063 Iustin Pop
  OP_ID = "OP_CLUSTER_COPYFILE"
74 a8083063 Iustin Pop
  __slots__ = ["nodes", "filename"]
75 a8083063 Iustin Pop
76 a8083063 Iustin Pop
77 a8083063 Iustin Pop
class OpRunClusterCommand(OpCode):
78 fdc267f4 Iustin Pop
  """Run a command on multiple nodes."""
79 a8083063 Iustin Pop
  OP_ID = "OP_CLUSTER_RUNCOMMAND"
80 a8083063 Iustin Pop
  __slots__ = ["nodes", "command"]
81 a8083063 Iustin Pop
82 a8083063 Iustin Pop
83 a8083063 Iustin Pop
class OpVerifyCluster(OpCode):
84 fdc267f4 Iustin Pop
  """Verify the cluster state."""
85 a8083063 Iustin Pop
  OP_ID = "OP_CLUSTER_VERIFY"
86 a8083063 Iustin Pop
  __slots__ = []
87 a8083063 Iustin Pop
88 a8083063 Iustin Pop
89 150e978f Iustin Pop
class OpVerifyDisks(OpCode):
90 150e978f Iustin Pop
  """Verify the cluster disks.
91 150e978f Iustin Pop

92 150e978f Iustin Pop
  Parameters: none
93 150e978f Iustin Pop

94 150e978f Iustin Pop
  Result: two lists:
95 150e978f Iustin Pop
    - list of node names with bad data returned (unreachable, etc.)
96 150e978f Iustin Pop
    - list of instances with degraded disks (that should be activated)
97 150e978f Iustin Pop

98 150e978f Iustin Pop
  In normal operation, both lists should be empty. A non-empty
99 150e978f Iustin Pop
  instance list is still ok (errors were fixed) but non-empty node
100 150e978f Iustin Pop
  list means some node is down, and probably there are unfixable drbd
101 150e978f Iustin Pop
  errors.
102 150e978f Iustin Pop

103 150e978f Iustin Pop
  Note that only instances that are drbd-based are taken into
104 150e978f Iustin Pop
  consideration. This might need to be revisited in the future.
105 150e978f Iustin Pop

106 150e978f Iustin Pop
  """
107 150e978f Iustin Pop
  OP_ID = "OP_CLUSTER_VERIFY_DISKS"
108 150e978f Iustin Pop
  __slots__ = []
109 150e978f Iustin Pop
110 150e978f Iustin Pop
111 a8083063 Iustin Pop
class OpMasterFailover(OpCode):
112 fdc267f4 Iustin Pop
  """Do a master failover."""
113 a8083063 Iustin Pop
  OP_ID = "OP_CLUSTER_MASTERFAILOVER"
114 a8083063 Iustin Pop
  __slots__ = []
115 a8083063 Iustin Pop
116 a8083063 Iustin Pop
117 a8083063 Iustin Pop
class OpDumpClusterConfig(OpCode):
118 fdc267f4 Iustin Pop
  """Dump the cluster configuration."""
119 a8083063 Iustin Pop
  OP_ID = "OP_CLUSTER_DUMPCONFIG"
120 a8083063 Iustin Pop
  __slots__ = []
121 a8083063 Iustin Pop
122 a8083063 Iustin Pop
123 07bd8a51 Iustin Pop
class OpRenameCluster(OpCode):
124 07bd8a51 Iustin Pop
  """Rename the cluster."""
125 07bd8a51 Iustin Pop
  OP_ID = "OP_CLUSTER_RENAME"
126 07bd8a51 Iustin Pop
  __slots__ = ["name"]
127 07bd8a51 Iustin Pop
128 07bd8a51 Iustin Pop
129 07bd8a51 Iustin Pop
# node opcodes
130 07bd8a51 Iustin Pop
131 a8083063 Iustin Pop
class OpRemoveNode(OpCode):
132 a8083063 Iustin Pop
  """Remove a node."""
133 a8083063 Iustin Pop
  OP_ID = "OP_NODE_REMOVE"
134 a8083063 Iustin Pop
  __slots__ = ["node_name"]
135 a8083063 Iustin Pop
136 a8083063 Iustin Pop
137 a8083063 Iustin Pop
class OpAddNode(OpCode):
138 a8083063 Iustin Pop
  """Add a node."""
139 a8083063 Iustin Pop
  OP_ID = "OP_NODE_ADD"
140 a8083063 Iustin Pop
  __slots__ = ["node_name", "primary_ip", "secondary_ip"]
141 a8083063 Iustin Pop
142 a8083063 Iustin Pop
143 a8083063 Iustin Pop
class OpQueryNodes(OpCode):
144 a8083063 Iustin Pop
  """Compute the list of nodes."""
145 a8083063 Iustin Pop
  OP_ID = "OP_NODE_QUERY"
146 246e180a Iustin Pop
  __slots__ = ["output_fields", "names"]
147 a8083063 Iustin Pop
148 a8083063 Iustin Pop
149 dcb93971 Michael Hanselmann
class OpQueryNodeVolumes(OpCode):
150 dcb93971 Michael Hanselmann
  """Get list of volumes on node."""
151 dcb93971 Michael Hanselmann
  OP_ID = "OP_NODE_QUERYVOLS"
152 dcb93971 Michael Hanselmann
  __slots__ = ["nodes", "output_fields"]
153 dcb93971 Michael Hanselmann
154 dcb93971 Michael Hanselmann
155 a8083063 Iustin Pop
# instance opcodes
156 a8083063 Iustin Pop
157 a8083063 Iustin Pop
class OpCreateInstance(OpCode):
158 fdc267f4 Iustin Pop
  """Create an instance."""
159 a8083063 Iustin Pop
  OP_ID = "OP_INSTANCE_CREATE"
160 a8083063 Iustin Pop
  __slots__ = ["instance_name", "mem_size", "disk_size", "os_type", "pnode",
161 a8083063 Iustin Pop
               "disk_template", "snode", "swap_size", "mode",
162 a8083063 Iustin Pop
               "vcpus", "ip", "bridge", "src_node", "src_path", "start",
163 bdd55f71 Iustin Pop
               "wait_for_sync", "ip_check"]
164 a8083063 Iustin Pop
165 a8083063 Iustin Pop
166 fe7b0351 Michael Hanselmann
class OpReinstallInstance(OpCode):
167 fdc267f4 Iustin Pop
  """Reinstall an instance's OS."""
168 fe7b0351 Michael Hanselmann
  OP_ID = "OP_INSTANCE_REINSTALL"
169 d0834de3 Michael Hanselmann
  __slots__ = ["instance_name", "os_type"]
170 fe7b0351 Michael Hanselmann
171 fe7b0351 Michael Hanselmann
172 a8083063 Iustin Pop
class OpRemoveInstance(OpCode):
173 a8083063 Iustin Pop
  """Remove an instance."""
174 a8083063 Iustin Pop
  OP_ID = "OP_INSTANCE_REMOVE"
175 1d67656e Iustin Pop
  __slots__ = ["instance_name", "ignore_failures"]
176 a8083063 Iustin Pop
177 a8083063 Iustin Pop
178 decd5f45 Iustin Pop
class OpRenameInstance(OpCode):
179 decd5f45 Iustin Pop
  """Rename an instance."""
180 decd5f45 Iustin Pop
  OP_ID = "OP_INSTANCE_RENAME"
181 decd5f45 Iustin Pop
  __slots__ = ["instance_name", "ignore_ip", "new_name"]
182 decd5f45 Iustin Pop
183 decd5f45 Iustin Pop
184 a8083063 Iustin Pop
class OpStartupInstance(OpCode):
185 fdc267f4 Iustin Pop
  """Startup an instance."""
186 a8083063 Iustin Pop
  OP_ID = "OP_INSTANCE_STARTUP"
187 a8083063 Iustin Pop
  __slots__ = ["instance_name", "force", "extra_args"]
188 a8083063 Iustin Pop
189 a8083063 Iustin Pop
190 a8083063 Iustin Pop
class OpShutdownInstance(OpCode):
191 fdc267f4 Iustin Pop
  """Shutdown an instance."""
192 a8083063 Iustin Pop
  OP_ID = "OP_INSTANCE_SHUTDOWN"
193 a8083063 Iustin Pop
  __slots__ = ["instance_name"]
194 a8083063 Iustin Pop
195 a8083063 Iustin Pop
196 bf6929a2 Alexander Schreiber
class OpRebootInstance(OpCode):
197 bf6929a2 Alexander Schreiber
  """Reboot an instance."""
198 bf6929a2 Alexander Schreiber
  OP_ID = "OP_INSTANCE_STARTUP"
199 bf6929a2 Alexander Schreiber
  __slots__ = ["instance_name", "reboot_type", "extra_args",
200 bf6929a2 Alexander Schreiber
               "ignore_secondaries" ]
201 bf6929a2 Alexander Schreiber
202 bf6929a2 Alexander Schreiber
203 a8083063 Iustin Pop
class OpAddMDDRBDComponent(OpCode):
204 a8083063 Iustin Pop
  """Add a MD-DRBD component."""
205 a8083063 Iustin Pop
  OP_ID = "OP_INSTANCE_ADD_MDDRBD"
206 a8083063 Iustin Pop
  __slots__ = ["instance_name", "remote_node", "disk_name"]
207 a8083063 Iustin Pop
208 a8083063 Iustin Pop
209 a8083063 Iustin Pop
class OpRemoveMDDRBDComponent(OpCode):
210 a8083063 Iustin Pop
  """Remove a MD-DRBD component."""
211 a8083063 Iustin Pop
  OP_ID = "OP_INSTANCE_REMOVE_MDDRBD"
212 a8083063 Iustin Pop
  __slots__ = ["instance_name", "disk_name", "disk_id"]
213 a8083063 Iustin Pop
214 a8083063 Iustin Pop
215 a8083063 Iustin Pop
class OpReplaceDisks(OpCode):
216 fdc267f4 Iustin Pop
  """Replace the disks of an instance."""
217 a8083063 Iustin Pop
  OP_ID = "OP_INSTANCE_REPLACE_DISKS"
218 a9e0c397 Iustin Pop
  __slots__ = ["instance_name", "remote_node", "mode", "disks"]
219 a8083063 Iustin Pop
220 a8083063 Iustin Pop
221 a8083063 Iustin Pop
class OpFailoverInstance(OpCode):
222 a8083063 Iustin Pop
  """Failover an instance."""
223 a8083063 Iustin Pop
  OP_ID = "OP_INSTANCE_FAILOVER"
224 a8083063 Iustin Pop
  __slots__ = ["instance_name", "ignore_consistency"]
225 a8083063 Iustin Pop
226 a8083063 Iustin Pop
227 a8083063 Iustin Pop
class OpConnectConsole(OpCode):
228 fdc267f4 Iustin Pop
  """Connect to an instance's console."""
229 a8083063 Iustin Pop
  OP_ID = "OP_INSTANCE_CONSOLE"
230 a8083063 Iustin Pop
  __slots__ = ["instance_name"]
231 a8083063 Iustin Pop
232 a8083063 Iustin Pop
233 a8083063 Iustin Pop
class OpActivateInstanceDisks(OpCode):
234 fdc267f4 Iustin Pop
  """Activate an instance's disks."""
235 a8083063 Iustin Pop
  OP_ID = "OP_INSTANCE_ACTIVATE_DISKS"
236 a8083063 Iustin Pop
  __slots__ = ["instance_name"]
237 a8083063 Iustin Pop
238 a8083063 Iustin Pop
239 a8083063 Iustin Pop
class OpDeactivateInstanceDisks(OpCode):
240 fdc267f4 Iustin Pop
  """Deactivate an instance's disks."""
241 a8083063 Iustin Pop
  OP_ID = "OP_INSTANCE_DEACTIVATE_DISKS"
242 a8083063 Iustin Pop
  __slots__ = ["instance_name"]
243 a8083063 Iustin Pop
244 a8083063 Iustin Pop
245 a8083063 Iustin Pop
class OpQueryInstances(OpCode):
246 a8083063 Iustin Pop
  """Compute the list of instances."""
247 a8083063 Iustin Pop
  OP_ID = "OP_INSTANCE_QUERY"
248 069dcc86 Iustin Pop
  __slots__ = ["output_fields", "names"]
249 a8083063 Iustin Pop
250 a8083063 Iustin Pop
251 a8083063 Iustin Pop
class OpQueryInstanceData(OpCode):
252 a8083063 Iustin Pop
  """Compute the run-time status of instances."""
253 a8083063 Iustin Pop
  OP_ID = "OP_INSTANCE_QUERY_DATA"
254 a8083063 Iustin Pop
  __slots__ = ["instances"]
255 a8083063 Iustin Pop
256 a8083063 Iustin Pop
257 a8083063 Iustin Pop
class OpSetInstanceParms(OpCode):
258 a8083063 Iustin Pop
  """Change the parameters of an instance."""
259 a8083063 Iustin Pop
  OP_ID = "OP_INSTANCE_SET_PARMS"
260 a8083063 Iustin Pop
  __slots__ = ["instance_name", "mem", "vcpus", "ip", "bridge"]
261 a8083063 Iustin Pop
262 a8083063 Iustin Pop
263 a8083063 Iustin Pop
# OS opcodes
264 a8083063 Iustin Pop
class OpDiagnoseOS(OpCode):
265 a8083063 Iustin Pop
  """Compute the list of guest operating systems."""
266 a8083063 Iustin Pop
  OP_ID = "OP_OS_DIAGNOSE"
267 a8083063 Iustin Pop
  __slots__ = []
268 a8083063 Iustin Pop
269 a8083063 Iustin Pop
# Exports opcodes
270 a8083063 Iustin Pop
class OpQueryExports(OpCode):
271 a8083063 Iustin Pop
  """Compute the list of exported images."""
272 a8083063 Iustin Pop
  OP_ID = "OP_BACKUP_QUERY"
273 a8083063 Iustin Pop
  __slots__ = ["nodes"]
274 a8083063 Iustin Pop
275 a8083063 Iustin Pop
class OpExportInstance(OpCode):
276 a8083063 Iustin Pop
  """Export an instance."""
277 a8083063 Iustin Pop
  OP_ID = "OP_BACKUP_EXPORT"
278 a8083063 Iustin Pop
  __slots__ = ["instance_name", "target_node", "shutdown"]
279 5c947f38 Iustin Pop
280 5c947f38 Iustin Pop
281 5c947f38 Iustin Pop
# Tags opcodes
282 5c947f38 Iustin Pop
class OpGetTags(OpCode):
283 5c947f38 Iustin Pop
  """Returns the tags of the given object."""
284 5c947f38 Iustin Pop
  OP_ID = "OP_TAGS_GET"
285 5c947f38 Iustin Pop
  __slots__ = ["kind", "name"]
286 5c947f38 Iustin Pop
287 5c947f38 Iustin Pop
288 73415719 Iustin Pop
class OpSearchTags(OpCode):
289 73415719 Iustin Pop
  """Searches the tags in the cluster for a given pattern."""
290 73415719 Iustin Pop
  OP_ID = "OP_TAGS_SEARCH"
291 73415719 Iustin Pop
  __slots__ = ["pattern"]
292 73415719 Iustin Pop
293 73415719 Iustin Pop
294 f27302fa Iustin Pop
class OpAddTags(OpCode):
295 f27302fa Iustin Pop
  """Add a list of tags on a given object."""
296 5c947f38 Iustin Pop
  OP_ID = "OP_TAGS_SET"
297 f27302fa Iustin Pop
  __slots__ = ["kind", "name", "tags"]
298 5c947f38 Iustin Pop
299 5c947f38 Iustin Pop
300 f27302fa Iustin Pop
class OpDelTags(OpCode):
301 f27302fa Iustin Pop
  """Remove a list of tags from a given object."""
302 5c947f38 Iustin Pop
  OP_ID = "OP_TAGS_DEL"
303 f27302fa Iustin Pop
  __slots__ = ["kind", "name", "tags"]