[PATCH 1/2] Add CLI for runroot plugin.

Mike McLean mikem at redhat.com
Sat Jun 6 20:33:24 UTC 2015


On 06/06/2015 03:36 PM, Ralph Bean wrote:
> From: Daniel Mach <dmach at redhat.com>

ack, both added

> ---
>   cli/koji | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 65 insertions(+)
>
> diff --git a/cli/koji b/cli/koji
> index 8e0f7b2..6cdecaa 100755
> --- a/cli/koji
> +++ b/cli/koji
> @@ -6442,6 +6442,71 @@ def handle_moshimoshi(options, session, args):
>       if u.get("krb_principal", None) is not None:
>           print "Authenticated via Kerberos principal %s" % (u["krb_principal"])
>
> +
> +def handle_runroot(options, session, args):
> +    "[admin] Run a command in a buildroot"
> +    usage = _("usage: %prog runroot [options] <tag> <arch> <command>")
> +    usage += _("\n(Specify the --help global option for a list of other help options)")
> +    parser = OptionParser(usage=usage)
> +    parser.disable_interspersed_args()
> +    parser.add_option("-p", "--package", action="append", default=[], help=_("make sure this package is in the chroot"))
> +    parser.add_option("-m", "--mount", action="append", default=[], help=_("mount this directory read-write in the chroot"))
> +    parser.add_option("--skip-setarch", action="store_true", default=False,
> +            help=_("bypass normal setarch in the chroot"))
> +    parser.add_option("-w", "--weight", type='int', help=_("set task weight"))
> +    parser.add_option("--channel-override", help=_("use a non-standard channel"))
> +    parser.add_option("--task-id", action="store_true", default=False,
> +            help=_("Print the ID of the runroot task"))
> +    parser.add_option("--use-shell", action="store_true", default=False,
> +            help=_("Run command through a shell, otherwise uses exec"))
> +    parser.add_option("--repo-id", type="int", help=_("ID of the repo to use"))
> +
> +    (opts, args) = parser.parse_args(args)
> +
> +    if len(args) < 3:
> +        parser.error(_("Incorrect number of arguments"))
> +    activate_session(session)
> +    tag = args[0]
> +    arch = args[1]
> +    if opts.use_shell:
> +        # everything must be correctly quoted
> +        command = ' '.join(args[2:])
> +    else:
> +        command = args[2:]
> +    task_id = session.runroot(tag, arch, command,
> +                              channel=opts.channel_override,
> +                              packages=opts.package, mounts=opts.mount,
> +                              repo_id=opts.repo_id,
> +                              skip_setarch=opts.skip_setarch,
> +                              weight=opts.weight)
> +    if opts.task_id:
> +        print task_id
> +
> +    try:
> +        while True:
> +            # wait for the task to finish
> +            if session.taskFinished(task_id):
> +                break
> +            time.sleep(options.poll_interval)
> +    except KeyboardInterrupt:
> +        # this is probably the right thing to do here
> +        print "User interrupt: canceling runroot task"
> +        session.cancelTask(task_id)
> +        return
> +    output = None
> +    if "runroot.log" in session.listTaskOutput(task_id):
> +        output = session.downloadTaskOutput(task_id, "runroot.log")
> +    if output:
> +        sys.stdout.write(output)
> +    info = session.getTaskInfo(task_id)
> +    if info is None:
> +        sys.exit(1)
> +    state = koji.TASK_STATES[info['state']]
> +    if state in ('FAILED', 'CANCELED'):
> +        sys.exit(1)
> +    return
> +
> +
>   def handle_help(options, session, args):
>       "List available commands"
>       usage = _("usage: %prog help [options]")
>



More information about the buildsys mailing list