diff --git a/doc/examples/batcher-instances.json b/doc/examples/batcher-instances.json new file mode 100644 index 0000000000000000000000000000000000000000..0f24606dec507be4c1cc56c34f050fbd7294b97e --- /dev/null +++ b/doc/examples/batcher-instances.json @@ -0,0 +1,14 @@ +{ + "instance1.example.com": { + "template": "drbd", + "os": "debootstrap", + "disk_size": ["25G"], + "ram_size": 512 + }, + "instance2.example.com": { + "template": "plain", + "os": "debootstrap", + "disk_size": ["100G"], + "ram_size": 512 + } +} diff --git a/lib/cmdlib.py b/lib/cmdlib.py index e54c17962e6e30d97d8bad3f8d34ea6490ba6d1d..4c3865f0961b3334cb422395f36b7e8be62978dd 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -4193,7 +4193,9 @@ class LUCreateInstance(LogicalUnit): raise errors.OpPrereqError("Invalid MAC address specified: %s" % mac) # bridge verification - bridge = nic.get("bridge", self.cfg.GetDefBridge()) + bridge = nic.get("bridge", None) + if bridge is None: + bridge = self.cfg.GetDefBridge() self.nics.append(objects.NIC(mac=mac, ip=nic_ip, bridge=bridge)) # disk checks/pre-build diff --git a/lib/utils.py b/lib/utils.py index 691b0ee6bc38a5e2f9df743112c813490762b76e..f1d0f993ffe05fa0f4b2e0f788f2c62b42a22903 100644 --- a/lib/utils.py +++ b/lib/utils.py @@ -751,7 +751,7 @@ def ParseUnit(input_string): is always an int in MiB. """ - m = re.match('^([.\d]+)\s*([a-zA-Z]+)?$', input_string) + m = re.match('^([.\d]+)\s*([a-zA-Z]+)?$', str(input_string)) if not m: raise errors.UnitParseError("Invalid format") diff --git a/scripts/gnt-instance b/scripts/gnt-instance index 959990ad9f054f60e46185ef2ef2e1d2d9213993..a57c7b4e3348b8014616c1cca3d0eaa4c16b4885 100755 --- a/scripts/gnt-instance +++ b/scripts/gnt-instance @@ -375,13 +375,12 @@ def BatchCreate(opts, args): in the form:: {"instance-name":{ - "disk_size": 25, - "swap_size": 1024, + "disk_size": [20480], "template": "drbd", "backend": { "memory": 512, "vcpus": 1 }, - "os": "etch-image", + "os": "debootstrap", "primary_node": "firstnode", "secondary_node": "secondnode", "iallocator": "dumb"} @@ -397,8 +396,7 @@ def BatchCreate(opts, args): @return: the desired exit code """ - _DEFAULT_SPECS = {"disk_size": 20 * 1024, - "swap_size": 4 * 1024, + _DEFAULT_SPECS = {"disk_size": [20 * 1024], "backend": {}, "iallocator": None, "primary_node": None, @@ -458,19 +456,29 @@ def BatchCreate(opts, args): if specs['hypervisor']: hypervisor, hvparams = specs['hypervisor'].iteritems() + disks = [] + for elem in specs['disk_size']: + try: + size = utils.ParseUnit(elem) + except ValueError, err: + raise errors.OpPrereqError("Invalid disk size '%s' for" + " instance %s: %s" % + (elem, name, err)) + disks.append({"size": size}) + + nic0 = {'ip': specs['ip'], 'bridge': specs['bridge'], 'mac': specs['mac']} + op = opcodes.OpCreateInstance(instance_name=name, - disk_size=specs['disk_size'], - swap_size=specs['swap_size'], + disks=disks, disk_template=specs['template'], mode=constants.INSTANCE_CREATE, os_type=specs['os'], pnode=specs['primary_node'], snode=specs['secondary_node'], - ip=specs['ip'], bridge=specs['bridge'], + nics=[nic0], start=specs['start'], ip_check=specs['ip_check'], wait_for_sync=True, - mac=specs['mac'], iallocator=specs['iallocator'], hypervisor=hypervisor, hvparams=hvparams,