Statistics
| Branch: | Tag: | Revision:

root / qa / qa_cluster.py @ 5d831182

History | View | Annotate | Download (10.8 kB)

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

24 cec9845c Michael Hanselmann
"""
25 cec9845c Michael Hanselmann
26 cec9845c Michael Hanselmann
import tempfile
27 cec9845c Michael Hanselmann
28 6d4a1656 Michael Hanselmann
from ganeti import constants
29 cec9845c Michael Hanselmann
from ganeti import utils
30 cec9845c Michael Hanselmann
31 cec9845c Michael Hanselmann
import qa_config
32 cec9845c Michael Hanselmann
import qa_utils
33 cec9845c Michael Hanselmann
import qa_error
34 cec9845c Michael Hanselmann
35 6d4a1656 Michael Hanselmann
from qa_utils import AssertEqual, AssertNotEqual, StartSSH
36 cec9845c Michael Hanselmann
37 cec9845c Michael Hanselmann
38 830da270 Michael Hanselmann
def _RemoveFileFromAllNodes(filename):
39 830da270 Michael Hanselmann
  """Removes a file from all nodes.
40 830da270 Michael Hanselmann

41 830da270 Michael Hanselmann
  """
42 830da270 Michael Hanselmann
  for node in qa_config.get('nodes'):
43 830da270 Michael Hanselmann
    cmd = ['rm', '-f', filename]
44 830da270 Michael Hanselmann
    AssertEqual(StartSSH(node['primary'],
45 830da270 Michael Hanselmann
                         utils.ShellQuoteArgs(cmd)).wait(), 0)
46 830da270 Michael Hanselmann
47 830da270 Michael Hanselmann
48 830da270 Michael Hanselmann
def _CheckFileOnAllNodes(filename, content):
49 830da270 Michael Hanselmann
  """Verifies the content of the given file on all nodes.
50 830da270 Michael Hanselmann

