# kubernetes-dynamic
This project aims to provide an easy interface over kubernetes API based on the official kubernetes package.
Basic syntax is very similar to kubectl.
`client.pods.get()` is the same as `kubectl get pods`
## Example Usage
```python
import kubernetes_dynamic as kd
client = kd.K8sClient()
pods: list[kd.models.V1Pod] = client.pods.get()
for pod in pods:
print(pod.metadata.name)
```
### Custom resources
```python
import kubernetes_dynamic as kd
class MyModel(kd.models.ResourceItem):
field: str
api: ResourceApi[MyModel] = kc.cl.get_api("mycustomresources", MyModel)
api: ResourceApi[MyModel] = kc.cl.get_api(kind="MyCustomResource", object_type=MyModel)
items: List[MyModel] = api.get()
item: Optional[MyModel] = api.get(name="exact-name")
if item:
item.field = "modified"
item.patch()
else:
item = MyModel(metadata={"name": "exact-name", "namespace": "namespace-name"}, field="created", client=kd.cl)
item.create()
# item = MyModel(field="created")
# item.metadata.name = "exact-name"
# item = MyModel(metadata={"name": "exact-name"}, field="created")
# item = MyModel(metadata=kd.models.V1Metadata(name="exact-name"), field="created")
# item.create(namespace="namespace-name")
```
## Models
We aim to provide pydantic models for all reasources.
Because the model names are exactly the same as in the `kubernetes` package, make sure you import the models from `kubernetes_dynamic.models`
- Proper type hinting
- All models are flexible (less dependent on kubernetes version):
- accept extra values
- all optional (type checker is tricked into assuming everything exists)
- Models created by queries have a reference to the client it was created by, manually creating models creates a default client(without arguments), or you can specify `client` manually.
- Base model contains common methods for all models:
- refresh
- patch
- create
- read
- delete
- is_ready
- additional features for specific models (just examples):
- configmap:
- from_path
- ingress:
- get_default_host
- namespace:
- annotate
- ensure
- pod:
- get_restarts
- exec
- disk_usage
- get_controller_type
- get_env
- secret
- exists
- set
- decode
## Subresources
Subresources are available under the main resource api objects:
- example: `client.pods.exec`
## Work in progress
Expect breaking changes
Raw data
{
"_id": null,
"home_page": "",
"name": "pyk8s",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": "",
"keywords": "kubernetes,client,kubernetes-client,kubernetes-dynamic,dynamic",
"author": "",
"author_email": "",
"download_url": "https://files.pythonhosted.org/packages/60/43/8476adf514ca7caecfe6036a830c93b1955cea588ccbce46ad520b1a4b33/pyk8s-0.0.0a1.tar.gz",
"platform": null,
"description": "# kubernetes-dynamic\n\nThis project aims to provide an easy interface over kubernetes API based on the official kubernetes package.\n\nBasic syntax is very similar to kubectl.\n\n`client.pods.get()` is the same as `kubectl get pods`\n\n## Example Usage\n\n```python\nimport kubernetes_dynamic as kd\n\nclient = kd.K8sClient()\npods: list[kd.models.V1Pod] = client.pods.get()\nfor pod in pods:\n print(pod.metadata.name)\n```\n\n### Custom resources\n\n```python\nimport kubernetes_dynamic as kd\n\nclass MyModel(kd.models.ResourceItem):\n field: str\n\n\napi: ResourceApi[MyModel] = kc.cl.get_api(\"mycustomresources\", MyModel)\napi: ResourceApi[MyModel] = kc.cl.get_api(kind=\"MyCustomResource\", object_type=MyModel)\nitems: List[MyModel] = api.get()\nitem: Optional[MyModel] = api.get(name=\"exact-name\")\nif item:\n item.field = \"modified\"\n item.patch()\nelse:\n item = MyModel(metadata={\"name\": \"exact-name\", \"namespace\": \"namespace-name\"}, field=\"created\", client=kd.cl)\n item.create()\n # item = MyModel(field=\"created\")\n # item.metadata.name = \"exact-name\"\n\n # item = MyModel(metadata={\"name\": \"exact-name\"}, field=\"created\")\n\n # item = MyModel(metadata=kd.models.V1Metadata(name=\"exact-name\"), field=\"created\")\n # item.create(namespace=\"namespace-name\")\n```\n\n## Models\n\nWe aim to provide pydantic models for all reasources.\n\nBecause the model names are exactly the same as in the `kubernetes` package, make sure you import the models from `kubernetes_dynamic.models`\n\n- Proper type hinting\n- All models are flexible (less dependent on kubernetes version):\n - accept extra values\n - all optional (type checker is tricked into assuming everything exists)\n- Models created by queries have a reference to the client it was created by, manually creating models creates a default client(without arguments), or you can specify `client` manually.\n- Base model contains common methods for all models:\n - refresh\n - patch\n - create\n - read\n - delete\n - is_ready\n- additional features for specific models (just examples):\n - configmap:\n - from_path\n - ingress:\n - get_default_host\n - namespace:\n - annotate\n - ensure\n - pod:\n - get_restarts\n - exec\n - disk_usage\n - get_controller_type\n - get_env\n - secret\n - exists\n - set\n - decode\n\n## Subresources\n\nSubresources are available under the main resource api objects:\n\n- example: `client.pods.exec`\n\n## Work in progress\n\nExpect breaking changes\n",
"bugtrack_url": null,
"license": "BSD-3-Clause",
"summary": "Kubernetes Python Pydantic Client",
"version": "0.0.0a1",
"split_keywords": [
"kubernetes",
"client",
"kubernetes-client",
"kubernetes-dynamic",
"dynamic"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "7a939217552b230e86bc3a5f23895058b4840574b8d9a01ec668225c2b76db67",
"md5": "2ee6d6540850f002f26f9a0211773cce",
"sha256": "9e2ff164d9659ce562b41612ecd5bc764448ca2424524f83c6b71adb0ae25de4"
},
"downloads": -1,
"filename": "pyk8s-0.0.0a1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "2ee6d6540850f002f26f9a0211773cce",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 81063,
"upload_time": "2023-04-19T08:00:22",
"upload_time_iso_8601": "2023-04-19T08:00:22.619302Z",
"url": "https://files.pythonhosted.org/packages/7a/93/9217552b230e86bc3a5f23895058b4840574b8d9a01ec668225c2b76db67/pyk8s-0.0.0a1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "60438476adf514ca7caecfe6036a830c93b1955cea588ccbce46ad520b1a4b33",
"md5": "9c1494256da685a4c7d81b9ca767dd89",
"sha256": "1991c42778adba02a8f085da063f0939ebc000c9fb1ea396a0668b40f9928759"
},
"downloads": -1,
"filename": "pyk8s-0.0.0a1.tar.gz",
"has_sig": false,
"md5_digest": "9c1494256da685a4c7d81b9ca767dd89",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 68802,
"upload_time": "2023-04-19T08:00:24",
"upload_time_iso_8601": "2023-04-19T08:00:24.636281Z",
"url": "https://files.pythonhosted.org/packages/60/43/8476adf514ca7caecfe6036a830c93b1955cea588ccbce46ad520b1a4b33/pyk8s-0.0.0a1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-04-19 08:00:24",
"github": false,
"gitlab": false,
"bitbucket": false,
"lcname": "pyk8s"
}