air_sdk.endpoints.services#

Classes#

Service

Represents a service in the Air API.

ServiceEndpointAPI

API for managing services.

Module Contents#

class air_sdk.endpoints.services.Service[source]#

Bases: air_sdk.bc.ServiceCompatMixin, air_sdk.bc.BaseCompatMixin, air_sdk.air_model.AirModel

Represents a service in the Air API.

A service exposes a port on a simulation interface to external networks, enabling connectivity between simulations and the outside world.

id#

Unique identifier

name#

Service name

node_port#

Port number on the node/interface

interface#

Interface object (foreign key relationship)

service_type#

Type of service (e.g., ‘ssh’, ‘http’, ‘https’)

worker_port#

External port on the worker (assigned by Air)

worker_fqdn#

Fully qualified domain name of the worker

created#

Timestamp when service was created

modified#

Timestamp when service was last modified

Example

>>> # Access service details
>>> print(f'Service: {service.name}')
>>> print(f'Connect via: {service.worker_fqdn}:{service.worker_port}')
>>> print(f'Interface: {service.interface.name}')
>>>
>>> # Delete service
>>> service.delete()
id: str#
name: str#
node_port: int#
interface: air_sdk.endpoints.interfaces.Interface#
service_type: str#
worker_port: int | None#
worker_fqdn: str | None#
created: datetime.datetime#
modified: datetime.datetime#
classmethod get_model_api() type[ServiceEndpointAPI][source]#

Returns the respective AirModelAPI type for this model.

delete() None#

Delete the service.

After deletion, the service object should not be used.

Example

>>> service.delete()
refresh() None#

Refresh service data from the API.

Example

>>> service.refresh()
class air_sdk.endpoints.services.ServiceEndpointAPI(
api: air_sdk.AirApi,
default_filters: dict[str, Any] | None = None,
)[source]#

Bases: air_sdk.bc.ServiceEndpointAPICompatMixin, air_sdk.endpoints.mixins.ListApiMixin[Service], air_sdk.endpoints.mixins.CreateApiMixin[Service], air_sdk.endpoints.mixins.GetApiMixin[Service], air_sdk.endpoints.mixins.DeleteApiMixin, air_sdk.air_model.BaseEndpointAPI[Service]

API for managing services.

Services expose ports on simulation interfaces to enable external connectivity.

Example

>>> # List all services
>>> for service in api.services.list():
...     print(f'{service.name}: {service.worker_fqdn}:{service.worker_port}')
>>>
>>> # Create a service
>>> interface = api.interfaces.get('interface-id')
>>> service = api.services.create(
...     name='SSH Service',
...     node_port=22,
...     interface=interface,
...     service_type='ssh',
... )
>>>
>>> # Get a service
>>> service = api.services.get('service-id')
>>>
>>> # Delete a service
>>> api.services.delete(service)
API_PATH: str#
model: type[Service]#
list(
*,
interface: air_sdk.air_model.PrimaryKey | None = ...,
name: str | None = ...,
node_port: int | None = ...,
worker_port: int | None = ...,
worker_fqdn: str | None = ...,
service_type: str | None = ...,
search: str | None = ...,
ordering: str | None = ...,
limit: int | None = ...,
offset: int | None = ...,
) Iterator[Service]#

List services with optional filtering and pagination.

Parameters:
  • interface – Filter by interface ID or instance

  • name – Filter by service name

  • node_port – Filter by node port

  • worker_port – Filter by worker port

  • worker_fqdn – Filter by worker FQDN

  • service_type – Filter by service type (ssh, http, https, etc.)

  • search – Search term to filter results

  • ordering – Field to order results by (prefix with ‘-’ for descending)

  • limit – Maximum number of results to return

  • offset – Number of results to skip

Yields:

Service instances

Example

>>> # List all services
>>> for service in api.services.list():
...     print(service.name)
>>>
>>> # Filter by interface
>>> for service in api.services.list(interface='interface-id'):
...     print(f"{service.name}: {service.worker_port}")
>>>
>>> # Filter by service type
>>> for service in api.services.list(service_type='ssh'):
...     print(service.name)
get(pk: air_sdk.air_model.PrimaryKey) Service#

Get a service by ID.

Parameters:

pk – Service ID

Returns:

Service instance

Raises:

AirUnexpectedResponse – Service not found or API error

Example

>>> service = api.services.get('3dadd54d-583c-432e-9383-a2b0b1d7f551')
>>> print(f'{service.name}: {service.worker_fqdn}:{service.worker_port}')
create(
*,
name: str,
node_port: int,
interface: air_sdk.air_model.PrimaryKey,
service_type: Literal['SSH', 'HTTPS', 'HTTP', 'OTHER'] = ...,
) Service#

Create a new service.

Parameters:
  • name – Service name

  • node_port – Port number on the node/interface

  • interface – Interface instance or ID

  • service_type – Service type - ‘SSH’, ‘HTTPS’, ‘HTTP’, or ‘OTHER’

Returns:

Created Service instance

Raises:

AirUnexpectedResponse – Creation failed

Example

>>> service = api.services.create(
...     name='SSH Access',
...     node_port=22,
...     interface='interface-id',
...     service_type='ssh',
... )
delete(*, service: Service | air_sdk.air_model.PrimaryKey) None#

Delete a service.

Parameters:

service – Service instance or ID

Example

>>> api.services.delete(service='service-id')
>>> # Or using instance
>>> api.services.delete(service=service)