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,