{ "info": { "author": "Gr\u00e9goire UNBEKANDT", "author_email": "", "bugtrack_url": null, "classifiers": [ "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "Paclair\n=======\n\nPaclair is a Python3 Cli tool to interact with `Coreos's Clair `_.\n\nFeatures:\n\n- Now compatible with Clair V3 (delete is not available)\n- No need to have docker installed since Paclair interacts directly with the registries.\n- Compatible with all registries.\n- Simple to use.\n- Easy integration in a CI job thanks to a lightweight output mode.\n\nInstallation\n------------\n\nTo install Paclair, simply use `pip` (or pipenv):\n\n.. code-block:: bash\n\n $ pip install paclair\n \u2728\ud83c\udf70\u2728\n\nVoil\u00e0!\n\nConfiguration\n-------------\n\nExample\n~~~~~~~\n\nAn example configuration file is available in the conf directory\n\n::\n\n General:\n clair_url: 'https://localhost:6060'\n # clair_api_version: 3\n # Whitelist known CVE's not to shown in html report\n # cve_whitelist:\n # - CVE-2016-9843\n # - CVE-2016-9840\n # - CVE-2016-6313\n Plugins:\n Docker:\n class: paclair.plugins.docker_plugin.DockerPlugin\n registries:\n artifactory.registry.com:\n token_url: \"https://artifactory.registry.com/api/docker/{image.repository}/v2/token?service=artifactory.registry.com\"\n protocol: 'http'\n api_prefix: '/api/docker/{image.repository}'\n registry.gitlab.domain.com:\n auth:\n - \"*****\"\n - \"*****\"\n # Example for a private gitlab server\n gitlab.example.com:4567:\n # If using https with an internal CA, ensure verify is pointing to it\n protocol: 'https'\n verify: \"/etc/ssl/certs/ca-certificates.crt\"\n auth:\n - \"*****\"\n - \"*****\"\n # Example for ECR Docker Repository\n xxxxxxxxxxxxxxxx.dkr.ecr.eu-west-1.amazonaws.com:\n token: \"\" # Execute this command to get token aws ecr get-authorization-token --output text --query 'authorizationData[].authorizationToken'\n protocol: 'https'\n token_type: Basic\n\nPlugins are dynamically loaded during execution. That's why you have to specify the class of the\nplugins you want to use.\n\nWe have various plugins to interact with different sources (ex: docker registry, Elasticsearch)\nbecause we use a custom variant of Clair which can analyse more than Docker images.\n\nIf you want to use Paclair only to analyse docker images, don't bother with others plugins.\n\nOptions\n~~~~~~~\n\n+-----------------------------------+-----------------------------------+\n| Config Option | Description |\n+===================================+===================================+\n| General::clair_url | url of the Clair Server. |\n+-----------------------------------+-----------------------------------+\n| General::verify | Either a boolean, in which case |\n| | it controls whether we verify the |\n| | server\u2019s TLS certificate, or a |\n| | string, in which case it must be |\n| | a path to a CA bundle to use. |\n+-----------------------------------+-----------------------------------+\n| General::clair_api_version | Clair Api Version. |\n| | If different from 3, will be set |\n| | to default. |\n| | Default to 1. |\n+-----------------------------------+-----------------------------------+\n| General::html_template | Html template. |\n| | You can use a custom html template|\n| | when using html output. |\n+-----------------------------------+-----------------------------------+\n| General::cve_whitelist | CVE vulnerability list not to be |\n| | included in the report post |\n| | analysis (stats or html). |\n+-----------------------------------+-----------------------------------+\n| Plugins | List of plugins to use. If you |\n| | only want to analyse docker |\n| | images, keep the default |\n| | configuration. |\n+-----------------------------------+-----------------------------------+\n| Plugins::Docker::class | Class for the docker plugin |\n+-----------------------------------+-----------------------------------+\n| Plugins::Docker::registries | You can specify configuration for |\n| | registries (authentification, \u2026) |\n| | if needed. |\n+-----------------------------------+-----------------------------------+\n| Plugins::Docker::registries::regi | login/password |\n| stry1::auth | |\n+-----------------------------------+-----------------------------------+\n| Plugins::Docker::registries::regi | Either a boolean, in which case |\n| stry1::verify | it controls whether we verify the |\n| | server\u2019s TLS certificate, or a |\n| | string, in which case it must be |\n| | a path to a CA bundle to use. |\n+-----------------------------------+-----------------------------------+\n| Plugins::Docker::registries::regi | Protocol to use (http or https). |\n| stry1::protocol | Default to https. |\n+-----------------------------------+-----------------------------------+\n| Plugins::Docker::registries::token| You can specify an authentication |\n| | token (use with token_type). |\n| | Default to None. |\n+-----------------------------------+-----------------------------------+\n| Plugins::Docker::registries::token| Specify the token type. |\n| _type | Default to Bearer. |\n+-----------------------------------+-----------------------------------+\n\nRunning the tests\n-----------------\n\nLaunch tox.\n\n.. code-block:: bash\n\n $ tox\n\nUsage\n-----\n\n.. code-block:: bash\n\n usage: paclair [-h] [--debug] [--syslog] [--conf CONF]\n plugin hosts [hosts ...] {push,delete,analyse} ...\n\n positional arguments:\n plugin Plugin to launch\n hosts Image/hostname to analyse\n {push,delete,analyse}\n Command to launch\n push Push images/hosts to Clair\n delete Delete images/hosts from Clair\n analyse Analyse images/hosts already pushed to Clair\n\n optional arguments:\n -h, --help show this help message and exit\n --debug Debug mode\n --syslog Log to syslog\n --conf CONF Conf file\n\nAnalyse command usage\n~~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: bash\n\n usage: paclair plugin hosts [hosts ...] analyse [-h]\n [--output-format {stats,html}]\n [--output-report {file,term}]\n [--output-dir OUTPUT_DIR]\n [--delete]\n\n optional arguments:\n -h, --help show this help message and exit\n --output-format {stats,html}\n Change default output format (default: json)\n --output-report {file,term}\n Change report location (default: logger)\n --output-dir OUTPUT_DIR\n Change output directory (default: current)\n --delete Delete after analyse\n\nExamples\n~~~~~~~~\n\nPush ubuntu image to Clair\n\n.. code-block:: bash\n\n $ paclair --conf conf/conf.yml Docker ubuntu push\n Pushed ubuntu to Clair.\n\nAnalyse ubuntu image (stats only show fixable CVE)\n\n.. code-block:: bash\n\n $ paclair --conf conf/conf.yml Docker ubuntu analyse --output-format stats\n Medium: 3\n\nYou can have the full json if you don't specify --output-format stats.\n\n\nAnalyse ubuntu image and get a html report in directory /tmp\n\n.. code-block:: bash\n\n $ paclair --conf conf/conf.yml Docker ubuntu analyse --output-format html --output-dir /tmp\n\nDelete ubuntu image\n\n.. code-block:: bash\n\n $ paclair --conf conf/conf.yml Docker ubuntu delete\n ubuntu was deleted from Clair.\n\nContributing\n------------\n\nFeel free to contribute.\n\nAuthors\n-------\n\n- **Yebinama** - *Initial work* - `Yebinama `__\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/yebinama/paclair", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "paclair", "package_url": "https://pypi.org/project/paclair/", "platform": "", "project_url": "https://pypi.org/project/paclair/", "project_urls": { "Homepage": "https://github.com/yebinama/paclair" }, "release_url": "https://pypi.org/project/paclair/3.2.0/", "requires_dist": [ "elasticsearch", "requests (>=2.4.2)", "pyyaml", "bottle" ], "requires_python": "", "summary": "Push and Analyse containers with Clair", "version": "3.2.0" }, "last_serial": 4984073, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "798fd1054934237a922595864ad5c23d", "sha256": "818f1baba849bcc880710cf17cb85d6cfb9df71611e92944c6e63f4ae8237b07" }, "downloads": -1, "filename": "paclair-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "798fd1054934237a922595864ad5c23d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22557, "upload_time": "2018-02-08T09:56:18", "url": "https://files.pythonhosted.org/packages/8b/45/11d8933e80d5066392085a05dd8f27665ff2a54959afa13b4645e4d79089/paclair-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "49e1aaf80751bb06573721b2f308b81d", "sha256": "7c8cb9d22528e5948e6b8ba1bc06178e91e955af20712c21fe86f0d69dd6a631" }, "downloads": -1, "filename": "paclair-1.0.0.tar.gz", "has_sig": false, "md5_digest": "49e1aaf80751bb06573721b2f308b81d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18618, "upload_time": "2018-02-08T09:56:19", "url": "https://files.pythonhosted.org/packages/f4/8f/30a750f41572f712473b9ed5fc9681d738360d4f3d78045270dac75666bb/paclair-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "54bb45ff36f9cf0ff066f560cd86ca99", "sha256": "554a4039c182300647ddff82d088cd3e46548c7851300d955579414de8bc66a3" }, "downloads": -1, "filename": "paclair-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "54bb45ff36f9cf0ff066f560cd86ca99", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22662, "upload_time": "2018-02-18T22:01:12", "url": "https://files.pythonhosted.org/packages/59/5f/48b56c1fbc1082459c02bb49fc3cb8119682ff2040cd7924d8a965ef0d8a/paclair-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0c866ce4406754ad6789cfb76adc1d43", "sha256": "6e6c183417307d28e10ccbe28d08a2eba0bea643821f23a6781131d4aa5bd3d2" }, "downloads": -1, "filename": "paclair-1.0.1.tar.gz", "has_sig": false, "md5_digest": "0c866ce4406754ad6789cfb76adc1d43", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18742, "upload_time": "2018-02-18T22:01:14", "url": "https://files.pythonhosted.org/packages/6f/54/0512c26db4c63561a15f56793c8b0517bfece8f89782bac88d465b9e3ee2/paclair-1.0.1.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "c3b0a004145410444db13919384db3bd", "sha256": "b7566ec48b0ee4920336a09d767cabbf497ae586fc08b43d9901aeb1ba1a9487" }, "downloads": -1, "filename": "paclair-2.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "c3b0a004145410444db13919384db3bd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22134, "upload_time": "2018-04-04T14:32:06", "url": "https://files.pythonhosted.org/packages/19/6c/827ce9af14d9ebf206416ae17a437c6dc46b2afea13ba81cd5f250546218/paclair-2.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9341003d2cf30d67718197874c710f47", "sha256": "ce1d1a6c4ae71576ce35de88f4b26a5613221244d307815d2d9ddd54e14f3f17" }, "downloads": -1, "filename": "paclair-2.0.0.tar.gz", "has_sig": false, "md5_digest": "9341003d2cf30d67718197874c710f47", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19135, "upload_time": "2018-04-04T14:32:07", "url": "https://files.pythonhosted.org/packages/c8/8d/c0f541012a082d2431e27815941222569cade91d46caaed5f667b2b79a2c/paclair-2.0.0.tar.gz" } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "b9016707bd4278b33a90a2c2dffc4e36", "sha256": "debe4487ebe56681f724e71719373dab4c8223fb148ef8dd43fdb91e68014238" }, "downloads": -1, "filename": "paclair-2.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "b9016707bd4278b33a90a2c2dffc4e36", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26735, "upload_time": "2018-06-04T09:27:49", "url": "https://files.pythonhosted.org/packages/bd/ac/372ff2191cafc6150cebd1730a9f9410a35a5e2520dd07f4d560700395df/paclair-2.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9b4b0ea3cbfe2d589bbafa750cbf7a78", "sha256": "f533391aa3ce45988cd378fc4a285f927627f255f25b99bf7b43c4b3ed59d93a" }, "downloads": -1, "filename": "paclair-2.1.0.tar.gz", "has_sig": false, "md5_digest": "9b4b0ea3cbfe2d589bbafa750cbf7a78", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20440, "upload_time": "2018-06-04T09:27:51", "url": "https://files.pythonhosted.org/packages/64/d8/f1d46196d38212ec4129692c519664477c4a577d5573aa35f661efd6bac0/paclair-2.1.0.tar.gz" } ], "3.0.0": [ { "comment_text": "", "digests": { "md5": "2c9bb3d34ddf72d7389ab8bc94f1d04d", "sha256": "a5ab55a4a44aa7d65aaa2f477a1d0ae5af89779b3db14e4c7fb1413fbc38fb25" }, "downloads": -1, "filename": "paclair-3.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "2c9bb3d34ddf72d7389ab8bc94f1d04d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 29606, "upload_time": "2018-09-13T17:00:48", "url": "https://files.pythonhosted.org/packages/0c/a5/41a1f54ac7dff91b591eb6a9122389c05b0769bd062c534c2f7c43c77f93/paclair-3.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "92d35debf8f2eddb1a3673c1be551143", "sha256": "3ffdc536b4d43574f22bbb3576f3ba5dbd1863b8fe7c44c5d9ab7f36ad7e8559" }, "downloads": -1, "filename": "paclair-3.0.0.tar.gz", "has_sig": false, "md5_digest": "92d35debf8f2eddb1a3673c1be551143", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29416, "upload_time": "2018-09-13T17:00:49", "url": "https://files.pythonhosted.org/packages/b9/39/61f9b364a2f956b0d8f796711e27f246e2b333c97e0aa050338b8870b03a/paclair-3.0.0.tar.gz" } ], "3.1.0": [ { "comment_text": "", "digests": { "md5": "aee9bbe7f089487cdbf0a650b2e4a3e7", "sha256": "0662e340a1d8041391107b474692802bbbbd9ad210dab8048d64b317c650c819" }, "downloads": -1, "filename": "paclair-3.1.0-py3.7.egg", "has_sig": false, "md5_digest": "aee9bbe7f089487cdbf0a650b2e4a3e7", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 52349, "upload_time": "2019-02-16T10:51:43", "url": "https://files.pythonhosted.org/packages/67/89/0fc5ac63230a9b6e7cd20ee9b6020f1c48d37c932b1da7ed5cb824bc261b/paclair-3.1.0-py3.7.egg" }, { "comment_text": "", "digests": { "md5": "9c9be272201055c851d336cd6fe2fb93", "sha256": "0a8e582d0b69a477b39e120bea59cad99099db9eaaedca6e2e7898dc61b5b7de" }, "downloads": -1, "filename": "paclair-3.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "9c9be272201055c851d336cd6fe2fb93", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 29761, "upload_time": "2018-11-03T18:02:23", "url": "https://files.pythonhosted.org/packages/8b/94/a5414af89bafca4fb3110a359d98bc9219f4de2fe5826ca829ab46e49d32/paclair-3.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8b42d52fdea5af54d21f917bef42d94e", "sha256": "fa8ae1a09441fa66b76baead67ecf632c3a94708ac0c67e348dbd0d0049033e9" }, "downloads": -1, "filename": "paclair-3.1.0.tar.gz", "has_sig": false, "md5_digest": "8b42d52fdea5af54d21f917bef42d94e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29689, "upload_time": "2018-11-03T18:02:25", "url": "https://files.pythonhosted.org/packages/27/8c/f49f45a05c4ca74df4be52f3c9d01b920e7edcaae870df36e88fce4df103/paclair-3.1.0.tar.gz" } ], "3.1.1": [ { "comment_text": "", "digests": { "md5": "6b455a263ddfa457295f92ec359db264", "sha256": "98345846cc03816590576ab6af946f7e16d58691a5f25125f4762b4ca3a3e0a4" }, "downloads": -1, "filename": "paclair-3.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "6b455a263ddfa457295f92ec359db264", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 30075, "upload_time": "2019-02-16T10:51:41", "url": "https://files.pythonhosted.org/packages/7e/6e/302472804fd31ac24032fb37d2d620c55b5759a4bb888985389ad29ea07c/paclair-3.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7a96a9db60ffc9290ab76bdbe43fabad", "sha256": "e4192edd116ea6fa98e9dfbbfa72128525531e418c49262ccfcc8979dbd4fafc" }, "downloads": -1, "filename": "paclair-3.1.1.tar.gz", "has_sig": false, "md5_digest": "7a96a9db60ffc9290ab76bdbe43fabad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29686, "upload_time": "2019-02-16T10:51:44", "url": "https://files.pythonhosted.org/packages/2e/fd/87a238f2fb78b8b6b69028685f0f774099b01d76481b09c3144dcfbe0965/paclair-3.1.1.tar.gz" } ], "3.2.0": [ { "comment_text": "", "digests": { "md5": "4904a1986cd1c700b46dda82972ff89f", "sha256": "f2d9d43f301c2b7abbf59a2c307ddb2b385bf5ad4092fbcba312373e190244d9" }, "downloads": -1, "filename": "paclair-3.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "4904a1986cd1c700b46dda82972ff89f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 30644, "upload_time": "2019-03-25T18:39:36", "url": "https://files.pythonhosted.org/packages/f4/d9/ca94b3a31940f5c2fc5e40dd8b7ef65f487dacf756e4dab836245a9d4e42/paclair-3.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8e480bcd20fa897f693a89cd028b8a47", "sha256": "eefa8ce898cfa7c149dc8b52ee69b2074d36e27833e779a20c6b21a8d0cb8daa" }, "downloads": -1, "filename": "paclair-3.2.0.tar.gz", "has_sig": false, "md5_digest": "8e480bcd20fa897f693a89cd028b8a47", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30808, "upload_time": "2019-03-25T18:39:38", "url": "https://files.pythonhosted.org/packages/3e/77/00f101875e273af6051e16d62325b05a270911e165f12736cf6cfb3bd72e/paclair-3.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4904a1986cd1c700b46dda82972ff89f", "sha256": "f2d9d43f301c2b7abbf59a2c307ddb2b385bf5ad4092fbcba312373e190244d9" }, "downloads": -1, "filename": "paclair-3.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "4904a1986cd1c700b46dda82972ff89f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 30644, "upload_time": "2019-03-25T18:39:36", "url": "https://files.pythonhosted.org/packages/f4/d9/ca94b3a31940f5c2fc5e40dd8b7ef65f487dacf756e4dab836245a9d4e42/paclair-3.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8e480bcd20fa897f693a89cd028b8a47", "sha256": "eefa8ce898cfa7c149dc8b52ee69b2074d36e27833e779a20c6b21a8d0cb8daa" }, "downloads": -1, "filename": "paclair-3.2.0.tar.gz", "has_sig": false, "md5_digest": "8e480bcd20fa897f693a89cd028b8a47", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30808, "upload_time": "2019-03-25T18:39:38", "url": "https://files.pythonhosted.org/packages/3e/77/00f101875e273af6051e16d62325b05a270911e165f12736cf6cfb3bd72e/paclair-3.2.0.tar.gz" } ] }