Home | History | Annotate | Download | only in site_utils
      1 # Copyright 2015 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 """This tool can be used to set up a base container for test. For example,
      6   python lxc.py -s -p /tmp/container
      7 This command will download and setup base container in directory /tmp/container.
      8 After that command finishes, you can run lxc command to work with the base
      9 container, e.g.,
     10   lxc-start -P /tmp/container -n base -d
     11   lxc-attach -P /tmp/container -n base
     12 """
     13 
     14 import argparse
     15 import logging
     16 
     17 import common
     18 from autotest_lib.client.bin import utils
     19 from autotest_lib.site_utils import lxc
     20 
     21 
     22 def parse_options():
     23     """Parse command line inputs.
     24 
     25     @raise argparse.ArgumentError: If command line arguments are invalid.
     26     """
     27     parser = argparse.ArgumentParser()
     28     parser.add_argument('-s', '--setup', action='store_true',
     29                         default=False,
     30                         help='Set up base container.')
     31     parser.add_argument('-p', '--path', type=str,
     32                         help='Directory to store the container.',
     33                         default=lxc.DEFAULT_CONTAINER_PATH)
     34     parser.add_argument('-f', '--force_delete', action='store_true',
     35                         default=False,
     36                         help=('Force to delete existing containers and rebuild '
     37                               'base containers.'))
     38     parser.add_argument('-n', '--name', type=str,
     39                         help='Name of the base container.',
     40                         default=lxc.BASE)
     41     options = parser.parse_args()
     42     if not options.setup and not options.force_delete:
     43         raise argparse.ArgumentError(
     44                 'Use --setup to setup a base container, or --force_delete to '
     45                 'delete all containers in given path.')
     46     return options
     47 
     48 
     49 def main():
     50     """main script."""
     51     # Force to run the setup as superuser.
     52     # TODO(dshi): crbug.com/459344 Set remove this enforcement when test
     53     # container can be unprivileged container.
     54     if utils.sudo_require_password():
     55         logging.warn('SSP requires root privilege to run commands, please '
     56                      'grant root access to this process.')
     57         utils.run('sudo true')
     58 
     59     options = parse_options()
     60     bucket = lxc.ContainerBucket(container_path=options.path)
     61     if options.setup:
     62         bucket.setup_base(name=options.name, force_delete=options.force_delete)
     63     elif options.force_delete:
     64         bucket.destroy_all()
     65 
     66 
     67 if __name__ == '__main__':
     68     main()
     69