Don't remove master's hostname from /etc/hosts on cluster destroy.
[ganeti-local] / lib / opcodes.py
1 #
2 #
3
4 # Copyright (C) 2006, 2007 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 """OpCodes module
23
24 This module implements the data structures which define the cluster
25 operations - the so-called opcodes.
26
27
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
32
33 """
34
35 # this are practically structures, so disable the message about too
36 # few public methods:
37 # pylint: disable-msg=R0903
38
39 class OpCode(object):
40   """Abstract OpCode"""
41   OP_ID = "OP_ABSTRACT"
42   __slots__ = []
43
44   def __init__(self, **kwargs):
45     for key in 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])
50
51
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"]
57
58
59 class OpDestroyCluster(OpCode):
60   """Destroy the cluster."""
61   OP_ID = "OP_CLUSTER_DESTROY"
62   __slots__ = []
63
64
65 class OpQueryClusterInfo(OpCode):
66   """Query cluster information."""
67   OP_ID = "OP_CLUSTER_QUERY"
68   __slots__ = []
69
70
71 class OpClusterCopyFile(OpCode):
72   """Copy a file to multiple nodes."""
73   OP_ID = "OP_CLUSTER_COPYFILE"
74   __slots__ = ["nodes", "filename"]
75
76
77 class OpRunClusterCommand(OpCode):
78   """Run a command on multiple nodes."""
79   OP_ID = "OP_CLUSTER_RUNCOMMAND"
80   __slots__ = ["nodes", "command"]
81
82
83 class OpVerifyCluster(OpCode):
84   """Verify the cluster state."""
85   OP_ID = "OP_CLUSTER_VERIFY"
86   __slots__ = []
87
88
89 class OpMasterFailover(OpCode):
90   """Do a master failover."""
91   OP_ID = "OP_CLUSTER_MASTERFAILOVER"
92   __slots__ = []
93
94
95 class OpDumpClusterConfig(OpCode):
96   """Dump the cluster configuration."""
97   OP_ID = "OP_CLUSTER_DUMPCONFIG"
98   __slots__ = []
99
100
101 class OpRenameCluster(OpCode):
102   """Rename the cluster."""
103   OP_ID = "OP_CLUSTER_RENAME"
104   __slots__ = ["name"]
105
106
107 # node opcodes
108
109 class OpRemoveNode(OpCode):
110   """Remove a node."""
111   OP_ID = "OP_NODE_REMOVE"
112   __slots__ = ["node_name"]
113
114
115 class OpAddNode(OpCode):
116   """Add a node."""
117   OP_ID = "OP_NODE_ADD"
118   __slots__ = ["node_name", "primary_ip", "secondary_ip"]
119
120
121 class OpQueryNodes(OpCode):
122   """Compute the list of nodes."""
123   OP_ID = "OP_NODE_QUERY"
124   __slots__ = ["output_fields", "names"]
125
126
127 class OpQueryNodeVolumes(OpCode):
128   """Get list of volumes on node."""
129   OP_ID = "OP_NODE_QUERYVOLS"
130   __slots__ = ["nodes", "output_fields"]
131
132
133 # instance opcodes
134
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"]
142
143
144 class OpReinstallInstance(OpCode):
145   """Reinstall an instance's OS."""
146   OP_ID = "OP_INSTANCE_REINSTALL"
147   __slots__ = ["instance_name", "os_type"]
148
149
150 class OpRemoveInstance(OpCode):
151   """Remove an instance."""
152   OP_ID = "OP_INSTANCE_REMOVE"
153   __slots__ = ["instance_name", "ignore_failures"]
154
155
156 class OpRenameInstance(OpCode):
157   """Rename an instance."""
158   OP_ID = "OP_INSTANCE_RENAME"
159   __slots__ = ["instance_name", "ignore_ip", "new_name"]
160
161
162 class OpStartupInstance(OpCode):
163   """Startup an instance."""
164   OP_ID = "OP_INSTANCE_STARTUP"
165   __slots__ = ["instance_name", "force", "extra_args"]
166
167
168 class OpShutdownInstance(OpCode):
169   """Shutdown an instance."""
170   OP_ID = "OP_INSTANCE_SHUTDOWN"
171   __slots__ = ["instance_name"]
172
173
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" ]
179
180
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"]
185
186
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"]
191
192
193 class OpReplaceDisks(OpCode):
194   """Replace the disks of an instance."""
195   OP_ID = "OP_INSTANCE_REPLACE_DISKS"
196   __slots__ = ["instance_name", "remote_node", "mode", "disks"]
197
198
199 class OpFailoverInstance(OpCode):
200   """Failover an instance."""
201   OP_ID = "OP_INSTANCE_FAILOVER"
202   __slots__ = ["instance_name", "ignore_consistency"]
203
204
205 class OpConnectConsole(OpCode):
206   """Connect to an instance's console."""
207   OP_ID = "OP_INSTANCE_CONSOLE"
208   __slots__ = ["instance_name"]
209
210
211 class OpActivateInstanceDisks(OpCode):
212   """Activate an instance's disks."""
213   OP_ID = "OP_INSTANCE_ACTIVATE_DISKS"
214   __slots__ = ["instance_name"]
215
216
217 class OpDeactivateInstanceDisks(OpCode):
218   """Deactivate an instance's disks."""
219   OP_ID = "OP_INSTANCE_DEACTIVATE_DISKS"
220   __slots__ = ["instance_name"]
221
222
223 class OpQueryInstances(OpCode):
224   """Compute the list of instances."""
225   OP_ID = "OP_INSTANCE_QUERY"
226   __slots__ = ["output_fields", "names"]
227
228
229 class OpQueryInstanceData(OpCode):
230   """Compute the run-time status of instances."""
231   OP_ID = "OP_INSTANCE_QUERY_DATA"
232   __slots__ = ["instances"]
233
234
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"]
239
240
241 # OS opcodes
242 class OpDiagnoseOS(OpCode):
243   """Compute the list of guest operating systems."""
244   OP_ID = "OP_OS_DIAGNOSE"
245   __slots__ = []
246
247 # Exports opcodes
248 class OpQueryExports(OpCode):
249   """Compute the list of exported images."""
250   OP_ID = "OP_BACKUP_QUERY"
251   __slots__ = ["nodes"]
252
253 class OpExportInstance(OpCode):
254   """Export an instance."""
255   OP_ID = "OP_BACKUP_EXPORT"
256   __slots__ = ["instance_name", "target_node", "shutdown"]
257
258
259 # Tags opcodes
260 class OpGetTags(OpCode):
261   """Returns the tags of the given object."""
262   OP_ID = "OP_TAGS_GET"
263   __slots__ = ["kind", "name"]
264
265
266 class OpSearchTags(OpCode):
267   """Searches the tags in the cluster for a given pattern."""
268   OP_ID = "OP_TAGS_SEARCH"
269   __slots__ = ["pattern"]
270
271
272 class OpAddTags(OpCode):
273   """Add a list of tags on a given object."""
274   OP_ID = "OP_TAGS_SET"
275   __slots__ = ["kind", "name", "tags"]
276
277
278 class OpDelTags(OpCode):
279   """Remove a list of tags from a given object."""
280   OP_ID = "OP_TAGS_DEL"
281   __slots__ = ["kind", "name", "tags"]