51 830da270 Michael Hanselmann
  """
52 830da270 Michael Hanselmann
  cmd = utils.ShellQuoteArgs(["cat", filename])
53 830da270 Michael Hanselmann
  for node in qa_config.get('nodes'):
54 830da270 Michael Hanselmann
    AssertEqual(qa_utils.GetCommandOutput(node['primary'], cmd),
55 830da270 Michael Hanselmann
                content)
56 830da270 Michael Hanselmann
57 830da270 Michael Hanselmann
58 725ec2f1 René Nussbaumer
def TestClusterInit(rapi_user, rapi_secret):
59 cec9845c Michael Hanselmann
  """gnt-cluster init"""
60 cec9845c Michael Hanselmann
  master = qa_config.GetMasterNode()
61 cec9845c Michael Hanselmann
62 725ec2f1 René Nussbaumer
  # First create the RAPI credentials
63 a62d1901 Michael Hanselmann
  fh = tempfile.NamedTemporaryFile()
64 a62d1901 Michael Hanselmann
  try:
65 a62d1901 Michael Hanselmann
    fh.write("%s %s write\n" % (rapi_user, rapi_secret))
66 a62d1901 Michael Hanselmann
    fh.flush()
67 a62d1901 Michael Hanselmann
68 a62d1901 Michael Hanselmann
    tmpru = qa_utils.UploadFile(master["primary"], fh.name)
69 a62d1901 Michael Hanselmann
    try:
70 a62d1901 Michael Hanselmann
      cmd = ["mv", tmpru, constants.RAPI_USERS_FILE]
71 a62d1901 Michael Hanselmann
      AssertEqual(StartSSH(master["primary"],
72 a62d1901 Michael Hanselmann
                           utils.ShellQuoteArgs(cmd)).wait(), 0)
73 a62d1901 Michael Hanselmann
    finally:
74 a62d1901 Michael Hanselmann
      cmd = ["rm", "-f", tmpru]
75 a62d1901 Michael Hanselmann
      AssertEqual(StartSSH(master["primary"],
76 a62d1901 Michael Hanselmann
                           utils.ShellQuoteArgs(cmd)).wait(), 0)
77 a62d1901 Michael Hanselmann
  finally:
78 a62d1901 Michael Hanselmann
    fh.close()
79 a62d1901 Michael Hanselmann
80 a62d1901 Michael Hanselmann
  # Initialize cluster
81 cec9845c Michael Hanselmann
  cmd = ['gnt-cluster', 'init']
82 cec9845c Michael Hanselmann
83 cec9845c Michael Hanselmann
  if master.get('secondary', None):
84 cec9845c Michael Hanselmann
    cmd.append('--secondary-ip=%s' % master['secondary'])
85 cec9845c Michael Hanselmann
86 cec9845c Michael Hanselmann
  bridge = qa_config.get('bridge', None)
87 cec9845c Michael Hanselmann
  if bridge:
88 cec9845c Michael Hanselmann
    cmd.append('--bridge=%s' % bridge)
89 cec9845c Michael Hanselmann
    cmd.append('--master-netdev=%s' % bridge)
90 cec9845c Michael Hanselmann
91 2d6db53a Guido Trotter
  htype = qa_config.get('enabled-hypervisors', None)
92 b32f9859 Iustin Pop
  if htype:
93 2d6db53a Guido Trotter
    cmd.append('--enabled-hypervisors=%s' % htype)
94 b32f9859 Iustin Pop
95 cec9845c Michael Hanselmann
  cmd.append(qa_config.get('name'))
96 cec9845c Michael Hanselmann
97 cec9845c Michael Hanselmann
  AssertEqual(StartSSH(master['primary'],
98 cec9845c Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)
99 cec9845c Michael Hanselmann
100 cec9845c Michael Hanselmann
101 caea3b32 Iustin Pop
def TestClusterRename():
102 caea3b32 Iustin Pop
  """gnt-cluster rename"""
103 caea3b32 Iustin Pop
  master = qa_config.GetMasterNode()
104 caea3b32 Iustin Pop
105 caea3b32 Iustin Pop
  cmd = ['gnt-cluster', 'rename', '-f']
106 caea3b32 Iustin Pop
107 caea3b32 Iustin Pop
  original_name = qa_config.get('name')
108 caea3b32 Iustin Pop
  rename_target = qa_config.get('rename', None)
109 caea3b32 Iustin Pop
  if rename_target is None:
110 caea3b32 Iustin Pop
    print qa_utils.FormatError('"rename" entry is missing')
111 caea3b32 Iustin Pop
    return
112 caea3b32 Iustin Pop
113 caea3b32 Iustin Pop
  cmd_1 = cmd + [rename_target]
114 caea3b32 Iustin Pop
  cmd_2 = cmd + [original_name]
115 caea3b32 Iustin Pop
116 caea3b32 Iustin Pop
  cmd_verify = ['gnt-cluster', 'verify']
117 caea3b32 Iustin Pop
118 caea3b32 Iustin Pop
  AssertEqual(StartSSH(master['primary'],
119 caea3b32 Iustin Pop
                       utils.ShellQuoteArgs(cmd_1)).wait(), 0)
120 caea3b32 Iustin Pop
121 caea3b32 Iustin Pop
  AssertEqual(StartSSH(master['primary'],
122 caea3b32 Iustin Pop
                       utils.ShellQuoteArgs(cmd_verify)).wait(), 0)
123 caea3b32 Iustin Pop
124 caea3b32 Iustin Pop
  AssertEqual(StartSSH(master['primary'],
125 caea3b32 Iustin Pop
                       utils.ShellQuoteArgs(cmd_2)).wait(), 0)
126 caea3b32 Iustin Pop
127 caea3b32 Iustin Pop
  AssertEqual(StartSSH(master['primary'],
128 caea3b32 Iustin Pop
                       utils.ShellQuoteArgs(cmd_verify)).wait(), 0)
129 caea3b32 Iustin Pop
130 caea3b32 Iustin Pop
131 cec9845c Michael Hanselmann
def TestClusterVerify():
132 cec9845c Michael Hanselmann
  """gnt-cluster verify"""
133 cec9845c Michael Hanselmann
  master = qa_config.GetMasterNode()
134 cec9845c Michael Hanselmann
135 283f9d4c Michael Hanselmann
  cmd = ['gnt-cluster', 'verify']
136 cec9845c Michael Hanselmann
  AssertEqual(StartSSH(master['primary'],
137 cec9845c Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)
138 cec9845c Michael Hanselmann
139 cec9845c Michael Hanselmann
140 cec9845c Michael Hanselmann
def TestClusterInfo():
141 cec9845c Michael Hanselmann
  """gnt-cluster info"""
142 283f9d4c Michael Hanselmann
  master = qa_config.GetMasterNode()
143 283f9d4c Michael Hanselmann
144 cec9845c Michael Hanselmann
  cmd = ['gnt-cluster', 'info']
145 283f9d4c Michael Hanselmann
  AssertEqual(StartSSH(master['primary'],
146 283f9d4c Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)
147 283f9d4c Michael Hanselmann
148 283f9d4c Michael Hanselmann
149 283f9d4c Michael Hanselmann
def TestClusterGetmaster():
150 283f9d4c Michael Hanselmann
  """gnt-cluster getmaster"""
151 cec9845c Michael Hanselmann
  master = qa_config.GetMasterNode()
152 cec9845c Michael Hanselmann
153 283f9d4c Michael Hanselmann
  cmd = ['gnt-cluster', 'getmaster']
154 283f9d4c Michael Hanselmann
  AssertEqual(StartSSH(master['primary'],
155 283f9d4c Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)
156 283f9d4c Michael Hanselmann
157 283f9d4c Michael Hanselmann
158 283f9d4c Michael Hanselmann
def TestClusterVersion():
159 283f9d4c Michael Hanselmann
  """gnt-cluster version"""
160 283f9d4c Michael Hanselmann
  master = qa_config.GetMasterNode()
161 283f9d4c Michael Hanselmann
162 283f9d4c Michael Hanselmann
  cmd = ['gnt-cluster', 'version']
163 cec9845c Michael Hanselmann
  AssertEqual(StartSSH(master['primary'],
164 cec9845c Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)
165 cec9845c Michael Hanselmann
166 cec9845c Michael Hanselmann
167 6d4a1656 Michael Hanselmann
def TestClusterRenewCrypto():
168 6d4a1656 Michael Hanselmann
  """gnt-cluster renew-crypto"""
169 6d4a1656 Michael Hanselmann
  master = qa_config.GetMasterNode()
170 6d4a1656 Michael Hanselmann
171 6d4a1656 Michael Hanselmann
  # Conflicting options
172 6d4a1656 Michael Hanselmann
  cmd = ["gnt-cluster", "renew-crypto", "--force",
173 3db3eb2a Michael Hanselmann
         "--new-cluster-certificate", "--new-confd-hmac-key"]
174 3db3eb2a Michael Hanselmann
  conflicting = [
175 3db3eb2a Michael Hanselmann
    ["--new-rapi-certificate", "--rapi-certificate=/dev/null"],
176 3db3eb2a Michael Hanselmann
    ["--new-cluster-domain-secret", "--cluster-domain-secret=/dev/null"],
177 3db3eb2a Michael Hanselmann
    ]
178 3db3eb2a Michael Hanselmann
  for i in conflicting:
179 3db3eb2a Michael Hanselmann
    AssertNotEqual(StartSSH(master["primary"],
180 3db3eb2a Michael Hanselmann
                            utils.ShellQuoteArgs(cmd + i)).wait(), 0)
181 6d4a1656 Michael Hanselmann
182 6d4a1656 Michael Hanselmann
  # Invalid RAPI certificate
183 6d4a1656 Michael Hanselmann
  cmd = ["gnt-cluster", "renew-crypto", "--force",
184 6d4a1656 Michael Hanselmann
         "--rapi-certificate=/dev/null"]
185 6d4a1656 Michael Hanselmann
  AssertNotEqual(StartSSH(master["primary"],
186 6d4a1656 Michael Hanselmann
                          utils.ShellQuoteArgs(cmd)).wait(), 0)
187 6d4a1656 Michael Hanselmann
188 502f5236 Michael Hanselmann
  rapi_cert_backup = qa_utils.BackupFile(master["primary"],
189 502f5236 Michael Hanselmann
                                         constants.RAPI_CERT_FILE)
190 502f5236 Michael Hanselmann
  try:
191 502f5236 Michael Hanselmann
    # Custom RAPI certificate
192 502f5236 Michael Hanselmann
    fh = tempfile.NamedTemporaryFile()
193 6d4a1656 Michael Hanselmann
194 502f5236 Michael Hanselmann
    # Ensure certificate doesn't cause "gnt-cluster verify" to complain
195 502f5236 Michael Hanselmann
    validity = constants.SSL_CERT_EXPIRATION_WARN * 3
196 6d4a1656 Michael Hanselmann
197 5e26633b Michael Hanselmann
    utils.GenerateSelfSignedSslCert(fh.name, validity=validity)
198 6d4a1656 Michael Hanselmann
199 502f5236 Michael Hanselmann
    tmpcert = qa_utils.UploadFile(master["primary"], fh.name)
200 502f5236 Michael Hanselmann
    try:
201 502f5236 Michael Hanselmann
      cmd = ["gnt-cluster", "renew-crypto", "--force",
202 502f5236 Michael Hanselmann
             "--rapi-certificate=%s" % tmpcert]
203 502f5236 Michael Hanselmann
      AssertEqual(StartSSH(master["primary"],
204 502f5236 Michael Hanselmann
                           utils.ShellQuoteArgs(cmd)).wait(), 0)
205 502f5236 Michael Hanselmann
    finally:
206 502f5236 Michael Hanselmann
      cmd = ["rm", "-f", tmpcert]
207 502f5236 Michael Hanselmann
      AssertEqual(StartSSH(master["primary"],
208 502f5236 Michael Hanselmann
                           utils.ShellQuoteArgs(cmd)).wait(), 0)
209 502f5236 Michael Hanselmann
210 5e26633b Michael Hanselmann
    # Custom cluster domain secret
211 5e26633b Michael Hanselmann
    cds_fh = tempfile.NamedTemporaryFile()
212 5e26633b Michael Hanselmann
    cds_fh.write(utils.GenerateSecret())
213 5e26633b Michael Hanselmann
    cds_fh.write("\n")
214 5e26633b Michael Hanselmann
    cds_fh.flush()
215 5e26633b Michael Hanselmann
216 5e26633b Michael Hanselmann
    tmpcds = qa_utils.UploadFile(master["primary"], cds_fh.name)
217 5e26633b Michael Hanselmann
    try:
218 5e26633b Michael Hanselmann
      cmd = ["gnt-cluster", "renew-crypto", "--force",
219 5e26633b Michael Hanselmann
             "--cluster-domain-secret=%s" % tmpcds]
220 5e26633b Michael Hanselmann
      AssertEqual(StartSSH(master["primary"],
221 5e26633b Michael Hanselmann
                           utils.ShellQuoteArgs(cmd)).wait(), 0)
222 5e26633b Michael Hanselmann
    finally:
223 5e26633b Michael Hanselmann
      cmd = ["rm", "-f", tmpcds]
224 5e26633b Michael Hanselmann
      AssertEqual(StartSSH(master["primary"],
225 5e26633b Michael Hanselmann
                           utils.ShellQuoteArgs(cmd)).wait(), 0)
226 5e26633b Michael Hanselmann
227 502f5236 Michael Hanselmann
    # Normal case
228 6d4a1656 Michael Hanselmann
    cmd = ["gnt-cluster", "renew-crypto", "--force",
229 502f5236 Michael Hanselmann
           "--new-cluster-certificate", "--new-confd-hmac-key",
230 5e26633b Michael Hanselmann
           "--new-rapi-certificate", "--new-cluster-domain-secret"]
231 6d4a1656 Michael Hanselmann
    AssertEqual(StartSSH(master["primary"],
232 6d4a1656 Michael Hanselmann
                         utils.ShellQuoteArgs(cmd)).wait(), 0)
233 3db3eb2a Michael Hanselmann
234 502f5236 Michael Hanselmann
    # Restore RAPI certificate
235 3db3eb2a Michael Hanselmann
    cmd = ["gnt-cluster", "renew-crypto", "--force",
236 502f5236 Michael Hanselmann
           "--rapi-certificate=%s" % rapi_cert_backup]
237 3db3eb2a Michael Hanselmann
    AssertEqual(StartSSH(master["primary"],
238 3db3eb2a Michael Hanselmann
                         utils.ShellQuoteArgs(cmd)).wait(), 0)
239 3db3eb2a Michael Hanselmann
  finally:
240 502f5236 Michael Hanselmann
    cmd = ["rm", "-f", rapi_cert_backup]
241 3db3eb2a Michael Hanselmann
    AssertEqual(StartSSH(master["primary"],
242 3db3eb2a Michael Hanselmann
                         utils.ShellQuoteArgs(cmd)).wait(), 0)
243 3db3eb2a Michael Hanselmann
244 6d4a1656 Michael Hanselmann
245 cec9845c Michael Hanselmann
def TestClusterBurnin():
246 cec9845c Michael Hanselmann
  """Burnin"""
247 cec9845c Michael Hanselmann
  master = qa_config.GetMasterNode()
248 cec9845c Michael Hanselmann
249 0b0a150a Iustin Pop
  options = qa_config.get('options', {})
250 0b0a150a Iustin Pop
  disk_template = options.get('burnin-disk-template', 'drbd')
251 0b0a150a Iustin Pop
  parallel = options.get('burnin-in-parallel', False)
252 0b0a150a Iustin Pop
  check_inst = options.get('burnin-check-instances', False)
253 4dc76b24 Iustin Pop
  do_rename = options.get('burnin-rename', '')
254 23103544 Michael Hanselmann
255 cec9845c Michael Hanselmann
  # Get as many instances as we need
256 cec9845c Michael Hanselmann
  instances = []
257 cec9845c Michael Hanselmann
  try:
258 23103544 Michael Hanselmann
    try:
259 23103544 Michael Hanselmann
      num = qa_config.get('options', {}).get('burnin-instances', 1)
260 f1501b3f Michael Hanselmann
      for _ in range(0, num):
261 23103544 Michael Hanselmann
        instances.append(qa_config.AcquireInstance())
262 23103544 Michael Hanselmann
    except qa_error.OutOfInstancesError:
263 23103544 Michael Hanselmann
      print "Not enough instances, continuing anyway."
264 cec9845c Michael Hanselmann
265 23103544 Michael Hanselmann
    if len(instances) < 1:
266 23103544 Michael Hanselmann
      raise qa_error.Error("Burnin needs at least one instance")
267 cec9845c Michael Hanselmann
268 cec9845c Michael Hanselmann
    script = qa_utils.UploadFile(master['primary'], '../tools/burnin')
269 cec9845c Michael Hanselmann
    try:
270 23103544 Michael Hanselmann
      # Run burnin
271 cec9845c Michael Hanselmann
      cmd = [script,
272 cec9845c Michael Hanselmann
             '--os=%s' % qa_config.get('os'),
273 1d693311 Michael Hanselmann
             '--disk-size=%s' % ",".join(qa_config.get('disk')),
274 1d693311 Michael Hanselmann
             '--disk-growth=%s' % ",".join(qa_config.get('disk-growth')),
275 23103544 Michael Hanselmann
             '--disk-template=%s' % disk_template]
276 0b0a150a Iustin Pop
      if parallel:
277 0b0a150a Iustin Pop
        cmd.append('--parallel')
278 745c878a Iustin Pop
        cmd.append('--early-release')
279 0b0a150a Iustin Pop
      if check_inst:
280 0b0a150a Iustin Pop
        cmd.append('--http-check')
281 4dc76b24 Iustin Pop
      if do_rename:
282 4dc76b24 Iustin Pop
        cmd.append('--rename=%s' % do_rename)
283 cec9845c Michael Hanselmann
      cmd += [inst['name'] for inst in instances]
284 cec9845c Michael Hanselmann
      AssertEqual(StartSSH(master['primary'],
285 cec9845c Michael Hanselmann
                           utils.ShellQuoteArgs(cmd)).wait(), 0)
286 cec9845c Michael Hanselmann
    finally:
287 cec9845c Michael Hanselmann
      cmd = ['rm', '-f', script]
288 cec9845c Michael Hanselmann
      AssertEqual(StartSSH(master['primary'],
289 cec9845c Michael Hanselmann
                           utils.ShellQuoteArgs(cmd)).wait(), 0)
290 cec9845c Michael Hanselmann
  finally:
291 cec9845c Michael Hanselmann
    for inst in instances:
292 cec9845c Michael Hanselmann
      qa_config.ReleaseInstance(inst)
293 cec9845c Michael Hanselmann
294 cec9845c Michael Hanselmann
295 cec9845c Michael Hanselmann
def TestClusterMasterFailover():
296 cec9845c Michael Hanselmann
  """gnt-cluster masterfailover"""
297 cec9845c Michael Hanselmann
  master = qa_config.GetMasterNode()
298 cec9845c Michael Hanselmann
299 cec9845c Michael Hanselmann
  failovermaster = qa_config.AcquireNode(exclude=master)
300 cec9845c Michael Hanselmann
  try:
301 cec9845c Michael Hanselmann
    cmd = ['gnt-cluster', 'masterfailover']
302 cec9845c Michael Hanselmann
    AssertEqual(StartSSH(failovermaster['primary'],
303 cec9845c Michael Hanselmann
                         utils.ShellQuoteArgs(cmd)).wait(), 0)
304 cec9845c Michael Hanselmann
305 cec9845c Michael Hanselmann
    cmd = ['gnt-cluster', 'masterfailover']
306 cec9845c Michael Hanselmann
    AssertEqual(StartSSH(master['primary'],
307 cec9845c Michael Hanselmann
                         utils.ShellQuoteArgs(cmd)).wait(), 0)
308 cec9845c Michael Hanselmann
  finally:
309 cec9845c Michael Hanselmann
    qa_config.ReleaseNode(failovermaster)
310 cec9845c Michael Hanselmann
311 cec9845c Michael Hanselmann
312 cec9845c Michael Hanselmann
def TestClusterCopyfile():
313 cec9845c Michael Hanselmann
  """gnt-cluster copyfile"""
314 cec9845c Michael Hanselmann
  master = qa_config.GetMasterNode()
315 cec9845c Michael Hanselmann
316 24818e8f Michael Hanselmann
  uniqueid = utils.NewUUID()
317 830da270 Michael Hanselmann
318 cec9845c Michael Hanselmann
  # Create temporary file
319 cec9845c Michael Hanselmann
  f = tempfile.NamedTemporaryFile()
320 830da270 Michael Hanselmann
  f.write(uniqueid)
321 cec9845c Michael Hanselmann
  f.flush()
322 cec9845c Michael Hanselmann
  f.seek(0)
323 cec9845c Michael Hanselmann
324 cec9845c Michael Hanselmann
  # Upload file to master node
325 cec9845c Michael Hanselmann
  testname = qa_utils.UploadFile(master['primary'], f.name)
326 cec9845c Michael Hanselmann
  try:
327 cec9845c Michael Hanselmann
    # Copy file to all nodes
328 cec9845c Michael Hanselmann
    cmd = ['gnt-cluster', 'copyfile', testname]
329 cec9845c Michael Hanselmann
    AssertEqual(StartSSH(master['primary'],
330 cec9845c Michael Hanselmann
                         utils.ShellQuoteArgs(cmd)).wait(), 0)
331 830da270 Michael Hanselmann
    _CheckFileOnAllNodes(testname, uniqueid)
332 cec9845c Michael Hanselmann
  finally:
333 830da270 Michael Hanselmann
    _RemoveFileFromAllNodes(testname)
334 830da270 Michael Hanselmann
335 830da270 Michael Hanselmann
336 830da270 Michael Hanselmann
def TestClusterCommand():
337 830da270 Michael Hanselmann
  """gnt-cluster command"""
338 830da270 Michael Hanselmann
  master = qa_config.GetMasterNode()
339 830da270 Michael Hanselmann
340 24818e8f Michael Hanselmann
  uniqueid = utils.NewUUID()
341 24818e8f Michael Hanselmann
  rfile = "/tmp/gnt%s" % utils.NewUUID()
342 830da270 Michael Hanselmann
  rcmd = utils.ShellQuoteArgs(['echo', '-n', uniqueid])
343 830da270 Michael Hanselmann
  cmd = utils.ShellQuoteArgs(['gnt-cluster', 'command',
344 830da270 Michael Hanselmann
                              "%s >%s" % (rcmd, rfile)])
345 830da270 Michael Hanselmann
346 830da270 Michael Hanselmann
  try:
347 830da270 Michael Hanselmann
    AssertEqual(StartSSH(master['primary'], cmd).wait(), 0)
348 830da270 Michael Hanselmann
    _CheckFileOnAllNodes(rfile, uniqueid)
349 830da270 Michael Hanselmann
  finally:
350 830da270 Michael Hanselmann
    _RemoveFileFromAllNodes(rfile)
351 cec9845c Michael Hanselmann
352 cec9845c Michael Hanselmann
353 cec9845c Michael Hanselmann
def TestClusterDestroy():
354 cec9845c Michael Hanselmann
  """gnt-cluster destroy"""
355 cec9845c Michael Hanselmann
  master = qa_config.GetMasterNode()
356 cec9845c Michael Hanselmann
357 283f9d4c Michael Hanselmann
  cmd = ['gnt-cluster', 'destroy', '--yes-do-it']
358 cec9845c Michael Hanselmann
  AssertEqual(StartSSH(master['primary'],
359 cec9845c Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)