def lock_many(ctx, num, machinetype, user=None, description=None):
- if user is None:
- user = misc.get_user()
- success, content, status = ls.send_request(
- 'POST',
- config.lock_server,
- urllib.urlencode(
- dict(
- user=user,
- num=num,
- machinetype=machinetype,
- desc=description,
- )))
- if success:
- machines = json.loads(content)
- log.debug('locked {machines}'.format(
- machines=', '.join(machines.keys())))
- if ctx.machine_type == 'vps':
- ok_machs = {}
- for machine in machines:
- if create_if_vm(ctx, machine):
- ok_machs[machine] = machines[machine]
- else:
- log.error('Unable to create virtual machine: %s' % machine)
- unlock_one(ctx, machine)
- return ok_machs
- return machines
- if status == 503:
- log.error('Insufficient nodes available to lock %d nodes.', num)
- else:
- log.error('Could not lock %d nodes, reason: unknown.', num)
+ machinetypes = misc.get_multi_machine_types(machinetype)
+ for machinetype in machinetypes:
+ if user is None:
+ user = misc.get_user()
+ success, content, status = ls.send_request(
+ 'POST',
+ config.lock_server,
+ urllib.urlencode(
+ dict(
+ user=user,
+ num=num,
+ machinetype=machinetype,
+ desc=description,
+ )))
+ if success:
+ machines = json.loads(content)
+ log.debug('locked {machines}'.format(
+ machines=', '.join(machines.keys())))
+ if machine_type == 'vps':
+ ok_machs = {}
+ for machine in machines:
+ if create_if_vm(ctx, machine):
+ ok_machs[machine] = machines[machine]
+ else:
+ log.error('Unable to create virtual machine: %s' % machine)
+ unlock_one(ctx, machine)
+ return ok_machs
+ return machines
+ if status == 503:
+ log.error('Insufficient nodes available to lock %d %s nodes.', num,machinetype)
+ else:
+ log.error('Could not lock %d %s nodes, reason: unknown.', num, machinetype)
return []
return ctx.config['downburst'].get('distroversion', os_version)
except (KeyError, AttributeError):
return os_version
+
+def get_multi_machine_types(machinetype):
+ """
+ Converts machine type string to list based on common deliminators
+ """
+ machinetypes = []
+ machine_type_deliminator = ['-',' ',',','\t']
+ for deliminator in machine_type_deliminator:
+ if deliminator in machinetype:
+ machinetypes = machinetype.split(deliminator)
+ break
+ if not machinetypes:
+ machinetypes.append(machinetype)
+ return machinetypes
--- /dev/null
+from .. import misc as teuthology
+
+class Mock: pass
+
+class TestGetMultiMachineTypes(object):
+
+ def test_space(self):
+ give = 'burnupi plana vps'
+ expect = ['burnupi','plana','vps']
+ assert teuthology.get_multi_machine_types(give) == expect
+
+ def test_tab(self):
+ give = 'burnupi plana vps'
+ expect = ['burnupi','plana','vps']
+ assert teuthology.get_multi_machine_types(give) == expect
+
+ def test_hiphen(self):
+ give = 'burnupi-plana-vps'
+ expect = ['burnupi','plana','vps']
+ assert teuthology.get_multi_machine_types(give) == expect
+
+ def test_comma(self):
+ give = 'burnupi,plana,vps'
+ expect = ['burnupi','plana','vps']
+ assert teuthology.get_multi_machine_types(give) == expect
+
+ def test_single(self):
+ give = 'burnupi'
+ expect = ['burnupi']
+ assert teuthology.get_multi_machine_types(give) == expect
+
+