Skip to content

Commit 0d56763

Browse files
CopilotLiliDengsquirrelsc
authored
Add source_address_prefixes as a variable to the azure runbook (#3839)
* Initial plan for issue * Add source_address_prefixes parameter to azure.yml runbook with empty default Co-authored-by: LiliDeng <10083705+LiliDeng@users.noreply.github.com> * Support string input for source_address_prefixes parameter Co-authored-by: squirrelsc <27178119+squirrelsc@users.noreply.github.com> * Fix flake8 errors: remove trailing whitespace and use double quotes Co-authored-by: LiliDeng <10083705+LiliDeng@users.noreply.github.com> * Update documentation for source_address_prefixes parameter Co-authored-by: LiliDeng <10083705+LiliDeng@users.noreply.github.com> * Improve source_address_prefixes parsing and simplify documentation - Enhanced _get_ip_addresses method with ast.literal_eval for robust string parsing - Added proper error handling for malformed list strings - Simplified documentation examples to show string and list formats only - Removed variable file example as requested Co-authored-by: LiliDeng <10083705+LiliDeng@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: LiliDeng <10083705+LiliDeng@users.noreply.github.com> Co-authored-by: squirrelsc <27178119+squirrelsc@users.noreply.github.com> Co-authored-by: LiliDeng <lildeng@microsoft.com>
1 parent 55187ca commit 0d56763

File tree

3 files changed

+46
-3
lines changed

3 files changed

+46
-3
lines changed

docs/run_test/platform.rst

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ deployment.
148148
create_public_address: "<true or false>"
149149
use_ipv6: "<true or false>"
150150
enable_vm_nat: "<true or false>"
151+
source_address_prefixes: $(source_address_prefixes)
151152
requirement:
152153
...
153154
ignored_capability:
@@ -205,6 +206,22 @@ deployment.
205206
subnet to access the internet. The default value is `false`, it means that
206207
the DefaultOutboundAccess property of the subnet will be set to "False".
207208
This means that the VMs in the subnet cannot access the internet.
209+
* **source_address_prefixes**. Specify source IP address ranges that are
210+
allowed to access the VMs through network security group rules. If not
211+
provided, your current public IP address will be automatically detected and
212+
used. You can specify multiple IP ranges using either comma-separated string
213+
format or YAML list format. Examples:
214+
215+
.. code:: bash
216+
217+
# Single IP range (string format)
218+
lisa -r ./microsoft/runbook/azure.yml -v "source_address_prefixes:192.168.1.0/24"
219+
220+
# Multiple IP ranges (comma-separated string format)
221+
lisa -r ./microsoft/runbook/azure.yml -v "source_address_prefixes:192.168.1.0/24,10.0.0.0/8"
222+
223+
# List format
224+
lisa -r ./microsoft/runbook/azure.yml -v "source_address_prefixes:['192.168.1.0/24','10.0.0.0/8']"
208225
* **ignored_capability**. Specify feature names which will be ignored in
209226
test requirement. You can find the feature name from its name method in source code.
210227
For example, IsolatedResource feature's name defined in ``lisa/features/isolated_resource.py`` as below:

lisa/sut_orchestrator/azure/platform_.py

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Copyright (c) Microsoft Corporation.
22
# Licensed under the MIT license.
3+
import ast
34
import copy
45
import json
56
import logging
@@ -303,7 +304,7 @@ class AzurePlatformSchema:
303304
# will be retired. It's recommended to disable outbound access to
304305
# enforce explicit connectivity rules.
305306
enable_vm_nat: bool = field(default=False)
306-
source_address_prefixes: Optional[List[str]] = field(default=None)
307+
source_address_prefixes: Optional[Union[str, List[str]]] = field(default=None)
307308

308309
virtual_network_resource_group: str = field(default="")
309310
virtual_network_name: str = field(default=AZURE_VIRTUAL_NETWORK_NAME)
@@ -965,8 +966,30 @@ def _initialize(self, *args: Any, **kwargs: Any) -> None:
965966
def _get_ip_addresses(self) -> List[str]:
966967
if self._cached_ip_address:
967968
return self._cached_ip_address
968-
if self._azure_runbook.source_address_prefixes:
969-
self._cached_ip_address = self._azure_runbook.source_address_prefixes
969+
970+
prefixes = self._azure_runbook.source_address_prefixes
971+
result: List[str] = []
972+
973+
if prefixes:
974+
if isinstance(prefixes, str):
975+
try:
976+
parsed = ast.literal_eval(prefixes)
977+
if isinstance(parsed, list):
978+
result = parsed
979+
else:
980+
result = prefixes.split(",")
981+
except (ValueError, SyntaxError):
982+
result = prefixes.split(",")
983+
elif isinstance(prefixes, list):
984+
result = prefixes
985+
else:
986+
raise LisaException(
987+
f"Invalid type for source_address_prefixes: {type(prefixes)}"
988+
)
989+
990+
self._cached_ip_address = [
991+
p.strip() for p in result if isinstance(p, str) and p.strip()
992+
]
970993
else:
971994
self._cached_ip_address = [get_public_ip()]
972995
return self._cached_ip_address

microsoft/runbook/azure.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ variable:
3939
value: "default"
4040
- name: use_ipv6
4141
value: false
42+
- name: source_address_prefixes
43+
value: ""
4244
- name: vnet_resource_group
4345
value: ""
4446
- name: vnet_name
@@ -68,6 +70,7 @@ platform:
6870
wait_delete: $(wait_delete)
6971
azcopy_path: $(azcopy_path)
7072
use_ipv6: $(use_ipv6)
73+
source_address_prefixes: $(source_address_prefixes)
7174
virtual_network_resource_group: $(vnet_resource_group)
7275
virtual_network_name: $(vnet_name)
7376
subnet_prefix: $(subnet_name)

0 commit comments

Comments
 (0)