From 7157b7b93379b64305923d5cbd348a9ace839be6 Mon Sep 17 00:00:00 2001 From: Andrew Aadland Date: Thu, 1 Jun 2023 13:23:46 -0700 Subject: [PATCH] v0.8.0 --- .pre-commit-config.yaml | 15 ++++--- CHANGELOG.md | 29 ++++++++++-- README.md | 46 ++++++++++++------- docs/images/output-example.png | Bin 0 -> 141358 bytes src/main.py | 78 ++++++++++++++++++--------------- src/requirements.txt | 4 +- 6 files changed, 110 insertions(+), 62 deletions(-) create mode 100644 docs/images/output-example.png diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2d6ba02..2042ecd 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -44,8 +44,13 @@ repos: language_version: python3.11 repo: https://github.com/psf/black rev: 23.3.0 - - hooks: - - args: ["--strict", "--non-interactive", "--install-types", "--ignore-missing-imports"] - id: mypy - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.3.0 + # - hooks: + # - args: ["--strict", "--non-interactive", "--install-types", "--ignore-missing-imports"] + # id: mypy + # repo: https://github.com/pre-commit/mirrors-mypy + # rev: v1.3.0 + - repo: https://github.com/netromdk/vermin + rev: v1.5.1 + hooks: + - id: vermin + args: ['-t=3.6-', '--violations'] diff --git a/CHANGELOG.md b/CHANGELOG.md index 353e76b..306765f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,13 +2,36 @@ --- +# [v0.8.0](https://github.com/DaemonDude23/container-image-replicator/releases/tag/v0.8.0) - June 1 2023 + +**Enhancements** + +- Logging + - Added support for `success` logs with the `verboselogs` library. + - Added exception catching for _input file not found_ and _failed to parse scenarios_. +- Added example RegEx named capture group example for those using log aggregation tools. + +**Bugfixes** + +- Fixed issue where if the destination image didn't already exist, CIR wouldn't attempt a _push_. +- _Hopefully_ fixed the broken PyInstaller binaries. + +**Housekeeping** + +- pre-commit + - Removed `mypy` pre-commit hook. + - Added [`vermin`](https://github.com/netromdk/vermin) to test minimum Python version required, which is apparently lower than I thought at `v3.6` +- Docs + - Added image of prettily-colored screenshot of command output. +- Added TODO list/musings for future plans to expand functionality of this script at the bottom of [README.md](README.md). + # [v0.7.0](https://github.com/DaemonDude23/container-image-replicator/releases/tag/v0.7.0) - May 24 2023 **Enhancements** -logging -- Added default coloration of logs (turn it off with argument `--no-colors`). - - Add much improved error detail instead of `a silent error has occurred`, replacing it with (example) `denied: Your authorization token has expired. Reauthenticate and try again.` +- Logging + - Added default coloration of logs (turn it off with argument `--no-colors`). + - Add much improved error detail instead of `a silent error has occurred`, replacing it with (example) `denied: Your authorization token has expired. Reauthenticate and try again.` **Bugfixes** diff --git a/README.md b/README.md index 970b68c..8574b87 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -**container-image-replicator** +**container-image-replicator** (_CIR_ for short) - [About](#about) - [Usage](#usage) @@ -17,6 +17,8 @@ - [Dev](#dev) - [`mypy` for type hinting](#mypy-for-type-hinting) - [Code Validation](#code-validation) + - [Miscellaneous Info](#miscellaneous-info) + - [The Future](#the-future) --- @@ -110,7 +112,7 @@ images: # required ## Requirements: -- Python `3.7+` (or manually adjust [./src/requirements.txt](./src/requirements.txt) with more broad constraints) +- Python `3.6+` (or manually adjust [./src/requirements.txt](./src/requirements.txt) with more broad constraints) - `docker` installed and running on the system where this script executed, and sufficient permissions for the user executing `container-image-replicator` ## Installation @@ -119,7 +121,7 @@ images: # required - For local installation/use of the raw script, I use a local virtual environment to isolate dependencies: ```bash -git clone https://github.com/DaemonDude23/container-image-replicator.git -b v0.7.0 +git clone https://github.com/DaemonDude23/container-image-replicator.git -b v0.8.0 cd container-image-replicator ``` @@ -152,21 +154,12 @@ pip3 install -U -r ./src/requirements.txt ### Example ```bash -./src/main.py ./tests/yamls/test.yaml -``` -```bash -2022-10-22T15:19:24+0000 INFO input file successfully validated -2022-10-22T15:19:24+0000 INFO preparing threads. Maximum threads: 2 -2022-10-22T15:19:24+0000 INFO nginx:1.23.2-alpine - source image exists locally -2022-10-22T15:19:29+0000 INFO 000000000000.dkr.ecr.us-east-1.amazonaws.com/nginx:1.23.2-alpine - already present in destination. Skipping push -2022-10-22T15:19:29+0000 INFO httpd:2.4.54-alpine - source image exists locally -2022-10-22T15:19:29+0000 WARNING httpd:2.4.54-alpine - image not found locally -2022-10-22T15:19:29+0000 INFO httpd:2.4.54-alpine - pulling image -2022-10-22T15:19:33+0000 INFO httpd:2.4.54-alpine - image pulled successfully -2022-10-22T15:19:36+0000 INFO 000000000000.dkr.ecr.us-east-1.amazonaws.com/apache:2.4.54 - pushing image -2022-10-22T15:19:45+0000 INFO 000000000000.dkr.ecr.us-east-1.amazonaws.com/apache:2.4.54 - image pushed successfully +# this file doesn't exist in git since it contains my account IDs, but just point it to ./tests/yamls/test1.yaml after updating it +./src/main.py ./tests/yamls/test2.yaml ``` +![output-example](docs/images/output-example.png) + ### kubectl to list all of your container images ```bash @@ -196,3 +189,24 @@ mypy ./src/main.py --check-untyped-defs ```bash mypy --install-types --non-interactive --ignore-missing-imports src/main.py ``` + +## Miscellaneous Info + +If you need a named capture group to capture logs in a semi-structed way, this should work: + +``` +(?^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}-\d{4})\s(?\w+)\s(?.+) +``` + +## The Future + +Any help with these things would be appreciated. + +- I'm considering adding support for + - [PodMan](https://github.com/containers/podman-py) to push images. This would allow a non-`root` user to run this which is always good. + - Building and pushing images, not _just_ pulling them from somewhere else. + - This one is probably pretty easy. `-f` equivalent field in the config file for the Dockerfile, the build context, build-args, etc. + - Scan **Kubernetes** and generate a file containing all images, allowing the user to customize it further for their specific destination repositories. + - Equivalent of `kubectl get` for Pods with `annotations` that are watched by CIR and periodically + - Can be run inside of Kubernetes or outside of it. + - Would require building and maintaining container images and a Helm Chart. diff --git a/docs/images/output-example.png b/docs/images/output-example.png new file mode 100644 index 0000000000000000000000000000000000000000..4e3e668888c2e694e3540176b6f5a8204f55e64b GIT binary patch literal 141358 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 c7PrDbv~_25TQ68<`&s-=>lWbX5S07Nq}WdHyG literal 0 HcmV?d00001 diff --git a/src/main.py b/src/main.py index 40781b4..e865e74 100755 --- a/src/main.py +++ b/src/main.py @@ -8,17 +8,18 @@ from sys import stdout from time import sleep from typing import Any -from typing import Dict -from typing import List -from typing import LiteralString -from typing import Optional from typing import Tuple import coloredlogs import docker +import verboselogs import yaml +verboselogs.install() +logger = logging.getLogger(__name__) + + def init_docker() -> Any | Any: docker_client = docker.from_env() docker_api = docker.APIClient() @@ -36,7 +37,7 @@ def init_arg_parser() -> Any: args_optional = parser.add_argument_group("optional") args_required = parser.add_argument_group("required") - args_optional.add_argument("--version", "-v", action="version", version="v0.7.0") + args_optional.add_argument("--version", "-v", action="version", version="v0.8.0") args_optional.add_argument( "--max-workers", @@ -81,7 +82,8 @@ def init_arg_parser() -> Any: exit(1) -def parse_image_list_yaml(image_list: Dict[LiteralString, Any]) -> bool: +# def parse_image_list_yaml(image_list: Dict[LiteralString, Any]) -> bool: +def parse_image_list_yaml(image_list) -> bool: """searches for each element in the list for all expected keys/values Args: @@ -98,12 +100,12 @@ def parse_image_list_yaml(image_list: Dict[LiteralString, Any]) -> bool: try: str(image["destination"]["tag"]) except KeyError: - logging.debug("no destination tag provided - using source tag as a fallback") + logger.debug("no destination tag provided - using source tag as a fallback") str(image["source"]["tag"]) except KeyError: - logging.fatal("syntax error in list file provided") + logger.critical("syntax error in list file provided") exit(1) - logging.info("input file successfully validated") + logger.success("input file successfully validated") return True @@ -118,12 +120,12 @@ def pull_image(repository: str, tag: str) -> bool: bool: success or failure """ try: - logging.info(f"{repository}:{tag} - pulling image") + logger.info(f"{repository}:{tag} - pulling image") docker_client.images.pull(repository, tag=tag) - logging.info(f"{repository}:{tag} - image pulled successfully") + logger.success(f"{repository}:{tag} - image pulled successfully") return True except docker.errors.APIError or docker.errors.ImageNotFound as e: - logging.warning(e) + logger.warning(e) return False @@ -140,11 +142,11 @@ def push_image(repository: str, tag: str) -> bool: bool: success or failure """ try: - logging.info(f"{repository}:{tag} - pushing image") + logger.info(f"{repository}:{tag} - pushing image") docker_client.images.push(repository, tag=tag) return True except docker.errors.APIError as e: - logging.error(f"{repository}:{tag} - failed to push image") + logger.error(f"{repository}:{tag} - failed to push image") return False @@ -176,17 +178,17 @@ def verify_local_image( if final_sha256 != "": source_endpoint_and_sha256: str = str(f"{source_endpoint}@{final_sha256}") docker_client.images.list(filters={"reference": f"{source_endpoint_and_sha256}"}) - logging.info(f"{source_endpoint_and_sha256} - source image exists locally") + logger.info(f"{source_endpoint_and_sha256} - source image exists locally") else: docker_client.images.list(filters={"reference": f"{source_endpoint}"}) - logging.info(f"{source_endpoint} - source image exists locally") + logger.info(f"{source_endpoint} - source image exists locally") # replace docker.io as its implicit and not returned by the API when doing lookups docker_api.tag(source_endpoint, destination_repository, destination_tag) # type: ignore return True except docker.errors.ImageNotFound as e: - logging.warning(f"{source_endpoint} - image not found locally") - logging.debug(e) + logger.warning(f"{source_endpoint} - image not found locally") + logger.debug(e) pull_image(source_repository, source_tag) return False @@ -202,7 +204,7 @@ def verify_destination_image(docker_client: Any, uri: str) -> Tuple[str, int]: """ try: docker_client.images.get_registry_data(uri) - logging.debug(f"{uri} - verified this exists in destination") + logger.debug(f"{uri} - verified this exists in destination") return "exists", 200 except docker.errors.ImageNotFound as e: # reasonable error return "does not exist", int(e.status_code) @@ -253,7 +255,6 @@ def check_remote( force_pull (bool): force pull, used for immutable tags force_push (bool): force push, used for immutable tags """ - # image_already_pushed: bool = False if arguments.force_pull_push or force_pull: pull_image(source_repository, source_tag) if arguments.force_pull_push or force_push: @@ -261,19 +262,18 @@ def check_remote( sleep(1) verify_destination, status_code = verify_destination_image(docker_client, destination_endpoint) - if status_code == 404: - logging.error(f"{destination_endpoint} - {verify_destination}") - elif verify_destination == "exists": - logging.info(f"{destination_endpoint} - image pushed successfully") + if verify_destination == "exists": + logger.info(f"{destination_endpoint} - destination image exists in registry") # image_already_pushed = True - elif verify_destination == "does not exist": + elif (verify_destination == "does not exist") or (status_code == 404): + logging.warning(f"{destination_endpoint} - destination image not found in registry") # see if image exists locally and pull from the source registry if it doesn't verify_local_image( docker_api, source_endpoint, source_repository, source_tag, destination_repository, destination_tag, final_sha256 ) push_image(destination_repository, destination_tag) else: - logging.error(f"{destination_endpoint} - {verify_destination}") + logger.error(f"{destination_endpoint} - {verify_destination}") return True @@ -289,7 +289,7 @@ def actions(arguments: Any, docker_api: Any, image_list: Any) -> bool: Returns: bool: True if no show-stopping exceptions """ - logging.info(f"preparing threads. Maximum threads: {arguments.max_workers}") + logger.info(f"preparing threads. Maximum threads: {arguments.max_workers}") thread_pool = ThreadPoolExecutor(max_workers=arguments.max_workers) for image in list(image_list["images"]): # remove docker.io registry prefix as its implicit and not returned by the API when doing lookups @@ -312,7 +312,7 @@ def actions(arguments: Any, docker_api: Any, image_list: Any) -> bool: try: destination_tag = str(image["destination"]["tag"]) except KeyError: - logging.debug("no destination tag provided - using source tag as a fallback") + logger.debug("no destination tag provided - using source tag as a fallback") destination_tag = str(image["source"]["tag"]) # use []source.sha256 if its valid @@ -321,12 +321,12 @@ def actions(arguments: Any, docker_api: Any, image_list: Any) -> bool: source_sha256: str = str(image["source"]["sha256"]) if valid_sha256(source_sha256): final_sha256 = source_sha256 - logging.debug(f"{final_sha256} - using this valid sha256") + logger.debug(f"{final_sha256} - using this valid sha256") else: - logging.warning(f"{source_repository}:@sha256:{source_sha256} - skipping image because sha256 is not valid") + logger.warning(f"{source_repository}:@sha256:{source_sha256} - skipping image because sha256 is not valid") break except KeyError: - logging.debug("no valid source sha256 provided, not using sha256 suffix on image URI") + logger.debug("no valid source sha256 provided, not using sha256 suffix on image URI") # combine repositories and tags source_endpoint: str = str(f"{source_repository}:{source_tag}") @@ -373,8 +373,8 @@ def main(docker_api: Any) -> None: print("failed to determine the specified value for --log-level") if arguments.no_colors: - logging.basicConfig( - level=eval(f"logging.{log_level}"), + logger.basicConfig( + level=eval(f"logger.{log_level}"), datefmt="%Y-%m-%dT%H:%M:%S%z", stream=stdout, format="%(asctime)s %(levelname)s %(message)s", @@ -382,9 +382,15 @@ def main(docker_api: Any) -> None: else: coloredlogs.install(level=log_level, fmt="%(asctime)s %(levelname)s %(message)s", datefmt="%Y-%m-%dT%H:%M:%S%z") - image_list: Dict[LiteralString, List[Any]] = yaml.safe_load(Path(arguments.input_file).read_text()) - parse_image_list_yaml(image_list) - actions(arguments, docker_api, image_list) + try: + # image_list: Dict[LiteralString, List[Any]] = yaml.safe_load(Path(arguments.input_file).read_text()) + image_list = yaml.safe_load(Path(arguments.input_file).read_text()) + parse_image_list_yaml(image_list) + actions(arguments, docker_api, image_list) + except FileNotFoundError: + logger.critical(f"input file not found. I cannot continue: {Path(arguments.input_file)}") + except yaml.parser.ParserError as e: + logger.critical(f"failed to parse input file: {Path(arguments.input_file)} with error: {e}") if __name__ == "__main__": diff --git a/src/requirements.txt b/src/requirements.txt index 21817cd..5df9b4c 100644 --- a/src/requirements.txt +++ b/src/requirements.txt @@ -1,5 +1,5 @@ coloredlogs==15.0.1 -docker==6.1.2 +docker==6.1.3 PyYAML==6.0 requests<=2.29.0 # https://github.com/docker/docker-py/issues/3113 -# types-PyYAML==6.0.12.9 +verboselogs==1.7