Statistics
| Branch: | Tag: | Revision:

root / qa / qa_cluster.py @ b8aa46ed

History | View | Annotate | Download (11.1 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 58598264 Iustin Pop
  do_reboot = options.get('burnin-reboot', True)
255 1d103c02 Iustin Pop
  reboot_types = options.get("reboot-types", constants.REBOOT_TYPES)
256 23103544 Michael Hanselmann
257 cec9845c Michael Hanselmann
  # Get as many instances as we need
258 cec9845c Michael Hanselmann
  instances = []
259 cec9845c Michael Hanselmann
  try:
260 23103544 Michael Hanselmann
    try:
261 23103544 Michael Hanselmann
      num = qa_config.get('options', {}).get('burnin-instances', 1)
262 f1501b3f Michael Hanselmann
      for _ in range(0, num):
263 23103544 Michael Hanselmann
        instances.append(qa_config.AcquireInstance())
264 23103544 Michael Hanselmann
    except qa_error.OutOfInstancesError:
265 23103544 Michael Hanselmann
      print "Not enough instances, continuing anyway."
266 cec9845c Michael Hanselmann
267 23103544 Michael Hanselmann
    if len(instances) < 1:
268 23103544 Michael Hanselmann
      raise qa_error.Error("Burnin needs at least one instance")
269 cec9845c Michael Hanselmann
270 cec9845c Michael Hanselmann
    script = qa_utils.UploadFile(master['primary'], '../tools/burnin')
271 cec9845c Michael Hanselmann
    try:
272 23103544 Michael Hanselmann
      # Run burnin
273 cec9845c Michael Hanselmann
      cmd = [script,
274 cec9845c Michael Hanselmann
             '--os=%s' % qa_config.get('os'),
275 1d693311 Michael Hanselmann
             '--disk-size=%s' % ",".join(qa_config.get('disk')),
276 1d693311 Michael Hanselmann
             '--disk-growth=%s' % ",".join(qa_config.get('disk-growth')),
277 23103544 Michael Hanselmann
             '--disk-template=%s' % disk_template]
278 0b0a150a Iustin Pop
      if parallel:
279 0b0a150a Iustin Pop
        cmd.append('--parallel')
280 745c878a Iustin Pop
        cmd.append('--early-release')
281 0b0a150a Iustin Pop
      if check_inst:
282 0b0a150a Iustin Pop
        cmd.append('--http-check')
283 4dc76b24 Iustin Pop
      if do_rename:
284 4dc76b24 Iustin Pop
        cmd.append('--rename=%s' % do_rename)
285 58598264 Iustin Pop
      if not do_reboot:
286 58598264 Iustin Pop
        cmd.append('--no-reboot')
287 1d103c02 Iustin Pop
      else:
288 1d103c02 Iustin Pop
        cmd.append('--reboot-types=%s' % ",".join(reboot_types))
289 cec9845c Michael Hanselmann
      cmd += [inst['name'] for inst in instances]
290 cec9845c Michael Hanselmann
      AssertEqual(StartSSH(master['primary'],
291 cec9845c Michael Hanselmann
                           utils.ShellQuoteArgs(cmd)).wait(), 0)
292 cec9845c Michael Hanselmann
    finally:
293 cec9845c Michael Hanselmann
      cmd = ['rm', '-f', script]
294 cec9845c Michael Hanselmann
      AssertEqual(StartSSH(master['primary'],
295 cec9845c Michael Hanselmann
                           utils.ShellQuoteArgs(cmd)).wait(), 0)
296 cec9845c Michael Hanselmann
  finally:
297 cec9845c Michael Hanselmann
    for inst in instances:
298 cec9845c Michael Hanselmann
      qa_config.ReleaseInstance(inst)
299 cec9845c Michael Hanselmann
300 cec9845c Michael Hanselmann
301 cec9845c Michael Hanselmann
def TestClusterMasterFailover():
302 cec9845c Michael Hanselmann
  """gnt-cluster masterfailover"""
303 cec9845c Michael Hanselmann
  master = qa_config.GetMasterNode()
304 cec9845c Michael Hanselmann
305 cec9845c Michael Hanselmann
  failovermaster = qa_config.AcquireNode(exclude=master)
306 cec9845c Michael Hanselmann
  try:
307 cec9845c Michael Hanselmann
    cmd = ['gnt-cluster', 'masterfailover']
308 cec9845c Michael Hanselmann
    AssertEqual(StartSSH(failovermaster['primary'],
309 cec9845c Michael Hanselmann
                         utils.ShellQuoteArgs(cmd)).wait(), 0)
310 cec9845c Michael Hanselmann
311 cec9845c Michael Hanselmann
    cmd = ['gnt-cluster', 'masterfailover']
312 cec9845c Michael Hanselmann
    AssertEqual(StartSSH(master['primary'],
313 cec9845c Michael Hanselmann
                         utils.ShellQuoteArgs(cmd)).wait(), 0)
314 cec9845c Michael Hanselmann
  finally:
315 cec9845c Michael Hanselmann
    qa_config.ReleaseNode(failovermaster)
316 cec9845c Michael Hanselmann
317 cec9845c Michael Hanselmann
318 cec9845c Michael Hanselmann
def TestClusterCopyfile():
319 cec9845c Michael Hanselmann
  """gnt-cluster copyfile"""
320 cec9845c Michael Hanselmann
  master = qa_config.GetMasterNode()
321 cec9845c Michael Hanselmann
322 24818e8f Michael Hanselmann
  uniqueid = utils.NewUUID()
323 830da270 Michael Hanselmann
324 cec9845c Michael Hanselmann
  # Create temporary file
325 cec9845c Michael Hanselmann
  f = tempfile.NamedTemporaryFile()
326 830da270 Michael Hanselmann
  f.write(uniqueid)
327 cec9845c Michael Hanselmann
  f.flush()
328 cec9845c Michael Hanselmann
  f.seek(0)
329 cec9845c Michael Hanselmann
330 cec9845c Michael Hanselmann
  # Upload file to master node
331 cec9845c Michael Hanselmann
  testname = qa_utils.UploadFile(master['primary'], f.name)
332 cec9845c Michael Hanselmann
  try:
333 cec9845c Michael Hanselmann
    # Copy file to all nodes
334 cec9845c Michael Hanselmann
    cmd = ['gnt-cluster', 'copyfile', testname]
335 cec9845c Michael Hanselmann
    AssertEqual(StartSSH(master['primary'],
336 cec9845c Michael Hanselmann
                         utils.ShellQuoteArgs(cmd)).wait(), 0)
337 830da270 Michael Hanselmann
    _CheckFileOnAllNodes(testname, uniqueid)
338 cec9845c Michael Hanselmann
  finally:
339 830da270 Michael Hanselmann
    _RemoveFileFromAllNodes(testname)
340 830da270 Michael Hanselmann
341 830da270 Michael Hanselmann
342 830da270 Michael Hanselmann
def TestClusterCommand():
343 830da270 Michael Hanselmann
  """gnt-cluster command"""
344 830da270 Michael Hanselmann
  master = qa_config.GetMasterNode()
345 830da270 Michael Hanselmann
346 24818e8f Michael Hanselmann
  uniqueid = utils.NewUUID()
347 24818e8f Michael Hanselmann
  rfile = "/tmp/gnt%s" % utils.NewUUID()
348 830da270 Michael Hanselmann
  rcmd = utils.ShellQuoteArgs(['echo', '-n', uniqueid])
349 830da270 Michael Hanselmann
  cmd = utils.ShellQuoteArgs(['gnt-cluster', 'command',
350 830da270 Michael Hanselmann
                              "%s >%s" % (rcmd, rfile)])
351 830da270 Michael Hanselmann
352 830da270 Michael Hanselmann
  try:
353 830da270 Michael Hanselmann
    AssertEqual(StartSSH(master['primary'], cmd).wait(), 0)
354 830da270 Michael Hanselmann
    _CheckFileOnAllNodes(rfile, uniqueid)
355 830da270 Michael Hanselmann
  finally:
356 830da270 Michael Hanselmann
    _RemoveFileFromAllNodes(rfile)
357 cec9845c Michael Hanselmann
358 cec9845c Michael Hanselmann
359 cec9845c Michael Hanselmann
def TestClusterDestroy():
360 cec9845c Michael Hanselmann
  """gnt-cluster destroy"""
361 cec9845c Michael Hanselmann
  master = qa_config.GetMasterNode()
362 cec9845c Michael Hanselmann
363 283f9d4c Michael Hanselmann
  cmd = ['gnt-cluster', 'destroy', '--yes-do-it']
364 cec9845c Michael Hanselmann
  AssertEqual(StartSSH(master['primary'],
365 cec9845c Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)