Revision 990ade2d

b/lib/constants.py
590 590
INSTANCE_REBOOT_HARD = "hard"
591 591
INSTANCE_REBOOT_FULL = "full"
592 592

  
593
REBOOT_TYPES = frozenset([INSTANCE_REBOOT_SOFT,
594
                          INSTANCE_REBOOT_HARD,
595
                          INSTANCE_REBOOT_FULL])
593
REBOOT_TYPES = frozenset([
594
  INSTANCE_REBOOT_SOFT,
595
  INSTANCE_REBOOT_HARD,
596
  INSTANCE_REBOOT_FULL
597
  ])
598

  
599
# instance reboot behaviors
600
INSTANCE_REBOOT_ALLOWED = "reboot"
601
INSTANCE_REBOOT_EXIT = "exit"
602

  
603
REBOOT_BEHAVIORS = frozenset([
604
  INSTANCE_REBOOT_ALLOWED,
605
  INSTANCE_REBOOT_EXIT
606
  ])
596 607

  
597 608
VTYPE_STRING = "string"
598 609
VTYPE_MAYBE_STRING = "maybe-string"
......
648 659
HV_CPU_MASK = "cpu_mask"
649 660
HV_MEM_PATH = "mem_path"
650 661
HV_BLOCKDEV_PREFIX = "blockdev_prefix"
662
HV_REBOOT_BEHAVIOR = "reboot_behavior"
651 663

  
652 664
HVS_PARAMETER_TYPES = {
653 665
  HV_BOOT_ORDER: VTYPE_STRING,
......
690 702
  HV_CPU_MASK: VTYPE_STRING,
691 703
  HV_MEM_PATH: VTYPE_STRING,
692 704
  HV_BLOCKDEV_PREFIX: VTYPE_STRING,
705
  HV_REBOOT_BEHAVIOR: VTYPE_STRING,
693 706
  }
694 707

  
695 708
HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
......
1178 1191
    HV_MIGRATION_PORT: 8002,
1179 1192
    HV_MIGRATION_MODE: HT_MIGRATION_LIVE,
1180 1193
    HV_BLOCKDEV_PREFIX: "sd",
1194
    HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED,
1181 1195
    },
1182 1196
  HT_XEN_HVM: {
1183 1197
    HV_BOOT_ORDER: "cd",
......
1194 1208
    HV_MIGRATION_MODE: HT_MIGRATION_NONLIVE,
1195 1209
    HV_USE_LOCALTIME: False,
1196 1210
    HV_BLOCKDEV_PREFIX: "hd",
1211
    HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED,
1197 1212
    },
1198 1213
  HT_KVM: {
1199 1214
    HV_KERNEL_PATH: "/boot/vmlinuz-2.6-kvmU",
......
1228 1243
    HV_VHOST_NET: False,
1229 1244
    HV_KVM_USE_CHROOT: False,
1230 1245
    HV_MEM_PATH: "",
1246
    HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED,
1231 1247
    },
1232 1248
  HT_FAKE: {
1233 1249
    },
b/lib/hypervisor/hv_kvm.py
194 194
    constants.HV_VHOST_NET: hv_base.NO_CHECK,
195 195
    constants.HV_KVM_USE_CHROOT: hv_base.NO_CHECK,
196 196
    constants.HV_MEM_PATH: hv_base.OPT_DIR_CHECK,
197
    constants.HV_REBOOT_BEHAVIOR:
198
      hv_base.ParamInSet(True, constants.REBOOT_BEHAVIORS)
197 199
    }
198 200

  
199 201
  _MIGRATION_STATUS_RE = re.compile("Migration\s+status:\s+(\w+)",
......
535 537
      kvm_cmd.extend(["-no-acpi"])
536 538
    if startup_paused:
537 539
      kvm_cmd.extend(["-S"])
540
    if instance.hvparams[constants.HV_REBOOT_BEHAVIOR] == \
541
        constants.INSTANCE_REBOOT_EXIT:
542
      kvm_cmd.extend(["-no-reboot"])
538 543

  
539 544
    hvp = instance.hvparams
540 545
    boot_disk = hvp[constants.HV_BOOT_ORDER] == constants.HT_BO_DISK
b/lib/hypervisor/hv_xen.py
470 470
    constants.HV_MIGRATION_MODE: hv_base.MIGRATION_MODE_CHECK,
471 471
    # TODO: Add a check for the blockdev prefix (matching [a-z:] or similar).
472 472
    constants.HV_BLOCKDEV_PREFIX: hv_base.NO_CHECK,
473
    constants.HV_REBOOT_BEHAVIOR:
474
      hv_base.ParamInSet(True, constants.REBOOT_BEHAVIORS)
473 475
    }
474 476

  
475 477
  @classmethod
......
529 531
    if hvp[constants.HV_ROOT_PATH]:
530 532
      config.write("root = '%s'\n" % hvp[constants.HV_ROOT_PATH])
531 533
    config.write("on_poweroff = 'destroy'\n")
532
    config.write("on_reboot = 'restart'\n")
534
    if hvp[constants.HV_REBOOT_BEHAVIOR] == constants.INSTANCE_REBOOT_ALLOWED:
535
      config.write("on_reboot = 'restart'\n")
536
    else:
537
      config.write("on_reboot = 'destroy'\n")
533 538
    config.write("on_crash = 'restart'\n")
534 539
    config.write("extra = '%s'\n" % hvp[constants.HV_KERNEL_ARGS])
535 540
    # just in case it exists
......
574 579
    constants.HV_USE_LOCALTIME: hv_base.NO_CHECK,
575 580
    # TODO: Add a check for the blockdev prefix (matching [a-z:] or similar).
576 581
    constants.HV_BLOCKDEV_PREFIX: hv_base.NO_CHECK,
582
    constants.HV_REBOOT_BEHAVIOR:
583
      hv_base.ParamInSet(True, constants.REBOOT_BEHAVIORS)
577 584
    }
578 585

  
579 586
  @classmethod
......
666 673
    config.write("disk = [%s]\n" % (",".join(disk_data)))
667 674

  
668 675
    config.write("on_poweroff = 'destroy'\n")
669
    config.write("on_reboot = 'restart'\n")
676
    if hvp[constants.HV_REBOOT_BEHAVIOR] == constants.INSTANCE_REBOOT_ALLOWED:
677
      config.write("on_reboot = 'restart'\n")
678
    else:
679
      config.write("on_reboot = 'destroy'\n")
670 680
    config.write("on_crash = 'restart'\n")
671 681
    # just in case it exists
672 682
    utils.RemoveFile("/etc/xen/auto/%s" % instance.name)
b/man/gnt-instance.rst
439 439
    This option specifies the keyboard mapping to be used. It is only
440 440
    needed when using the VNC console. For example: "fr" or "en-gb".
441 441

  
442
reboot\_behavior
443
    Valid for Xen PVM, Xen HVM and KVM hypervisors.
444

  
445
    Normally if an instance reboots, the hypervisor will restart it. If
446
    this option is set to ``exit``, the hypervisor will treat a reboot
447
    as a shutdown instead.
448

  
449
    It is set to ``reboot`` by default.
450

  
442 451

  
443 452
The ``-O (--os-parameters)`` option allows customisation of the OS
444 453
parameters. The actual parameter names and values depends on the OS

Also available in: Unified diff