Source code for linode_api4.objects.region

from dataclasses import dataclass
from typing import List, Optional

from linode_api4.errors import UnexpectedResponseError
from linode_api4.objects.base import Base, JSONObject, Property
from linode_api4.objects.serializable import StrEnum


[docs] class Capability(StrEnum): """ An enum class that represents the capabilities that Linode offers across different regions and services. These capabilities indicate what services are available in each data center. """ linodes = "Linodes" nodebalancers = "NodeBalancers" block_storage = "Block Storage" object_storage = "Object Storage" object_storage_regions = "Object Storage Access Key Regions" object_storage_endpoint_types = "Object Storage Endpoint Types" lke = "Kubernetes" lke_ha_controlplanes = "LKE HA Control Planes" lke_e = "Kubernetes Enterprise" firewall = "Cloud Firewall" gpu = "GPU Linodes" vlans = "Vlans" vpcs = "VPCs" vpcs_extra = "VPCs Extra" machine_images = "Machine Images" dbaas = "Managed Databases" dbaas_beta = "Managed Databases Beta" bs_migrations = "Block Storage Migrations" metadata = "Metadata" premium_plans = "Premium Plans" edge_plans = "Edge Plans" distributed_plans = "Distributed Plans" lke_control_plane_acl = "LKE Network Access Control List (IP ACL)" aclb = "Akamai Cloud Load Balancer" support_ticket_severity = "Support Ticket Severity" support_live_chat = "Support Live Chat" backups = "Backups" placement_group = "Placement Group" disk_encryption = "Disk Encryption" la_disk_encryption = "LA Disk Encryption" akamai_ram_protection = "Akamai RAM Protection" blockstorage_encryption = "Block Storage Encryption" blockstorage_perf_b1 = "Block Storage Performance B1" blockstorage_perf_b1_default = "Block Storage Performance B1 Default" aclp = "Akamai Cloud Pulse" aclp_logs = "Akamai Cloud Pulse Logs" aclp_logs_lkee = "Akamai Cloud Pulse Logs LKE-E Audit" aclp_logs_dc_lkee = "ACLP Logs Datacenter LKE-E" smtp_enabled = "SMTP Enabled" stackscripts = "StackScripts" vpu = "NETINT Quadra T1U" linode_interfaces = "Linode Interfaces" maintenance_policy = "Maintenance Policy" vpc_dual_stack = "VPC Dual Stack" vpc_ipv6_stack = "VPC IPv6 Stack" vpc_custom_ipv4_ranges = "Custom VPC IPv4 Ranges" nlb = "Network LoadBalancer" natgateway = "NAT Gateway" lke_e_byovpc = "Kubernetes Enterprise BYO VPC" lke_e_stacktype = "Kubernetes Enterprise Dual Stack" ruleset = "Cloud Firewall Rule Set" prefixlists = "Cloud Firewall Prefix Lists" current_prefixlists = "Cloud Firewall Prefix List Current References"
[docs] @dataclass class RegionPlacementGroupLimits(JSONObject): """ Represents the Placement Group limits for the current account in a specific region. """ maximum_pgs_per_customer: int = 0 maximum_linodes_per_pg: int = 0
[docs] @dataclass class RegionMonitors(JSONObject): """ Represents the monitor services available in a region. Lists the services in this region that support metrics and alerts use with Akamai Cloud Pulse (ACLP). """ alerts: Optional[list[str]] = None metrics: Optional[list[str]] = None
[docs] class Region(Base): """ A Region. Regions correspond to individual data centers, each located in a different geographical area. API Documentation: https://techdocs.akamai.com/linode-api/reference/get-region """ api_endpoint = "/regions/{id}" properties = { "id": Property(identifier=True), "country": Property(), "capabilities": Property(unordered=True), "status": Property(), "resolvers": Property(), "label": Property(), "site_type": Property(), "placement_group_limits": Property( json_object=RegionPlacementGroupLimits ), "monitors": Property(json_object=RegionMonitors), } @property def availability(self) -> List["RegionAvailabilityEntry"]: result = self._client.get( f"{self.api_endpoint}/availability", model=self ) if result is None: raise UnexpectedResponseError( "Expected availability data, got None." ) return [RegionAvailabilityEntry.from_json(v) for v in result] @property def vpc_availability(self) -> "RegionVPCAvailability": """ Returns VPC availability data for this region. NOTE: IPv6 VPCs may not currently be available to all users. API Documentation: https://techdocs.akamai.com/linode-api/reference/get-region-vpc-availability :returns: VPC availability data for this region. :rtype: RegionVPCAvailability """ result = self._client.get( f"{self.api_endpoint}/vpc-availability", model=self ) if result is None: raise UnexpectedResponseError( "Expected VPC availability data, got None." ) return RegionVPCAvailability.from_json(result)
[docs] @dataclass class RegionAvailabilityEntry(JSONObject): """ Represents the availability of a Linode type within a region. API Documentation: https://techdocs.akamai.com/linode-api/reference/get-region-availability """ region: Optional[str] = None plan: Optional[str] = None available: bool = False
[docs] @dataclass class RegionVPCAvailability(JSONObject): """ Represents the VPC availability data for a region. API Documentation: https://techdocs.akamai.com/linode-api/reference/get-regions-vpc-availability NOTE: IPv6 VPCs may not currently be available to all users. """ region: Optional[str] = None available: bool = False available_ipv6_prefix_lengths: Optional[List[int]] = None