# generated by datamodel-codegen
# datamodel-codegen --input ./openapi.json --input-file-type openapi --output-model-type pydantic_v2.BaseModel --enum-field-as-literal all --reuse-model --target-python-version 3.8 --output models.py
"""APIとのやりとりに使われるモデルデータです。
`APIドキュメント <https://manual.sakura.ad.jp/vps/api/api-doc/index.html>`_ を基に自動生成したモデルに、必要なものを手動で追加しています。
"""
from __future__ import annotations
from typing import List, Literal, Optional
from pydantic import AnyUrl, BaseModel, Field, RootModel
[ドキュメント]
class InvalidParameterDetailItem(BaseModel):
code: Optional[str] = Field(None, description="""エラー内容を示す簡潔な識別子""", examples=["required"])
message: Optional[str] = Field(None, examples=["この項目は必須です"])
[ドキュメント]
class InvalidParameterDetail(RootModel[List[InvalidParameterDetailItem]]):
root: List[InvalidParameterDetailItem]
[ドキュメント]
class Errors(BaseModel):
non_field_errors: Optional[InvalidParameterDetail] = None
[ドキュメント]
class ProblemDetails400(BaseModel):
code: Optional[Literal["invalid", "parse_error", "bad_request"]] = Field(
None,
description="""エラー内容を示す簡潔な識別子
* `invalid` - 不正なリクエスト値,リクエスト値が妥当でない
* `parse_error` - 不正な形式,リクエスト値を読み取ることができない
* `bad_request` - リクエストの内容に何らかの問題がある""",
)
message: Optional[str] = Field(None, description="""エラーの内容""", examples=["Invalid input."])
errors: Optional[Errors] = Field(
None,
description="""入力値に対するエラーを構造化した情報
(code`invalid`の場合のみ)
* `non_field_errors` - リクエスト全体に起因した(単一項目でない)エラー内容
* `*` - 対応した入力項目ごとのエラー内容""",
examples=[{"foo": [{"code": "required", "message": "この項目は必須です"}]}],
)
[ドキュメント]
class ProblemDetails404(BaseModel):
code: Optional[Literal["not_found"]] = None
message: Optional[str] = Field(None, description="""エラーの内容""", examples=["見つかりませんでした。"])
[ドキュメント]
class ProblemDetails409(BaseModel):
code: Optional[Literal["conflict"]] = None
message: Optional[str] = Field(None, description="""エラーの内容""", examples=["状態の競合によりリクエストを処理できません。"])
[ドキュメント]
class ProblemDetails429(BaseModel):
code: Optional[Literal["throttled"]] = None
message: Optional[str] = Field(
None, description="""エラーの内容""", examples=["リクエストの処理は絞られました。 Expected available in xxxxxxx."]
)
[ドキュメント]
class ProblemDetails503(BaseModel):
code: Optional[Literal["temporary_unavailable"]] = None
message: Optional[str] = Field(None, description="""エラーの内容""", examples=["一時的にご利用になれません。"])
[ドキュメント]
class StorageItem(BaseModel):
port: int = Field(..., description="""ポート番号""", examples=[0])
type: Literal["ssd", "hdd"] = Field(..., description="""種別""")
size_gibibytes: int = Field(..., description="""ストレージ容量(GiB)""", examples=[100])
[ドキュメント]
class Zone(BaseModel):
code: Literal["tk1", "tk2", "tk3", "os1", "os2", "os3", "is1"] = Field(
...,
description="""ゾーンコード
* tk1 東京第1
* tk2 東京第2
* tk3 東京第3
* os1 大阪第1
* os2 大阪第2
* os3 大阪第3
* is1 石狩第1""",
)
name: str = Field(..., description="""ゾーン名称""", examples=["石狩第1"])
[ドキュメント]
class Ipv4(BaseModel):
address: str = Field(..., description="""アドレス""", examples=["198.51.100.2"])
netmask: str = Field(..., description="""サブネットマスク""", examples=["255.255.254.0"])
gateway: str = Field(..., description="""ゲートウェイのアドレス""", examples=["198.51.100.1"])
nameservers: List[str] = Field(..., description="""ネームサーバーのアドレスリスト""")
hostname: str = Field(..., description="""標準ホスト名""", examples=["example.jp"])
ptr: str = Field(..., description="""逆引きホスト名""", examples=["example.jp"])
[ドキュメント]
class Ipv6(BaseModel):
address: Optional[str] = Field(..., description="""アドレス""", examples=["2001:e42:102:1501:153:121:89:107"])
prefixlen: Optional[int] = Field(..., description="""プレフィックス長""", examples=[64])
gateway: Optional[str] = Field(..., description="""ゲートウェイのアドレス""", examples=["fe80::1"])
nameservers: List[str] = Field([], description="""ネームサーバーのアドレスリスト""")
hostname: Optional[str] = Field(..., description="""標準ホスト名""", examples=["example.jp"])
ptr: Optional[str] = Field(..., description="""逆引きホスト名""", examples=["example.jp"])
[ドキュメント]
class Contract(BaseModel):
plan_code: int = Field(..., description="""プランコード""", examples=[3439])
plan_name: str = Field(..., description="""プラン名""", examples=["さくらのVPS(v5) 1G IK01"])
service_code: str = Field(..., description="""サービスコード""", examples=["100000000000"])
[ドキュメント]
class Server(BaseModel):
id: int = Field(..., description="""id""")
name: str = Field(..., description="""名前""")
description: str = Field(..., description="""説明""")
service_type: Literal["linux", "windows"] = Field(..., description="""サービスタイプ""")
service_status: Literal["on_trial", "link_down_on_trial", "in_use", "link_down"] = Field(
...,
description="""サービス状況
* on_trial お試し中
* link_down_on_trial お試し中(一時停止)
* in_use 利用中
* link_down 一時停止中""",
)
cpu_cores: int = Field(..., description="""CPUコア数""", examples=[2])
memory_mebibytes: int = Field(..., description="""メモリ容量(MiB)""", examples=[1024])
storage: List[StorageItem] = Field(..., description="""ストレージ情報""")
zone: Zone = Field(..., description="""ゾーン情報""")
options: List[str] = Field(..., description="""オプション(追加ソフトウェア)""")
version: str = Field(..., description="""プランの世代""", examples=["v5"])
ipv4: Ipv4
ipv6: Ipv6
contract: Contract = Field(..., description="""契約情報""")
power_status: Literal[
"power_on", "in_shutdown", "power_off", "installing", "in_scaleup", "migration", "unknown"
] = Field(
...,
description="""電源ステータス
* power_on 電源ON
* in_shutdown シャットダウン中
* power_off 電源OFF
* installing OSインストール中
* in_scaleup スケールアップ中
* migration サーバー移行作業中
* unknown 不明(電源状態を取得できない)
このエンドポイントが返す電源ステータスはキャッシュされた情報のため、最新の正確な電源ステータスが必要な場合は
* サーバーの電源状態を取得する: :func:`vpsc.client.Client.get_server_power_status`
をご利用ください
""",
)
[ドキュメント]
class ServerPowerStatus(BaseModel):
status: Literal[
"power_on", "in_shutdown", "power_off", "installing", "in_scaleup", "migration", "unknown"
] = Field(
...,
description="""電源ステータス
* power_on 電源ON
* in_shutdown シャットダウン中
* power_off 電源OFF
* installing OSインストール中
* in_scaleup スケールアップ中
* migration サーバー移行作業中
* unknown 不明(電源状態を取得できない)""",
)
[ドキュメント]
class StorageItem1(BaseModel):
type: Literal["ssd", "hdd"] = Field(..., description="""種別""")
size_gibibytes: int = Field(..., description="""ストレージ容量(GiB)""", examples=[100])
[ドキュメント]
class Ipv41(BaseModel):
address: str = Field(..., description="""アドレス""", examples=["198.51.100.2"])
netmask: str = Field(..., description="""サブネットマスク""", examples=["255.255.254.0"])
[ドキュメント]
class Contract1(BaseModel):
plan_code: int = Field(..., description="""プランコード""", examples=[3439])
plan_name: str = Field(..., description="""プラン名""", examples=["さくらのVPS(v5) NFS 200GB OS03"])
service_code: str = Field(..., description="""サービスコード""", examples=["100000000000"])
[ドキュメント]
class NfsServer(BaseModel):
id: int = Field(..., description="""id""")
name: str = Field(..., description="""名前""")
description: str = Field(..., description="""説明""")
service_status: Literal["in_preparation", "on_trial", "link_down_on_trial", "in_use", "link_down"] = Field(
...,
description="""サービス状況
* in_preparation 準備中
* on_trial お試し中
* link_down_on_trial お試し中(一時停止)
* in_use 利用中
* link_down 一時停止中""",
)
setting_status: Literal["done", "in_update", "failed"] = Field(
...,
description="""設定状況
* done 設定完了
* in_update 設定更新中
* failed 設定更新失敗""",
)
storage: List[StorageItem1] = Field(..., description="""ストレージ情報""")
zone: Zone = Field(..., description="""ゾーン情報""")
ipv4: Ipv41
contract: Contract1 = Field(..., description="""契約情報""")
power_status: Literal["power_on", "in_shutdown", "power_off", "unknown"] = Field(
...,
description="""電源ステータス
* power_on 電源ON
* in_shutdown シャットダウン中
* power_off 電源OFF
* unknown 不明(電源状態を取得できない)
このエンドポイントが返す電源ステータスはキャッシュされた情報のため、最新の正確な電源ステータスではない場合があります""",
)
[ドキュメント]
class NfsServerPowerStatus(BaseModel):
status: Literal["power_on", "in_shutdown", "power_off", "unknown"] = Field(
...,
description="""電源ステータス
* power_on 電源ON
* in_shutdown シャットダウン中
* power_off 電源OFF
* unknown 不明(電源状態を取得できない)""",
)
[ドキュメント]
class Service(BaseModel):
service_category: str = Field(..., description="""サービスカテゴリー""", examples=["cloud"])
service_name: str = Field(..., description="""サービス名""", examples=["クラウド東京第1ゾーン"])
switch_code: str = Field(..., description="""スイッチコード""", examples=["111111111111"])
[ドキュメント]
class ExternalConnection(BaseModel):
service_code: str = Field(..., description="""サービスコード""", examples=["100000000000"])
type: Literal["cloud", "sales", "localrouter", "awsdxcon"] = Field(..., description="""外部接続方式""")
services: List[Service]
[ドキュメント]
class Switch(BaseModel):
id: int = Field(..., description="""id""")
name: str = Field(..., description="""名前""")
description: str = Field(..., description="""説明""")
switch_code: str = Field(..., description="""スイッチコード""")
zone: Zone = Field(..., description="""ゾーン情報""")
server_interfaces: List[int] = Field(..., description="""接続されているサーバーのインターフェースid""")
nfs_server_interfaces: List[int] = Field(..., description="""接続されている追加ストレージ(NFS)のインターフェースid""")
external_connection: Optional[ExternalConnection] = Field(..., description="""接続されている外部接続の情報""")
[ドキュメント]
class UpdateServer(BaseModel):
name: str = Field(..., description="""名前""")
description: str = Field(..., description="""説明""")
[ドキュメント]
class ShutdownServer(BaseModel):
force: bool = Field(False, description="""強制停止を行うか""")
[ドキュメント]
class UpdateNfsServer(BaseModel):
name: str = Field(..., description="""名前""")
description: str = Field(..., description="""説明""")
[ドキュメント]
class UpdateHost(BaseModel):
hostname: str = Field(..., description="""ホスト名""", examples=["example.jp"])
[ドキュメント]
class CreateSwitch(BaseModel):
name: str = Field(..., description="""名前""")
description: str = Field(..., description="""説明""")
zone_code: Literal["tk2", "tk3", "os3", "is1"] = Field(..., description="""ゾーンコード""")
[ドキュメント]
class UpdateSwitch(BaseModel):
name: str = Field(..., description="""名前""")
description: str = Field(..., description="""説明""")
[ドキュメント]
class UpdateNfsServerIpv4(BaseModel):
address: str = Field(..., description="""アドレス""", examples=["198.51.100.2"])
netmask: str = Field(..., description="""サブネットマスク""", examples=["255.255.254.0"])
server_sort_query = Literal[
"service_code",
"-service_code",
"name",
"-name",
"storage_size_gibibytes",
"-storage_size_gibibytes",
"memory_mebibytes",
"-memory_mebibytes",
"cpu_cores",
"-cpu_cores",
"hostname",
"-hostname",
"ipv6_hostname",
"-ipv6_hostname",
"ipv4_address",
"-ipv4_address",
"ipv6_address",
"-ipv6_address",
"zone_code",
"-zone_code",
"ipv4_ptr",
"-ipv4_ptr",
"ipv6_ptr",
"-ipv6_ptr",
]