{ "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": "# cnr-server\n\n[![build status](https://gitlab.com/cn-app-registry/cnr-server/badges/master/build.svg)](https://gitlab.com/cn-app-registry/cnr-server/commits/master)\n[![Coverage Status](https://coveralls.io/repos/github/cn-app-registry/cnr-server/badge.svg)](https://coveralls.io/github/cn-app-registry/cnr-server)\n[![Swagger API Reference](https://img.shields.io/badge/swagger-docs-blue.svg)](Documentation/cnr-api-swagger.yaml)\n\nCNR 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/cnr-server.git && cd cnr-server\n2. pip install -e . && pip install gunicorn\n3. Run the cnr-server on port 5000 `gunicorn cnr.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 CNR\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.cnr.package.helm.v1.tar+gzip\",\n \"size\": 583,\n \"urls\": []\n },\n \"created_at\": \"2016-11-16T17:13:07.806579\",\n \"mediaType\": \"application/vnd.cnr.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/cn-app-registry/cnr-server", "keywords": "cnr", "license": "Apache License version 2", "maintainer": "", "maintainer_email": "", "name": "cnr-server", "package_url": "https://pypi.org/project/cnr-server/", "platform": "", "project_url": "https://pypi.org/project/cnr-server/", "project_urls": { "Homepage": "https://github.com/cn-app-registry/cnr-server" }, "release_url": "https://pypi.org/project/cnr-server/0.2.7.post2/", "requires_dist": null, "requires_python": "", "summary": "cloud-native app registry server", "version": "0.2.7.post2" }, "last_serial": 2737140, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "fec6b93d6fd59dd61c62721028abca9f", "sha256": "85df72d3bd439be83c89486959c337f9ae48cd08f4680bfd80690409cbc895e4" }, "downloads": -1, "filename": "cnr_server-0.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fec6b93d6fd59dd61c62721028abca9f", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 16387, "upload_time": "2016-09-30T11:32:12", "url": "https://files.pythonhosted.org/packages/49/29/a8ea3dffe870e1586a6f3b83979be60ae723574c15420aa00ab0bd4ae81b/cnr_server-0.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8e33584f91f6af4575c52db8bbc75067", "sha256": "8df74eca4948fd6636f86b09241f452c63b950d36dd586a754b529af20a9a5b1" }, "downloads": -1, "filename": "cnr-server-0.0.1.tar.gz", "has_sig": false, "md5_digest": "8e33584f91f6af4575c52db8bbc75067", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17534, "upload_time": "2016-09-30T11:32:09", "url": "https://files.pythonhosted.org/packages/ed/82/f894ca52bff69c0044ffd14fcd83f4fabdc6056466f7b8bd691cf24add94/cnr-server-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "78884b7b36a91706c20b436402a42786", "sha256": "5ff742c8b19535c718a9e85647abf43b129a5e838096c70fe1839b9be7a9f585" }, "downloads": -1, "filename": "cnr_server-0.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "78884b7b36a91706c20b436402a42786", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 17557, "upload_time": "2016-10-04T14:07:13", "url": "https://files.pythonhosted.org/packages/33/34/c060737306490ffdd726782b5b5290ca4255911ef2aa162375006e824496/cnr_server-0.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ea5a5d5e5027a86488f6cb445ea4e48b", "sha256": "b2c0e37fe5e75ded07804832456ea5ed64f2cba76c82e79cd36d6d32fae4470d" }, "downloads": -1, "filename": "cnr-server-0.0.2.tar.gz", "has_sig": false, "md5_digest": "ea5a5d5e5027a86488f6cb445ea4e48b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25658, "upload_time": "2016-10-04T14:07:10", "url": "https://files.pythonhosted.org/packages/01/16/6226c4df5f1e49fa932b24fd0c85b72a30a63b110244bb0587f24a6759df/cnr-server-0.0.2.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "0cf1d493710cfbf53e8a29bc3bcc095c", "sha256": "0099b90b56954b46396895f63d24551a16f80543208f022b62fe01e8762b4975" }, "downloads": -1, "filename": "cnr-server-0.2.1.tar.gz", "has_sig": false, "md5_digest": "0cf1d493710cfbf53e8a29bc3bcc095c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44459, "upload_time": "2016-11-21T12:03:45", "url": "https://files.pythonhosted.org/packages/7d/9b/4a6b7b06d8624afefa9b9ddd4416f2597f0147662310cbc1fe443ecdceef/cnr-server-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "deba69dc0291997fc7b6025f9ecb7200", "sha256": "c21703ef14c609f5edf094276f17b8d2dfb4f30fee61a6ea757fafed1e1804a6" }, "downloads": -1, "filename": "cnr_server-0.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "deba69dc0291997fc7b6025f9ecb7200", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 54193, "upload_time": "2016-11-25T15:52:07", "url": "https://files.pythonhosted.org/packages/84/63/5da905cf1b12881dc1f46ed8e09c71311d3021ff61b1d49bf2cec739d0fb/cnr_server-0.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d3b565a7d179373ea9064550c42c6068", "sha256": "79926c4b878a42f224acaae15475cd736967f406dce0d04a673f94fa512d37c2" }, "downloads": -1, "filename": "cnr-server-0.2.2.tar.gz", "has_sig": false, "md5_digest": "d3b565a7d179373ea9064550c42c6068", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44491, "upload_time": "2016-11-25T15:52:03", "url": "https://files.pythonhosted.org/packages/48/a1/f5ec9e7517f7cd93c85fa9403363651b72dcfa0733e152b0be2d363f2e6b/cnr-server-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "7d4c30731cb98a54e579e20c393a3d13", "sha256": "ba5d683354c4951fb5739b4e459e0eff47604ab3147c9e7434147560536d7543" }, "downloads": -1, "filename": "cnr_server-0.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7d4c30731cb98a54e579e20c393a3d13", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 54587, "upload_time": "2016-12-16T17:03:30", "url": "https://files.pythonhosted.org/packages/33/89/066601566b0fa9c6f3e46562b237fa447d393bb15a709c87327fb46654f7/cnr_server-0.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fc30ada3abf92189cceafa65f7695627", "sha256": "377d9bc6aa2404e7c1b042380f283f6cc5facc7db806585ac50b95341400e0a6" }, "downloads": -1, "filename": "cnr-server-0.2.3.tar.gz", "has_sig": false, "md5_digest": "fc30ada3abf92189cceafa65f7695627", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44199, "upload_time": "2016-12-16T17:03:26", "url": "https://files.pythonhosted.org/packages/32/5f/d1ca04d9582b79ebdcb635ccceae41d64c08c37e9a11eea8c561310b1aeb/cnr-server-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "28653a3e61b01f3ebd02f6640c90ae1d", "sha256": "16fbb36965f91c6d53f1d91bc55bab0668877f71a464b38395026456d5311ec5" }, "downloads": -1, "filename": "cnr_server-0.2.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "28653a3e61b01f3ebd02f6640c90ae1d", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 54595, "upload_time": "2017-01-18T17:41:29", "url": "https://files.pythonhosted.org/packages/ed/23/4b1eb4def40a51977794ea18e184f927f8767bde6790273bbd32c510aed5/cnr_server-0.2.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2dbe0dd9358f5e2980fb6699206ff691", "sha256": "d8b609fc5c06ebf3f9db0876828323075abb0a2cbdc7769917f62b4583c61d48" }, "downloads": -1, "filename": "cnr-server-0.2.4.tar.gz", "has_sig": false, "md5_digest": "2dbe0dd9358f5e2980fb6699206ff691", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44267, "upload_time": "2017-01-18T17:41:25", "url": "https://files.pythonhosted.org/packages/4d/28/08310f0c1d27d4552ca4eae6846c113481c344aa9d102b10ee8925c178d8/cnr-server-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "4b7f96438b301e4ac2679d0c0652a183", "sha256": "44ca6ebe49c3557d2ac0de8918dc3701ed91ce215149ff1dbf1cbf4014fe1756" }, "downloads": -1, "filename": "cnr_server-0.2.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4b7f96438b301e4ac2679d0c0652a183", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 54831, "upload_time": "2017-02-05T21:11:46", "url": "https://files.pythonhosted.org/packages/03/18/78ec3f432ac9d0651a512cf55e61af9674cee76deaf37f62d17cea25ff0f/cnr_server-0.2.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "327dff1f5d19ac0680488ec20bbc9325", "sha256": "ab058499d230a7affce7ccaa8f6af0ef88592a88abefe8f42d1e33498472957a" }, "downloads": -1, "filename": "cnr-server-0.2.5.tar.gz", "has_sig": false, "md5_digest": "327dff1f5d19ac0680488ec20bbc9325", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44333, "upload_time": "2017-02-05T21:11:44", "url": "https://files.pythonhosted.org/packages/67/5e/c956445ecc829f52205a6195a4d074bc7f60c09942e1c34df86a98ce8740/cnr-server-0.2.5.tar.gz" } ], "0.2.6.post1": [ { "comment_text": "", "digests": { "md5": "8f6ed3dee9f529d3412917574e18887b", "sha256": "c5d299671097cba858e536e2ebdcd8c99a88660c16e4f2ee3e6fdcdfdbc2ee04" }, "downloads": -1, "filename": "cnr_server-0.2.6.post1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8f6ed3dee9f529d3412917574e18887b", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 54927, "upload_time": "2017-02-16T18:38:09", "url": "https://files.pythonhosted.org/packages/a0/b6/9255dc6591b5fd29b89446000cd716810bedc982689ce90b9d1b36603a01/cnr_server-0.2.6.post1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c4314c96ce797c851c72d174eecbbd62", "sha256": "1b15cbfcacf53389036bee1458601b8984fd6f694bef29b3af98324c80ae3900" }, "downloads": -1, "filename": "cnr-server-0.2.6.post1.tar.gz", "has_sig": false, "md5_digest": "c4314c96ce797c851c72d174eecbbd62", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44331, "upload_time": "2017-02-16T18:38:05", "url": "https://files.pythonhosted.org/packages/7d/6a/5c9ad7fda77764f980e3ce5bbea9b6edbb57e407bb4d5912438d2cb7f339/cnr-server-0.2.6.post1.tar.gz" } ], "0.2.7.post2": [ { "comment_text": "", "digests": { "md5": "5d78f81c6275e74300317bd6b299062d", "sha256": "60e7464318ffa09e87e7a4366f013044506bafe80d09859f1b3de6edb4c452e0" }, "downloads": -1, "filename": "cnr_server-0.2.7.post2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5d78f81c6275e74300317bd6b299062d", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 54980, "upload_time": "2017-03-28T21:12:05", "url": "https://files.pythonhosted.org/packages/a9/e7/bed1a8b503190d1487ce2fc871666f0ad01203af9f50e0a864c95a906398/cnr_server-0.2.7.post2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c2dd871f626587d87d637fde1cd1c46d", "sha256": "9c2671c834dcb1d1936080372b284288d1012a8f9ad95fe57f03a29ebcfc5889" }, "downloads": -1, "filename": "cnr-server-0.2.7.post2.tar.gz", "has_sig": false, "md5_digest": "c2dd871f626587d87d637fde1cd1c46d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44489, "upload_time": "2017-03-28T21:12:01", "url": "https://files.pythonhosted.org/packages/75/d7/0eae2684891adca5b084c2a68312516a6ba35c8d1f699012cbc205e5ab46/cnr-server-0.2.7.post2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5d78f81c6275e74300317bd6b299062d", "sha256": "60e7464318ffa09e87e7a4366f013044506bafe80d09859f1b3de6edb4c452e0" }, "downloads": -1, "filename": "cnr_server-0.2.7.post2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5d78f81c6275e74300317bd6b299062d", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 54980, "upload_time": "2017-03-28T21:12:05", "url": "https://files.pythonhosted.org/packages/a9/e7/bed1a8b503190d1487ce2fc871666f0ad01203af9f50e0a864c95a906398/cnr_server-0.2.7.post2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c2dd871f626587d87d637fde1cd1c46d", "sha256": "9c2671c834dcb1d1936080372b284288d1012a8f9ad95fe57f03a29ebcfc5889" }, "downloads": -1, "filename": "cnr-server-0.2.7.post2.tar.gz", "has_sig": false, "md5_digest": "c2dd871f626587d87d637fde1cd1c46d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44489, "upload_time": "2017-03-28T21:12:01", "url": "https://files.pythonhosted.org/packages/75/d7/0eae2684891adca5b084c2a68312516a6ba35c8d1f699012cbc205e5ab46/cnr-server-0.2.7.post2.tar.gz" } ] }