Skip to content

Release v5.34.0 #583

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Aug 18, 2025
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
2 changes: 1 addition & 1 deletion linode_api4/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# isort: skip_file
from linode_api4.objects import *
from linode_api4.errors import ApiError, UnexpectedResponseError
from linode_api4.linode_client import LinodeClient
from linode_api4.linode_client import LinodeClient, MonitorClient
from linode_api4.login_client import LinodeLoginClient, OAuthScopes
from linode_api4.paginated_list import PaginatedList
from linode_api4.polling import EventPoller
2 changes: 2 additions & 0 deletions linode_api4/groups/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@
from .lke import *
from .lke_tier import *
from .longview import *
from .maintenance import *
from .monitor import *
from .monitor_api import *
from .networking import *
from .nodebalancer import *
from .object_storage import *
Expand Down
2 changes: 1 addition & 1 deletion linode_api4/groups/account.py
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ def maintenance(self):
"""
Returns a collection of Maintenance objects for any entity a user has permissions to view. Cancelled Maintenance objects are not returned.
API Documentation: https://techdocs.akamai.com/linode-api/reference/get-account-logins
API Documentation: https://techdocs.akamai.com/linode-api/reference/get-maintenance
:returns: A list of Maintenance objects on this account.
:rtype: List of Maintenance objects as MappedObjects
Expand Down
4 changes: 2 additions & 2 deletions linode_api4/groups/group.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
from typing import TYPE_CHECKING

if TYPE_CHECKING:
from linode_api4 import LinodeClient
from linode_api4.linode_client import BaseClient


class Group:
def __init__(self, client: LinodeClient):
def __init__(self, client: BaseClient):
self.client = client
7 changes: 7 additions & 0 deletions linode_api4/groups/linode.py
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ def instance_create(
int,
]
] = None,
maintenance_policy: Optional[str] = None,
**kwargs,
):
"""
Expand Down Expand Up @@ -296,6 +297,11 @@ def instance_create(
:type interfaces: list[ConfigInterface] or list[dict[str, Any]]
:param placement_group: A Placement Group to create this Linode under.
:type placement_group: Union[InstancePlacementGroupAssignment, PlacementGroup, Dict[str, Any], int]
:param maintenance_policy: The slug of the maintenance policy to apply during maintenance.
If not provided, the default policy (linode/migrate) will be applied.
NOTE: This field is in beta and may only
function if base_url is set to `https://api.linode.com/v4beta`.
:type maintenance_policy: str

:returns: A new Instance object, or a tuple containing the new Instance and
the generated password.
Expand Down Expand Up @@ -327,6 +333,7 @@ def instance_create(
"firewall_id": firewall,
"backup_id": backup,
"stackscript_id": stackscript,
"maintenance_policy": maintenance_policy,
# Special cases
"disk_encryption": (
str(disk_encryption) if disk_encryption else None
Expand Down
25 changes: 25 additions & 0 deletions linode_api4/groups/maintenance.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from linode_api4.groups import Group
from linode_api4.objects import MappedObject


class MaintenanceGroup(Group):
"""
Collections related to Maintenance.
"""

def maintenance_policies(self):
"""
.. note:: This endpoint is in beta. This will only function if base_url is set to `https://api.linode.com/v4beta`.

Returns a collection of MaintenancePolicy objects representing
available maintenance policies that can be applied to Linodes

API Documentation: https://techdocs.akamai.com/linode-api/reference/get-policies

:returns: A list of Maintenance Policies that can be applied to Linodes
:rtype: List of MaintenancePolicy objects as MappedObjects
"""

result = self.client.get("/maintenance/policies", model=self)

return [MappedObject(**r) for r in result["data"]]
4 changes: 1 addition & 3 deletions linode_api4/groups/monitor.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@
]
from typing import Any, Optional

from linode_api4 import (
PaginatedList,
)
from linode_api4 import PaginatedList
from linode_api4.errors import UnexpectedResponseError
from linode_api4.groups import Group
from linode_api4.objects import (
Expand Down
59 changes: 59 additions & 0 deletions linode_api4/groups/monitor_api.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
__all__ = [
"MetricsGroup",
]

from typing import Any, Dict, List, Optional, Union

from linode_api4 import drop_null_keys
from linode_api4.groups import Group
from linode_api4.objects.base import _flatten_request_body_recursive
from linode_api4.objects.monitor_api import EntityMetricOptions, EntityMetrics


class MetricsGroup(Group):
"""
Encapsulates Monitor-related methods of the :any:`MonitorClient`.

This group contains all features related to metrics in the API monitor-api.
"""

def fetch_metrics(
self,
service_type: str,
entity_ids: list,
metrics: List[Union[EntityMetricOptions, Dict[str, Any]]],
**kwargs,
) -> Optional[EntityMetrics]:
"""
Returns metrics information for the individual entities within a specific service type.

API documentation: https://techdocs.akamai.com/linode-api/reference/post-read-metric

:param service_type: The service being monitored.
Currently, only the Managed Databases (dbaas) service type is supported.
:type service_type: str

:param entity_ids: The id for each individual entity from a service_type.
:type entity_ids: list

:param metrics: A list of metric objects, each specifying a metric name and its corresponding aggregation function.
:type metrics: list of EntityMetricOptions or Dict[str, Any]

:param kwargs: Any other arguments accepted by the api. Please refer to the API documentation for full info.

:returns: Service metrics requested.
:rtype: EntityMetrics or None
"""
params = {
"entity_ids": entity_ids,
"metrics": metrics,
}

params.update(kwargs)

result = self.client.post(
f"/monitor/services/{service_type}/metrics",
data=drop_null_keys(_flatten_request_body_recursive(params)),
)

return EntityMetrics.from_json(result)
Loading
Loading