X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/12c3449a73f30f13437e4e888812b969898ed8d4..d792fe4f587dda5e53977daaf0d3a1c1eca322dd:/scripts/gnt-instance diff --git a/scripts/gnt-instance b/scripts/gnt-instance index 323e09f..464ead3 100755 --- a/scripts/gnt-instance +++ b/scripts/gnt-instance @@ -134,6 +134,29 @@ def _ConfirmOperation(inames, text): return choice +def _TransformPath(user_input): + """Transform a user path into a canonical value. + + This function transforms the a path passed as textual information + into the constants that the LU code expects. + + """ + if user_input: + if user_input.lower() == "default": + result_path = constants.VALUE_DEFAULT + elif user_input.lower() == "none": + result_path = constants.VALUE_NONE + else: + if not os.path.isabs(user_input): + raise errors.OpPrereqError("Path '%s' is not an absolute filename" % + user_input) + result_path = user_input + else: + result_path = constants.VALUE_DEFAULT + + return result_path + + def ListInstances(opts, args): """List instances and their properties. @@ -218,6 +241,9 @@ def AddInstance(opts, args): (pnode, snode) = SplitNodeOption(opts.node) + kernel_path = _TransformPath(opts.kernel_path) + initrd_path = _TransformPath(opts.initrd_path) + op = opcodes.OpCreateInstance(instance_name=instance, mem_size=opts.mem, disk_size=opts.size, swap_size=opts.swap, disk_template=opts.disk_template, @@ -226,7 +252,11 @@ def AddInstance(opts, args): snode=snode, vcpus=opts.vcpus, ip=opts.ip, bridge=opts.bridge, start=opts.start, ip_check=opts.ip_check, - wait_for_sync=opts.wait_for_sync) + wait_for_sync=opts.wait_for_sync, + mac=opts.mac, + kernel_path=kernel_path, + initrd_path=initrd_path, + hvm_boot_order=opts.hvm_boot_order) SubmitOpCode(op) return 0 @@ -242,8 +272,8 @@ def ReinstallInstance(opts, args): instance_name = args[0] if not opts.force: - usertext = ("This will reinstall the instance %s and remove " - "all data. Continue?") % instance_name + usertext = ("This will reinstall the instance %s and remove" + " all data. Continue?") % instance_name if not AskUser(usertext): return 1 @@ -596,6 +626,20 @@ def ShowInstanceConfig(opts, args): buf.write(" - primary: %s\n" % instance["pnode"]) buf.write(" - secondaries: %s\n" % ", ".join(instance["snodes"])) buf.write(" Operating system: %s\n" % instance["os"]) + buf.write(" Allocated network port: %s\n" % instance["network_port"]) + if instance["kernel_path"] in (None, constants.VALUE_DEFAULT): + kpath = "(default: %s)" % constants.XEN_KERNEL + else: + kpath = instance["kernel_path"] + buf.write(" Kernel path: %s\n" % kpath) + if instance["initrd_path"] in (None, constants.VALUE_DEFAULT): + initrd = "(default: %s)" % constants.XEN_INITRD + elif instance["initrd_path"] == constants.VALUE_NONE: + initrd = "(none)" + else: + initrd = instance["initrd_path"] + buf.write(" initrd: %s\n" % initrd) + buf.write(" HVM boot order: %s\n" % instance["hvm_boot_order"]) buf.write(" Hardware:\n") buf.write(" - VCPUs: %d\n" % instance["vcpus"]) buf.write(" - memory: %dMiB\n" % instance["memory"]) @@ -623,15 +667,27 @@ def SetInstanceParms(opts, args): Opts used: memory - the new memory size vcpus - the new number of cpus + mac - the new MAC address of the instance """ - if not opts.mem and not opts.vcpus and not opts.ip and not opts.bridge: + if not (opts.mem or opts.vcpus or opts.ip or opts.bridge or opts.mac or + opts.kernel_path or opts.initrd_path or opts.hvm_boot_order): logger.ToStdout("Please give at least one of the parameters.") return 1 + kernel_path = _TransformPath(opts.kernel_path) + initrd_path = _TransformPath(opts.initrd_path) + if opts.hvm_boot_order == 'default': + hvm_boot_order = constants.VALUE_DEFAULT + else: + hvm_boot_order = opts.hvm_boot_order + op = opcodes.OpSetInstanceParms(instance_name=args[0], mem=opts.mem, vcpus=opts.vcpus, ip=opts.ip, - bridge=opts.bridge) + bridge=opts.bridge, mac=opts.mac, + kernel_path=opts.kernel_path, + initrd_path=opts.initrd_path, + hvm_boot_order=hvm_boot_order) result = SubmitOpCode(op) if result: @@ -700,6 +756,9 @@ add_opts = [ make_option("-i", "--ip", dest="ip", help="IP address ('none' [default], 'auto', or specify address)", default='none', type="string", metavar="
"), + make_option("--mac", dest="mac", + help="MAC address ('auto' [default], or specify address)", + default='auto', type="string", metavar=""), make_option("--no-wait-for-sync", dest="wait_for_sync", default=True, action="store_false", help="Don't wait for sync (DANGEROUS!)"), make_option("-b", "--bridge", dest="bridge", @@ -711,6 +770,17 @@ add_opts = [ make_option("--no-ip-check", dest="ip_check", default=True, action="store_false", help="Don't check that the instance's IP" " is alive (only valid with --no-start)"), + make_option("--kernel", dest="kernel_path", + help="Path to the instances' kernel (or 'default')", + default=None, + type="string", metavar=""), + make_option("--initrd", dest="initrd_path", + help="Path to the instances' initrd (or 'none', or 'default')", + default=None, + type="string", metavar=""), + make_option("--hvm-boot-order", dest="hvm_boot_order", + help="boot device order for HVM (one or more of [acdn])", + default=None, type="string", metavar=""), ] commands = { @@ -807,6 +877,21 @@ commands = { make_option("-b", "--bridge", dest="bridge", help="Bridge to connect this instance to", default=None, type="string", metavar=""), + make_option("--mac", dest="mac", + help="MAC address", default=None, + type="string", metavar=""), + make_option("--kernel", dest="kernel_path", + help="Path to the instances' kernel (or" + " 'default')", default=None, + type="string", metavar=""), + make_option("--initrd", dest="initrd_path", + help="Path to the instances' initrd (or 'none', or" + " 'default')", default=None, + type="string", metavar=""), + make_option("--hvm-boot-order", dest="hvm_boot_order", + help="boot device order for HVM" + "(either one or more of [acdn] or 'default')", + default=None, type="string", metavar=""), ], "", "Alters the parameters of an instance"), 'shutdown': (ShutdownInstance, ARGS_ANY,