Files
Jhon Honce c60489da47 Refactor BooleanAction to mimic golang interface
* Change all store_true or store_false to use store_bool.
  New behavior documented in BooleanAction docstring.
* Remove any extraneous code identified by pylint in files from above.

Fixes #1869

Signed-off-by: Jhon Honce <jhonce@redhat.com>
2018-12-05 15:43:08 -07:00

58 lines
1.8 KiB
Python

"""Remote client command for signaling pods and their containers."""
import signal
import sys
import podman
from pypodman.lib import AbstractActionBase, SignalAction
from pypodman.lib import query_model as query_pods
class KillPod(AbstractActionBase):
"""Class for sending signal to processes in pod."""
@classmethod
def subparser(cls, parent):
"""Add Pod Kill command to parent parser."""
parser = parent.add_parser('kill', help='signal containers in pod')
parser.add_flag(
'--all',
'-a',
help='Sends signal to all pods.')
parser.add_argument(
'-s',
'--signal',
action=SignalAction,
default=9,
help='Signal to send to the pod. (default: %(default)s)')
parser.add_argument('pod', nargs='*', help='pod(s) to signal')
parser.set_defaults(class_=cls, method='kill')
def __init__(self, args):
"""Construct Pod Kill object."""
if args.all and args.pod:
raise ValueError('You may give a pod or use --all, but not both')
super().__init__(args)
def kill(self):
"""Signal provided pods."""
idents = None if self._args.all else self._args.pod
pods = query_pods(self.client.pods, idents)
for pod in pods:
try:
pod.kill(self._args.signal)
print(pod.id)
except podman.PodNotFound as ex:
print(
'Pod "{}" not found.'.format(ex.name),
file=sys.stderr,
flush=True)
except podman.ErrorOccurred as e:
print(
'{}'.format(e.reason).capitalize(),
file=sys.stderr,
flush=True)
return 1
return 0