Revision c777c5fc

b/Makefile.am
1325 1325
	test/data/cluster_config_2.8.json \
1326 1326
	test/data/cluster_config_2.9.json \
1327 1327
	test/data/cluster_config_2.10.json \
1328
	test/data/cluster_config_2.11.json \
1328 1329
	test/data/instance-minor-pairing.txt \
1329 1330
	test/data/instance-prim-sec.txt \
1330 1331
	test/data/ip-addr-show-dummy0.txt \
b/NEWS
2 2
====
3 3

  
4 4

  
5
Version 2.12.0 alpha1
6
---------------------
7

  
8
*(unreleased)*
9

  
10

  
5 11
Version 2.11.0 alpha1
6 12
---------------------
7 13

  
b/README
1
Ganeti 2.11
1
Ganeti 2.12
2 2
===========
3 3

  
4 4
For installation instructions, read the INSTALL and the doc/install.rst
b/configure.ac
1 1
# Configure script for Ganeti
2 2
m4_define([gnt_version_major], [2])
3
m4_define([gnt_version_minor], [11])
3
m4_define([gnt_version_minor], [12])
4 4
m4_define([gnt_version_revision], [0])
5 5
m4_define([gnt_version_suffix], [~alpha1])
6 6
m4_define([gnt_version_full],
b/doc/hooks.rst
1 1
Ganeti customisation using hooks
2 2
================================
3 3

  
4
Documents Ganeti version 2.11
4
Documents Ganeti version 2.12
5 5

  
6 6
.. contents::
7 7

  
b/doc/iallocator.rst
1 1
Ganeti automatic instance allocation
2 2
====================================
3 3

  
4
Documents Ganeti version 2.11
4
Documents Ganeti version 2.12
5 5

  
6 6
.. contents::
7 7

  
b/doc/security.rst
1 1
Security in Ganeti
2 2
==================
3 3

  
4
Documents Ganeti version 2.11
4
Documents Ganeti version 2.12
5 5

  
6 6
Ganeti was developed to run on internal, trusted systems. As such, the
7 7
security model is all-or-nothing.
b/doc/virtual-cluster.rst
1 1
Virtual cluster support
2 2
=======================
3 3

  
4
Documents Ganeti version 2.11
4
Documents Ganeti version 2.12
5 5

  
6 6
.. contents::
7 7

  
b/test/data/cluster_config_2.11.json
1
{
2
    "cluster": {
3
        "beparams": {
4
            "default": {
5
                "always_failover": false,
6
                "auto_balance": true,
7
                "maxmem": 128,
8
                "minmem": 128,
9
                "spindle_use": 1,
10
                "vcpus": 1
11
            }
12
        },
13
        "blacklisted_os": [],
14
        "candidate_certs": {},
15
        "candidate_pool_size": 10,
16
        "cluster_name": "cluster.name.example.com",
17
        "ctime": 1343869045.604884,
18
        "default_iallocator": "hail",
19
        "default_iallocator_params": {},
20
        "disk_state_static": {},
21
        "diskparams": {
22
            "blockdev": {},
23
            "diskless": {},
24
            "drbd": {
25
                "c-delay-target": 1,
26
                "c-fill-target": 200,
27
                "c-max-rate": 2048,
28
                "c-min-rate": 1024,
29
                "c-plan-ahead": 1,
30
                "data-stripes": 2,
31
                "disk-barriers": "bf",
32
                "disk-custom": "",
33
                "dynamic-resync": false,
34
                "meta-barriers": true,
35
                "meta-stripes": 2,
36
                "metavg": "xenvg",
37
                "net-custom": "",
38
                "resync-rate": 1024
39
            },
40
            "ext": {},
41
            "file": {},
42
            "plain": {
43
                "stripes": 2
44
            },
45
            "rbd": {
46
                "pool": "rbd"
47
            },
48
            "sharedfile": {}
49
        },
50
        "drbd_usermode_helper": "/bin/true",
51
        "enabled_disk_templates": [
52
            "drbd",
53
            "plain",
54
            "file",
55
            "sharedfile"
56
        ],
57
        "enabled_hypervisors": [
58
            "xen-pvm"
59
        ],
60
        "file_storage_dir": "",
61
        "hidden_os": [],
62
        "highest_used_port": 32105,
63
        "hv_state_static": {
64
            "xen-pvm": {
65
                "cpu_node": 1,
66
                "cpu_total": 1,
67
                "mem_hv": 0,
68
                "mem_node": 0,
69
                "mem_total": 0
70
            }
71
        },
72
        "hvparams": {
73
            "chroot": {
74
                "init_script": "/ganeti-chroot"
75
            },
76
            "fake": {},
77
            "kvm": {
78
                "acpi": true,
79
                "boot_order": "disk",
80
                "cdrom2_image_path": "",
81
                "cdrom_disk_type": "",
82
                "cdrom_image_path": "",
83
                "cpu_cores": 0,
84
                "cpu_mask": "all",
85
                "cpu_sockets": 0,
86
                "cpu_threads": 0,
87
                "cpu_type": "",
88
                "disk_cache": "default",
89
                "disk_type": "paravirtual",
90
                "floppy_image_path": "",
91
                "initrd_path": "",
92
                "kernel_args": "ro",
93
                "kernel_path": "/boot/vmlinuz-kvmU",
94
                "keymap": "",
95
                "kvm_extra": "",
96
                "kvm_flag": "",
97
                "kvm_path": "/usr/bin/kvm",
98
                "machine_version": "",
99
                "mem_path": "",
100
                "migration_bandwidth": 4,
101
                "migration_downtime": 30,
102
                "migration_mode": "live",
103
                "migration_port": 4041,
104
                "nic_type": "paravirtual",
105
                "reboot_behavior": "reboot",
106
                "root_path": "/dev/vda1",
107
                "security_domain": "",
108
                "security_model": "none",
109
                "serial_console": true,
110
                "serial_speed": 38400,
111
                "soundhw": "",
112
                "spice_bind": "",
113
                "spice_image_compression": "",
114
                "spice_ip_version": 0,
115
                "spice_jpeg_wan_compression": "",
116
                "spice_password_file": "",
117
                "spice_playback_compression": true,
118
                "spice_streaming_video": "",
119
                "spice_tls_ciphers": "HIGH:-DES:-3DES:-EXPORT:-ADH",
120
                "spice_use_tls": false,
121
                "spice_use_vdagent": true,
122
                "spice_zlib_glz_wan_compression": "",
123
                "usb_devices": "",
124
                "usb_mouse": "",
125
                "use_chroot": false,
126
                "use_localtime": false,
127
                "vga": "",
128
                "vhost_net": false,
129
                "vnc_bind_address": "",
130
                "vnc_password_file": "",
131
                "vnc_tls": false,
132
                "vnc_x509_path": "",
133
                "vnc_x509_verify": false
134
            },
135
            "lxc": {
136
                "cpu_mask": ""
137
            },
138
            "xen-hvm": {
139
                "acpi": true,
140
                "blockdev_prefix": "hd",
141
                "boot_order": "cd",
142
                "cdrom_image_path": "",
143
                "cpu_cap": 0,
144
                "cpu_mask": "all",
145
                "cpu_weight": 256,
146
                "device_model": "/usr/lib/xen/bin/qemu-dm",
147
                "disk_type": "paravirtual",
148
                "kernel_path": "/usr/lib/xen/boot/hvmloader",
149
                "migration_mode": "non-live",
150
                "migration_port": 8082,
151
                "nic_type": "rtl8139",
152
                "pae": true,
153
                "pci_pass": "",
154
                "reboot_behavior": "reboot",
155
                "use_localtime": false,
156
                "vif_script": "",
157
                "vnc_bind_address": "0.0.0.0",
158
                "vnc_password_file": "/your/vnc-cluster-password",
159
                "xen_cmd": "xm"
160
            },
161
            "xen-pvm": {
162
                "blockdev_prefix": "sd",
163
                "bootloader_args": "",
164
                "bootloader_path": "",
165
                "cpu_cap": 0,
166
                "cpu_mask": "all",
167
                "cpu_weight": 256,
168
                "initrd_path": "",
169
                "kernel_args": "ro",
170
                "kernel_path": "/boot/vmlinuz-xenU",
171
                "migration_mode": "live",
172
                "migration_port": 8082,
173
                "reboot_behavior": "reboot",
174
                "root_path": "/dev/xvda1",
175
                "use_bootloader": false,
176
                "vif_script": "",
177
                "xen_cmd": "xm"
178
            }
179
        },
180
        "ipolicy": {
181
            "disk-templates": [
182
                "sharedfile",
183
                "diskless",
184
                "plain",
185
                "blockdev",
186
                "drbd",
187
                "file",
188
                "rbd"
189
            ],
190
            "minmax": [
191
                {
192
                    "max": {
193
                        "cpu-count": 8,
194
                        "disk-count": 16,
195
                        "disk-size": 1048576,
196
                        "memory-size": 32768,
197
                        "nic-count": 8,
198
                        "spindle-use": 12
199
                    },
200
                    "min": {
201
                        "cpu-count": 1,
202
                        "disk-count": 1,
203
                        "disk-size": 1024,
204
                        "memory-size": 128,
205
                        "nic-count": 1,
206
                        "spindle-use": 1
207
                    }
208
                }
209
            ],
210
            "spindle-ratio": 32.0,
211
            "std": {
212
                "cpu-count": 1,
213
                "disk-count": 1,
214
                "disk-size": 1024,
215
                "memory-size": 128,
216
                "nic-count": 1,
217
                "spindle-use": 1
218
            },
219
            "vcpu-ratio": 1.0
220
        },
221
        "mac_prefix": "aa:bb:cc",
222
        "maintain_node_health": false,
223
        "master_ip": "192.0.2.87",
224
        "master_netdev": "eth0",
225
        "master_netmask": 32,
226
        "master_node": "9a12d554-75c0-4cb1-8064-103365145db0",
227
        "modify_etc_hosts": true,
228
        "modify_ssh_setup": true,
229
        "mtime": 1361964122.79471,
230
        "ndparams": {
231
            "exclusive_storage": false,
232
            "oob_program": "",
233
            "spindle_count": 1
234
        },
235
        "nicparams": {
236
            "default": {
237
                "link": "br974",
238
                "mode": "bridged"
239
            }
240
        },
241
        "os_hvp": {
242
            "TEMP-Ganeti-QA-OS": {
243
                "xen-hvm": {
244
                    "acpi": false,
245
                    "pae": true
246
                },
247
                "xen-pvm": {
248
                    "root_path": "/dev/sda5"
249
                }
250
            }
251
        },
252
        "osparams": {},
253
        "prealloc_wipe_disks": false,
254
        "primary_ip_family": 2,
255
        "reserved_lvs": [],
256
        "rsahostkeypub": "YOURKEY",
257
        "serial_no": 3189,
258
        "shared_file_storage_dir": "/srv/ganeti/shared-file-storage",
259
        "tags": [
260
            "mytag"
261
        ],
262
        "tcpudp_port_pool": [
263
            32101,
264
            32102,
265
            32103,
266
            32104,
267
            32105
268
        ],
269
        "uid_pool": [],
270
        "use_external_mip_script": false,
271
        "uuid": "dddf8c12-f2d8-4718-a35b-7804daf12a3f",
272
        "volume_group_name": "xenvg"
273
    },
274
    "ctime": 1343869045.605523,
275
    "instances": {
276
        "4e091bdc-e205-4ed7-8a47-0c9130a6619f": {
277
            "admin_state": "up",
278
            "beparams": {},
279
            "ctime": 1354038435.343601,
280
            "disk_template": "plain",
281
            "disks": [
282
                {
283
                    "dev_type": "plain",
284
                    "iv_name": "disk/0",
285
                    "logical_id": [
286
                        "xenvg",
287
                        "b27a576a-13f7-4f07-885c-63fcad4fdfcc.disk0"
288
                    ],
289
                    "mode": "rw",
290
                    "params": {},
291
                    "size": 1280,
292
                    "uuid": "150bd154-8e23-44d1-b762-5065ae5a507b"
293
                }
294
            ],
295
            "hvparams": {},
296
            "hypervisor": "xen-pvm",
297
            "mtime": 1354224585.700732,
298
            "name": "instance3.example.com",
299
            "nics": [
300
                {
301
                    "mac": "aa:bb:cc:5e:5c:75",
302
                    "nicparams": {},
303
                    "uuid": "1ab090c1-e017-406c-afb4-fc285cb43e31"
304
                }
305
            ],
306
            "os": "debian-image",
307
            "osparams": {},
308
            "primary_node": "2ae3d962-2dad-44f2-bdb1-85f77107f907",
309
            "serial_no": 4,
310
            "tags": [],
311
            "uuid": "4e091bdc-e205-4ed7-8a47-0c9130a6619f"
312
        },
313
        "6c078d22-3eb6-4780-857d-81772e09eef1": {
314
            "admin_state": "up",
315
            "beparams": {},
316
            "ctime": 1363620258.608976,
317
            "disk_template": "drbd",
318
            "disks": [
319
                {
320
                    "children": [
321
                        {
322
                            "dev_type": "plain",
323
                            "logical_id": [
324
                                "xenvg",
325
                                "5c390722-6a7a-4bb4-9cef-98d896a8e6b1.disk0_data"
326
                            ],
327
                            "params": {},
328
                            "size": 1024
329
                        },
330
                        {
331
                            "dev_type": "plain",
332
                            "logical_id": [
333
                                "xenvg",
334
                                "5c390722-6a7a-4bb4-9cef-98d896a8e6b1.disk0_meta"
335
                            ],
336
                            "params": {},
337
                            "size": 128
338
                        }
339
                    ],
340
                    "dev_type": "drbd",
341
                    "iv_name": "disk/0",
342
                    "logical_id": [
343
                        "9a12d554-75c0-4cb1-8064-103365145db0",
344
                        "41f9c238-173c-4120-9e41-04ad379b647a",
345
                        32100,
346
                        0,
347
                        0,
348
                        "d3c3fd475fcbaf5fd177fb245ac43b71247ada38"
349
                    ],
350
                    "mode": "rw",
351
                    "params": {},
352
                    "size": 1024,
353
                    "uuid": "77ced3a5-6756-49ae-8d1f-274e27664c05"
354
                }
355
            ],
356
            "hvparams": {},
357
            "hypervisor": "xen-pvm",
358
            "mtime": 1363620320.874901,
359
            "name": "instance1.example.com",
360
            "nics": [
361
                {
362
                    "mac": "aa:bb:cc:b2:6e:0b",
363
                    "nicparams": {},
364
                    "uuid": "2c953d72-fac4-4aa9-a225-4131bb271791"
365
                }
366
            ],
367
            "os": "busybox",
368
            "osparams": {},
369
            "primary_node": "9a12d554-75c0-4cb1-8064-103365145db0",
370
            "serial_no": 2,
371
            "uuid": "6c078d22-3eb6-4780-857d-81772e09eef1"
372
        },
373
        "8fde9f6d-e1f1-4850-9e9c-154966f622f5": {
374
            "admin_state": "up",
375
            "beparams": {},
376
            "ctime": 1355186880.451181,
377
            "disk_template": "plain",
378
            "disks": [
379
                {
380
                    "dev_type": "plain",
381
                    "iv_name": "disk/0",
382
                    "logical_id": [
383
                        "xenvg",
384
                        "3e559cd7-1024-4294-a923-a9fd13182b2f.disk0"
385
                    ],
386
                    "mode": "rw",
387
                    "params": {},
388
                    "size": 102400,
389
                    "uuid": "79acf611-be58-4334-9fe4-4f2b73ae8abb"
390
                }
391
            ],
392
            "hvparams": {},
393
            "hypervisor": "xen-pvm",
394
            "mtime": 1355186898.307642,
395
            "name": "instance2.example.com",
396
            "nics": [
397
                {
398
                    "mac": "aa:bb:cc:56:83:fb",
399
                    "nicparams": {},
400
                    "uuid": "1cf95562-e676-4fd0-8214-e8b84a2f7bd1"
401
                }
402
            ],
403
            "os": "debian-image",
404
            "osparams": {},
405
            "primary_node": "41f9c238-173c-4120-9e41-04ad379b647a",
406
            "serial_no": 2,
407
            "tags": [],
408
            "uuid": "8fde9f6d-e1f1-4850-9e9c-154966f622f5"
409
        }
410
    },
411
    "mtime": 1367352404.758083,
412
    "networks": {
413
        "99f0128a-1c84-44da-90b9-9581ea00c075": {
414
            "ext_reservations": "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
415
            "name": "a network",
416
            "network": "203.0.113.0/24",
417
            "reservations": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
418
            "serial_no": 1,
419
            "uuid": "99f0128a-1c84-44da-90b9-9581ea00c075"
420
        }
421
    },
422
    "nodegroups": {
423
        "5244a46d-7506-4e14-922d-02b58153dde1": {
424
            "alloc_policy": "preferred",
425
            "diskparams": {},
426
            "ipolicy": {},
427
            "mtime": 1361963775.575009,
428
            "name": "default",
429
            "ndparams": {},
430
            "networks": {},
431
            "serial_no": 125,
432
            "tags": [],
433
            "uuid": "5244a46d-7506-4e14-922d-02b58153dde1"
434
        },
435
        "6c0a8916-b719-45ad-95dd-82192b1e473f": {
436
            "alloc_policy": "preferred",
437
            "diskparams": {},
438
            "ipolicy": {
439
                "disk-templates": [
440
                    "plain"
441
                ],
442
                "minmax": [
443
                    {
444
                        "max": {
445
                            "cpu-count": 8,
446
                            "disk-count": 16,
447
                            "disk-size": 1048576,
448
                            "memory-size": 32768,
449
                            "nic-count": 18,
450
                            "spindle-use": 14
451
                        },
452
                        "min": {
453
                            "cpu-count": 2,
454
                            "disk-count": 2,
455
                            "disk-size": 1024,
456
                            "memory-size": 128,
457
                            "nic-count": 1,
458
                            "spindle-use": 1
459
                        }
460
                    }
461
                ],
462
                "spindle-ratio": 5.2,
463
                "vcpu-ratio": 3.14
464
            },
465
            "mtime": 1361963775.575009,
466
            "name": "another",
467
            "ndparams": {
468
                "exclusive_storage": true
469
            },
470
            "networks": {},
471
            "serial_no": 125,
472
            "tags": [],
473
            "uuid": "6c0a8916-b719-45ad-95dd-82192b1e473f"
474
        }
475
    },
476
    "nodes": {
477
        "2ae3d962-2dad-44f2-bdb1-85f77107f907": {
478
            "ctime": 1343869045.604884,
479
            "drained": false,
480
            "group": "5244a46d-7506-4e14-922d-02b58153dde1",
481
            "master_candidate": true,
482
            "master_capable": true,
483
            "mtime": 1358348755.779906,
484
            "name": "node2.example.com",
485
            "ndparams": {},
486
            "offline": false,
487
            "powered": true,
488
            "primary_ip": "192.0.2.83",
489
            "secondary_ip": "198.51.100.83",
490
            "serial_no": 6,
491
            "tags": [],
492
            "uuid": "2ae3d962-2dad-44f2-bdb1-85f77107f907",
493
            "vm_capable": true
494
        },
495
        "41f9c238-173c-4120-9e41-04ad379b647a": {
496
            "ctime": 1343869205.934807,
497
            "drained": false,
498
            "group": "5244a46d-7506-4e14-922d-02b58153dde1",
499
            "master_candidate": true,
500
            "master_capable": true,
501
            "mtime": 1353019704.885368,
502
            "name": "node3.example.com",
503
            "ndparams": {},
504
            "offline": false,
505
            "powered": true,
506
            "primary_ip": "192.0.2.84",
507
            "secondary_ip": "198.51.100.84",
508
            "serial_no": 2,
509
            "tags": [],
510
            "uuid": "41f9c238-173c-4120-9e41-04ad379b647a",
511
            "vm_capable": true
512
        },
513
        "9a12d554-75c0-4cb1-8064-103365145db0": {
514
            "ctime": 1349722460.022264,
515
            "drained": false,
516
            "group": "5244a46d-7506-4e14-922d-02b58153dde1",
517
            "master_candidate": true,
518
            "master_capable": true,
519
            "mtime": 1359986533.353329,
520
            "name": "node1.example.com",
521
            "ndparams": {},
522
            "offline": false,
523
            "powered": true,
524
            "primary_ip": "192.0.2.82",
525
            "secondary_ip": "198.51.100.82",
526
            "serial_no": 197,
527
            "tags": [],
528
            "uuid": "9a12d554-75c0-4cb1-8064-103365145db0",
529
            "vm_capable": true
530
        }
531
    },
532
    "serial_no": 7625,
533
    "version": 2110000
534
}
535

  
b/test/py/cfgupgrade_unittest.py
27 27
import shutil
28 28
import tempfile
29 29
import operator
30
import json
30 31

  
31 32
from ganeti import constants
32 33
from ganeti import utils
......
377 378
  def testUpgradeFullConfigFrom_2_9(self):
378 379
    self._TestUpgradeFromFile("cluster_config_2.9.json", False)
379 380

  
381
  def testUpgradeFullConfigFrom_2_10(self):
382
    self._TestUpgradeFromFile("cluster_config_2.10.json", False)
383

  
380 384
  def testUpgradeCurrent(self):
381 385
    self._TestSimpleUpgrade(constants.CONFIG_VERSION, False)
382 386

  
......
394 398
  def testDowngradeFullConfig(self):
395 399
    """Test for upgrade + downgrade combination."""
396 400
    # This test can work only with the previous version of a configuration!
397
    oldconfname = "cluster_config_2.10.json"
401
    oldconfname = "cluster_config_2.11.json"
398 402
    self._TestUpgradeFromFile(oldconfname, False)
399 403
    _RunUpgrade(self.tmpdir, False, True, downgrade=True)
400 404
    oldconf = self._LoadTestDataConfig(oldconfname)
401 405
    newconf = self._LoadConfig()
402

  
406
    old = open('/tmp/old', 'w')
407
    old.write(json.dumps(oldconf))
408
    old.close()
409
    new = open('/tmp/new', 'w')
410
    new.write(json.dumps(newconf))
411
    new.close()
403 412
    self.assertEqual(oldconf, newconf)
404 413

  
405 414
  def testDowngradeFullConfigBackwardFrom_2_7(self):
b/tools/cfgupgrade
54 54
#: Target major version we will upgrade to
55 55
TARGET_MAJOR = 2
56 56
#: Target minor version we will upgrade to
57
TARGET_MINOR = 11
57
TARGET_MINOR = 12
58 58
#: Target major version for downgrade
59 59
DOWNGRADE_MAJOR = 2
60 60
#: Target minor version for downgrade
61
DOWNGRADE_MINOR = 10
61
DOWNGRADE_MINOR = 11
62 62

  
63 63
# map of legacy device types
64 64
# (mapping differing old LD_* constants to new DT_* constants)
......
402 402
# DOWNGRADE ------------------------------------------------------------
403 403

  
404 404

  
405
def DowngradeCluster(config_data):
406
  cluster = config_data.get("cluster", None)
407
  if not cluster:
408
    raise Error("Cannot find the 'cluster' key in the configuration!")
409
  DowngradeNdparams(cluster)
410
  if "default_iallocator_params" in cluster:
411
    del cluster["default_iallocator_params"]
412
  if "candidate_certs" in cluster:
413
    del cluster["candidate_certs"]
414
  for param in ["gluster", "gluster_storage_dir"]:
415
    if param in cluster:
416
      del cluster[param]
417

  
418

  
419
def DowngradeGroups(config_data):
420
  for group in config_data["nodegroups"].values():
421
    DowngradeNdparams(group)
422

  
423

  
424
def DowngradeNdparams(group_or_cluster):
425
  ssh_port = group_or_cluster["ndparams"].pop("ssh_port", None)
426
  if (ssh_port is not None) and (ssh_port != 22):
427
    raise Error(("The cluster or some node group has configured SSH port %d."
428
                 " Refusing to downgrade as it will most certainly fail."
429
                 ) % (ssh_port, ))
430

  
431

  
432 405
def DowngradeAll(config_data):
433 406
  # Any code specific to a particular version should be labeled that way, so
434 407
  # it can be removed when updating to the next version.
435 408
  config_data["version"] = version.BuildVersion(DOWNGRADE_MAJOR,
436 409
                                                DOWNGRADE_MINOR, 0)
437
  DowngradeCluster(config_data)
438
  DowngradeGroups(config_data)
439 410

  
440 411

  
441 412
def main():
......
557 528
                   config_minor, config_revision))
558 529
    DowngradeAll(config_data)
559 530

  
560
  # Upgrade from 2.{0..10} to 2.11
561
  elif config_major == 2 and config_minor in range(0, 11):
531
  # Upgrade from 2.{0..10} to 2.12
532
  elif config_major == 2 and config_minor in range(0, 12):
562 533
    if config_revision != 0:
563 534
      logging.warning("Config revision is %s, not 0", config_revision)
564 535
    UpgradeAll(config_data)

Also available in: Unified diff