Skip to content

Commit 575f118

Browse files
Merge pull request #583 from linode/dev
Release v5.34.0
2 parents 8ed9190 + 4825c2b commit 575f118

32 files changed

+977
-200
lines changed

linode_api4/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# isort: skip_file
22
from linode_api4.objects import *
33
from linode_api4.errors import ApiError, UnexpectedResponseError
4-
from linode_api4.linode_client import LinodeClient
4+
from linode_api4.linode_client import LinodeClient, MonitorClient
55
from linode_api4.login_client import LinodeLoginClient, OAuthScopes
66
from linode_api4.paginated_list import PaginatedList
77
from linode_api4.polling import EventPoller

linode_api4/groups/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
from .lke import *
1111
from .lke_tier import *
1212
from .longview import *
13+
from .maintenance import *
1314
from .monitor import *
15+
from .monitor_api import *
1416
from .networking import *
1517
from .nodebalancer import *
1618
from .object_storage import *

linode_api4/groups/account.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ def maintenance(self):
201201
"""
202202
Returns a collection of Maintenance objects for any entity a user has permissions to view. Cancelled Maintenance objects are not returned.
203203
204-
API Documentation: https://techdocs.akamai.com/linode-api/reference/get-account-logins
204+
API Documentation: https://techdocs.akamai.com/linode-api/reference/get-maintenance
205205
206206
:returns: A list of Maintenance objects on this account.
207207
:rtype: List of Maintenance objects as MappedObjects

linode_api4/groups/group.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
from typing import TYPE_CHECKING
44

55
if TYPE_CHECKING:
6-
from linode_api4 import LinodeClient
6+
from linode_api4.linode_client import BaseClient
77

88

99
class Group:
10-
def __init__(self, client: LinodeClient):
10+
def __init__(self, client: BaseClient):
1111
self.client = client

linode_api4/groups/linode.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ def instance_create(
153153
int,
154154
]
155155
] = None,
156+
maintenance_policy: Optional[str] = None,
156157
**kwargs,
157158
):
158159
"""
@@ -296,6 +297,11 @@ def instance_create(
296297
:type interfaces: list[ConfigInterface] or list[dict[str, Any]]
297298
:param placement_group: A Placement Group to create this Linode under.
298299
:type placement_group: Union[InstancePlacementGroupAssignment, PlacementGroup, Dict[str, Any], int]
300+
:param maintenance_policy: The slug of the maintenance policy to apply during maintenance.
301+
If not provided, the default policy (linode/migrate) will be applied.
302+
NOTE: This field is in beta and may only
303+
function if base_url is set to `https://api.linode.com/v4beta`.
304+
:type maintenance_policy: str
299305
300306
:returns: A new Instance object, or a tuple containing the new Instance and
301307
the generated password.
@@ -327,6 +333,7 @@ def instance_create(
327333
"firewall_id": firewall,
328334
"backup_id": backup,
329335
"stackscript_id": stackscript,
336+
"maintenance_policy": maintenance_policy,
330337
# Special cases
331338
"disk_encryption": (
332339
str(disk_encryption) if disk_encryption else None

linode_api4/groups/maintenance.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from linode_api4.groups import Group
2+
from linode_api4.objects import MappedObject
3+
4+
5+
class MaintenanceGroup(Group):
6+
"""
7+
Collections related to Maintenance.
8+
"""
9+
10+
def maintenance_policies(self):
11+
"""
12+
.. note:: This endpoint is in beta. This will only function if base_url is set to `https://api.linode.com/v4beta`.
13+
14+
Returns a collection of MaintenancePolicy objects representing
15+
available maintenance policies that can be applied to Linodes
16+
17+
API Documentation: https://techdocs.akamai.com/linode-api/reference/get-policies
18+
19+
:returns: A list of Maintenance Policies that can be applied to Linodes
20+
:rtype: List of MaintenancePolicy objects as MappedObjects
21+
"""
22+
23+
result = self.client.get("/maintenance/policies", model=self)
24+
25+
return [MappedObject(**r) for r in result["data"]]

linode_api4/groups/monitor.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@
33
]
44
from typing import Any, Optional
55

6-
from linode_api4 import (
7-
PaginatedList,
8-
)
6+
from linode_api4 import PaginatedList
97
from linode_api4.errors import UnexpectedResponseError
108
from linode_api4.groups import Group
119
from linode_api4.objects import (

linode_api4/groups/monitor_api.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
__all__ = [
2+
"MetricsGroup",
3+
]
4+
5+
from typing import Any, Dict, List, Optional, Union
6+
7+
from linode_api4 import drop_null_keys
8+
from linode_api4.groups import Group
9+
from linode_api4.objects.base import _flatten_request_body_recursive
10+
from linode_api4.objects.monitor_api import EntityMetricOptions, EntityMetrics
11+
12+
13+
class MetricsGroup(Group):
14+
"""
15+
Encapsulates Monitor-related methods of the :any:`MonitorClient`.
16+
17+
This group contains all features related to metrics in the API monitor-api.
18+
"""
19+
20+
def fetch_metrics(
21+
self,
22+
service_type: str,
23+
entity_ids: list,
24+
metrics: List[Union[EntityMetricOptions, Dict[str, Any]]],
25+
**kwargs,
26+
) -> Optional[EntityMetrics]:
27+
"""
28+
Returns metrics information for the individual entities within a specific service type.
29+
30+
API documentation: https://techdocs.akamai.com/linode-api/reference/post-read-metric
31+
32+
:param service_type: The service being monitored.
33+
Currently, only the Managed Databases (dbaas) service type is supported.
34+
:type service_type: str
35+
36+
:param entity_ids: The id for each individual entity from a service_type.
37+
:type entity_ids: list
38+
39+
:param metrics: A list of metric objects, each specifying a metric name and its corresponding aggregation function.
40+
:type metrics: list of EntityMetricOptions or Dict[str, Any]
41+
42+
:param kwargs: Any other arguments accepted by the api. Please refer to the API documentation for full info.
43+
44+
:returns: Service metrics requested.
45+
:rtype: EntityMetrics or None
46+
"""
47+
params = {
48+
"entity_ids": entity_ids,
49+
"metrics": metrics,
50+
}
51+
52+
params.update(kwargs)
53+
54+
result = self.client.post(
55+
f"/monitor/services/{service_type}/metrics",
56+
data=drop_null_keys(_flatten_request_body_recursive(params)),
57+
)
58+
59+
return EntityMetrics.from_json(result)

0 commit comments

Comments
 (0)