Skip to content

Commit 3136b95

Browse files
authored
[lib][chore] Dedicated property for provider_link (#2208)
1 parent 0c2bc07 commit 3136b95

File tree

13 files changed

+46
-63
lines changed

13 files changed

+46
-63
lines changed

fixlib/fixlib/baseresources.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,9 @@ class BaseResource(ABC):
282282
_protected: bool = False
283283
_deferred_connections: List[Dict[str, Any]] = field(factory=list)
284284
_resource_usage: Dict[MetricNameWithUnit, Dict[str, float]] = field(factory=lambda: defaultdict(dict))
285-
_metadata: Dict[str, Any] = field(factory=dict) # values will be exported in the metadata section of the node
285+
286+
# Deep link into the cloud provider's console
287+
_provider_link: Optional[str] = None
286288
_categories: ClassVar[List[Category]] = []
287289

288290
ctime: Optional[datetime] = field(

fixlib/fixlib/core/model_export.py

Lines changed: 14 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -333,33 +333,22 @@ def node_to_dict(node: BaseResource, changes_only: bool = False, include_revisio
333333
if changes_only:
334334
node_dict.update(node.changes.get())
335335
else:
336-
node_dict.update(
337-
{
338-
"reported": get_node_attributes(node),
339-
"metadata": {
340-
"python_type": type_str(node),
341-
"cleaned": node.cleaned,
342-
"protected": node.protected,
343-
"categories": node.categories(),
344-
**node._metadata,
345-
},
346-
"usage": node._resource_usage,
347-
}
348-
)
336+
metadata: Json = {"python_type": type_str(node), "categories": node.categories()}
337+
if node.cleaned:
338+
metadata["cleaned"] = True
339+
if node.protected:
340+
metadata["protected"] = True
341+
if link := node._provider_link:
342+
metadata["provider_link"] = link
343+
344+
node_dict["reported"] = get_node_attributes(node)
345+
node_dict["metadata"] = metadata
346+
if usage := node._resource_usage:
347+
node_dict["usage"] = usage
349348
if node.clean:
350-
node_dict.update(
351-
{
352-
"desired": {
353-
"clean": node.clean,
354-
}
355-
}
356-
)
349+
node_dict.update({"desired": {"clean": node.clean}})
357350
if include_revision and node._fixcore_revision:
358-
node_dict.update(
359-
{
360-
"revision": node._fixcore_revision,
361-
}
362-
)
351+
node_dict["revision"] = node._fixcore_revision
363352
return node_dict
364353

365354

plugins/aws/fix_plugin_aws/resource/base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,7 @@ def add_node(
531531

532532
# If there is no provider_link: try to create one from template.
533533
# The template can use the complete src json, plus some base attributes.
534-
if node._metadata.get("provider_link") is None and (link_tpl := meta.get("provider_link_tpl")):
534+
if node._provider_link is None and (link_tpl := meta.get("provider_link_tpl")):
535535
try:
536536
all_params = True
537537
link = link_tpl
@@ -547,7 +547,7 @@ def add_node(
547547
else:
548548
link = link.replace("{" + placeholder + "}", urlquote(str(value)))
549549
if all_params:
550-
node._metadata["provider_link"] = link
550+
node._provider_link = link
551551
except Exception as e:
552552
log.warning(f"Can not compute provider_link for {node} with template: {link_tpl}: {e}")
553553

plugins/azure/fix_plugin_azure/resource/base.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ class MicrosoftResource(BaseResource):
8888
# Which API to call and what to expect in the result.
8989
api_spec: ClassVar[Optional[MicrosoftRestSpec]] = None
9090
# Check if we want to create provider link. Default is True
91-
_is_provider_link: ClassVar[bool] = True
91+
_create_provider_link: ClassVar[bool] = True
9292
# Azure common properties
9393
etag: Optional[str] = field(default=None, metadata={'description': 'A unique read-only string that changes whenever the resource is updated.'}) # fmt: skip
9494
provisioning_state: Optional[str] = field(default=None, metadata={'description': 'The current provisioning state.'}) # fmt: skip
@@ -858,8 +858,8 @@ def add_node(self, node: MicrosoftResourceType, source: Optional[Json] = None) -
858858
last_edge_key = self.add_edge(self.account, node=node)
859859

860860
# create provider link
861-
if node._metadata.get("provider_link") is None and node._is_provider_link:
862-
node._metadata["provider_link"] = f"https://portal.azure.com/#@/resource{node.id}/overview"
861+
if node._provider_link is None and node._create_provider_link:
862+
node._provider_link = f"https://portal.azure.com/#@/resource{node.id}/overview"
863863

864864
if last_edge_key is not None:
865865
with self.graph_access_lock.write_access:

plugins/azure/fix_plugin_azure/resource/compute.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -770,7 +770,7 @@ class AzureComputeDiskType(MicrosoftResource, BaseVolumeType):
770770
"volume_throughput": S("maxThroughput").or_else(S("volume_throughput")),
771771
"location": S("armRegionName"),
772772
}
773-
_is_provider_link: ClassVar[bool] = False
773+
_create_provider_link: ClassVar[bool] = False
774774
full_name: Optional[str] = None
775775
product_name: Optional[str] = None
776776
tier: Optional[str] = field(default=None, metadata={'description': 'Performance tier of the disk (e. G, p4, s10) as described here: https://azure. Microsoft. Com/en-us/pricing/details/managed-disks/. Does not apply to ultra disks.'}) # fmt: skip
@@ -3693,7 +3693,7 @@ class AzureComputeVirtualMachineSize(MicrosoftResource, BaseInstanceType):
36933693
"instance_memory": S("memoryInMB") >> F(lambda x: int(x) / 1024),
36943694
"location": S("location"),
36953695
}
3696-
_is_provider_link: ClassVar[bool] = False
3696+
_create_provider_link: ClassVar[bool] = False
36973697
max_data_disk_count: Optional[int] = field(default=None, metadata={'description': 'The maximum number of data disks that can be attached to the virtual machine size.'}) # fmt: skip
36983698
memory_in_mb: Optional[int] = field(default=None, metadata={'description': 'The amount of memory, in mb, supported by the virtual machine size.'}) # fmt: skip
36993699
number_of_cores: Optional[int] = field(default=None, metadata={'description': 'The number of cores supported by the virtual machine size. For constrained vcpu capable vm sizes, this number represents the total vcpus of quota that the vm uses. For accurate vcpu count, please refer to https://docs. Microsoft. Com/azure/virtual-machines/constrained-vcpu or https://docs. Microsoft. Com/rest/api/compute/resourceskus/list.'}) # fmt: skip

plugins/azure/fix_plugin_azure/resource/cosmosdb.py

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -985,20 +985,12 @@ def post_process(self, graph_builder: GraphBuilder, source: Json) -> None:
985985
(
986986
"mongodbRoleDefinitions",
987987
AzureCosmosDBMongoDBRoleDefinition,
988-
{
989-
"BadRequest": mongo_cosmosdb_error_message.format(
990-
provider_link=self._metadata.get("provider_link")
991-
)
992-
},
988+
{"BadRequest": mongo_cosmosdb_error_message.format(provider_link=self._provider_link)},
993989
),
994990
(
995991
"mongodbUserDefinitions",
996992
AzureCosmosDBMongoDBUserDefinition,
997-
{
998-
"BadRequest": mongo_cosmosdb_error_message.format(
999-
provider_link=self._metadata.get("provider_link")
1000-
)
1001-
},
993+
{"BadRequest": mongo_cosmosdb_error_message.format(provider_link=self._provider_link)},
1002994
),
1003995
]
1004996
)
@@ -1973,7 +1965,7 @@ class AzureCosmosDBAccountUsage(MicrosoftResource, AzureBaseUsage):
19731965
"id": K(None),
19741966
"usage_quota_period": S("quotaPeriod"),
19751967
}
1976-
_is_provider_link: ClassVar[bool] = False
1968+
_create_provider_link: ClassVar[bool] = False
19771969
usage_quota_period: Optional[str] = field(default=None, metadata={'description': 'The quota period used to summarize the usage values.'}) # fmt: skip
19781970

