# Copyright 2015 NEC Corporation. All rights reserved. # # 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 json from zunclient.common import cliutils as utils from zunclient.common import utils as zun_utils def _show_container(container): utils.print_dict(container._info) @utils.arg('--name', metavar='', help='name of the container') @utils.arg('--image', required=True, metavar='', help='name or ID of the image') @utils.arg('--command', metavar='', help='Send command to the container') @utils.arg('--memory', metavar='', help='The container memory size (format: , ' 'where unit = b, k, m or g)') @utils.arg('--environment', metavar='', help='The environment variabled') def do_create(cs, args): """Create a container.""" opts = {} opts['name'] = args.name opts['image'] = args.image opts['command'] = args.command opts['memory'] = args.memory opts['environment'] = args.environment _show_container(cs.containers.create(**opts)) @utils.arg('--marker', metavar='', default=None, help='The last container UUID of the previous page; ' 'displays list of containers after "marker".') @utils.arg('--limit', metavar='', type=int, help='Maximum number of containers to return') @utils.arg('--sort-key', metavar='', help='Column to sort results by') @utils.arg('--sort-dir', metavar='', choices=['desc', 'asc'], help='Direction to sort. "asc" or "desc".') def do_list(cs, args): """Print a list of available containers.""" opts = {} opts['marker'] = args.marker opts['limit'] = args.limit opts['sort_key'] = args.sort_key opts['sort_dir'] = args.sort_dir containers = cs.containers.list(**opts) columns = ('uuid', 'name', 'status', 'image', 'command', 'memory') utils.print_list(containers, columns, {'versions': zun_utils.print_list_field('versions')}, sortby_index=None) @utils.arg('containers', metavar='', nargs='+', help='ID or name of the (container)s to delete.') def do_delete(cs, args): """Delete specified containers.""" for container in args.containers: try: cs.containers.delete(container) print("Request to delete container %s has been accepted." % container) except Exception as e: print("Delete for container %(container)s failed: %(e)s" % {'container': container, 'e': e}) @utils.arg('container', metavar='', help='ID or name of the container to show.') @utils.arg('--json', action='store_true', default=False, help='Print JSON representation of the container.') def do_show(cs, args): """Show details of a container.""" container = cs.containers.get(args.container) if args.json: print(json.dumps(container._info)) else: _show_container(container) @utils.arg('containers', metavar='', nargs='+', help='ID or name of the (container)s to reboot.') def do_reboot(cs, args): """Reboot specified containers.""" for container in args.containers: try: cs.containers.reboot(container) print("Request to reboot container %s has been accepted." % container) except Exception as e: print("Reboot for container %(container)s failed: %(e)s" % {'container': container, 'e': e}) @utils.arg('containers', metavar='', nargs='+', help='ID or name of the (container)s to stop.') def do_stop(cs, args): """Stop specified containers.""" for container in args.containers: try: cs.containers.stop(container) print("Request to stop container %s has been accepted." % container) except Exception as e: print("Stop for container %(container)s failed: %(e)s" % {'container': container, 'e': e}) @utils.arg('containers', metavar='', nargs='+', help='ID of the (container)s to start.') def do_start(cs, args): """Start specified containers.""" for container in args.containers: try: cs.containers.start(container) print("Request to start container %s has been accepted." % container) except Exception as e: print("Start for container %(container)s failed: %(e)s" % {'container': container, 'e': e}) @utils.arg('containers', metavar='', nargs='+', help='ID or name of the (container)s to pause.') def do_pause(cs, args): """Pause specified containers.""" for container in args.containers: try: cs.containers.pause(container) print("Request to pause container %s has been accepted." % container) except Exception as e: print("Pause for container %(container)s failed: %(e)s" % {'container': container, 'e': e}) @utils.arg('containers', metavar='', nargs='+', help='ID or name of the (container)s to unpause.') def do_unpause(cs, args): """Unpause specified containers.""" for container in args.containers: try: cs.containers.unpause(container) print("Request to unpause container %s has been accepted." % container) except Exception as e: print("Unpause for container %(container)s failed: %(e)s" % {'container': container, 'e': e}) @utils.arg('container', metavar='', help='ID or name of the container to get logs for.') def do_logs(cs, args): """Get logs of a container.""" logs = cs.containers.logs(args.container) print(logs) @utils.arg('container', metavar='', help='ID or name of the container to execute command in.') @utils.arg('--command', required=True, metavar='', help='The command to execute') def do_exec(cs, args): """Execute command in a container.""" output = cs.containers.execute(args.container, args.command) print(output)