Skip to content

Commit 3de8958

Browse files
1101-1aquamatthias
andauthored
[azure][feat] Add support for mysql resource collection (#2150)
Co-authored-by: Matthias Veit <aquamatthias@users.noreply.github.com>
1 parent 4f24d5b commit 3de8958

22 files changed

+1730
-34
lines changed

fixlib/fixlib/baseresources.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1094,6 +1094,14 @@ class DatabaseInstanceStatus(Enum):
10941094
UNKNOWN = "unknown"
10951095

10961096

1097+
@define(eq=False, slots=False)
1098+
class BaseDatabaseInstanceType(BaseInstanceType):
1099+
kind: ClassVar[str] = "database_instance_type"
1100+
kind_display: ClassVar[str] = "Database Instance Type"
1101+
kind_description: ClassVar[str] = "A database instance type."
1102+
metadata: ClassVar[Dict[str, Any]] = {"icon": "database", "group": "database"}
1103+
1104+
10971105
@define(eq=False, slots=False)
10981106
class BaseDatabase(BaseResource):
10991107
kind: ClassVar[str] = "database"

fixlib/fixlib/json_bender.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,17 @@ def execute(self, source: Any) -> Any:
358358
return None
359359

360360

361+
class AsFloat(Bender):
362+
def execute(self, source: Any) -> Any:
363+
if isinstance(source, float):
364+
return source
365+
else:
366+
try:
367+
return float(source)
368+
except Exception:
369+
return None
370+
371+
361372
class AsBool(Bender):
362373
def execute(self, source: Any) -> Any:
363374
if isinstance(source, bool):

plugins/azure/fix_plugin_azure/collector.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
resources as network_resources,
3636
)
3737
from fix_plugin_azure.resource.sql import resources as sql_resources
38+
from fix_plugin_azure.resource.mysql import AzureMysqlCapability, AzureMysqlServerType, resources as mysql_resources
3839
from fix_plugin_azure.resource.storage import AzureStorageAccountUsage, AzureStorageSku, resources as storage_resources
3940
from fixlib.baseresources import Cloud, GraphRoot, BaseAccount, BaseRegion
4041
from fixlib.core.actions import CoreFeedback, ErrorAccumulator
@@ -61,6 +62,7 @@ def resource_with_params(clazz: Type[MicrosoftResource], param: str) -> bool:
6162
+ security_resources
6263
+ storage_resources
6364
+ sql_resources
65+
+ mysql_resources
6466
)
6567
all_resources = subscription_resources + graph_resources # defines all resource kinds. used in model check
6668

@@ -233,12 +235,16 @@ def remove_usage_zero_value() -> None:
233235
rm_nodes(AzureNetworkVirtualApplianceSku, AzureSubscription)
234236
rm_nodes(AzureDiskType, AzureLocation)
235237
rm_nodes(AzureStorageSku, AzureLocation)
238+
rm_nodes(AzureMysqlServerType, AzureLocation)
236239
remove_usage_zero_value()
237240

238241
def after_collect(self) -> None:
239242
# Filter unnecessary nodes such as AzureDiskTypePricing
240243
nodes_to_remove = []
241-
node_types = (AzureDiskTypePricing,)
244+
node_types = (
245+
AzureDiskTypePricing,
246+
AzureMysqlCapability,
247+
)
242248

243249
for node in self.graph.nodes:
244250
if not isinstance(node, node_types):

plugins/azure/fix_plugin_azure/resource/base.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
from fixlib.config import current_config
2424
from fixlib.core.actions import CoreFeedback
2525
from fixlib.graph import Graph, EdgeKey, NodeSelector, ByNodeId
26-
from fixlib.json_bender import Bender, bend, S, ForallBend, Bend
26+
from fixlib.json_bender import AsFloat, Bender, bend, S, ForallBend, Bend
2727
from fixlib.lock import RWLock
2828
from fixlib.threading import ExecutorQueue
2929
from fixlib.types import Json
@@ -294,6 +294,9 @@ class AzureLocation(MicrosoftResource, BaseRegion):
294294
"location_metadata": S("metadata") >> Bend(AzureLocationMetadata.mapping),
295295
"regional_display_name": S("regionalDisplayName"),
296296
"subscription_id": S("subscriptionId"),
297+
"long_name": S("displayName"),
298+
"latitude": S("metadata", "latitude") >> AsFloat(),
299+
"longitude": S("metadata", "longitude") >> AsFloat(),
297300
}
298301
availability_zone_mappings: Optional[List[AzureAvailabilityZoneMappings]] = field(default=None, metadata={'description': 'The availability zone mappings for this region.'}) # fmt: skip
299302
display_name: Optional[str] = field(default=None, metadata={"description": "The display name of the location."})

plugins/azure/fix_plugin_azure/resource/compute.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2079,14 +2079,17 @@ class AzureRestorePointCollection(MicrosoftResource):
20792079
"provisioning_state": S("properties", "provisioningState"),
20802080
"restore_point_collection_id": S("properties", "restorePointCollectionId"),
20812081
"restore_points": S("properties", "restorePoints") >> ForallBend(AzureRestorePoint.mapping),
2082-
"source": S("properties", "source") >> Bend(AzureRestorePointCollectionSourceProperties.mapping),
2082+
"restore_point_collection_resource": S("properties", "source")
2083+
>> Bend(AzureRestorePointCollectionSourceProperties.mapping),
20832084
}
20842085
restore_point_collection_id: Optional[str] = field(default=None, metadata={'description': 'The unique id of the restore point collection.'}) # fmt: skip
20852086
restore_points: Optional[List[AzureRestorePoint]] = field(default=None, metadata={'description': 'A list containing all restore points created under this restore point collection.'}) # fmt: skip
2086-
source: Optional[AzureRestorePointCollectionSourceProperties] = field(default=None, metadata={'description': 'The properties of the source resource that this restore point collection is created from.'}) # fmt: skip
2087+
restore_point_collection_resource: Optional[AzureRestorePointCollectionSourceProperties] = field(default=None, metadata={'description': 'The properties of the source resource that this restore point collection is created from.'}) # fmt: skip
20872088

20882089
def connect_in_graph(self, builder: GraphBuilder, source: Json) -> None:
2089-
if (source_id := self.source) and (vm_id := source_id.id):
2090+
if (restore_point_collection_source := self.restore_point_collection_resource) and (
2091+
vm_id := restore_point_collection_source.id
2092+
):
20902093
builder.add_edge(self, edge_type=EdgeType.default, clazz=AzureVirtualMachineBase, id=vm_id)
20912094

20922095

0 commit comments

Comments
 (0)