19791971
@classmethod

plugins/azure/fix_plugin_azure/resource/machinelearning.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2338,7 +2338,7 @@ class AzureMachineLearningVirtualMachineSize(MicrosoftResource, BaseInstanceType
23382338
"instance_cores": S("vCPUs"),
23392339
"instance_memory": S("memoryGB"),
23402340
}
2341-
_is_provider_link: ClassVar[bool] = False
2341+
_create_provider_link: ClassVar[bool] = False
23422342
estimated_vm_prices: Optional[AzureEstimatedVMPrices] = field(default=None, metadata={'description': 'The estimated price info for using a VM.'}) # fmt: skip
23432343
family: Optional[str] = field(default=None, metadata={'description': 'The family name of the virtual machine size.'}) # fmt: skip
23442344
gpus: Optional[int] = field(default=None, metadata={'description': 'The number of gPUs supported by the virtual machine size.'}) # fmt: skip

plugins/azure/fix_plugin_azure/resource/microsoft_graph.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class MicrosoftGraphEntity(MicrosoftResource):
2626
"id": S("id"),
2727
"deleted_date_time": S("deletedDateTime"),
2828
}
29-
_is_provider_link: ClassVar[bool] = False
29+
_create_provider_link: ClassVar[bool] = False
3030
deleted_date_time: Optional[datetime] = field(default=None, metadata={'description': 'Date and time when this object was deleted. Always null when the object hasn\'t been deleted.'}) # fmt: skip
3131

