1
0
Fork 0
mirror of https://github.com/ansible-collections/hetzner.hcloud.git synced 2026-02-03 23:51:48 +00:00
hetzner.hcloud/plugins/module_utils/vendor/hcloud/servers/domain.py
renovate[bot] af3e9f4bf2
chore(deps): update dependency hcloud to v2.13.0 (#776)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [hcloud](https://redirect.github.com/hetznercloud/hcloud-python)
([changelog](https://redirect.github.com/hetznercloud/hcloud-python/blob/main/CHANGELOG.md))
| `2.12.0` -> `2.13.0` |
![age](https://developer.mend.io/api/mc/badges/age/pypi/hcloud/2.13.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/hcloud/2.12.0/2.13.0?slim=true)
|

---

### Release Notes

<details>
<summary>hetznercloud/hcloud-python (hcloud)</summary>

###
[`v2.13.0`](https://redirect.github.com/hetznercloud/hcloud-python/blob/HEAD/CHANGELOG.md#v2130)

[Compare
Source](https://redirect.github.com/hetznercloud/hcloud-python/compare/v2.12.0...v2.13.0)

##### Features

- add per primary ip actions list operations
([#&#8203;608](https://redirect.github.com/hetznercloud/hcloud-python/issues/608))
- deprecate datacenter in `primary ips` and `servers`
([#&#8203;609](https://redirect.github.com/hetznercloud/hcloud-python/issues/609))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/ansible-collections/hetzner.hcloud).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi41OS4wIiwidXBkYXRlZEluVmVyIjoiNDIuNTkuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2025-12-19 19:50:01 +01:00

534 lines
16 KiB
Python

from __future__ import annotations
import warnings
from typing import TYPE_CHECKING, Literal, TypedDict
from ..core import BaseDomain, DomainIdentityMixin
if TYPE_CHECKING:
from ..actions import BoundAction
from ..datacenters import BoundDatacenter
from ..firewalls import BoundFirewall
from ..floating_ips import BoundFloatingIP
from ..images import BoundImage
from ..isos import BoundIso
from ..locations import BoundLocation
from ..metrics import Metrics
from ..networks import BoundNetwork, Network
from ..placement_groups import BoundPlacementGroup
from ..primary_ips import BoundPrimaryIP, PrimaryIP
from ..rdns import DNSPtr
from ..server_types import BoundServerType
from ..volumes import BoundVolume
from .client import BoundServer
__all__ = [
"Server",
"ServerProtection",
"CreateServerResponse",
"ResetPasswordResponse",
"EnableRescueResponse",
"RequestConsoleResponse",
"RebuildResponse",
"PublicNetwork",
"PublicNetworkFirewall",
"IPv4Address",
"IPv6Network",
"PrivateNet",
"ServerCreatePublicNetwork",
"GetMetricsResponse",
"MetricsType",
]
class Server(BaseDomain, DomainIdentityMixin):
"""Server Domain
:param id: int
ID of the server
:param name: str
Name of the server (must be unique per project and a valid hostname as per RFC 1123)
:param status: str
Status of the server Choices: `running`, `initializing`, `starting`, `stopping`, `off`, `deleting`, `migrating`, `rebuilding`, `unknown`
:param created: datetime
Point in time when the server was created
:param public_net: :class:`PublicNetwork <hcloud.servers.domain.PublicNetwork>`
Public network information.
:param server_type: :class:`BoundServerType <hcloud.server_types.client.BoundServerType>`
:param datacenter: :class:`BoundDatacenter <hcloud.datacenters.client.BoundDatacenter>`
This property is deprecated and will be removed after 1 July 2026.
Please use the ``location`` property instead.
See https://docs.hetzner.cloud/changelog#2025-12-16-phasing-out-datacenters.
:param location: :class:`BoundLocation <hcloud.locations.client.BoundLocation>`
:param image: :class:`BoundImage <hcloud.images.client.BoundImage>`, None
:param iso: :class:`BoundIso <hcloud.isos.client.BoundIso>`, None
:param rescue_enabled: bool
True if rescue mode is enabled: Server will then boot into rescue system on next reboot.
:param locked: bool
True if server has been locked and is not available to user.
:param backup_window: str, None
Time window (UTC) in which the backup will run, or None if the backups are not enabled
:param outgoing_traffic: int, None
Outbound Traffic for the current billing period in bytes
:param ingoing_traffic: int, None
Inbound Traffic for the current billing period in bytes
:param included_traffic: int
Free Traffic for the current billing period in bytes
:param primary_disk_size: int
Size of the primary Disk
:param protection: dict
Protection configuration for the server
:param labels: dict
User-defined labels (key-value pairs)
:param volumes: List[:class:`BoundVolume <hcloud.volumes.client.BoundVolume>`]
Volumes assigned to this server.
:param private_net: List[:class:`PrivateNet <hcloud.servers.domain.PrivateNet>`]
Private networks information.
"""
STATUS_RUNNING = "running"
"""Server Status running"""
STATUS_INIT = "initializing"
"""Server Status initializing"""
STATUS_STARTING = "starting"
"""Server Status starting"""
STATUS_STOPPING = "stopping"
"""Server Status stopping"""
STATUS_OFF = "off"
"""Server Status off"""
STATUS_DELETING = "deleting"
"""Server Status deleting"""
STATUS_MIGRATING = "migrating"
"""Server Status migrating"""
STATUS_REBUILDING = "rebuilding"
"""Server Status rebuilding"""
STATUS_UNKNOWN = "unknown"
"""Server Status unknown"""
__properties__ = (
"id",
"name",
"status",
"public_net",
"server_type",
"location",
"image",
"iso",
"rescue_enabled",
"locked",
"backup_window",
"outgoing_traffic",
"ingoing_traffic",
"included_traffic",
"protection",
"labels",
"volumes",
"private_net",
"created",
"primary_disk_size",
"placement_group",
)
__api_properties__ = (
*__properties__,
"datacenter",
)
__slots__ = (
*__properties__,
"_datacenter",
)
# pylint: disable=too-many-locals
def __init__(
self,
id: int,
name: str | None = None,
status: str | None = None,
created: str | None = None,
public_net: PublicNetwork | None = None,
server_type: BoundServerType | None = None,
datacenter: BoundDatacenter | None = None,
location: BoundLocation | None = None,
image: BoundImage | None = None,
iso: BoundIso | None = None,
rescue_enabled: bool | None = None,
locked: bool | None = None,
backup_window: str | None = None,
outgoing_traffic: int | None = None,
ingoing_traffic: int | None = None,
included_traffic: int | None = None,
protection: ServerProtection | None = None,
labels: dict[str, str] | None = None,
volumes: list[BoundVolume] | None = None,
private_net: list[PrivateNet] | None = None,
primary_disk_size: int | None = None,
placement_group: BoundPlacementGroup | None = None,
):
self.id = id
self.name = name
self.status = status
self.created = self._parse_datetime(created)
self.public_net = public_net
self.server_type = server_type
self.datacenter = datacenter
self.location = location
self.image = image
self.iso = iso
self.rescue_enabled = rescue_enabled
self.locked = locked
self.backup_window = backup_window
self.outgoing_traffic = outgoing_traffic
self.ingoing_traffic = ingoing_traffic
self.included_traffic = included_traffic
self.protection = protection
self.labels = labels
self.volumes = volumes
self.private_net = private_net
self.primary_disk_size = primary_disk_size
self.placement_group = placement_group
def private_net_for(self, network: BoundNetwork | Network) -> PrivateNet | None:
"""
Returns the server's network attachment information in the given Network,
and None if no attachment was found.
"""
for o in self.private_net or []:
if o.network.id == network.id:
return o
return None
@property
def datacenter(self) -> BoundDatacenter | None:
"""
:meta private:
"""
warnings.warn(
"The 'datacenter' property is deprecated and will be removed after 1 July 2026. "
"Please use the 'location' property instead. "
"See https://docs.hetzner.cloud/changelog#2025-12-16-phasing-out-datacenters.",
DeprecationWarning,
stacklevel=2,
)
return self._datacenter
@datacenter.setter
def datacenter(self, value: BoundDatacenter | None) -> None:
self._datacenter = value
class ServerProtection(TypedDict):
rebuild: bool
delete: bool
class CreateServerResponse(BaseDomain):
"""Create Server Response Domain
:param server: :class:`BoundServer <hcloud.servers.client.BoundServer>`
The created server
:param action: :class:`BoundAction <hcloud.actions.client.BoundAction>`
Shows the progress of the server creation
:param next_actions: List[:class:`BoundAction <hcloud.actions.client.BoundAction>`]
Additional actions like a `start_server` action after the server creation
:param root_password: str, None
The root password of the server if no SSH-Key was given on server creation
"""
__api_properties__ = ("server", "action", "next_actions", "root_password")
__slots__ = __api_properties__
def __init__(
self,
server: BoundServer,
action: BoundAction,
next_actions: list[BoundAction],
root_password: str | None,
):
self.server = server
self.action = action
self.next_actions = next_actions
self.root_password = root_password
class ResetPasswordResponse(BaseDomain):
"""Reset Password Response Domain
:param action: :class:`BoundAction <hcloud.actions.client.BoundAction>`
Shows the progress of the server passwort reset action
:param root_password: str
The root password of the server
"""
__api_properties__ = ("action", "root_password")
__slots__ = __api_properties__
def __init__(
self,
action: BoundAction,
root_password: str,
):
self.action = action
self.root_password = root_password
class EnableRescueResponse(BaseDomain):
"""Enable Rescue Response Domain
:param action: :class:`BoundAction <hcloud.actions.client.BoundAction>`
Shows the progress of the server enable rescue action
:param root_password: str
The root password of the server in the rescue mode
"""
__api_properties__ = ("action", "root_password")
__slots__ = __api_properties__
def __init__(
self,
action: BoundAction,
root_password: str,
):
self.action = action
self.root_password = root_password
class RequestConsoleResponse(BaseDomain):
"""Request Console Response Domain
:param action: :class:`BoundAction <hcloud.actions.client.BoundAction>`
Shows the progress of the server request console action
:param wss_url: str
URL of websocket proxy to use. This includes a token which is valid for a limited time only.
:param password: str
VNC password to use for this connection. This password only works in combination with a wss_url with valid token.
"""
__api_properties__ = ("action", "wss_url", "password")
__slots__ = __api_properties__
def __init__(
self,
action: BoundAction,
wss_url: str,
password: str,
):
self.action = action
self.wss_url = wss_url
self.password = password
class RebuildResponse(BaseDomain):
"""Rebuild Response Domain
:param action: Shows the progress of the server rebuild action
:param root_password: The root password of the server when not using SSH keys
"""
__api_properties__ = ("action", "root_password")
__slots__ = __api_properties__
def __init__(
self,
action: BoundAction,
root_password: str | None,
):
self.action = action
self.root_password = root_password
class PublicNetwork(BaseDomain):
"""Public Network Domain
:param ipv4: :class:`IPv4Address <hcloud.servers.domain.IPv4Address>`
:param ipv6: :class:`IPv6Network <hcloud.servers.domain.IPv6Network>`
:param floating_ips: List[:class:`BoundFloatingIP <hcloud.floating_ips.client.BoundFloatingIP>`]
:param primary_ipv4: :class:`BoundPrimaryIP <hcloud.primary_ips.domain.BoundPrimaryIP>`
:param primary_ipv6: :class:`BoundPrimaryIP <hcloud.primary_ips.domain.BoundPrimaryIP>`
:param firewalls: List[:class:`PublicNetworkFirewall <hcloud.servers.client.PublicNetworkFirewall>`]
"""
__api_properties__ = (
"ipv4",
"ipv6",
"floating_ips",
"firewalls",
"primary_ipv4",
"primary_ipv6",
)
__slots__ = __api_properties__
def __init__(
self,
ipv4: IPv4Address | None,
ipv6: IPv6Network | None,
floating_ips: list[BoundFloatingIP],
primary_ipv4: BoundPrimaryIP | None,
primary_ipv6: BoundPrimaryIP | None,
firewalls: list[PublicNetworkFirewall] | None = None,
):
self.ipv4 = ipv4
self.ipv6 = ipv6
self.floating_ips = floating_ips
self.firewalls = firewalls
self.primary_ipv4 = primary_ipv4
self.primary_ipv6 = primary_ipv6
class PublicNetworkFirewall(BaseDomain):
"""Public Network Domain
:param firewall: :class:`BoundFirewall <hcloud.firewalls.domain.BoundFirewall>`
:param status: str
"""
__api_properties__ = ("firewall", "status")
__slots__ = __api_properties__
STATUS_APPLIED = "applied"
"""Public Network Firewall Status applied"""
STATUS_PENDING = "pending"
"""Public Network Firewall Status pending"""
def __init__(
self,
firewall: BoundFirewall,
status: str,
):
self.firewall = firewall
self.status = status
class IPv4Address(BaseDomain):
"""IPv4 Address Domain
:param ip: str
The IPv4 Address
:param blocked: bool
Determine if the IP is blocked
:param dns_ptr: str
DNS PTR for the ip
"""
__api_properties__ = ("ip", "blocked", "dns_ptr")
__slots__ = __api_properties__
def __init__(
self,
ip: str,
blocked: bool,
dns_ptr: str,
):
self.ip = ip
self.blocked = blocked
self.dns_ptr = dns_ptr
class IPv6Network(BaseDomain):
"""IPv6 Network Domain
:param ip: str
The IPv6 Network as CIDR Notation
:param blocked: bool
Determine if the Network is blocked
:param dns_ptr: dict
DNS PTR Records for the Network as Dict
:param network: str
The network without the network mask
:param network_mask: str
The network mask
"""
__api_properties__ = ("ip", "blocked", "dns_ptr", "network", "network_mask")
__slots__ = __api_properties__
def __init__(
self,
ip: str,
blocked: bool,
dns_ptr: list[DNSPtr],
):
self.ip = ip
self.blocked = blocked
self.dns_ptr = dns_ptr
ip_parts = self.ip.split("/") # 2001:db8::/64 to 2001:db8:: and 64
self.network = ip_parts[0]
self.network_mask = ip_parts[1]
class PrivateNet(BaseDomain):
"""PrivateNet Domain
:param network: :class:`BoundNetwork <hcloud.networks.client.BoundNetwork>`
The network the server is attached to
:param ip: str
The main IP Address of the server in the Network
:param alias_ips: List[str]
The alias ips for a server
:param mac_address: str
The mac address of the interface on the server
"""
__api_properties__ = ("network", "ip", "alias_ips", "mac_address")
__slots__ = __api_properties__
def __init__(
self,
network: BoundNetwork,
ip: str,
alias_ips: list[str],
mac_address: str,
):
self.network = network
self.ip = ip
self.alias_ips = alias_ips
self.mac_address = mac_address
class ServerCreatePublicNetwork(BaseDomain):
"""Server Create Public Network Domain
:param ipv4: Optional[:class:`PrimaryIP <hcloud.primary_ips.domain.PrimaryIP>`]
:param ipv6: Optional[:class:`PrimaryIP <hcloud.primary_ips.domain.PrimaryIP>`]
:param enable_ipv4: bool
:param enable_ipv6: bool
"""
__api_properties__ = ("ipv4", "ipv6", "enable_ipv4", "enable_ipv6")
__slots__ = __api_properties__
def __init__(
self,
ipv4: PrimaryIP | None = None,
ipv6: PrimaryIP | None = None,
enable_ipv4: bool = True,
enable_ipv6: bool = True,
):
self.ipv4 = ipv4
self.ipv6 = ipv6
self.enable_ipv4 = enable_ipv4
self.enable_ipv6 = enable_ipv6
MetricsType = Literal[
"cpu",
"disk",
"network",
]
class GetMetricsResponse(BaseDomain):
"""Get a Server Metrics Response Domain
:param metrics: The Server metrics
"""
__api_properties__ = ("metrics",)
__slots__ = __api_properties__
def __init__(
self,
metrics: Metrics,
):
self.metrics = metrics