kubex.api¶
Auto-generated reference for the kubex.api module. Private descriptors (e.g. _LogsDescriptor) are excluded; they exist to wire the subresource accessors onto Api[T] and are not part of the public API.
Api class¶
kubex.api.api ¶
Api ¶
Bases: Generic[ResourceType]
API for interacting with Kubernetes resource.
Source code in kubex/api/api.py
create
async
¶
create(
data: ResourceType,
*,
namespace: ApiNamespaceTypes = Ellipsis,
dry_run: DryRunTypes = None,
field_manager: str | None = None,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> ResourceType
Create a resource.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
data
|
ResourceType
|
The resource instance to create. |
required |
namespace
|
ApiNamespaceTypes
|
The namespace to create the resource in. If not provided, the namespace provided when creating the API will be used. The namespace is required for namespaced resources. If namespace is provided for cluster-scoped resources, an error will be raised. |
Ellipsis
|
dry_run
|
DryRunTypes
|
Whether to perform a dry run of the operation. |
None
|
field_manager
|
str
|
The value to use for the fieldManager attribute of the created resource. |
None
|
request_timeout
|
ApiRequestTimeoutTypes
|
HTTP-level timeout override for this call. A number is
interpreted as the total timeout in seconds. Pass |
Ellipsis
|
Returns: ResourceType: the created resource instance.
Source code in kubex/api/api.py
delete
async
¶
delete(
name: str,
*,
namespace: ApiNamespaceTypes = Ellipsis,
dry_run: DryRunTypes = None,
grace_period_seconds: int | None = None,
propagation_policy: PropagationPolicyTypes = None,
preconditions: Precondition | None = None,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> Status | ResourceType
Delete the specified resource.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
The name of the resource to delete. |
required |
namespace
|
ApiNamespaceTypes
|
The namespace of the namespaced resource to delete. If not provided, the namespace provided when creating the API will be used. The namespace is required for namespaced resources. If namespace is provided for cluster-scoped resources, an error will be raised. |
Ellipsis
|
dry_run
|
DryRunTypes
|
Whether to perform a dry run of the operation. |
None
|
grace_period_seconds
|
int | None
|
The duration in seconds before the object should be deleted. |
None
|
propagation_policy
|
PropagationPolicyTypes
|
Whether and how garbage collection will be performed. |
None
|
preconditions
|
Precondition | None
|
Preconditions for the operation. |
None
|
request_timeout
|
ApiRequestTimeoutTypes
|
HTTP-level timeout override for this call. A number is
interpreted as the total timeout in seconds. Pass |
Ellipsis
|
Returns: Status: the resource has been fully deleted. ResourceType: the resource instance deletion process has started, but the resource is not gone yet due to finalization process. For details see Resource deletion documentation.
Source code in kubex/api/api.py
delete_collection
async
¶
delete_collection(
*,
namespace: ApiNamespaceTypes = Ellipsis,
label_selector: str | None = None,
field_selector: str | None = None,
timeout_seconds: int | None = None,
limit: int | None = None,
continue_token: str | None = None,
version_match: VersionMatch | None = None,
resource_version: ResourceVersionTypes = None,
dry_run: DryRunTypes = None,
grace_period_seconds: int | None = None,
propagation_policy: PropagationPolicyTypes = None,
preconditions: Precondition | None = None,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> Status | ListEntity[ResourceType]
Delete collection of resources.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
timeout_seconds
|
int | None
|
Server-side timeout (in seconds) for the call;
sent as the Kubernetes |
None
|
request_timeout
|
ApiRequestTimeoutTypes
|
HTTP-level timeout override for this call. A number is
interpreted as the total timeout in seconds. Pass |
Ellipsis
|
Source code in kubex/api/api.py
get
async
¶
get(
name: str,
*,
namespace: ApiNamespaceTypes = Ellipsis,
resource_version: ResourceVersionTypes = None,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> ResourceType
Read the specified resource.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
The name of the resource to read. |
required |
namespace
|
ApiNamespaceTypes
|
The namespace of the namespaced resource to read. If not provided, the namespace provided when creating the API will be used. The namespace is required for namespaced resources. If namespace is provided for cluster-scoped resources, an error will be raised. |
Ellipsis
|
resource_version
|
ResourceVersionTypes
|
The resource version to read. If not provided, the current resource version will be read. For details look at Resource Version Semantics documentation, |
None
|
request_timeout
|
ApiRequestTimeoutTypes
|
HTTP-level timeout override for this call. A number is
interpreted as the total timeout in seconds. Pass |
Ellipsis
|
Returns: ResourceType: the resource instance.
Source code in kubex/api/api.py
list
async
¶
list(
*,
namespace: ApiNamespaceTypes = Ellipsis,
label_selector: str | None = None,
field_selector: str | None = None,
timeout_seconds: int | None = None,
limit: int | None = None,
continue_token: str | None = None,
version_match: VersionMatch | None = None,
resource_version: ResourceVersionTypes = None,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> ListEntity[ResourceType]
List objects of kind.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
namespace
|
ApiNamespaceTypes
|
The namespace of the namespaced resource to list. If not provided, the namespace provided when creating the API will be used. If namespace is provided for cluster-scoped resources, an error will be raised. |
Ellipsis
|
label_selector
|
str | None
|
A selector to restrict the list of returned objects by their labels. For details look at Label Selectors documentation. |
None
|
field_selector
|
str | None
|
A selector to restrict the list of returned objects by their fields. For details look at Field Selectors documentation. |
None
|
timeout_seconds
|
int | None
|
Server-side timeout (in seconds) for the list/watch call;
sent as the Kubernetes |
None
|
limit
|
int | None
|
The maximum number of items to return. |
None
|
continue_token
|
str | None
|
The continue token for the list call. |
None
|
version_match
|
VersionMatch | None
|
Whether to watch for changes to a resource. |
None
|
resource_version
|
ResourceVersionTypes
|
The resource version to list. If not provided, the current resource version will be listed. For details look at Resource Version Semantics documentation, |
None
|
request_timeout
|
ApiRequestTimeoutTypes
|
HTTP-level timeout override for this call. A number is
interpreted as the total timeout in seconds. Pass |
Ellipsis
|
Returns: ListEntity[ResourceType]: the list of resource.
Source code in kubex/api/api.py
patch
async
¶
patch(
name: str,
patch: Patch,
*,
namespace: ApiNamespaceTypes = Ellipsis,
dry_run: DryRunTypes = None,
field_manager: str | None = None,
force: bool | None = None,
field_validation: FieldValidation | None = None,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> ResourceType
Patch the specified resource.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
request_timeout
|
ApiRequestTimeoutTypes
|
HTTP-level timeout override for this call. A number is
interpreted as the total timeout in seconds. Pass |
Ellipsis
|
Source code in kubex/api/api.py
replace
async
¶
replace(
name: str,
data: ResourceType,
*,
namespace: ApiNamespaceTypes = Ellipsis,
dry_run: DryRunTypes = None,
field_manager: str | None = None,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> ResourceType
Replace the specified resource.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
request_timeout
|
ApiRequestTimeoutTypes
|
HTTP-level timeout override for this call. A number is
interpreted as the total timeout in seconds. Pass |
Ellipsis
|
Source code in kubex/api/api.py
watch
async
¶
watch(
*,
namespace: ApiNamespaceTypes = Ellipsis,
label_selector: str | None = None,
field_selector: str | None = None,
allow_bookmarks: bool | None = None,
send_initial_events: bool | None = None,
timeout_seconds: int | None = None,
resource_version: ResourceVersionTypes = None,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> AsyncGenerator[WatchEvent[ResourceType], None]
Watch for changes to the specified resource.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
request_timeout
|
ApiRequestTimeoutTypes
|
HTTP-level timeout override for this call. A number is
interpreted as the total timeout in seconds. Pass |
Ellipsis
|
Source code in kubex/api/api.py
create_api
async
¶
create_api(
resource_type: Type[ResourceType],
*,
client: BaseClient | None = None,
namespace: NamespaceTypes = None,
) -> Api[ResourceType]
Create an API for the specified resource type.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
resource_type
|
Type[ResourceType]
|
The resource type to create an API for. |
required |
client
|
BaseClient | None
|
The client to use for the API. If not provided, a new client will be created. |
None
|
namespace
|
NamespaceTypes
|
The namespace to use for the API. If set all operations will be performed in this namespace. The Api namespace can be overridden by passing a namespace to the individual methods. |
None
|
Returns: An Api instance for the specified resource type.
Source code in kubex/api/api.py
Logs subresource¶
kubex.api._logs ¶
LogsAccessor ¶
LogsAccessor(
client: BaseClient,
request_builder: RequestBuilder,
namespace: NamespaceTypes,
scope: Scope,
resource_type: Type[ResourceType],
)
Bases: Generic[ResourceType]
Accessor for logs subresource operations.
Source code in kubex/api/_logs.py
get
async
¶
get(
name: str,
*,
namespace: ApiNamespaceTypes = Ellipsis,
container: str | None = None,
limit_bytes: int | None = None,
pretty: bool | None = None,
previous: bool | None = None,
since_seconds: int | None = None,
tail_lines: int | None = None,
timestamps: bool | None = None,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> str
Read logs of the specified resource.
Source code in kubex/api/_logs.py
stream
async
¶
stream(
name: str,
*,
namespace: ApiNamespaceTypes = Ellipsis,
container: str | None = None,
limit_bytes: int | None = None,
pretty: bool | None = None,
previous: bool | None = None,
since_seconds: int | None = None,
tail_lines: int | None = None,
timestamps: bool | None = None,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> AsyncGenerator[str, None]
Stream logs of the specified resource.
Source code in kubex/api/_logs.py
Scale subresource¶
kubex.api._scale ¶
ScaleAccessor ¶
ScaleAccessor(
client: BaseClient,
request_builder: RequestBuilder,
namespace: NamespaceTypes,
scope: Scope,
resource_type: Type[ResourceType],
)
Bases: Generic[ResourceType]
Accessor for scale subresource operations.
Source code in kubex/api/_scale.py
get
async
¶
get(
name: str,
*,
namespace: ApiNamespaceTypes = Ellipsis,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> Scale
Read the scale of the specified resource.
Source code in kubex/api/_scale.py
patch
async
¶
patch(
name: str,
patch: Patch,
*,
namespace: ApiNamespaceTypes = Ellipsis,
dry_run: DryRunTypes = None,
field_manager: str | None = None,
force: bool | None = None,
field_validation: FieldValidation | None = None,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> Scale
Patch the scale of the specified resource.
Source code in kubex/api/_scale.py
replace
async
¶
replace(
name: str,
scale: Scale,
*,
namespace: ApiNamespaceTypes = Ellipsis,
dry_run: DryRunTypes = None,
field_manager: str | None = None,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> Scale
Replace the scale of the specified resource.
Source code in kubex/api/_scale.py
Status subresource¶
kubex.api._status ¶
StatusAccessor ¶
StatusAccessor(
client: BaseClient,
request_builder: RequestBuilder,
namespace: NamespaceTypes,
scope: Scope,
resource_type: Type[ResourceType],
)
Bases: Generic[ResourceType]
Accessor for status subresource operations.
Source code in kubex/api/_status.py
get
async
¶
get(
name: str,
*,
namespace: ApiNamespaceTypes = Ellipsis,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> ResourceType
Read the status of the specified resource.
Source code in kubex/api/_status.py
patch
async
¶
patch(
name: str,
patch: Patch,
*,
namespace: ApiNamespaceTypes = Ellipsis,
dry_run: DryRunTypes = None,
field_manager: str | None = None,
force: bool | None = None,
field_validation: FieldValidation | None = None,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> ResourceType
Patch the status of the specified resource.
Source code in kubex/api/_status.py
replace
async
¶
replace(
name: str,
data: ResourceType,
*,
namespace: ApiNamespaceTypes = Ellipsis,
dry_run: DryRunTypes = None,
field_manager: str | None = None,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> ResourceType
Replace the status of the specified resource.
Source code in kubex/api/_status.py
Eviction subresource¶
kubex.api._eviction ¶
EvictionAccessor ¶
EvictionAccessor(
client: BaseClient,
request_builder: RequestBuilder,
namespace: NamespaceTypes,
scope: Scope,
resource_type: Type[ResourceType],
)
Bases: Generic[ResourceType]
Accessor for eviction subresource operations.
Source code in kubex/api/_eviction.py
create
async
¶
create(
name: str,
eviction: Eviction,
*,
namespace: ApiNamespaceTypes = Ellipsis,
dry_run: DryRunTypes = None,
field_manager: str | None = None,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> Status
Create an eviction for the specified resource.
Source code in kubex/api/_eviction.py
Ephemeral containers subresource¶
kubex.api._ephemeral_containers ¶
EphemeralContainersAccessor ¶
EphemeralContainersAccessor(
client: BaseClient,
request_builder: RequestBuilder,
namespace: NamespaceTypes,
scope: Scope,
resource_type: Type[ResourceType],
)
Bases: Generic[ResourceType]
Accessor for ephemeral containers subresource operations.
Source code in kubex/api/_ephemeral_containers.py
get
async
¶
get(
name: str,
*,
namespace: ApiNamespaceTypes = Ellipsis,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> ResourceType
Read the ephemeral containers of the specified resource.
Source code in kubex/api/_ephemeral_containers.py
patch
async
¶
patch(
name: str,
patch: Patch,
*,
namespace: ApiNamespaceTypes = Ellipsis,
dry_run: DryRunTypes = None,
field_manager: str | None = None,
force: bool | None = None,
field_validation: FieldValidation | None = None,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> ResourceType
Patch the ephemeral containers of the specified resource.
Source code in kubex/api/_ephemeral_containers.py
replace
async
¶
replace(
name: str,
data: ResourceType,
*,
namespace: ApiNamespaceTypes = Ellipsis,
dry_run: DryRunTypes = None,
field_manager: str | None = None,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> ResourceType
Replace the ephemeral containers of the specified resource.
Source code in kubex/api/_ephemeral_containers.py
Resize subresource¶
kubex.api._resize ¶
ResizeAccessor ¶
ResizeAccessor(
client: BaseClient,
request_builder: RequestBuilder,
namespace: NamespaceTypes,
scope: Scope,
resource_type: Type[ResourceType],
)
Bases: Generic[ResourceType]
Accessor for resize subresource operations.
Source code in kubex/api/_resize.py
get
async
¶
get(
name: str,
*,
namespace: ApiNamespaceTypes = Ellipsis,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> ResourceType
Read the resize of the specified resource.
Source code in kubex/api/_resize.py
patch
async
¶
patch(
name: str,
patch: Patch,
*,
namespace: ApiNamespaceTypes = Ellipsis,
dry_run: DryRunTypes = None,
field_manager: str | None = None,
force: bool | None = None,
field_validation: FieldValidation | None = None,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> ResourceType
Patch the resize of the specified resource.
Source code in kubex/api/_resize.py
replace
async
¶
replace(
name: str,
data: ResourceType,
*,
namespace: ApiNamespaceTypes = Ellipsis,
dry_run: DryRunTypes = None,
field_manager: str | None = None,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> ResourceType
Replace the resize of the specified resource.
Source code in kubex/api/_resize.py
Exec subresource¶
kubex.api._exec ¶
ExecAccessor ¶
ExecAccessor(
client: BaseClient,
request_builder: RequestBuilder,
namespace: NamespaceTypes,
scope: Scope,
resource_type: Type[ResourceType],
channel_protocols: tuple[
ChannelProtocol, ...
] = DEFAULT_PROTOCOLS,
)
Bases: Generic[ResourceType]
Accessor for the Pod exec subresource.
.. warning::
Experimental. The WebSocket-based subresources (exec,
attach, portforward) are still under active development and
their API may change in future releases without notice.
Source code in kubex/api/_exec.py
run
async
¶
run(
name: str,
*,
command: Sequence[str],
container: str | None = None,
namespace: ApiNamespaceTypes = Ellipsis,
stdin: bytes | None = None,
stdout: bool = True,
stderr: bool = True,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> ExecResult
Run a command and collect stdout/stderr until the channel closes.
.. warning::
Experimental. This WebSocket-based API is still under active development and may change in future releases without notice.
Unlike :meth:stream, the request_timeout bound (when provided)
applies to both the handshake (via the per-call HTTP timeout
propagated to the WebSocket upgrade) and the post-handshake command
execution + status collection (via a separate wall-clock cancel scope
that does not envelope teardown — see below). The wall-clock bound is
derived from Timeout.total if set, otherwise Timeout.read
(read's strict per-byte-inactivity semantics do not map cleanly onto
a long-lived WebSocket session, so it is treated as a call-level
upper bound here as a pragmatic approximation that prevents
indefinite hangs). Ellipsis defers to the client default for the
handshake without imposing an additional wall-clock bound; an
explicit None disables timeouts entirely.
Source code in kubex/api/_exec.py
202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 | |
stream
async
¶
stream(
name: str,
*,
command: Sequence[str],
container: str | None = None,
namespace: ApiNamespaceTypes = Ellipsis,
stdin: bool = False,
stdout: bool = True,
stderr: bool = True,
tty: bool = False,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> AsyncIterator[StreamSession]
Open a bidirectional exec session as an async context manager.
.. warning::
Experimental. This WebSocket-based API is still under active development and may change in future releases without notice.
Source code in kubex/api/_exec.py
ExecResult
dataclass
¶
Result of a one-shot ExecAccessor.run call.
exit_code
property
¶
Parse the exit code from status.
Returns 0 for a Success status, the integer parsed from
status.details.causes (where reason == "ExitCode") for a
non-zero exit, or None when status is missing or carries no
recognisable exit information. Note that None does not imply
success — for failures without a recognisable exit code (e.g. the
container could not start), inspect status directly.
Attach subresource¶
kubex.api._attach ¶
AttachAccessor ¶
AttachAccessor(
client: BaseClient,
request_builder: RequestBuilder,
namespace: NamespaceTypes,
scope: Scope,
resource_type: Type[ResourceType],
*,
channel_protocols: tuple[
ChannelProtocol, ...
] = DEFAULT_PROTOCOLS,
)
Bases: Generic[ResourceType]
Accessor for the Pod attach subresource.
.. warning::
Experimental. The WebSocket-based subresources (exec,
attach, portforward) are still under active development and
their API may change in future releases without notice.
Source code in kubex/api/_attach.py
stream
async
¶
stream(
name: str,
*,
container: str | None = None,
namespace: ApiNamespaceTypes = Ellipsis,
stdin: bool = False,
stdout: bool = True,
stderr: bool = True,
tty: bool = False,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> AsyncIterator[StreamSession]
Open a bidirectional attach session as an async context manager.
.. warning::
Experimental. This WebSocket-based API is still under active development and may change in future releases without notice.
Source code in kubex/api/_attach.py
Portforward subresource¶
kubex.api._portforward ¶
PortForwardStream ¶
PortForwardStream(
session: PortForwardSession,
port: int,
data_channel_id: int,
recv_stream: MemoryObjectReceiveStream[bytes],
)
Bases: ByteStream
Per-port bidirectional byte stream for the Kubernetes portforward subresource.
Wraps a PortForwardSession's data channel for a single port and implements
anyio.abc.ByteStream so it integrates naturally with anyio byte-stream consumers.
Outbound send() encodes the payload as a channel frame addressed to the
port's data channel. Inbound receive() reads from the session's per-port
memory stream, buffering excess bytes to satisfy max_bytes slicing.
aclose() half-closes the data channel (idempotent via the underlying
session helper) and prevents further send() calls. send_eof()
performs the same half-close without locking out receives. On the v4
portforward subprotocol — which the kubelet requires — half-close is a
local-only state change; the kubelet ignores wire CHANNEL_CLOSE frames
on v4 and tears down the channel only when the session WebSocket closes.
Source code in kubex/api/_portforward.py
PortForwarder ¶
Holds an active portforward session and exposes per-port streams and errors.
streams[port] is a PortForwardStream (anyio.abc.ByteStream) for
sending and receiving raw bytes to/from the remote port.
errors[port] is an async iterator of error-text strings sent by the kubelet
on the error channel for that port.
port_data_truncated[port] reflects the live overflow flag — True when the
per-port data buffer filled and the stream was closed locally.
Source code in kubex/api/_portforward.py
PortforwardAccessor ¶
PortforwardAccessor(
client: BaseClient,
request_builder: RequestBuilder,
namespace: NamespaceTypes,
scope: Scope,
resource_type: Type[ResourceType],
channel_protocols: tuple[
ChannelProtocol, ...
] = PORTFORWARD_PROTOCOLS,
)
Bases: Generic[ResourceType]
Accessor for the Pod portforward subresource.
.. warning::
Experimental. The WebSocket-based subresources (exec,
attach, portforward) are still under active development and
their API may change in future releases without notice.
Source code in kubex/api/_portforward.py
forward
async
¶
forward(
name: str,
*,
ports: Sequence[int],
namespace: ApiNamespaceTypes = Ellipsis,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> AsyncIterator[PortForwarder]
Open portforward streams to the given ports as an async context manager.
.. warning::
Experimental. This WebSocket-based API is still under active development and may change in future releases without notice.
This is the low-level entry point: a single WebSocket multiplexes
all requested ports, and the caller drives I/O directly in Python via
per-port anyio.abc.ByteStream objects. No sockets are bound on the
host — bytes never leave the process. Use this when your own code
speaks to the pod (custom protocols, embedded clients, tests).
For the kubectl-style mode where external processes connect through
a real local TCP port, use :meth:listen instead (which is built on
top of this method).
Yields a PortForwarder exposing per-port ByteStream objects
(pf.streams[port]) and per-port error iterators (pf.errors[port]).
Source code in kubex/api/_portforward.py
listen
async
¶
listen(
name: str,
*,
port_map: Mapping[int, int],
local_host: str = "127.0.0.1",
namespace: ApiNamespaceTypes = Ellipsis,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> AsyncIterator[None]
Open local TCP listeners and forward bytes bidirectionally to remote ports.
.. warning::
Experimental. This WebSocket-based API is still under active development and may change in future releases without notice.
This is the high-level, kubectl-style entry point: real OS sockets
are bound on local_host:local_port so that any process on the host
(curl, psql, a browser, …) can connect to the pod through a
local port. Each accepted local connection opens its own portforward
WebSocket session bound to that single remote port — one session per
connection, matching kubectl port-forward semantics. The method
itself yields None; you don't drive I/O through it.
For the low-level mode where your own Python code reads/writes bytes
directly without binding any sockets, use :meth:forward instead
(which this method is built on top of).
port_map maps remote port (kubelet-side) to local port.
Example: {80: 18080} opens a local listener on port 18080 that
forwards to the pod's port 80.
Source code in kubex/api/_portforward.py
Metadata accessor¶
kubex.api._metadata ¶
MetadataAccessor ¶
MetadataAccessor(
client: BaseClient,
request_builder: RequestBuilder,
namespace: NamespaceTypes,
scope: Scope,
resource_type: Type[ResourceType],
)
Bases: Generic[ResourceType]
Accessor for metadata subresource operations.
Source code in kubex/api/_metadata.py
get
async
¶
get(
name: str,
*,
namespace: ApiNamespaceTypes = Ellipsis,
resource_version: ResourceVersionTypes = None,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> PartialObjectMetadata
Read metadata of the specified resource.
Source code in kubex/api/_metadata.py
list
async
¶
list(
*,
namespace: ApiNamespaceTypes = Ellipsis,
label_selector: str | None = None,
field_selector: str | None = None,
timeout_seconds: int | None = None,
limit: int | None = None,
continue_token: str | None = None,
version_match: VersionMatch | None = None,
resource_version: ResourceVersionTypes = None,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> ListEntity[PartialObjectMetadata]
List metadata of resources.
Source code in kubex/api/_metadata.py
patch
async
¶
patch(
name: str,
patch: Patch,
*,
namespace: ApiNamespaceTypes = Ellipsis,
dry_run: DryRunTypes = None,
field_manager: str | None = None,
force: bool | None = None,
field_validation: FieldValidation | None = None,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> PartialObjectMetadata
Patch metadata of the specified resource.
Source code in kubex/api/_metadata.py
watch
async
¶
watch(
*,
namespace: ApiNamespaceTypes = Ellipsis,
label_selector: str | None = None,
field_selector: str | None = None,
allow_bookmarks: bool | None = None,
send_initial_events: bool | None = None,
timeout_seconds: int | None = None,
resource_version: ResourceVersionTypes = None,
request_timeout: ApiRequestTimeoutTypes = Ellipsis,
) -> AsyncGenerator[
WatchEvent[PartialObjectMetadata], None
]
Watch for metadata changes of resources.
Source code in kubex/api/_metadata.py
Stream session¶
kubex.api._stream_session ¶
StreamSession ¶
StreamSession(
connection: WebSocketConnection,
protocol: ChannelProtocol,
*,
stdin: bool = False,
stdout: bool = True,
stderr: bool = True,
tty: bool = False,
buffer_size: float = _DEFAULT_CHANNEL_BUFFER,
)
Bases: _BaseChannelSession
Multiplexes Kubernetes channel-protocol streams over a single :class:WebSocketConnection.
The session owns a background read loop that decodes incoming binary frames
and dispatches their payloads to per-channel queues. Outgoing writes
(stdin, resize, close_stdin) share a lock so concurrent callers
do not interleave bytes on the underlying WebSocket.
Used by both the exec and attach subresource accessors.
Source code in kubex/api/_stream_session.py
stderr_truncated
property
¶
True if the stderr buffer overflowed and frames were dropped.
Counterpart to :attr:stdout_truncated.
stdout_truncated
property
¶
True if the stdout buffer overflowed and frames were dropped.
Consumers should check this after session.stdout ends to tell
a normal EOF apart from a local close triggered by backpressure.
See the buffer-management note on __init__.
wait_for_status
async
¶
Wait for a terminal Status from the error channel.
Resolves to None if the connection closes before any error frame
arrives.
Source code in kubex/api/_stream_session.py
Portforward session¶
kubex.api._portforward_session ¶
PortForwardSession ¶
PortForwardSession(
connection: WebSocketConnection,
protocol: ChannelProtocol,
ports: Sequence[int],
*,
buffer_size: float = _DEFAULT_BUFFER,
block_on_full: bool = False,
)
Bases: _BaseChannelSession
Port-aware WebSocket channel multiplexer for the Kubernetes portforward subresource.
Inherits lifecycle management (write lock, exit stack, task group) from
_BaseChannelSession. Each port gets a data MemoryObjectStream[bytes]
and an error MemoryObjectStream[str]. The first frame on each channel
carries a 2-byte little-endian port-number prefix which is stripped and
validated; subsequent frames are routed as raw bytes (data) or UTF-8 text
(error) without any prefix.
When block_on_full=True the read loop awaits space in each per-port
buffer instead of closing the stream on overflow. This propagates
backpressure all the way to the WebSocket — correct for single-port TCP
proxy sessions created by listen() where data loss is unacceptable.
When block_on_full=False (the default) the read loop uses a non-blocking
send: if a port's buffer is full the port stream is closed locally and
_truncated[port] is set, leaving all other ports unaffected. This
prevents head-of-line blocking across ports in multi-port forward()
sessions at the cost of surfacing overflow as EndOfStream rather than
stalling traffic.
Source code in kubex/api/_portforward_session.py
close_port_data
async
¶
Send a half-close frame for the data channel of port.
Idempotent: a second call for the same port is a no-op.
The emitted frame is protocol.encode(CHANNEL_CLOSE, bytes([data_channel_id])).