mirror of
https://github.com/containers/podman.git
synced 2025-06-17 15:08:08 +08:00

podman client that is capable of: * images * ps * rm * rmi this is only a mockup to frame out and prove python library and ssh tunnelling usage. Signed-off-by: baude <bbaude@redhat.com> Closes: #986 Approved by: rhatdan
136 lines
4.5 KiB
Python
136 lines
4.5 KiB
Python
import os
|
|
import getpass
|
|
import argparse
|
|
import images
|
|
import ps, rm, rmi
|
|
import sys
|
|
from utils import write_err
|
|
import pytoml
|
|
|
|
default_conf_path = "/etc/containers/podman_client.conf"
|
|
|
|
class HelpByDefaultArgumentParser(argparse.ArgumentParser):
|
|
|
|
def error(self, message):
|
|
write_err('%s: %s' % (self.prog, message))
|
|
write_err("Try '%s --help' for more information." % self.prog)
|
|
sys.exit(2)
|
|
|
|
def print_usage(self, message="too few arguments"): # pylint: disable=arguments-differ
|
|
self.prog = " ".join(sys.argv)
|
|
self.error(message)
|
|
|
|
|
|
def create_parser(help_text):
|
|
parser = HelpByDefaultArgumentParser(description=help_text)
|
|
parser.add_argument('-v', '--version', action='version', version="0.0",
|
|
help=("show rpodman version and exit"))
|
|
parser.add_argument('--debug', default=False, action='store_true',
|
|
help=("show debug messages"))
|
|
parser.add_argument('--run_dir', dest="run_dir",
|
|
help=("directory to place socket bindings"))
|
|
parser.add_argument('--user', dest="user",
|
|
help=("remote user"))
|
|
parser.add_argument('--host', dest="host",
|
|
help=("remote host"))
|
|
parser.add_argument('--remote_socket_path', dest="remote_socket_path",
|
|
help=("remote socket path"))
|
|
parser.add_argument('--identity_file', dest="identity_file",
|
|
help=("path to identity file"))
|
|
subparser = parser.add_subparsers(help=("commands"))
|
|
images.cli(subparser)
|
|
ps.cli(subparser)
|
|
rm.cli(subparser)
|
|
rmi.cli(subparser)
|
|
|
|
return parser
|
|
|
|
def load_toml(path):
|
|
# Lets load the configuration file
|
|
with open(path) as stream:
|
|
return pytoml.load(stream)
|
|
|
|
if __name__ == '__main__':
|
|
|
|
host = None
|
|
remote_socket_path = None
|
|
user = None
|
|
run_dir = None
|
|
|
|
aparser = create_parser("podman remote tool")
|
|
args = aparser.parse_args()
|
|
if not os.path.exists(default_conf_path):
|
|
conf = {"default": {}}
|
|
else:
|
|
conf = load_toml("/etc/containers/podman_client.conf")
|
|
|
|
# run_dir
|
|
if "run_dir" in os.environ:
|
|
run_dir = os.environ["run_dir"]
|
|
elif "run_dir" in conf["default"] and conf["default"]["run_dir"] is not None:
|
|
run_dir = conf["default"]["run_dir"]
|
|
else:
|
|
xdg = os.environ["XDG_RUNTIME_DIR"]
|
|
run_dir = os.path.join(xdg, "podman")
|
|
|
|
# make the run_dir if it doesnt exist
|
|
if not os.path.exists(run_dir):
|
|
os.makedirs(run_dir)
|
|
|
|
local_socket_path = os.path.join(run_dir, "podman.socket")
|
|
|
|
# remote host
|
|
if "host" in os.environ:
|
|
host = os.environ["host"]
|
|
elif getattr(args, "host") is not None:
|
|
host = getattr(args, "host")
|
|
else:
|
|
host = conf["default"]["host"] if "host" in conf["default"] else None
|
|
|
|
# remote user
|
|
if "user" in os.environ:
|
|
user = os.environ["user"]
|
|
elif getattr(args, "user") is not None:
|
|
user = getattr(args, "user")
|
|
elif "user" in conf["default"] and conf["default"]["user"] is not None:
|
|
user = conf["default"]["user"]
|
|
else:
|
|
user = getpass.getuser()
|
|
|
|
# remote path
|
|
if "remote_socket_path" in os.environ:
|
|
remote_socket_path = os.environ["remote_socket_path"]
|
|
elif getattr(args, "remote_socket_path") is not None:
|
|
remote_socket_path = getattr(args, "remote_socket_path")
|
|
elif "remote_socket_path" in conf["default"] and conf["default"]["remote_socket_path"]:
|
|
remote_socket_path = conf["default"]["remote_socket_path"]
|
|
else:
|
|
remote_socket_path = None
|
|
|
|
|
|
# identity file
|
|
if "identity_file" in os.environ:
|
|
identity_file = os.environ["identity_file"]
|
|
elif getattr(args, "identity_file") is not None:
|
|
identity_file = getattr(args, "identity_file")
|
|
elif "identity_file" in conf["default"] and conf["default"]["identity_file"] is not None:
|
|
identity_file = conf["default"]["identity_file"]
|
|
else:
|
|
identity_file = None
|
|
|
|
if None in [host, local_socket_path, user, remote_socket_path]:
|
|
print("missing input for local_socket, user, host, or remote_socket_path")
|
|
sys.exit(1)
|
|
|
|
local_uri = "unix:{}".format(local_socket_path)
|
|
remote_uri = "ssh://{}@{}{}".format(user, host, remote_socket_path)
|
|
|
|
_class = args._class() # pylint: disable=protected-access
|
|
_class.set_args(args, local_uri, remote_uri, identity_file)
|
|
|
|
if "func" in args:
|
|
_func = getattr(_class, args.func)
|
|
sys.exit(_func())
|
|
else:
|
|
aparser.print_usage()
|
|
sys.exit(1) |