3232

plugins/azure/fix_plugin_azure/resource/monitor.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ class AzureMonitorActionGroup(MicrosoftResource):
205205
kind_display: ClassVar[str] = "Azure Monitor Action Group"
206206
kind_service: ClassVar[Optional[str]] = service_name
207207
metadata: ClassVar[Dict[str, Any]] = {"icon": "group", "group": "management"}
208-
_is_provider_link: ClassVar[bool] = False
208+
_create_provider_link: ClassVar[bool] = False
209209
api_spec: ClassVar[AzureResourceSpec] = AzureResourceSpec(
210210
service="monitor",
211211
version="2023-01-01",
@@ -302,7 +302,7 @@ class AzureMonitorActivityLogAlert(MicrosoftResource):
302302
reference_kinds: ClassVar[ModelReference] = {
303303
"predecessors": {"default": [AzureMonitorActionGroup.kind]},
304304
}
305-
_is_provider_link: ClassVar[bool] = False
305+
_create_provider_link: ClassVar[bool] = False
306306
api_spec: ClassVar[AzureResourceSpec] = AzureResourceSpec(
307307
service="monitor",
308308
version="2020-10-01",
@@ -367,7 +367,7 @@ class AzureMonitorAlertRule(MicrosoftResource):
367367
kind_display: ClassVar[str] = "Azure Monitor Alert Rule"
368368
kind_service: ClassVar[Optional[str]] = service_name
369369
metadata: ClassVar[Dict[str, Any]] = {"icon": "config", "group": "management"}
370-
_is_provider_link: ClassVar[bool] = False
370+
_create_provider_link: ClassVar[bool] = False
371371
api_spec: ClassVar[AzureResourceSpec] = AzureResourceSpec(
372372
service="monitor",
373373
version="2016-03-01",
@@ -429,7 +429,7 @@ class AzureMonitorPrivateLinkScope(MicrosoftResource):
429429
kind_display: ClassVar[str] = "Azure Monitor Private Link Scope"
430430
kind_service: ClassVar[Optional[str]] = service_name
431431
metadata: ClassVar[Dict[str, Any]] = {"icon": "config", "group": "management"}
432-
_is_provider_link: ClassVar[bool] = False
432+
_create_provider_link: ClassVar[bool] = False
433433
api_spec: ClassVar[AzureResourceSpec] = AzureResourceSpec(
434434
service="monitor",
435435
version="2021-07-01-preview",
@@ -711,7 +711,7 @@ class AzureMonitorWorkspace(MicrosoftResource):
711711
kind_display: ClassVar[str] = "Azure Monitor Workspace"
712712
kind_service: ClassVar[Optional[str]] = service_name
713713
metadata: ClassVar[Dict[str, Any]] = {"icon": "resource", "group": "management"}
714-
_is_provider_link: ClassVar[bool] = False
714+
_create_provider_link: ClassVar[bool] = False
715715
api_spec: ClassVar[AzureResourceSpec] = AzureResourceSpec(
716716
service="monitor",
717717
version="2023-04-03",
@@ -749,7 +749,7 @@ class AzureMonitorDataCollectionRule(MicrosoftResource):
749749
kind_display: ClassVar[str] = "Azure Monitor Data Collection Rule"
750750
kind_service: ClassVar[Optional[str]] = service_name
751751
metadata: ClassVar[Dict[str, Any]] = {"icon": "config", "group": "management"}
752-
_is_provider_link: ClassVar[bool] = False
752+
_create_provider_link: ClassVar[bool] = False
753753
api_spec: ClassVar[AzureResourceSpec] = AzureResourceSpec(
754754
service="monitor",
755755
version="2023-03-11",
@@ -810,7 +810,7 @@ class AzureMonitorLogProfile(MicrosoftResource):
810810
kind_display: ClassVar[str] = "Azure Monitor Log Profile"
811811
kind_service: ClassVar[Optional[str]] = service_name
812812
metadata: ClassVar[Dict[str, Any]] = {"icon": "log", "group": "management"}
813-
_is_provider_link: ClassVar[bool] = False
813+
_create_provider_link: ClassVar[bool] = False
814814
api_spec: ClassVar[AzureResourceSpec] = AzureResourceSpec(
815815
service="monitor",
816816
version="2016-03-01",
@@ -854,7 +854,7 @@ class AzureMetricAlert(MicrosoftResource):
854854
kind_display: ClassVar[str] = "Azure Metric Alert"
855855
kind_service: ClassVar[Optional[str]] = service_name
856856
metadata: ClassVar[Dict[str, Any]] = {"icon": "alarm", "group": "management"}
857-
_is_provider_link: ClassVar[bool] = False
857+
_create_provider_link: ClassVar[bool] = False
858858
api_spec: ClassVar[AzureResourceSpec] = AzureResourceSpec(
859859
service="monitor",
860860
version="2018-03-01",
@@ -1119,7 +1119,7 @@ class AzureMonitorPipelineGroup(MicrosoftResource):
11191119
kind_display: ClassVar[str] = "Azure Monitor Pipeline Group"
11201120
kind_service: ClassVar[Optional[str]] = service_name
11211121
metadata: ClassVar[Dict[str, Any]] = {"icon": "group", "group": "management"}
1122-
_is_provider_link: ClassVar[bool] = False
1122+
_create_provider_link: ClassVar[bool] = False
11231123
api_spec: ClassVar[AzureResourceSpec] = AzureResourceSpec(
11241124
service="monitor",
11251125
version="2023-10-01-preview",
@@ -1232,7 +1232,7 @@ class AzureMonitorScheduledQueryRule(MicrosoftResource):
12321232
kind_display: ClassVar[str] = "Azure Monitor Scheduled Query Rule"
12331233
kind_service: ClassVar[Optional[str]] = service_name
12341234
metadata: ClassVar[Dict[str, Any]] = {"icon": "config", "group": "management"}
1235-
_is_provider_link: ClassVar[bool] = False
1235+
_create_provider_link: ClassVar[bool] = False
12361236
api_spec: ClassVar[AzureResourceSpec] = AzureResourceSpec(
12371237
service="monitor",
12381238
version="2024-01-01-preview",
@@ -1328,7 +1328,7 @@ class AzureMonitorDiagnosticSettings(MicrosoftResource):
13281328
kind_display: ClassVar[str] = "Azure Monitor Diagnostic Settings"
13291329
kind_service: ClassVar[Optional[str]] = service_name
13301330
metadata: ClassVar[Dict[str, Any]] = {"icon": "config", "group": "management"}
1331-
_is_provider_link: ClassVar[bool] = False
1331+
_create_provider_link: ClassVar[bool] = False
13321332
api_spec: ClassVar[AzureResourceSpec] = AzureResourceSpec(
13331333
service="monitor",
13341334
version="2021-05-01-preview",

plugins/azure/fix_plugin_azure/resource/mysql.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ class AzureMysqlServerType(MicrosoftResource, BaseDatabaseInstanceType):
236236
"_supported_flexible_server_editions": S("supportedFlexibleServerEditions")
237237
>> ForallBend(AzureServerEditionCapability.mapping),
238238
}
239-
_is_provider_link: ClassVar[bool] = False
239+
_create_provider_link: ClassVar[bool] = False
240240
supported_geo_backup_regions: Optional[List[str]] = field(default=None, metadata={'description': 'supported geo backup regions'}) # fmt: skip
241241
supported_ha_mode: Optional[List[str]] = field(default=None, metadata={'description': 'Supported high availability mode'}) # fmt: skip
242242
capability_zone: Optional[str] = field(default=None, metadata={"description": "zone name"})

0 commit comments

Comments
 (0)