From 3343910763d9f8a582bf1aa3a503df53d33e9b13 Mon Sep 17 00:00:00 2001 From: Muayyad alsadi Date: Fri, 10 Dec 2021 01:01:45 +0200 Subject: [PATCH] resolve --- README.md | 18 +++++++++++++++--- podman_compose.py | 11 ++++++----- requirements.txt | 2 ++ setup.py | 3 ++- 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index f8da5a6..dda5ecd 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,19 @@ This project is aimed to provide drop-in replacement for `docker-compose`, and it's very useful for certain cases because: - can run rootless -- only depend on `podman` and Python3 and [PyYAML](https://pyyaml.org/) - no daemon, no setup. - can be used by developers to run single-machine containerized stacks using single familiar YAML file +This project only depend on: + +* `podman` +* Python3 +* [PyYAML](https://pyyaml.org/) +* [python-dotenv](https://pypi.org/project/python-dotenv/) + +And it's formed as a single python file script that you can drop into your PATH and run. + + For production-like single-machine containerized environment consider - [k3s](https://k3s.io) | [k3s github](https://github.com/rancher/k3s) @@ -20,9 +29,12 @@ For production-like single-machine containerized environment consider For the real thing (multi-node clusters) check any production OpenShift/Kubernetes distribution like [OKD](https://www.okd.io/minishift/). -## NOTE +## Versions -This project is still under development. +If you have legacy version of `podman` (before 3.x) you might need to stick with legacy `podman-compose` `0.1.x` branch. +The legacy branch 0.1.x uses mappings and workarounds to compensate for rootless limitations. + +Modern podman versions (>=3.4) do not have those limitations and thus you can use latest and stable 1.x branch. ## Installation diff --git a/podman_compose.py b/podman_compose.py index d8ce5e4..f4919e0 100755 --- a/podman_compose.py +++ b/podman_compose.py @@ -32,8 +32,8 @@ except ImportError: # import fnmatch # fnmatch.fnmatchcase(env, "*_HOST") -import json import yaml +from dotenv import dotenv_values __version__ = '0.1.9' @@ -1001,6 +1001,10 @@ def resolve_extends(services, service_names, environ): new_service = rec_merge({}, from_service, service) services[name] = new_service +def dotenv_to_dict(dotenv_path): + if not os.path.isfile(dotenv_path): + return {} + return dotenv_values(dotenv_path) class PodmanCompose: def __init__(self): @@ -1113,10 +1117,7 @@ class PodmanCompose: dotenv_path = os.path.join(dirname, ".env") self.environ = dict(os.environ) - if os.path.isfile(dotenv_path): - with open(dotenv_path, 'r') as f: - dotenv_ls = [l.strip() for l in f if l.strip() and not l.startswith('#')] - self.environ.update(dict([l.split("=", 1) for l in dotenv_ls if "=" in l])) + self.environ.update(dotenv_to_dict(dotenv_path)) # TODO: should read and respect those env variables # see: https://docs.docker.com/compose/reference/envvars/ # see: https://docs.docker.com/compose/env-file/ diff --git a/requirements.txt b/requirements.txt index 8b537a2..d61cdb7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,3 +3,5 @@ # process, which may cause wedges in the gate later. pyyaml +python-dotenv + diff --git a/setup.py b/setup.py index 9ffe3d0..5a1921d 100644 --- a/setup.py +++ b/setup.py @@ -36,7 +36,8 @@ setup( include_package_data=True, license='GPL-2.0-only', install_requires=[ - 'pyyaml' + 'pyyaml', + 'python-dotenv', ], # test_suite='tests', # tests_require=[