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
dictbased. -
Adds support for
fleetnamespaces 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
httpxclients. -
lazycls: personal library that contains a lot of utility functions that enables this library to be as slim as possible.
Metadata
Release files for kctl 0.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| kctl-0.0.1.tar.gz | 14.1 kB | Without provenance | Details for kctl-0.0.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| kctl-0.0.1-py3-none-any.whl | Python 3 | none | any | Details for kctl-0.0.1-py3-none-any.whl |
Total release size: 28.1 kB
Release files / kctl-0.0.1.tar.gz
| Download URL | kctl-0.0.1.tar.gz |
|---|---|
| Size | 14.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
83cd88782f71b228600e08092f2e9603d44c70930b80c612d436a61fb32f82ac
|
|
BLAKE2b-256 checksum How to use checksums |
fb931002fff68afb7fbd534cf34b1ef5f7a69a7162017d3ce13c3d29d6d2485c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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
|
Release files / kctl-0.0.1-py3-none-any.whl
| Download URL | kctl-0.0.1-py3-none-any.whl |
|---|---|
| Size | 14.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3583289fd038a1de08759d84392acdaa9ecc429333fee91515f19ec2cdb2a365
|
|
BLAKE2b-256 checksum How to use checksums |
02954f14d658fd289b88b7c4578d680c4a088c7fa0fef0dcd3b4d6d6903cb3e2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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
|
Security for kctl 0.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.