Skip to content

Commit f593e93

Browse files
authored
[azure][feat] Case insensitive connect (#2140)
1 parent 398ba01 commit f593e93

File tree

5 files changed

+41
-3
lines changed

5 files changed

+41
-3
lines changed

plugins/azure/fix_plugin_azure/collector.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,8 @@ def work_done(_: Future[None]) -> None:
167167
group_futures = []
168168
self.core_feedback.progress_done(name, 0, 1, context=[self.cloud.id, self.account.id])
169169
for resource_type in resources:
170-
group_futures.append(builder.submit_work("azure_all", collect_resource, resource_type))
170+
if self.config.should_collect(resource_type.kind):
171+
group_futures.append(builder.submit_work("azure_all", collect_resource, resource_type))
171172
all_done = GatherFutures.all(group_futures)
172173
all_done.add_done_callback(work_done)
173174
return all_done

plugins/azure/fix_plugin_azure/config.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from fnmatch import fnmatch
12
from typing import ClassVar, Optional, Dict, List, Union
23

34
from attr import define, field
@@ -83,3 +84,29 @@ class AzureConfig:
8384
default=True,
8485
metadata={"description": "Collect resource usage metrics via Azure Metric, enabled by default"},
8586
)
87+
collect: List[str] = field(
88+
factory=list,
89+
metadata={
90+
"description": (
91+
"List of Azure services to collect (default: all).\n"
92+
"You can use GLOB patterns like ? and * to match multiple services."
93+
)
94+
},
95+
)
96+
no_collect: List[str] = field(
97+
factory=list,
98+
metadata={
99+
"description": (
100+
"List of Azure services to exclude (default: none).\n"
101+
"You can use GLOB patterns like ? and * to match multiple services."
102+
)
103+
},
104+
)
105+
106+
def should_collect(self, name: str) -> bool:
107+
# no_collect has precedence over collect
108+
if self.no_collect and any(fnmatch(name, p) for p in self.no_collect):
109+
return False
110+
if self.collect:
111+
return any(fnmatch(name, p) for p in self.collect)
112+
return True

plugins/azure/fix_plugin_azure/resource/base.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
from fix_plugin_azure.azure_client import AzureResourceSpec, MicrosoftClient, MicrosoftRestSpec
1212
from fix_plugin_azure.config import AzureConfig
13+
from fix_plugin_azure.utils import case_insensitive_eq
1314
from fixlib.baseresources import (
1415
BaseGroup,
1516
BaseResource,
@@ -653,7 +654,9 @@ def node(
653654
for n in self.graph:
654655
if clazz and not isinstance(n, clazz):
655656
continue
656-
if (filter_fn(n) if filter_fn else True) and all(getattr(n, k, None) == v for k, v in node.items()):
657+
if (filter_fn(n) if filter_fn else True) and all(
658+
case_insensitive_eq(getattr(n, k, None), v) for k, v in node.items()
659+
):
657660
return n # type: ignore
658661
return None
659662

plugins/azure/fix_plugin_azure/utils.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,13 @@ def identity(x: T) -> T:
3737
return x
3838

3939

40+
def case_insensitive_eq(left: T, right: T) -> bool:
41+
if isinstance(left, str) and isinstance(right, str):
42+
return left.lower() == right.lower()
43+
else:
44+
return left == right
45+
46+
4047
@frozen(kw_only=True)
4148
class MetricNormalization:
4249
metric_name: MetricName

plugins/azure/test/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,9 +185,9 @@ def connect_resources(
185185
# collect all defined resource kinds before we can connect them
186186
for resource_kind in collect_resources or []:
187187
resource_kind.collect_resources(builder)
188+
builder.executor.wait_for_submitted_work()
188189
# connect all resources
189190
for node, data in list(builder.graph.nodes(data=True)):
190191
if not filter_class or isinstance(node, filter_class):
191192
node.connect_in_graph(builder, data.get("source", {}))
192-
193193
builder.executor.wait_for_submitted_work()

0 commit comments

Comments
 (0)