Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions src/dstack/_internal/core/backends/aws/compute.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,10 @@
from dstack._internal.core.models.backends.base import BackendType
from dstack._internal.core.models.common import CoreModel, validate_json_extra_ignore
from dstack._internal.core.models.gateways import (
GatewayComputeConfiguration,
GatewayLoadBalancerConfiguration,
GatewayLoadBalancerData,
GatewayProvisioningData,
GatewayReplicaConfiguration,
GatewayReplicaProvisioningData,
)
from dstack._internal.core.models.instances import (
InstanceAvailability,
Expand Down Expand Up @@ -524,10 +524,10 @@ def is_suitable_placement_group(
return False
return placement_group.configuration.region == instance_offer.region

def create_gateway(
def create_gateway_replica(
self,
configuration: GatewayComputeConfiguration,
) -> GatewayProvisioningData:
configuration: GatewayReplicaConfiguration,
) -> GatewayReplicaProvisioningData:
ec2_resource = self.session.resource("ec2", region_name=configuration.region)
ec2_client = self.session.client("ec2", region_name=configuration.region)

Expand Down Expand Up @@ -587,7 +587,7 @@ def create_gateway(
instance.wait_until_running()
instance.reload() # populate instance.public_ip_address
ip_address = _get_instance_ip(instance, configuration.public_ip)
return GatewayProvisioningData(
return GatewayReplicaProvisioningData(
instance_id=instance.instance_id,
region=configuration.region,
availability_zone=availability_zone,
Expand Down Expand Up @@ -716,10 +716,10 @@ def create_gateway_load_balancer(
).model_dump_json(),
)

def terminate_gateway(
def terminate_gateway_replica(
self,
instance_id: str,
configuration: GatewayComputeConfiguration,
configuration: GatewayReplicaConfiguration,
backend_data: Optional[str] = None,
):
self.terminate_instance(
Expand Down
16 changes: 8 additions & 8 deletions src/dstack/_internal/core/backends/azure/compute.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,8 @@
from dstack._internal.core.errors import ComputeError, NoCapacityError
from dstack._internal.core.models.backends.base import BackendType
from dstack._internal.core.models.gateways import (
GatewayComputeConfiguration,
GatewayProvisioningData,
GatewayReplicaConfiguration,
GatewayReplicaProvisioningData,
)
from dstack._internal.core.models.instances import (
InstanceAvailability,
Expand Down Expand Up @@ -233,10 +233,10 @@ def terminate_instance(
instance_name=instance_id,
)

def create_gateway(
def create_gateway_replica(
self,
configuration: GatewayComputeConfiguration,
) -> GatewayProvisioningData:
configuration: GatewayReplicaConfiguration,
) -> GatewayReplicaProvisioningData:
if configuration.instance_type is not None:
# TODO: support instance_type. Requires selecting a VM image to avoid errors like this:
# > The selected VM size 'Standard_E4s_v6' cannot boot Hypervisor Generation '1'
Expand Down Expand Up @@ -306,16 +306,16 @@ def create_gateway(
resource_group=self.config.resource_group,
vm=vm,
)
return GatewayProvisioningData(
return GatewayReplicaProvisioningData(
instance_id=vm.name,
ip_address=public_ip,
region=configuration.region,
)

def terminate_gateway(
def terminate_gateway_replica(
self,
instance_id: str,
configuration: GatewayComputeConfiguration,
configuration: GatewayReplicaConfiguration,
backend_data: Optional[str] = None,
):
self.terminate_instance(
Expand Down
28 changes: 14 additions & 14 deletions src/dstack/_internal/core/backends/base/compute.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,10 @@
from dstack._internal.core.models.backends.base import BackendType
from dstack._internal.core.models.compute_groups import ComputeGroup, ComputeGroupProvisioningData
from dstack._internal.core.models.gateways import (
GatewayComputeConfiguration,
GatewayLoadBalancerConfiguration,
GatewayLoadBalancerData,
GatewayProvisioningData,
GatewayReplicaConfiguration,
GatewayReplicaProvisioningData,
)
from dstack._internal.core.models.instances import (
InstanceConfiguration,
Expand Down Expand Up @@ -556,25 +556,25 @@ class ComputeWithGatewaySupport(ABC):
"""

@abstractmethod
def create_gateway(
def create_gateway_replica(
self,
configuration: GatewayComputeConfiguration,
) -> GatewayProvisioningData:
configuration: GatewayReplicaConfiguration,
) -> GatewayReplicaProvisioningData:
"""
Creates a gateway instance.
Creates a gateway replica instance.
"""
pass

@abstractmethod
def terminate_gateway(
def terminate_gateway_replica(
self,
instance_id: str,
configuration: GatewayComputeConfiguration,
configuration: GatewayReplicaConfiguration,
backend_data: Optional[str] = None,
):
"""
Terminates a gateway instance. Generally, it passes the call to `terminate_instance()`,
but may perform additional work such as deleting a load balancer when a gateway has one.
Terminates a gateway replica instance. Generally, it passes the call to
`terminate_instance()`, but may perform additional work if necessary.
"""
pass

Expand Down Expand Up @@ -631,7 +631,7 @@ def deregister_gateway_replica_from_load_balancer(
class ComputeWithPrivateGatewaySupport:
"""
Must be subclassed to support private gateways.
`create_gateway()` must be able to create private gateways.
`create_gateway_replica()` must be able to create private gateways.
"""

pass
Expand Down Expand Up @@ -751,15 +751,15 @@ def generate_unique_instance_name_for_job(


def generate_unique_gateway_instance_name(
gateway_compute_configuration: GatewayComputeConfiguration,
gateway_replica_configuration: GatewayReplicaConfiguration,
max_length: int = _DEFAULT_MAX_RESOURCE_NAME_LEN,
) -> str:
"""
Generates a unique gateway instance name valid across all backends.
"""
return generate_unique_backend_name(
resource_name=gateway_compute_configuration.instance_name,
project_name=gateway_compute_configuration.project_name,
resource_name=gateway_replica_configuration.instance_name,
project_name=gateway_replica_configuration.project_name,
max_length=max_length,
)

Expand Down
16 changes: 8 additions & 8 deletions src/dstack/_internal/core/backends/gcp/compute.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@
from dstack._internal.core.models.backends.base import BackendType
from dstack._internal.core.models.common import CoreModel, validate_extra_ignore
from dstack._internal.core.models.gateways import (
GatewayComputeConfiguration,
GatewayProvisioningData,
GatewayReplicaConfiguration,
GatewayReplicaProvisioningData,
)
from dstack._internal.core.models.instances import (
InstanceAvailability,
Expand Down Expand Up @@ -561,10 +561,10 @@ def are_placement_groups_compatible_with_reservations(self, backend_type: Backen
# Instead, we use the placement policy defined in reservation settings.
return False

def create_gateway(
def create_gateway_replica(
self,
configuration: GatewayComputeConfiguration,
) -> GatewayProvisioningData:
configuration: GatewayReplicaConfiguration,
) -> GatewayReplicaProvisioningData:
if self.config.vpc_project_id is None:
gcp_resources.create_gateway_firewall_rules(
firewalls_client=self.firewalls_client,
Expand Down Expand Up @@ -628,18 +628,18 @@ def create_gateway(
instance = self.instances_client.get(
project=self.config.project_id, zone=zone, instance=instance_name
)
return GatewayProvisioningData(
return GatewayReplicaProvisioningData(
instance_id=instance_name,
region=configuration.region, # used for instance termination
availability_zone=zone,
ip_address=_get_instance_ip(instance, configuration.public_ip),
backend_data=json.dumps({"zone": zone}),
)

def terminate_gateway(
def terminate_gateway_replica(
self,
instance_id: str,
configuration: GatewayComputeConfiguration,
configuration: GatewayReplicaConfiguration,
backend_data: Optional[str] = None,
):
self.terminate_instance(
Expand Down
20 changes: 10 additions & 10 deletions src/dstack/_internal/core/backends/kubernetes/compute.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,8 @@
from dstack._internal.core.models.backends.base import BackendType
from dstack._internal.core.models.common import CoreModel, validate_json_extra_ignore
from dstack._internal.core.models.gateways import (
GatewayComputeConfiguration,
GatewayProvisioningData,
GatewayReplicaConfiguration,
GatewayReplicaProvisioningData,
)
from dstack._internal.core.models.instances import (
InstanceOfferWithAvailability,
Expand Down Expand Up @@ -462,10 +462,10 @@ def terminate_instance(
if not all(deleted):
raise ComputeError("Not all objects were deleted, check logs")

def create_gateway(
def create_gateway_replica(
self,
configuration: GatewayComputeConfiguration,
) -> GatewayProvisioningData:
configuration: GatewayReplicaConfiguration,
) -> GatewayReplicaProvisioningData:
cluster = self.region_cluster_map.get(configuration.region)
if cluster is None:
raise ComputeError(f"Unknown region: {configuration.region!r}")
Expand Down Expand Up @@ -577,19 +577,19 @@ def create_gateway(
if address is None:
self.terminate_instance(instance_name, region=configuration.region)
raise ComputeError(
"Failed to get gateway hostname. "
"Failed to get gateway replica hostname. "
"Ensure the Kubernetes cluster supports Load Balancer services."
)
return GatewayProvisioningData(
return GatewayReplicaProvisioningData(
instance_id=instance_name,
ip_address=address,
region=cluster.region,
)

def terminate_gateway(
def terminate_gateway_replica(
self,
instance_id: str,
configuration: GatewayComputeConfiguration,
configuration: GatewayReplicaConfiguration,
backend_data: Optional[str] = None,
):
region = configuration.region
Expand All @@ -600,7 +600,7 @@ def terminate_gateway(
if cluster is not None:
logger.warning(
(
"Terminating gateway %s in unknown region %s."
"Terminating gateway replica %s in unknown region %s."
" Assuming it was created before multi-cluster support was added"
" and is located in cluster %s"
),
Expand Down
4 changes: 2 additions & 2 deletions src/dstack/_internal/core/models/gateways.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ class ApplyGatewayPlanInput(CoreModel):
] = None


class GatewayComputeConfiguration(CoreModel):
class GatewayReplicaConfiguration(CoreModel):
project_name: str
instance_name: str
backend: BackendType
Expand All @@ -199,7 +199,7 @@ class GatewayComputeConfiguration(CoreModel):
tags: Optional[Dict[str, str]] = None


class GatewayProvisioningData(CoreModel):
class GatewayReplicaProvisioningData(CoreModel):
instance_id: str
# TODO: rename `ip_address`; Kubernetes uses domain names here.
ip_address: str
Expand Down
Loading
Loading