diff --git a/lib/backend.py b/lib/backend.py
index d3a4a54e1f2e0404b93d36a8737c391b8e96e8a7..741599710494eae7e8adfc65a4e6b9641f709b7e 100644
--- a/lib/backend.py
+++ b/lib/backend.py
@@ -1697,6 +1697,9 @@ def _TryOSFromDisk(name, base_dir=None):
   # OS Files dictionary, we will populate it with the absolute path names
   os_files = dict.fromkeys(constants.OS_SCRIPTS)
 
+  if max(api_versions) >= constants.OS_API_V15:
+    os_files[constants.OS_VARIANTS_FILE] = ''
+
   for name in os_files:
     os_files[name] = os.path.sep.join([os_dir, name])
 
@@ -1715,12 +1718,23 @@ def _TryOSFromDisk(name, base_dir=None):
         return False, ("File '%s' under path '%s' is not executable" %
                        (name, os_dir))
 
+  variants = None
+  if constants.OS_VARIANTS_FILE in os_files:
+    variants_file = os_files[constants.OS_VARIANTS_FILE]
+    try:
+      variants = utils.ReadFile(variants_file).splitlines()
+    except EnvironmentError, err:
+      return False, ("Error while reading the OS variants file at %s: %s" %
+                     (variants_file, _ErrnoOrStr(err)))
+    if not variants:
+      return False, ("No supported os variant found")
 
   os_obj = objects.OS(name=name, path=os_dir,
                       create_script=os_files[constants.OS_SCRIPT_CREATE],
                       export_script=os_files[constants.OS_SCRIPT_EXPORT],
                       import_script=os_files[constants.OS_SCRIPT_IMPORT],
                       rename_script=os_files[constants.OS_SCRIPT_RENAME],
+                      supported_variants=variants,
                       api_versions=api_versions)
   return True, os_obj