Statistics
| Branch: | Tag: | Revision:

root / lib / opcodes.py @ 2f31098c

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