{ "info": { "author": "Joel Damata", "author_email": "joel.damata94@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Build Tools" ], "description": "# k8s-leader-election-py\nClient-go has a very easy to use leader-election package for kubernetes controllers to utilize [leader-election](https://github.com/kubernetes/client-go/blob/master/tools/leaderelection/leaderelection.go). The python kubernetes-client doesn't have such a method, so this will have to do for now.\n\n## Requirements\nYour controller must have a pod and namespace environment variable defined:\n```yaml\nenv:\n- name: POD\n valueFrom:\n fieldRef:\n fieldPath: metadata.name\n- name: NAMESPACE\n valueFrom:\n fieldRef:\n fieldPath: metadata.namespace\n```\n\nYour controller must be able to list, get, update and create configmaps.\n```yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n name: sample-controller\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n name: sample-controller\nrules:\n- apiGroups:\n - \"\"\n resources:\n - configmaps\n verbs:\n - '*'\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n name: sample-controller\nroleRef:\n apiGroup: \"\"\n kind: Role\n name: sample-controller\nsubjects:\n- kind: ServiceAccount\n name: sample-controller\n apiGroup: \"\"\n```\n\n## Example\nSample code:\n```python\nfrom threading import Thread\nfrom leaderelection import Elect\n\n# Init leader election class. Configmap is the name of the configmap to create to store leader election information\nleaderelection = Elect(configmap='sample-controller-leader-election')\n# Run leader election in new thread\nth = Thread(target=leaderelection.run)\nth.setDaemon(True)\nth.start()\n#start main controller loop\nwhile True:\n # Check if pod is the leader. If so continue on with controller logic.\n leader = leaderelection.check_leader()\n if leader:\n logger.info(\"I am the leader!!\")\n else:\n logger.info(\"I am NOT the leader\")\n```", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://github.com/jdamata/k8s-leader-election-py/archive/0.0.3.tar.gz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/jdamata", "keywords": "Kubernetes,Controller,Leader,Election", "license": "GPL3", "maintainer": "", "maintainer_email": "", "name": "leaderelection", "package_url": "https://pypi.org/project/leaderelection/", "platform": "", "project_url": "https://pypi.org/project/leaderelection/", "project_urls": { "Download": "https://github.com/jdamata/k8s-leader-election-py/archive/0.0.3.tar.gz", "Homepage": "https://github.com/jdamata" }, "release_url": "https://pypi.org/project/leaderelection/0.0.3/", "requires_dist": null, "requires_python": "", "summary": "Kubernetes leader election", "version": "0.0.3" }, "last_serial": 5813287, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "f962684b4e133a19b96a18e698d80233", "sha256": "b26930c8dd81669f56c3414277a275865bfe2b7ecf2d91561019982eed234ef3" }, "downloads": -1, "filename": "leaderelection-0.0.1.tar.gz", "has_sig": false, "md5_digest": "f962684b4e133a19b96a18e698d80233", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2539, "upload_time": "2019-09-11T04:54:31", "url": "https://files.pythonhosted.org/packages/d2/88/39340a98a59d0bc687defaee581a59d6172ab049dcdff7602ea40d05ecd4/leaderelection-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "50aaddd12d4c4e8f7b0f16ebdb132b64", "sha256": "89607c88a993c10cbc3c931372a38f6aa41fc4f45b741a07e27e0188a63683d3" }, "downloads": -1, "filename": "leaderelection-0.0.2.tar.gz", "has_sig": false, "md5_digest": "50aaddd12d4c4e8f7b0f16ebdb132b64", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3055, "upload_time": "2019-09-11T05:11:30", "url": "https://files.pythonhosted.org/packages/80/99/aeff2a9e3bf003e2a9cfa7e3567d40011c69ad5d640958602bc15609a303/leaderelection-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "d6e253ca4ce17e9f402ed690e395338c", "sha256": "6781bbd1a03bcb06bb322d9a075ab3a690b758d71555c6680c31d75fe79e59b7" }, "downloads": -1, "filename": "leaderelection-0.0.3.tar.gz", "has_sig": false, "md5_digest": "d6e253ca4ce17e9f402ed690e395338c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3288, "upload_time": "2019-09-11T06:49:22", "url": "https://files.pythonhosted.org/packages/2a/f8/58d4a3b37dfb3ca01446098400499f7bb52713026b9630b8c5e7ce764380/leaderelection-0.0.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d6e253ca4ce17e9f402ed690e395338c", "sha256": "6781bbd1a03bcb06bb322d9a075ab3a690b758d71555c6680c31d75fe79e59b7" }, "downloads": -1, "filename": "leaderelection-0.0.3.tar.gz", "has_sig": false, "md5_digest": "d6e253ca4ce17e9f402ed690e395338c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3288, "upload_time": "2019-09-11T06:49:22", "url": "https://files.pythonhosted.org/packages/2a/f8/58d4a3b37dfb3ca01446098400499f7bb52713026b9630b8c5e7ce764380/leaderelection-0.0.3.tar.gz" } ] }