[OE-core] [PATCH v2] devtool deploy-target: optionally specify package

Trevor Woerner twoerner at gmail.com
Tue Jun 19 00:23:51 UTC 2018


ping?

On Wed, Jun 6, 2018 at 2:11 PM, Trevor Woerner <twoerner at gmail.com> wrote:

> Instead of installing an entire recipe's build output (i.e. ${D}), allow
> the
> user to optionally specify the name of one package at a time from said
> recipe
> to be installed (i.e. ${PKGDEST}/<package>).
>
> NOTE: mixing "deploy-target" commands that have this new --package option
> and
> "deploy-target" commands without --package against the same recipe is not
> ideal.
>
> Signed-off-by: Trevor Woerner <twoerner at gmail.com>
> ---
> updates since v1:
>  - The behaviour of deploy-target is to start by trying to remove any
> previous
>    such deploy-targets with the same deploy-name which have already been
>    deployed on the target. That meant that, with v1, if someone tried to
>    deploy two packages from the same recipe, the second deployment would
>    undeploy the first deployment, then deploy the second. By incorporating
> the
>    package name into the on-target deploy-name, multiple such deployments
> can
>    exist at the same time from the same recipe.
> ---
>  scripts/lib/devtool/deploy.py | 42 ++++++++++++++++++++++++++---------
>  1 file changed, 31 insertions(+), 11 deletions(-)
>
> diff --git a/scripts/lib/devtool/deploy.py b/scripts/lib/devtool/deploy.py
> index 52e261d560..0bd2a9f63b 100644
> --- a/scripts/lib/devtool/deploy.py
> +++ b/scripts/lib/devtool/deploy.py
> @@ -169,11 +169,20 @@ def deploy(args, config, basepath, workspace):
>          except Exception as e:
>              raise DevtoolError('Exception parsing recipe %s: %s' %
>                              (args.recipename, e))
> -        recipe_outdir = rd.getVar('D')
> +        if args.package:
> +            recipe_outdir = os.path.join(rd.getVar('PKGDEST'),
> args.package)
> +        else:
> +            recipe_outdir = rd.getVar('D')
>          if not os.path.exists(recipe_outdir) or not
> os.listdir(recipe_outdir):
> -            raise DevtoolError('No files to deploy - have you built the
> %s '
> -                            'recipe? If so, the install step has not
> installed '
> -                            'any files.' % args.recipename)
> +            if args.package:
> +                raise DevtoolError('No files to deploy - have you built
> the %s '
> +                                'package of the %s recipe? If so, the
> install '
> +                                'step has not installed any files.'
> +                                % (args.package, args.recipename))
> +            else:
> +                raise DevtoolError('No files to deploy - have you built
> the %s '
> +                                'recipe? If so, the install step has not
> installed '
> +                                'any files.' % args.recipename)
>
>          if args.strip and not args.dry_run:
>              # Fakeroot copy to new destination
> @@ -246,7 +255,10 @@ def deploy(args, config, basepath, workspace):
>              shutil.rmtree(tmpdir)
>
>          # Now run the script
> -        ret = exec_fakeroot(rd, 'tar cf - . | ssh  %s %s %s \'sh %s %s %s
> %s\'' % (ssh_port, extraoptions, args.target, tmpscript, args.recipename,
> destdir, tmpfilelist), cwd=recipe_outdir, shell=True)
> +        filename = args.recipename
> +        if args.package:
> +            filename = filename + '.' + args.package
> +        ret = exec_fakeroot(rd, 'tar cf - . | ssh  %s %s %s \'sh %s %s %s
> %s\'' % (ssh_port, extraoptions, args.target, tmpscript, filename, destdir,
> tmpfilelist), cwd=recipe_outdir, shell=True)
>          if ret != 0:
>              raise DevtoolError('Deploy failed - rerun with -s to get a
> complete '
>                              'error message')
> @@ -300,13 +312,19 @@ def undeploy(args, config, basepath, workspace):
>          shutil.rmtree(tmpdir)
>
>      # Now run the script
> -    ret = subprocess.call('ssh %s %s %s \'sh %s %s\'' % (ssh_port,
> extraoptions, args.target, tmpscript, args.recipename), shell=True)
> +    filename = args.recipename
> +    if args.package:
> +        filename = filename + '.' + args.package
> +    ret = subprocess.call('ssh %s %s %s \'sh %s %s\'' % (ssh_port,
> extraoptions, args.target, tmpscript, filename), shell=True)
>      if ret != 0:
>          raise DevtoolError('Undeploy failed - rerun with -s to get a
> complete '
>                             'error message')
>
>      if not args.all and not args.dry_run:
> -        logger.info('Successfully undeployed %s' % args.recipename)
> +        if args.package:
> +            logger.info('Successfully undeployed %s' % args.package)
> +        else:
> +            logger.info('Successfully undeployed %s' % args.recipename)
>      return 0
>
>
> @@ -314,8 +332,8 @@ def register_commands(subparsers, context):
>      """Register devtool subcommands from the deploy plugin"""
>
>      parser_deploy = subparsers.add_parser('deploy-target',
> -                                          help='Deploy recipe output
> files to live target machine',
> -                                          description='Deploys a
> recipe\'s build output (i.e. the output of the do_install task) to a live
> target machine over ssh. By default, any existing files will be preserved
> instead of being overwritten and will be restored if you run devtool
> undeploy-target. Note: this only deploys the recipe itself and not any
> runtime dependencies, so it is assumed that those have been installed on
> the target beforehand.',
> +                                          help='Deploy build output to a
> live target machine',
> +                                          description='Deploys either the
> full recipe\'s build output (i.e. the output of the do_install task) or a
> package of a recipe to a live target machine over ssh. By default, any
> existing files will be preserved instead of being overwritten and will be
> restored if you run devtool undeploy-target. Note: this only deploys the
> specified item itself and not any runtime dependencies, so it is assumed
> that those have been installed on the target beforehand.',
>                                            group='testbuild')
>      parser_deploy.add_argument('recipename', help='Recipe to deploy')
>      parser_deploy.add_argument('target', help='Live target machine
> running an ssh server: user at hostname[:destdir]')
> @@ -325,6 +343,7 @@ def register_commands(subparsers, context):
>      parser_deploy.add_argument('-p', '--no-preserve', help='Do not
> preserve existing files', action='store_true')
>      parser_deploy.add_argument('--no-check-space', help='Do not check
> for available space before deploying', action='store_true')
>      parser_deploy.add_argument('-P', '--port', help='Specify port to use
> for connection to the target')
> +    parser_deploy.add_argument('--package', help='Specify a recipe\'s
> package to deploy', dest='package')
>
>      strip_opts = parser_deploy.add_mutually_exclusive_group(required=
> False)
>      strip_opts.add_argument('-S', '--strip',
> @@ -337,8 +356,8 @@ def register_commands(subparsers, context):
>      parser_deploy.set_defaults(func=deploy)
>
>      parser_undeploy = subparsers.add_parser('undeploy-target',
> -                                            help='Undeploy recipe output
> files in live target machine',
> -                                            description='Un-deploys
> recipe output files previously deployed to a live target machine by devtool
> deploy-target.',
> +                                            help='Undeploy output files
> from a live target machine',
> +                                            description='Un-deploys
> output files previously deployed to a live target machine by devtool
> deploy-target.',
>                                              group='testbuild')
>      parser_undeploy.add_argument('recipename', help='Recipe to undeploy
> (if not using -a/--all)', nargs='?')
>      parser_undeploy.add_argument('target', help='Live target machine
> running an ssh server: user at hostname')
> @@ -347,4 +366,5 @@ def register_commands(subparsers, context):
>      parser_undeploy.add_argument('-a', '--all', help='Undeploy all
> recipes deployed on the target', action='store_true')
>      parser_undeploy.add_argument('-n', '--dry-run', help='List files to
> be undeployed only', action='store_true')
>      parser_undeploy.add_argument('-P', '--port', help='Specify port to
> use for connection to the target')
> +    parser_undeploy.add_argument('--package', help='Specify a recipe\'s
> package to undeploy', dest='package')
>      parser_undeploy.set_defaults(func=undeploy)
> --
> 2.17.0.582.gccdcbd54c
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20180618/39d47f01/attachment-0002.html>


More information about the Openembedded-core mailing list