pyk8s


Namepyk8s JSON
Version 0.0.0a1 PyPI version JSON
download
home_page
SummaryKubernetes Python Pydantic Client
upload_time2023-04-19 08:00:24
maintainer
docs_urlNone
author
requires_python>=3.7
licenseBSD-3-Clause
keywords kubernetes client kubernetes-client kubernetes-dynamic dynamic
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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"
}
        
Elapsed time: 0.14082s