{ "info": { "author": "Antoine Legrand", "author_email": "2t.antoine@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "Natural Language :: English", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7" ], "description": "[![build status](https://gitlab.com/failfast-ci/app-registry__appr-server/badges/master/build.svg)](https://gitlab.com/failfast-ci/app-registry__appr-server/commits/master)\n[![Coverage Status](https://coveralls.io/repos/github/cn-app-registry/cnr-server/badge.svg?branch=master)](https://coveralls.io/github/cn-app-registry/cnr-server?branch=master)\n[![Swagger API Reference](https://img.shields.io/badge/swagger-docs-blue.svg)](Documentation/server/appr-api-swagger.yaml)\n\n# APPR Command Line Tool\n[CLI commands overview](Documentation/quick-start.md)\n\n## Install the Helm Registry Plugin\n\nFirst, Install the latest [Helm release](https://github.com/kubernetes/helm#install).\n\nIf you are an OSX user, quickstart with brew: `brew install kubernetes-helm`\n\nNext download and install the registry plugin for Helm.\n\n### OSX\n\n```\nwget https://github.com/cn-app-registry/appr-cli/releases/download/v0.3.7-dev/registry-appr-v0.3.7-dev-osx-x64-helm-plugin.tar.gz\nmkdir -p ~/.helm/plugins/\ntar xzvf registry-appr-v0.3.7-dev-osx-x64-helm-plugin.tar.gz -C ~/.helm/plugins/\n```\n\n### Linux\n\n```\nwget https://github.com/cn-app-registry/appr-cli/releases/download/v0.3.7-dev/registry-appr-v0.3.7-dev-linux-x64-helm-plugin.tar.gz\nmkdir -p ~/.helm/plugins/\ntar xzvf registry-appr-v0.3.7-dev-linux-x64-helm-plugin.tar.gz -C ~/.helm/plugins/\n```\n\n### Windows\n\n```\nwget https://github.com/cn-app-registry/appr-cli/releases/download/v0.3.7-dev/registry-appr-v0.3.7-dev-win-x64-helm-plugin.tar.gz\nmkdir -p ~/.helm/plugins/\ntar xzvf registry-appr-v0.3.7-dev-linux-x64-helm-plugin.tar.gz -C ~/.helm/plugins/\n```\n\nNote: You must have bash in your path and change the `registry/plugin.yaml` execution to call `bash -c $HELM_PLUGIN_DIR/appr.sh`\n\n\n## Deploy Jenkins Using Helm from the Quay Registry\n\n\n```\nhelm registry version app.quay.io\n```\n\nOutput should be:\n```\nApi-version: {u'appr-api': u'0.X.Y'}\nClient-version: 0.X.Y\n```\n\n### Install Jenkins\n\n```\nhelm init\nhelm registry list app.quay.io\nhelm registry install app.quay.io/helm/jenkins\n```\n\n## Create and Push Your Own Chart\n\nFirst, create an account on https://app.quay.io (staging server) and login to the CLI using the username and password\n\nSet an environment for the username created at Quay to use through the rest of these instructions.\n\n```\nexport USERNAME=philips\n```\n\nLogin to Quay with the Helm registry plugin:\n\n```\nhelm registry login -u $USERNAME app.quay.io\n```\n\nCreate a new Helm chart, the default will create a sample nginx application:\n\n```\nhelm create nginx\n```\n\nPush this new chart to Quay and then deploy it from Quay.\n\n```\ncd nginx\nhelm registry push --namespace $USERNAME app.quay.io\nhelm registry install app.quay.io/$USERNAME/nginx\n```\n\n\n# appr-server\n\nAPPR implements a registry for storing Kubernetes application manifests that attempts to reuse as much knowledge from the rest of the Linux container ecosystem as possible.\n\nDifferentiating features include:\n\n- A protocol and data model that can more easily be implemented by pre-existing container registries\n - This includes a common API for uploading, downloading, and searching for applications\n- The reuse and integration with many elements from [OCI](https://www.opencontainers.org)\n - Content addressable manifest scheme for security, signing, and non-trusted mirroring\n - Reuse of common data structures such as Descriptors\n - Unification of Manifest Lists as the means of content negoitation for both Images and Applications\n\n## Getting started\n\n1. git clone https://github.com/cn-app-registry/appr-server.git && cd appr-server\n2. pip install -e . && pip install gunicorn\n3. Run the appr-server on port 5000 `gunicorn appr.api.wsgi:app -b :5000`\n or \"./run-server\"\n4. See the [curl-based examples](Documentation/test.sh)\n\n## Architecture at a glance\n\nThere are two top-level objects:\n\n- Package: metadata describing an application\n- Blob: a gzipped tarball of the package encoded in base64\n\nPackages are primarily indexed by 3 notable fields:\n\n- package-name: it follows container-image format: `namespace/name`.\n- release: it's the version of the package, immutable it can be viewed as an alias to a digest\n- mediaType: the format of the package formats (eg: docker-compose, dab, helm, kpm)\n\nData storage is specified by the `STORAGE` environment variable. The following are supported:\n\n- `filesystem` (default)\n- [`etcd`](https://github.com/coreos/etcd)\n- [`redis`](https://github.com/antirez/redis)\n\n## Demo using using [Helm](https://github.com/kubernetes/helm) charts\n\n### Publish a chart\n\nCreate and encode the chart tarball\n\n```\n~/charts/elasticsearch $\ntar czvf ../elastichart.tar.gz Chart.yaml manifests README.md\ncat ../elastichart.tar.gz | base64 -w 0\nH4sIAGBoF1gAA+2XTY/aMBCGc86vGKlngk02iRpVq1aUQw+VKlr1bowhVp0P2QZp/33tZFkCy0dVAburnUdCBs/EMyR5XyfjgmkbPbBSBVeDONL0zo80S0h/bInTLKAxIUmaxkmSBoTSu3QUALleS1tWxjINELDKxvRE3rn4G6VipchBKGas5EYwzYuwqP1cYW1j8uFwKW2xmkW8LoePacPd9LXQRtZVDiQaRSScC8O1bGw7NelnwlQYu1gp+Nn9nFRLWYmwZLKy7uOWyUOAAXxjFYzrxUI8wCfJ2y+f50Ia38O9W98lqzb1VyENjP0dDI2u19KVBgYzZiTfq/w06LXkIgpf+rS/GkpWyYW7LGZ4vRpe41mWHNW/Y1//yYgEkFyvpS3vXP/b678j6oFZ84vtCmf9P4n3rn9KKEH/vwWskb83/r2m4R9ZzXPnz61NhqWz2jmzzHvtoY0CQLGZ6LwYNhasn2cBFEJLy5Z+WxGqDE0juD+oqbV9NP1ufa6kqGy3nIvl8HFESC/eCKH70biNGqEEt7U+3cdLn+pXyTH968vJ/6z+M0r39J+kNEP934KD+p+KRknO/CPcuK6srpVysru6G+iurMmB/rOoAawoG8Ws6PL6TXoON+rpN3uu4U2HHl73n1Y9gxNVAGTZ/tOdYD6KaES3pTc2uFnvqcaPvgkei3oT/F93m06+fP0+icr5Re+qXc7pn9L9/Z+6SdT/Lfiw+6IUhvhOhSAIgiAIgiAIgiAIgiAIgiBvnr97lKMIACgAAA==\n```\n\nPOST the chart to APPR\n\n```\ncurl -XPOST http://localhost:5000/api/v1/packages/myname/elasticsearch -d '\n{\n \"blob\": \"H4sIAP3mAFgAA....\",\n \"release\": \"2.2.1\",\n \"media_type\": \"helm\"\n}'\n```\n\n### Pull the chart\n\nFind the digest from the package-name/release/media-type\n\n```\ncurl -XGET http://localhost:5000/api/v1/packages/myname/elasticsearch/2.2.1/helm\n{\n \"channels\": [],\n \"content\": {\n \"digest\": \"72ed15c9a65961ecd034cca098ec18eb99002cd402824aae8a674a8ae41bd0ef\",\n \"mediaType\": \"application/vnd.appr.package.helm.v1.tar+gzip\",\n \"size\": 583,\n \"urls\": []\n },\n \"created_at\": \"2016-11-16T17:13:07.806579\",\n \"mediaType\": \"application/vnd.appr.package-manifest.helm.v1.json\",\n \"package\": \"myname/elasticsearch\",\n \"release\": \"2.2.1\"\n}\n\n```\n\nFetch the blob\n\n```\ncurl -XGET \\\nhttp://localhost:5000/api/v1/packages/myname/elasticsearch/blobs/sha256/72ed15c9a65961ecd034cca098ec18eb99002cd402824aae8a674a8ae41bd0ef \\\n-o elasticsearch-chart.tar.gz\n```\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/app-registry/appr-server", "keywords": "apprclient", "license": "Apache License version 2", "maintainer": "", "maintainer_email": "", "name": "appr", "package_url": "https://pypi.org/project/appr/", "platform": "", "project_url": "https://pypi.org/project/appr/", "project_urls": { "Homepage": "https://github.com/app-registry/appr-server" }, "release_url": "https://pypi.org/project/appr/0.7.4/", "requires_dist": null, "requires_python": "", "summary": "cloud-native app registry server", "version": "0.7.4" }, "last_serial": 3194342, "releases": { "0.3.7": [ { "comment_text": "", "digests": { "md5": "bc66e0307304f17eada562194871bc65", "sha256": "a76cf59b8fd9a838bb37f8642f23af4e10472d023444c4ca03c8e79105783c28" }, "downloads": -1, "filename": "appr-0.3.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bc66e0307304f17eada562194871bc65", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 27248, "upload_time": "2017-03-21T22:46:21", "url": "https://files.pythonhosted.org/packages/62/cc/dd081a488d942a0963c940b4698a829e462f05a1e80a01fc19988815fb19/appr-0.3.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "59741b9b8efeaa0bb0a24d7a8e6cff1b", "sha256": "0a8828e92fc5823db90e55c33030ad564dd8a75a0f7288b73146e84459f03225" }, "downloads": -1, "filename": "appr-0.3.7.tar.gz", "has_sig": false, "md5_digest": "59741b9b8efeaa0bb0a24d7a8e6cff1b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19872, "upload_time": "2017-03-21T22:46:17", "url": "https://files.pythonhosted.org/packages/a4/99/a04e28ec2c427298f274ffb105b238c8220acb557824f207fc3637a7a999/appr-0.3.7.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "015683cbe5ddcf036fd0dbaf3d0184cf", "sha256": "2eea9e47a3070864890b4f12172ec902609332720a5c9440a067535c3b9d2057" }, "downloads": -1, "filename": "appr-0.5.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "015683cbe5ddcf036fd0dbaf3d0184cf", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 487339, "upload_time": "2017-06-30T12:50:00", "url": "https://files.pythonhosted.org/packages/70/e1/8ef161ac9f8591c2f8b533166f30bcdfbae36a0403a7e1719f868ef7fb3e/appr-0.5.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f340881524ac5d5f00b190f5b1995572", "sha256": "1b21c06281567d46c8bc15c979a89961419f4cfd090d445ac7e02b3eabdf43c7" }, "downloads": -1, "filename": "appr-0.5.1.tar.gz", "has_sig": false, "md5_digest": "f340881524ac5d5f00b190f5b1995572", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 473641, "upload_time": "2017-06-30T12:49:49", "url": "https://files.pythonhosted.org/packages/b7/3e/5a604e6c0632bc7a3b8949f2af38ec89f4701798441df1f23acc0a0c6536/appr-0.5.1.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "08f4a0e2b94c378f07f1fdcc1308cab2", "sha256": "f948734fe16f565b79df049969244eeed8dea41baefda6ed84d034483a7a587b" }, "downloads": -1, "filename": "appr-0.6.0.tar.gz", "has_sig": false, "md5_digest": "08f4a0e2b94c378f07f1fdcc1308cab2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20144626, "upload_time": "2017-07-10T14:57:44", "url": "https://files.pythonhosted.org/packages/8e/bf/311349f9b793308af90fb132bc95638616b5ec0ca25a3a32751c28c3fb08/appr-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "2b2ca0c88160bdf341c056d5c875401c", "sha256": "b05fbfcd2fe642ae6e52e86dd455f4e3d97664d43de401ae52d241749b305e56" }, "downloads": -1, "filename": "appr-0.6.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2b2ca0c88160bdf341c056d5c875401c", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 85924, "upload_time": "2017-07-10T21:28:06", "url": "https://files.pythonhosted.org/packages/cb/8b/a883e718f8cd1f42bc3772f64b496a32130982765189fe071bf99dbbf2c5/appr-0.6.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "20c824e50402250fdcf49f85ce97e236", "sha256": "1d87bb190a4ff6158869f10fe54a2a0020f883b9155797d9431ae874a07c4009" }, "downloads": -1, "filename": "appr-0.6.1.tar.gz", "has_sig": false, "md5_digest": "20c824e50402250fdcf49f85ce97e236", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57114, "upload_time": "2017-07-10T21:28:02", "url": "https://files.pythonhosted.org/packages/38/70/94e67d755ad97eb2f2819546e2251c46a1b6be7093e1b11eeeb3d8289f3d/appr-0.6.1.tar.gz" } ], "0.7.0rc0": [ { "comment_text": "", "digests": { "md5": "5247edc49acc664d348ea370bee0521d", "sha256": "7b1f92db730ecfc761c044e4a68461395d53b7c6e58377ea7c9c41f4f8d1d208" }, "downloads": -1, "filename": "appr-0.7.0rc0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5247edc49acc664d348ea370bee0521d", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 471967, "upload_time": "2017-07-21T13:36:12", "url": "https://files.pythonhosted.org/packages/96/6b/24bb0150ba4b761ec172685c4b72749c7b844e1ab899d9581c88503a1772/appr-0.7.0rc0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d215fa6a6e121c264517729da38c88b1", "sha256": "e70860282c623e54e92bce2fb452c0f7e106548aaa92503b6b2dce0229b967db" }, "downloads": -1, "filename": "appr-0.7.0rc0.tar.gz", "has_sig": false, "md5_digest": "d215fa6a6e121c264517729da38c88b1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 313280, "upload_time": "2017-07-21T13:36:07", "url": "https://files.pythonhosted.org/packages/c5/eb/7c64113604f11d860e1cbaa2359ced18f3ad75d0b45743a152e5f425cfb5/appr-0.7.0rc0.tar.gz" } ], "0.7.2": [ { "comment_text": "", "digests": { "md5": "7eb86772d2ec077ecfc780bacd78a4d2", "sha256": "d3c9b9b9926f7a31fc6e2d9350fdd523f6cc86d8e898bf9878c9ae47d7ef5eea" }, "downloads": -1, "filename": "appr-0.7.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7eb86772d2ec077ecfc780bacd78a4d2", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 475045, "upload_time": "2017-08-13T12:34:31", "url": "https://files.pythonhosted.org/packages/48/9d/fe1230bfade7cb9c2649a58edeb7aeafa77830f52a33da85290170e83872/appr-0.7.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "480ea50c26baf980143f6686d5a4f002", "sha256": "5d286683c257e014795c97d64b00369fb8f11a970449167a4666f448a1b8c0f5" }, "downloads": -1, "filename": "appr-0.7.2.tar.gz", "has_sig": false, "md5_digest": "480ea50c26baf980143f6686d5a4f002", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 315232, "upload_time": "2017-08-13T12:34:26", "url": "https://files.pythonhosted.org/packages/28/34/3e5d232425834317da29fef3962b1d0851d1d63b1947e1e710ea90191b30/appr-0.7.2.tar.gz" } ], "0.7.3": [ { "comment_text": "", "digests": { "md5": "bf661c83456a8a83d29533b0b04b8849", "sha256": "77a196df0207bfd2bb6574baf7ecc56c2dac83910fa4784734d97f43dfc3580f" }, "downloads": -1, "filename": "appr-0.7.3.tar.gz", "has_sig": false, "md5_digest": "bf661c83456a8a83d29533b0b04b8849", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 317128, "upload_time": "2017-09-15T10:04:05", "url": "https://files.pythonhosted.org/packages/b0/94/b354e7ed72b849c9c52131bef16bbd7c9f83aaf7c18ceaf236c03f90aadb/appr-0.7.3.tar.gz" } ], "0.7.4": [ { "comment_text": "", "digests": { "md5": "6645b8ec3ecb1378caf00b27581f6496", "sha256": "b59f63d727d3d591dcb3365f32c521e5f0178915fb54cc949e8ff408d10db8cd" }, "downloads": -1, "filename": "appr-0.7.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6645b8ec3ecb1378caf00b27581f6496", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 484721, "upload_time": "2017-09-22T11:09:56", "url": "https://files.pythonhosted.org/packages/31/e3/5d401aa4a2774ab416f10b38c99f57d05f70cc35b8e9ffaa2a4c51d24b7f/appr-0.7.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a3761b3f22a930af47f1e373dd75d98b", "sha256": "9c12b73060851a080e519e2f7563a42946d91ee98ffbe8766798b287a329820b" }, "downloads": -1, "filename": "appr-0.7.4.tar.gz", "has_sig": false, "md5_digest": "a3761b3f22a930af47f1e373dd75d98b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 317380, "upload_time": "2017-09-22T11:09:52", "url": "https://files.pythonhosted.org/packages/9e/13/c84ede546c1a518455eefa7221426104f952f938bc5cf438face724dbd37/appr-0.7.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6645b8ec3ecb1378caf00b27581f6496", "sha256": "b59f63d727d3d591dcb3365f32c521e5f0178915fb54cc949e8ff408d10db8cd" }, "downloads": -1, "filename": "appr-0.7.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6645b8ec3ecb1378caf00b27581f6496", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 484721, "upload_time": "2017-09-22T11:09:56", "url": "https://files.pythonhosted.org/packages/31/e3/5d401aa4a2774ab416f10b38c99f57d05f70cc35b8e9ffaa2a4c51d24b7f/appr-0.7.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a3761b3f22a930af47f1e373dd75d98b", "sha256": "9c12b73060851a080e519e2f7563a42946d91ee98ffbe8766798b287a329820b" }, "downloads": -1, "filename": "appr-0.7.4.tar.gz", "has_sig": false, "md5_digest": "a3761b3f22a930af47f1e373dd75d98b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 317380, "upload_time": "2017-09-22T11:09:52", "url": "https://files.pythonhosted.org/packages/9e/13/c84ede546c1a518455eefa7221426104f952f938bc5cf438face724dbd37/appr-0.7.4.tar.gz" } ] }