diff --git a/lib/cmdlib.py b/lib/cmdlib.py index 3aed19022c6a67441ea8341f5170810ff142d126..d29631aea8a95b0dc36a65669160348f67f98c67 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -9957,10 +9957,17 @@ class LUInstanceCreate(LogicalUnit): ial.Run(self.op.iallocator) if not ial.success: + # When opportunistic locks are used only a temporary failure is generated + if self.op.opportunistic_locking: + ecode = errors.ECODE_TEMP_NORES + else: + ecode = errors.ECODE_NORES + raise errors.OpPrereqError("Can't compute nodes using" " iallocator '%s': %s" % (self.op.iallocator, ial.info), - errors.ECODE_NORES) + ecode) + self.op.pnode = ial.result[0] self.LogInfo("Selected nodes for instance %s via iallocator %s: %s", self.op.instance_name, self.op.iallocator, diff --git a/lib/errors.py b/lib/errors.py index 3d2a33d513c6df68a12c43e98d899bea80e780bd..7fc3efed3e5ab96e0495d0a5c8e306a30db83670 100644 --- a/lib/errors.py +++ b/lib/errors.py @@ -30,6 +30,9 @@ ECODE_RESOLVER = "resolver_error" #: Not enough resources (iallocator failure, disk space, memory, etc.) ECODE_NORES = "insufficient_resources" +#: Temporarily out of resources; operation can be tried again +ECODE_TEMP_NORES = "insufficient_resources" + #: Wrong arguments (at syntax level) ECODE_INVAL = "wrong_input" @@ -55,6 +58,7 @@ ECODE_ENVIRON = "environment_error" ECODE_ALL = frozenset([ ECODE_RESOLVER, ECODE_NORES, + ECODE_TEMP_NORES, ECODE_INVAL, ECODE_STATE, ECODE_NOENT,