v10.3.0: Add `sporestack server regions` command
This commit is contained in:
parent
9acfc88e2a
commit
4311d86658
|
@ -14,6 +14,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
|
||||
- Nothing yet.
|
||||
|
||||
## [10.3.0 - 2023-05-12]
|
||||
|
||||
## Added
|
||||
|
||||
- `regions` to `APIClient` and `Client`.
|
||||
- `sporestack server regions` command.
|
||||
|
||||
## [10.2.0 - 2023-05-03]
|
||||
|
||||
## Changed
|
||||
|
|
|
@ -35,6 +35,7 @@ sporestack server launch --no-quote --token importediminvalid --operating-system
|
|||
|
||||
sporestack server flavors | grep vcpu
|
||||
sporestack server operating-systems | grep debian-11
|
||||
sporestack server regions | grep sfo3
|
||||
|
||||
if [ -z "$REAL_TESTING_TOKEN" ]; then
|
||||
rm -r $SPORESTACK_DIR
|
||||
|
|
|
@ -2,4 +2,4 @@
|
|||
|
||||
__all__ = ["api", "api_client", "exceptions"]
|
||||
|
||||
__version__ = "10.2.0"
|
||||
__version__ = "10.3.0"
|
||||
|
|
|
@ -7,7 +7,7 @@ from typing import Dict, List, Optional, Union
|
|||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from .models import Flavor, OperatingSystem, Payment
|
||||
from .models import Flavor, OperatingSystem, Payment, Region
|
||||
|
||||
|
||||
class TokenAdd:
|
||||
|
@ -175,6 +175,14 @@ class OperatingSystems:
|
|||
operating_systems: Dict[str, OperatingSystem]
|
||||
|
||||
|
||||
class Regions:
|
||||
url = "/regions"
|
||||
method = "GET"
|
||||
|
||||
class Response(BaseModel):
|
||||
regions: Dict[str, Region]
|
||||
|
||||
|
||||
class TokenMessageSender(str, Enum):
|
||||
USER = "User"
|
||||
SPORESTACK = "SporeStack"
|
||||
|
|
|
@ -242,6 +242,14 @@ class APIClient:
|
|||
response_object = api.OperatingSystems.Response.parse_obj(response.json())
|
||||
return response_object
|
||||
|
||||
def regions(self) -> api.Regions.Response:
|
||||
"""Returns regions that you can launch a server in."""
|
||||
url = self.api_endpoint + api.Regions.url
|
||||
response = self._httpx_client.get(url)
|
||||
_handle_response(response)
|
||||
response_object = api.Regions.Response.parse_obj(response.json())
|
||||
return response_object
|
||||
|
||||
def changelog(self) -> str:
|
||||
"""Returns the API changelog."""
|
||||
url = self.api_endpoint + "/changelog"
|
||||
|
|
|
@ -555,7 +555,7 @@ def rebuild(
|
|||
|
||||
@server_cli.command()
|
||||
def flavors() -> None:
|
||||
"""Show available flavors."""
|
||||
"""Shows available flavors."""
|
||||
from .api_client import APIClient
|
||||
|
||||
api_client = APIClient(api_endpoint=get_api_endpoint())
|
||||
|
@ -572,7 +572,18 @@ def operating_systems() -> None:
|
|||
api_client = APIClient(api_endpoint=get_api_endpoint())
|
||||
os_list = api_client.operating_systems().operating_systems
|
||||
for operating_system in os_list:
|
||||
typer.echo(operating_system)
|
||||
typer.echo(f"{operating_system}")
|
||||
|
||||
|
||||
@server_cli.command()
|
||||
def regions() -> None:
|
||||
"""Shows regions that servers can be launched in."""
|
||||
from .api_client import APIClient
|
||||
|
||||
api_client = APIClient(api_endpoint=get_api_endpoint())
|
||||
regions = api_client.regions().regions
|
||||
for region in regions:
|
||||
typer.echo(f"{region}: {regions[region].name}")
|
||||
|
||||
|
||||
def load_token(token: str) -> str:
|
||||
|
|
|
@ -138,6 +138,10 @@ class Client:
|
|||
"""Returns available operating systems."""
|
||||
return self.api_client.operating_systems()
|
||||
|
||||
def regions(self) -> api.Regions.Response:
|
||||
"""Returns regions that servers can be launched in."""
|
||||
return self.api_client.regions()
|
||||
|
||||
def server_quote(self, days: int, flavor: str) -> api.ServerQuote.Response:
|
||||
"""Get a quote for how much a server will cost."""
|
||||
return self.api_client.server_quote(days=days, flavor=flavor)
|
||||
|
|
|
@ -59,3 +59,10 @@ class TokenInfo(BaseModel):
|
|||
burn_rate_usd: str
|
||||
days_remaining: int
|
||||
servers: int
|
||||
|
||||
|
||||
class Region(BaseModel):
|
||||
# Unique string to identify the region that's sort of human readable.
|
||||
slug: str
|
||||
# Actually human readable string describing the region.
|
||||
name: str
|
||||
|
|
Loading…
Reference in New Issue