Rancher Kubernetes API compatible with RKE, RKE2 and maybe others?
Project description
kctl
Rancher Kubernetes API compatible with RKE, RKE2 and maybe others?
Documentation is WIP.
Quickstart
pip install --upgrade kctl
Usage
from lazycls.envs import set_env_from_dict
"""
---
Primary Configuration that takes env variables first.
---
host = envToStr('KCTL_HOST', 'http://localhost')
api_key = envToStr('KCTL_API_KEY')
api_key_prefix = envToStr('KCTL_API_KEY_PREFIX', 'token:')
api_token = envToStr('KCTL_API_TOKEN')
username = envToStr('KCTL_API_USERNAME')
password = envToStr('KCTL_API_PASSWORD')
auth_prefix = envToStr('KTCL_AUTH_PREFIX', 'authorization')
---
Rancher Specific Configuration
---
host: str = KctlCfg.host,
api_version: str = 'v1',
api_token: str = KctlCfg.api_token,
ssl_verify: bool = True,
strict: bool = False,
cache_time: int = 86400,
cache_dir: Union[Path, str] = DefaultCacheDir,
rancher_default_cluster: str = None,
rancher_fleet_name: str = 'fleet-default',
clusters_enabled: List[str] = [],
clusters_disabled: List[str] = []
---
Then validates against env variables during initialization, prioritizing env variables.
---
api_version = envToStr('KCTL_API_VERSION', api_version or 'v1')
ssl_verify = envToBool('KCTL_SSL_VERIFY', str(ssl_verify))
strict = envToBool('KCTL_STRICT', str(strict))
cache_time = envToInt('KCTL_CACHE_TIME', cache_time)
cache_dir = to_path(envToStr('KCTL_CACHE_DIR', None) or cache_dir)
rancher_default_cluster = envToStr('KCTL_RANCHER_DEFAULT_CLUSTER', rancher_default_cluster)
rancher_fleet_name = envToStr('KCTL_RANCHER_FLEET_NAME', rancher_fleet_name)
# If both are empty, then it will assume all clusters are enabled.
clusters_enabled = envToList('KCTL_CLUSTERS_ENABLED', clusters_enabled)
clusters_disabled = envToList('KCTL_CLUSTERS_DISABLED', clusters_disabled)
"""
data = {
'KCTL_HOST': 'https://ranchercluster.com',
'KCTL_API_TOKEN': 'token-xxxx:yyyyyyyyyyyyyyyyyyyyyyyyyyyy'
}
set_env_from_dict(data, override=True)
from kctl.client import KctlClient
## Rancher Specific
## This will build the object class dynamically
## enabling v1/v3 api methods.
## v3 is typically the management cluster
## v1 is cluster specific
KctlClient.build_rancher_ctx()
## KctlClient is a Class that doesnt require initialization
## Sync Method
cs = KctlClient.v3.list_cluster()
## Async Method
cs = await KctlClient.v3.async_list_cluster()
cs.data[-1].name
"""
local
"""
## Change Cluster Context
KctlClient.set_cluster('staging-cluster')
KctlClient.v1.url
"""
Now the primary api url will be called using the proper k8s path
-> https://ranchercluster.com/k8s/clusters/c-m-xxxxxx
"""
KctlClient.v1.list_apps_deployment()
"""
All v1 methods will now return the specified cluster context
{
'type': 'collection',
'links': {'self': 'https://ranchercluster.com/k8s/clusters/c-m-xxxxxx/v1/apps.deployments/fleet-default'},
'createTypes': {'apps.deployment': 'https://ranchercluster.com/k8s/clusters/c-m-xxxxxx/v1/apps.deployments'},
'actions': {},
'resourceType': 'apps.deployment',
'revision': '6671325',
'data': []
}
"""
Enhancements
This library borrows the dynamic initialization method from the primary rancher-client python library with several enhancements.
-
Async and Sync support via
httpx
/lazyapi
, which can be initialized from a sync environment. -
All async methods are accessed with
async_
prefix of the same sync methods. -
Inclusion of kubernetes python client which can be called via
KctlClient.api
, allowing setting of credentials once. Although this use case has not been extensively tested. (or rather, at all.) -
Dynamic Access of downstream clusters without requiring reinitialization of the client
-
Enables context switching between clusters
-
Lazy caching of the api schema in
kctl/kctl/.kctlcache
-
Enables access of v1/v3 api methods within the same client.
-
All returned results are objects, allowing dynamic access of object attributes, rather than strictly
dict
based. -
Adds support for
fleet
namespaces to ensure proper url handling
Credits / Libraries Used
-
rancher-client: inspired dynamic schema initialization
-
kubernetes: included to manage credentials
-
lazyapi: personal library that is used to create the
httpx
clients. -
lazycls: personal library that contains a lot of utility functions that enables this library to be as slim as possible.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file kctl-0.0.1.tar.gz
.
File metadata
- Download URL: kctl-0.0.1.tar.gz
- Upload date:
- Size: 14.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 83cd88782f71b228600e08092f2e9603d44c70930b80c612d436a61fb32f82ac |
|
MD5 | 672ce1bea9423a7b2b094f11c6a7483c |
|
BLAKE2b-256 | fb931002fff68afb7fbd534cf34b1ef5f7a69a7162017d3ce13c3d29d6d2485c |
File details
Details for the file kctl-0.0.1-py3-none-any.whl
.
File metadata
- Download URL: kctl-0.0.1-py3-none-any.whl
- Upload date:
- Size: 14.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3583289fd038a1de08759d84392acdaa9ecc429333fee91515f19ec2cdb2a365 |
|
MD5 | abc8c61e86048af155c4172ec5176ad4 |
|
BLAKE2b-256 | 02954f14d658fd289b88b7c4578d680c4a088c7fa0fef0dcd3b4d6d6903cb3e2 |