dlc: Implement --mount-file-required argument

- build_dlc.py takes --mount-file-required argument.
- Generate the imageloader.json with mount-file-required field.

BUG=chromium:1051570
TEST=emerge-$B dummy-dlc # then check DLC meta json
TEST=./run_tests
TEST=cros deploy $IP dummy-dlc # then check DLC meta json in rootfs

Change-Id: If8fd4fb183dfeb37f54af17dbbccc0aff2addf23
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/2268417
Tested-by: Jae Hoon Kim <kimjae@chromium.org>
Auto-Submit: Jae Hoon Kim <kimjae@chromium.org>
Reviewed-by: Amin Hassani <ahassani@chromium.org>
Reviewed-by: Andrew Lassalle <andrewlassalle@chromium.org>
Commit-Queue: Andrew Lassalle <andrewlassalle@chromium.org>
diff --git a/lib/dlc_lib.py b/lib/dlc_lib.py
index 20a779f..1f7e53c 100644
--- a/lib/dlc_lib.py
+++ b/lib/dlc_lib.py
@@ -95,12 +95,14 @@
     name: (str) DLC name.
     description: (str) DLC description.
     preload: (bool) allow for preloading DLC.
+    mount_file_required: (bool) allow for mount file generation for DLC.
     used_by: (str) The user of this DLC, e.g. "system" or "user"
     fullnamerev: (str) The full package & version name.
   """
 
   def __init__(self, dlc_id, dlc_package, fs_type, pre_allocated_blocks,
-               version, name, description, preload, used_by, fullnamerev):
+               version, name, description, preload, used_by,
+               mount_file_required, fullnamerev):
     self.dlc_id = dlc_id
     self.dlc_package = dlc_package
     self.fs_type = fs_type
@@ -110,6 +112,7 @@
     self.description = description
     self.preload = preload
     self.used_by = used_by
+    self.mount_file_required = mount_file_required
     self.fullnamerev = fullnamerev
 
   def StoreDlcParameters(self, install_root_dir, sudo):
@@ -432,6 +435,7 @@
         'version': self.ebuild_params.version,
         'preload-allowed': self.ebuild_params.preload,
         'used-by': self.ebuild_params.used_by,
+        'mount-file-required': self.ebuild_params.mount_file_required,
     }
 
   def GenerateVerity(self):
diff --git a/lib/dlc_lib_unittest.py b/lib/dlc_lib_unittest.py
index 19c5edc..1478054 100644
--- a/lib/dlc_lib_unittest.py
+++ b/lib/dlc_lib_unittest.py
@@ -89,6 +89,7 @@
                   version=_VERSION,
                   preload=False,
                   used_by=dlc_lib.USED_BY_SYSTEM,
+                  mount_file_required=False,
                   fullnamerev=_FULLNAME_REV):
     """Tests EbuildParams JSON values"""
     self.assertDictEqual(ebuild_params,
@@ -101,6 +102,7 @@
                           'description': description,
                           'preload': preload,
                           'used_by': used_by,
+                          'mount_file_required': mount_file_required,
                           'fullnamerev': fullnamerev})
 
   def GenerateParams(self,
@@ -114,6 +116,7 @@
                      version=_VERSION,
                      preload=False,
                      used_by=dlc_lib.USED_BY_SYSTEM,
+                     mount_file_required=False,
                      fullnamerev=_FULLNAME_REV):
     """Creates and Stores DLC params at install_root_dir"""
     params = dlc_lib.EbuildParams(
@@ -126,6 +129,7 @@
         version=version,
         preload=preload,
         used_by=used_by,
+        mount_file_required=mount_file_required,
         fullnamerev=fullnamerev)
     return params.StoreDlcParameters(
         install_root_dir=install_root_dir, sudo=False)
@@ -179,6 +183,7 @@
         version=_VERSION,
         preload=False,
         used_by=dlc_lib.USED_BY_SYSTEM,
+        mount_file_required=False,
         fullnamerev=_FULLNAME_REV)
     return dlc_lib.DlcGenerator(
         ebuild_params=params,
@@ -275,6 +280,7 @@
             'version': _VERSION,
             'is-removable': True,
             'manifest-version': 1,
+            'mount-file-required': False,
             'preload-allowed': False,
             'used-by': dlc_lib.USED_BY_SYSTEM,
         })
diff --git a/scripts/build_dlc.py b/scripts/build_dlc.py
index 4b7598b..45a2a1c 100644
--- a/scripts/build_dlc.py
+++ b/scripts/build_dlc.py
@@ -94,6 +94,11 @@
       'dlcservice does ref counting when DLC is installed/uninstalled. For '
       '"system", there will be no such provisions.')
   one_dlc.add_argument(
+      '--mount-file-required',
+      default=False,
+      action='store_true',
+      help='Allow indirect mount file generation for DLC.')
+  one_dlc.add_argument(
       '--build-package',
       default=False,
       action='store_true',
@@ -160,6 +165,7 @@
         pre_allocated_blocks=opts.pre_allocated_blocks,
         version=opts.version,
         preload=opts.preload,
+        mount_file_required=opts.mount_file_required,
         used_by=opts.used_by,
         fullnamerev=opts.fullnamerev)
     params.StoreDlcParameters(install_root_dir=opts.install_root_dir, sudo=True)