c74ba2fe74
Move argument parsing to subparsers, rather than positional arguments. This better reflects the tool's role as a driver and allows sub-commands to deal with arguments in a natural way. Change-Id: Iae8c368e0f3fe47abfddb9e0a1558bd5b3423aee
124 lines
4.1 KiB
Python
124 lines
4.1 KiB
Python
# Copyright 2016-2017 Andreas Florath (andreas@florath.net)
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
import argparse
|
|
import logging
|
|
import os
|
|
import sys
|
|
import yaml
|
|
|
|
from diskimage_builder.block_device.blockdevice import BlockDevice
|
|
from diskimage_builder import logging_config
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class BlockDeviceCmd(object):
|
|
|
|
def cmd_init(self):
|
|
self.bd.cmd_init()
|
|
|
|
def cmd_getval(self):
|
|
self.bd.cmd_getval()
|
|
|
|
def cmd_create(self):
|
|
self.bd.cmd_create()
|
|
|
|
def cmd_umount(self):
|
|
self.bd.cmd_umount()
|
|
|
|
def cmd_cleanup(self):
|
|
self.bd.cmd_cleanup()
|
|
|
|
def cmd_delete(self):
|
|
self.bd.cmd_delete()
|
|
|
|
def cmd_writefstab(self):
|
|
self.bd.cmd_writefstab()
|
|
|
|
def main(self):
|
|
logging_config.setup()
|
|
|
|
parser = argparse.ArgumentParser(description="DIB Block Device helper")
|
|
parser.add_argument('--params', required=False,
|
|
help="YAML file containing parameters for"
|
|
"block-device handling. Default is "
|
|
"DIB_BLOCK_DEVICE_PARAMS_YAML")
|
|
|
|
subparsers = parser.add_subparsers(title='commands',
|
|
description='valid commands',
|
|
dest='command',
|
|
help='additional help')
|
|
|
|
cmd_init = subparsers.add_parser('init',
|
|
help='Initialize configuration')
|
|
cmd_init.set_defaults(func=self.cmd_init)
|
|
|
|
cmd_getval = subparsers.add_parser('getval',
|
|
help='Retrieve information about'
|
|
'internal state')
|
|
cmd_getval.set_defaults(func=self.cmd_getval)
|
|
cmd_getval.add_argument('symbol', help='symbol to print')
|
|
|
|
cmd_create = subparsers.add_parser('create',
|
|
help='Create the block device')
|
|
cmd_create.set_defaults(func=self.cmd_create)
|
|
|
|
cmd_umount = subparsers.add_parser('umount',
|
|
help='Unmount blockdevice and'
|
|
'cleanup resources')
|
|
cmd_umount.set_defaults(func=self.cmd_umount)
|
|
|
|
cmd_cleanup = subparsers.add_parser('cleanup', help='Final cleanup')
|
|
cmd_cleanup.set_defaults(func=self.cmd_cleanup)
|
|
|
|
cmd_delete = subparsers.add_parser('delete', help='Error cleanup')
|
|
cmd_delete.set_defaults(func=self.cmd_delete)
|
|
|
|
cmd_writefstab = subparsers.add_parser('writefstab',
|
|
help='Create fstab for system')
|
|
cmd_writefstab.set_defaults(func=self.cmd_writefstab)
|
|
|
|
self.args = parser.parse_args()
|
|
|
|
# Find, open and parse the parameters file
|
|
if not self.args.params:
|
|
if 'DIB_BLOCK_DEVICE_PARAMS_YAML' in os.environ:
|
|
param_file = os.environ['DIB_BLOCK_DEVICE_PARAMS_YAML']
|
|
else:
|
|
parser.error(
|
|
"DIB_BLOCK_DEVICE_PARAMS_YAML or --params not set")
|
|
else:
|
|
param_file = self.args.params
|
|
logger.info("params [%s]" % param_file)
|
|
try:
|
|
with open(param_file) as f:
|
|
self.params = yaml.safe_load(f)
|
|
except Exception:
|
|
logger.exception("Failed to open parameter YAML")
|
|
sys.exit(1)
|
|
|
|
# Setup main BlockDevice object from args
|
|
self.bd = BlockDevice(self.params, self.args)
|
|
|
|
self.args.func()
|
|
|
|
|
|
def main():
|
|
bdc = BlockDeviceCmd()
|
|
return bdc.main()
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|