4 # Copyright (C) 2006, 2007 Google Inc.
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.
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.
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
24 This module implements the data structures which define the cluster
25 operations - the so-called opcodes.
28 This module implements the logic for doing operations in the cluster. There
29 are two kinds of classes defined:
30 - opcodes, which are small classes only holding data for the task at hand
31 - logical units, which know how to deal with their specific opcode only
35 # this are practically structures, so disable the message about too
37 # pylint: disable-msg=R0903
44 def __init__(self, **kwargs):
46 if key not in self.__slots__:
47 raise TypeError("OpCode %s doesn't support the parameter '%s'" %
48 (self.__class__.__name__, key))
49 setattr(self, key, kwargs[key])
52 class OpInitCluster(OpCode):
53 """Initialise the cluster."""
54 OP_ID = "OP_CLUSTER_INIT"
55 __slots__ = ["cluster_name", "secondary_ip", "hypervisor_type",
56 "vg_name", "mac_prefix", "def_bridge", "master_netdev"]
59 class OpDestroyCluster(OpCode):
60 """Destroy the cluster."""
61 OP_ID = "OP_CLUSTER_DESTROY"
65 class OpQueryClusterInfo(OpCode):
66 """Query cluster information."""
67 OP_ID = "OP_CLUSTER_QUERY"
71 class OpClusterCopyFile(OpCode):
72 """Copy a file to multiple nodes."""
73 OP_ID = "OP_CLUSTER_COPYFILE"
74 __slots__ = ["nodes", "filename"]
77 class OpRunClusterCommand(OpCode):
78 """Run a command on multiple nodes."""
79 OP_ID = "OP_CLUSTER_RUNCOMMAND"
80 __slots__ = ["nodes", "command"]
83 class OpVerifyCluster(OpCode):
84 """Verify the cluster state."""
85 OP_ID = "OP_CLUSTER_VERIFY"
89 class OpMasterFailover(OpCode):
90 """Do a master failover."""
91 OP_ID = "OP_CLUSTER_MASTERFAILOVER"
95 class OpDumpClusterConfig(OpCode):
96 """Dump the cluster configuration."""
97 OP_ID = "OP_CLUSTER_DUMPCONFIG"
101 class OpRenameCluster(OpCode):
102 """Rename the cluster."""
103 OP_ID = "OP_CLUSTER_RENAME"
109 class OpRemoveNode(OpCode):
111 OP_ID = "OP_NODE_REMOVE"
112 __slots__ = ["node_name"]
115 class OpAddNode(OpCode):
117 OP_ID = "OP_NODE_ADD"
118 __slots__ = ["node_name", "primary_ip", "secondary_ip"]
121 class OpQueryNodes(OpCode):
122 """Compute the list of nodes."""
123 OP_ID = "OP_NODE_QUERY"
124 __slots__ = ["output_fields", "names"]
127 class OpQueryNodeVolumes(OpCode):
128 """Get list of volumes on node."""
129 OP_ID = "OP_NODE_QUERYVOLS"
130 __slots__ = ["nodes", "output_fields"]
135 class OpCreateInstance(OpCode):
136 """Create an instance."""
137 OP_ID = "OP_INSTANCE_CREATE"
138 __slots__ = ["instance_name", "mem_size", "disk_size", "os_type", "pnode",
139 "disk_template", "snode", "swap_size", "mode",
140 "vcpus", "ip", "bridge", "src_node", "src_path", "start",
141 "wait_for_sync", "ip_check"]
144 class OpReinstallInstance(OpCode):
145 """Reinstall an instance's OS."""
146 OP_ID = "OP_INSTANCE_REINSTALL"
147 __slots__ = ["instance_name", "os_type"]
150 class OpRemoveInstance(OpCode):
151 """Remove an instance."""
152 OP_ID = "OP_INSTANCE_REMOVE"
153 __slots__ = ["instance_name", "ignore_failures"]
156 class OpRenameInstance(OpCode):
157 """Rename an instance."""
158 OP_ID = "OP_INSTANCE_RENAME"
159 __slots__ = ["instance_name", "ignore_ip", "new_name"]
162 class OpStartupInstance(OpCode):
163 """Startup an instance."""
164 OP_ID = "OP_INSTANCE_STARTUP"
165 __slots__ = ["instance_name", "force", "extra_args"]
168 class OpShutdownInstance(OpCode):
169 """Shutdown an instance."""
170 OP_ID = "OP_INSTANCE_SHUTDOWN"
171 __slots__ = ["instance_name"]
174 class OpRebootInstance(OpCode):
175 """Reboot an instance."""
176 OP_ID = "OP_INSTANCE_STARTUP"
177 __slots__ = ["instance_name", "reboot_type", "extra_args",
178 "ignore_secondaries" ]
181 class OpAddMDDRBDComponent(OpCode):
182 """Add a MD-DRBD component."""
183 OP_ID = "OP_INSTANCE_ADD_MDDRBD"
184 __slots__ = ["instance_name", "remote_node", "disk_name"]
187 class OpRemoveMDDRBDComponent(OpCode):
188 """Remove a MD-DRBD component."""
189 OP_ID = "OP_INSTANCE_REMOVE_MDDRBD"
190 __slots__ = ["instance_name", "disk_name", "disk_id"]
193 class OpReplaceDisks(OpCode):
194 """Replace the disks of an instance."""
195 OP_ID = "OP_INSTANCE_REPLACE_DISKS"
196 __slots__ = ["instance_name", "remote_node"]
199 class OpFailoverInstance(OpCode):
200 """Failover an instance."""
201 OP_ID = "OP_INSTANCE_FAILOVER"
202 __slots__ = ["instance_name", "ignore_consistency"]
205 class OpConnectConsole(OpCode):
206 """Connect to an instance's console."""
207 OP_ID = "OP_INSTANCE_CONSOLE"
208 __slots__ = ["instance_name"]
211 class OpActivateInstanceDisks(OpCode):
212 """Activate an instance's disks."""
213 OP_ID = "OP_INSTANCE_ACTIVATE_DISKS"
214 __slots__ = ["instance_name"]
217 class OpDeactivateInstanceDisks(OpCode):
218 """Deactivate an instance's disks."""
219 OP_ID = "OP_INSTANCE_DEACTIVATE_DISKS"
220 __slots__ = ["instance_name"]
223 class OpQueryInstances(OpCode):
224 """Compute the list of instances."""
225 OP_ID = "OP_INSTANCE_QUERY"
226 __slots__ = ["output_fields", "names"]
229 class OpQueryInstanceData(OpCode):
230 """Compute the run-time status of instances."""
231 OP_ID = "OP_INSTANCE_QUERY_DATA"
232 __slots__ = ["instances"]
235 class OpSetInstanceParms(OpCode):
236 """Change the parameters of an instance."""
237 OP_ID = "OP_INSTANCE_SET_PARMS"
238 __slots__ = ["instance_name", "mem", "vcpus", "ip", "bridge"]
242 class OpDiagnoseOS(OpCode):
243 """Compute the list of guest operating systems."""
244 OP_ID = "OP_OS_DIAGNOSE"
248 class OpQueryExports(OpCode):
249 """Compute the list of exported images."""
250 OP_ID = "OP_BACKUP_QUERY"
251 __slots__ = ["nodes"]
253 class OpExportInstance(OpCode):
254 """Export an instance."""
255 OP_ID = "OP_BACKUP_EXPORT"
256 __slots__ = ["instance_name", "target_node", "shutdown"]
260 class OpGetTags(OpCode):
261 """Returns the tags of the given object."""
262 OP_ID = "OP_TAGS_GET"
263 __slots__ = ["kind", "name"]
266 class OpAddTags(OpCode):
267 """Add a list of tags on a given object."""
268 OP_ID = "OP_TAGS_SET"
269 __slots__ = ["kind", "name", "tags"]
272 class OpDelTags(OpCode):
273 """Remove a list of tags from a given object."""
274 OP_ID = "OP_TAGS_DEL"
275 __slots__ = ["kind", "name", "tags"]