diff --git a/lib/cmdlib.py b/lib/cmdlib.py index d742fc6ebeed8d034f3cb176064889606c526b73..d3f583c8ff74a38e44254a4642c7246e3cb93413 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -2694,7 +2694,7 @@ class LUCreateInstance(LogicalUnit): HTYPE = constants.HTYPE_INSTANCE _OP_REQP = ["instance_name", "mem_size", "disk_size", "pnode", "disk_template", "swap_size", "mode", "start", "vcpus", - "wait_for_sync"] + "wait_for_sync", "ip_check"] def BuildHooksEnv(self): """Build hooks env. @@ -2862,11 +2862,16 @@ class LUCreateInstance(LogicalUnit): inst_ip = ip self.inst_ip = inst_ip - command = ["fping", "-q", hostname1.ip] - result = utils.RunCmd(command) - if not result.failed: - raise errors.OpPrereqError("IP %s of instance %s already in use" % - (hostname1.ip, instance_name)) + if self.op.start and not self.op.ip_check: + raise errors.OpPrereqError("Cannot ignore IP address conflicts when" + " adding an instance in start mode") + + if self.op.ip_check: + command = ["fping", "-q", hostname1.ip] + result = utils.RunCmd(command) + if not result.failed: + raise errors.OpPrereqError("IP address %s of instance %s already" + " in use" % (hostname1.ip, instance_name)) # bridge verification bridge = getattr(self.op, "bridge", None) diff --git a/lib/opcodes.py b/lib/opcodes.py index d5b06ada7d93029de77fac0e987239c792f88631..94a68fa245c85baa88e5fbff1fbde1d98d2d0d04 100644 --- a/lib/opcodes.py +++ b/lib/opcodes.py @@ -138,7 +138,7 @@ class OpCreateInstance(OpCode): __slots__ = ["instance_name", "mem_size", "disk_size", "os_type", "pnode", "disk_template", "snode", "swap_size", "mode", "vcpus", "ip", "bridge", "src_node", "src_path", "start", - "wait_for_sync"] + "wait_for_sync", "ip_check"] class OpReinstallInstance(OpCode): diff --git a/scripts/gnt-backup b/scripts/gnt-backup index 6a86770df0a88b849a1cf9b2afd939655a8c80a1..c6512e51752736c7566736421280ac5ff6e1bf74 100755 --- a/scripts/gnt-backup +++ b/scripts/gnt-backup @@ -131,6 +131,9 @@ import_opts = [ metavar="<node>"), make_option("--src-dir", dest="src_dir", help="Source directory", metavar="<dir>"), + make_option("--no-ip-check", dest="ip_check", default=True, + action="store_false", help="Don't check that the instance's IP" + " is alive"), ] commands = { diff --git a/scripts/gnt-instance b/scripts/gnt-instance index 1b05aa9864ac86ffc14d7159360623e2356b492d..243a4b39828577974c2316c40a68790e76e71c8f 100755 --- a/scripts/gnt-instance +++ b/scripts/gnt-instance @@ -187,7 +187,8 @@ def AddInstance(opts, args): mode=constants.INSTANCE_CREATE, os_type=opts.os, pnode=opts.node, snode=opts.snode, vcpus=opts.vcpus, - ip=opts.ip, bridge=opts.bridge, start=True, + ip=opts.ip, bridge=opts.bridge, + start=opts.start, ip_check=opts.ip_check, wait_for_sync=opts.wait_for_sync) SubmitOpCode(op) return 0 @@ -602,7 +603,13 @@ add_opts = [ metavar="<node>"), make_option("-b", "--bridge", dest="bridge", help="Bridge to connect this instance to", - default=None, metavar="<bridge>") + default=None, metavar="<bridge>"), + make_option("--no-start", dest="start", default=True, + action="store_false", help="Don't start the instance after" + " creation"), + 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)"), ] commands = {