azure-deploy-cli 1.0.5__tar.gz → 1.1.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/.github/workflows/1-3-release.yaml +1 -1
  2. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/.github/workflows/2-build.yaml +1 -1
  3. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/CHANGELOG.md +11 -0
  4. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/PKG-INFO +6 -6
  5. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/pyproject.toml +5 -5
  6. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli/_version.py +3 -3
  7. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli/aca/aca_cli.py +36 -1
  8. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli/aca/deploy_aca.py +9 -1
  9. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli/aca/model.py +3 -0
  10. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli/utils/docker.py +9 -3
  11. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli.egg-info/PKG-INFO +6 -6
  12. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli.egg-info/requires.txt +5 -5
  13. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/tests/test_retag_image.py +4 -1
  14. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/.github/dependabot.yml +0 -0
  15. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/.github/workflows/1-1-pr-build-check.yaml +0 -0
  16. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/.github/workflows/1-2-staging.yaml +0 -0
  17. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/.gitignore +0 -0
  18. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/.pre-commit-config.yaml +0 -0
  19. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/CONTRIBUTING.md +0 -0
  20. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/LICENSE +0 -0
  21. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/Makefile +0 -0
  22. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/README.md +0 -0
  23. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/setup.cfg +0 -0
  24. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/setup.sh +0 -0
  25. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli/__init__.py +0 -0
  26. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli/aca/bash/aca-cert/create.sh +0 -0
  27. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli/aca/bash/aca-cert/destroy.sh +0 -0
  28. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli/aca/yaml_loader.py +0 -0
  29. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli/cli.py +0 -0
  30. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli/identity/__init__.py +0 -0
  31. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli/identity/group.py +0 -0
  32. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli/identity/identity_cli.py +0 -0
  33. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli/identity/managed_identity.py +0 -0
  34. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli/identity/models.py +0 -0
  35. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli/identity/py.typed +0 -0
  36. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli/identity/role.py +0 -0
  37. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli/identity/service_principal.py +0 -0
  38. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli/py.typed +0 -0
  39. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli/utils/__init__.py +0 -0
  40. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli/utils/azure_cli.py +0 -0
  41. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli/utils/env.py +0 -0
  42. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli/utils/key_vault.py +0 -0
  43. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli/utils/logging.py +0 -0
  44. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli/utils/py.typed +0 -0
  45. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli.egg-info/SOURCES.txt +0 -0
  46. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli.egg-info/dependency_links.txt +0 -0
  47. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli.egg-info/entry_points.txt +0 -0
  48. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/src/azure_deploy_cli.egg-info/top_level.txt +0 -0
  49. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/tests/__init__.py +0 -0
  50. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/tests/fixtures/.env.example +0 -0
  51. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/tests/identity/__init__.py +0 -0
  52. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/tests/identity/test_models.py +0 -0
  53. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/tests/roles-config.json +0 -0
  54. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/tests/test.sh +0 -0
  55. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/tests/test_aca_cli.py +0 -0
  56. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/tests/test_deploy_aca.py +0 -0
  57. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/tests/test_env.py +0 -0
  58. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/tests/test_package.py +0 -0
  59. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/tests/test_probe_config.py +0 -0
  60. {azure_deploy_cli-1.0.5 → azure_deploy_cli-1.1.1}/uv.lock +0 -0
@@ -63,7 +63,7 @@ jobs:
63
63
  python-version: '3.11'
64
64
 
65
65
  - name: Install uv
66
- uses: astral-sh/setup-uv@v3
66
+ uses: astral-sh/setup-uv@v7
67
67
  with:
68
68
  enable-cache: true
69
69
 
@@ -17,7 +17,7 @@ jobs:
17
17
  python-version: '3.11'
18
18
 
19
19
  - name: Install uv
20
- uses: astral-sh/setup-uv@v3
20
+ uses: astral-sh/setup-uv@v7
21
21
  with:
22
22
  enable-cache: true
23
23
 
@@ -1,3 +1,14 @@
1
+ ## [1.1.1] - 2026-01-31
2
+
3
+ ### 💼 Other
4
+
5
+ - *(dep)* Bump astral-sh/setup-uv in the dependencies group (#31)
6
+ - *(dep)* Bump the dependencies group across 1 directory with 5 updates (#33)
7
+ ## [1.1.0] - 2026-01-31
8
+
9
+ ### 🚀 Features
10
+
11
+ - Added allowed ip support (#42)
1
12
  ## [1.0.5] - 2026-01-29
2
13
 
3
14
  ### 🐛 Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: azure-deploy-cli
3
- Version: 1.0.5
3
+ Version: 1.1.1
4
4
  Summary: Python CLI for Azure deployment automation - identity, roles, and container apps management
5
5
  Author-email: decewei <celinew1221@gmail.com>
6
6
  License: Mozilla Public License Version 2.0
@@ -400,15 +400,15 @@ Requires-Dist: python-dotenv==1.2.1
400
400
  Requires-Dist: pydantic==2.12.5
401
401
  Requires-Dist: PyYAML==6.0.3
402
402
  Provides-Extra: dev
403
- Requires-Dist: ruff==0.14.10; extra == "dev"
403
+ Requires-Dist: ruff==0.14.14; extra == "dev"
404
404
  Requires-Dist: mypy==1.19.1; extra == "dev"
405
405
  Requires-Dist: pytest==9.0.2; extra == "dev"
406
406
  Requires-Dist: pytest-asyncio==1.3.0; extra == "dev"
407
- Requires-Dist: coverage==7.13.1; extra == "dev"
407
+ Requires-Dist: coverage==7.13.2; extra == "dev"
408
408
  Requires-Dist: pytest-cov==7.0.0; extra == "dev"
409
- Requires-Dist: commitizen==4.11.0; extra == "dev"
410
- Requires-Dist: pre-commit==4.1.0; extra == "dev"
411
- Requires-Dist: types-setuptools==80.9.0.20251223; extra == "dev"
409
+ Requires-Dist: commitizen==4.12.1; extra == "dev"
410
+ Requires-Dist: pre-commit==4.5.1; extra == "dev"
411
+ Requires-Dist: types-setuptools==80.10.0.20260124; extra == "dev"
412
412
  Requires-Dist: types-PyYAML==6.0.12.20250915; extra == "dev"
413
413
  Dynamic: license-file
414
414
 
@@ -37,15 +37,15 @@ dependencies = [
37
37
 
38
38
  [project.optional-dependencies]
39
39
  dev = [
40
- "ruff==0.14.10",
40
+ "ruff==0.14.14",
41
41
  "mypy==1.19.1",
42
42
  "pytest==9.0.2",
43
43
  "pytest-asyncio==1.3.0",
44
- "coverage==7.13.1",
44
+ "coverage==7.13.2",
45
45
  "pytest-cov==7.0.0",
46
- "commitizen==4.11.0",
47
- "pre-commit==4.1.0",
48
- "types-setuptools==80.9.0.20251223",
46
+ "commitizen==4.12.1",
47
+ "pre-commit==4.5.1",
48
+ "types-setuptools==80.10.0.20260124",
49
49
  "types-PyYAML==6.0.12.20250915",
50
50
  ]
51
51
 
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '1.0.5'
32
- __version_tuple__ = version_tuple = (1, 0, 5)
31
+ __version__ = version = '1.1.1'
32
+ __version_tuple__ = version_tuple = (1, 1, 1)
33
33
 
34
- __commit_id__ = commit_id = 'g13bdfd4ee'
34
+ __commit_id__ = commit_id = 'g98cecd474'
@@ -6,6 +6,7 @@ from pathlib import Path
6
6
  from typing import Any
7
7
 
8
8
  from azure.mgmt.appcontainers import ContainerAppsAPIClient
9
+ from azure.mgmt.appcontainers.models import IpSecurityRestrictionRule
9
10
 
10
11
  from ..identity.managed_identity import create_or_get_user_identity
11
12
  from ..identity.role import assign_role_by_files
@@ -62,7 +63,9 @@ def _label_weight_pair(pair_str: str) -> tuple[str, int]:
62
63
  return (label, weight)
63
64
 
64
65
 
65
- def _convert_label_traffic_args(label_traffic_list: list[tuple[str, int]]) -> dict[str, int]:
66
+ def _convert_label_traffic_args(
67
+ label_traffic_list: list[tuple[str, int]],
68
+ ) -> dict[str, int]:
66
69
  """
67
70
  Convert list of (label, weight) tuples to dictionary.
68
71
 
@@ -153,6 +156,19 @@ def cli_deploy(args: Any) -> None:
153
156
  if not env:
154
157
  raise ValueError("Cannot create container app env")
155
158
 
159
+ ip_rules: list[IpSecurityRestrictionRule] = []
160
+ if args.allowed_ips:
161
+ for name, cidr_ranges in args.allowed_ips:
162
+ for idx, cidr_range in enumerate(cidr_ranges):
163
+ rule = IpSecurityRestrictionRule(
164
+ name=f"{name}-{idx + 1}",
165
+ action="Allow",
166
+ ip_address_range=cidr_range,
167
+ description=f"Allowed {name} IP range",
168
+ )
169
+ ip_rules.append(rule)
170
+ logger.critical(f"Configured {len(ip_rules)} Allowed IP restriction rules.")
171
+
156
172
  logger.critical("Deploying new revision...")
157
173
  result = deploy_revision(
158
174
  client=container_apps_api_client,
@@ -179,6 +195,7 @@ def cli_deploy(args: Any) -> None:
179
195
  secret_names=args.env_var_secrets or [],
180
196
  user_identity=user_identity,
181
197
  ),
198
+ ip_rules=ip_rules,
182
199
  )
183
200
 
184
201
  if args.custom_domains:
@@ -430,6 +447,24 @@ def add_commands(subparsers: argparse._SubParsersAction) -> None:
430
447
  "(includes image names, cpu, memory, env_vars, probes, ingress, and scale settings)",
431
448
  )
432
449
 
450
+ def tuple_ip(value: str) -> tuple[str, list[str]]:
451
+ if "=" not in value:
452
+ raise argparse.ArgumentTypeError(
453
+ f"Invalid format: '{value}'. Expected format: Name=IP1,IP2/CIDR"
454
+ )
455
+ name, ranges = value.split("=")
456
+ cidr_ranges = [cidr.strip() for cidr in ranges.split(",") if cidr.strip()]
457
+ return name, cidr_ranges
458
+
459
+ deploy_parser.add_argument(
460
+ "--allowed-ips",
461
+ nargs="*",
462
+ required=True,
463
+ type=tuple_ip,
464
+ help="List of allowed IP addresses or CIDR ranges for IP restriction. "
465
+ + "e.g., Name=1.3.5.7/32,2.3.4.3/24 Name2=3.4.5.6/43",
466
+ )
467
+
433
468
  deploy_parser.set_defaults(func=cli_deploy)
434
469
 
435
470
  # Add update-traffic command
@@ -20,6 +20,7 @@ from azure.mgmt.appcontainers.models import (
20
20
  ContainerResources,
21
21
  EnvironmentVar,
22
22
  Ingress,
23
+ IpSecurityRestrictionRule,
23
24
  LogAnalyticsConfiguration,
24
25
  ManagedEnvironment,
25
26
  ManagedServiceIdentity,
@@ -221,7 +222,12 @@ def build_container_images(
221
222
  source_full_image_name = get_aca_docker_image_name(
222
223
  registry_server, container_config.image_name, container_config.existing_image_tag
223
224
  )
224
- docker.pull_retag_and_push_image(source_full_image_name, target_full_image_name)
225
+ _login_to_acr(registry_server)
226
+ docker.pull_retag_and_push_image(
227
+ source_full_image_name,
228
+ target_full_image_name,
229
+ container_config.existing_image_platform,
230
+ )
225
231
  logger.success(f"Image retagged successfully to '{image_tag}'")
226
232
  elif container_config.dockerfile:
227
233
  logger.info(
@@ -259,6 +265,7 @@ def deploy_revision(
259
265
  min_replicas: int,
260
266
  max_replicas: int,
261
267
  secret_key_vault_config: SecretKeyVaultConfig,
268
+ ip_rules: list[IpSecurityRestrictionRule],
262
269
  ) -> RevisionDeploymentResult:
263
270
  """
264
271
  Deploy a new revision with multiple containers without updating traffic weights.
@@ -348,6 +355,7 @@ def deploy_revision(
348
355
  transport=ingress_transport,
349
356
  traffic=existing_traffic_weights, # Preserve existing traffic
350
357
  custom_domains=existing_custom_domains,
358
+ ip_security_restrictions=ip_rules,
351
359
  )
352
360
 
353
361
  revision_name = generate_revision_name(container_app_name, revision_suffix, stage)
@@ -52,6 +52,9 @@ class ContainerConfig(BaseModel):
52
52
  default=None, description="List of probe configurations"
53
53
  )
54
54
  existing_image_tag: str | None = Field(default=None, description="Optional tag to retag from")
55
+ existing_image_platform: str | None = Field(
56
+ default=None, description="Optional platform for existing image pull"
57
+ )
55
58
  dockerfile: str | None = Field(default=None, description="Optional dockerfile path")
56
59
 
57
60
  def post_init(self):
@@ -61,17 +61,22 @@ def push_image(full_image_name: str) -> None:
61
61
  raise RuntimeError("Docker push failed")
62
62
 
63
63
 
64
- def pull_image(full_image_name: str) -> None:
64
+ def pull_image(full_image_name: str, platform: str | None = None) -> None:
65
65
  """
66
66
  Pull a Docker image from the registry.
67
67
 
68
68
  Args:
69
69
  full_image_name: Full image name including registry, repository, and tag
70
+ platform: Optional platform specification (e.g., "linux/amd64")
70
71
 
71
72
  Raises:
72
73
  RuntimeError: If the docker pull command fails
73
74
  """
74
- returncode = _run_and_stream(["docker", "pull", full_image_name])
75
+ cmd = ["docker", "pull"]
76
+ if platform:
77
+ cmd.extend(["--platform", platform])
78
+ cmd.append(full_image_name)
79
+ returncode = _run_and_stream(cmd)
75
80
  if returncode != 0:
76
81
  raise RuntimeError("Docker pull failed")
77
82
 
@@ -95,6 +100,7 @@ def tag_image(source_image: str, target_image: str) -> None:
95
100
  def pull_retag_and_push_image(
96
101
  source_full_image_name: str,
97
102
  target_full_image_name: str,
103
+ platform: str | None = None,
98
104
  ) -> None:
99
105
  """
100
106
  Pull an existing image, retag it, and push to registry.
@@ -107,7 +113,7 @@ def pull_retag_and_push_image(
107
113
  RuntimeError: If the source image doesn't exist or operations fail
108
114
  """
109
115
  if not image_exists(source_full_image_name):
110
- pull_image(source_full_image_name)
116
+ pull_image(source_full_image_name, platform)
111
117
 
112
118
  tag_image(source_full_image_name, target_full_image_name)
113
119
  push_image(target_full_image_name)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: azure-deploy-cli
3
- Version: 1.0.5
3
+ Version: 1.1.1
4
4
  Summary: Python CLI for Azure deployment automation - identity, roles, and container apps management
5
5
  Author-email: decewei <celinew1221@gmail.com>
6
6
  License: Mozilla Public License Version 2.0
@@ -400,15 +400,15 @@ Requires-Dist: python-dotenv==1.2.1
400
400
  Requires-Dist: pydantic==2.12.5
401
401
  Requires-Dist: PyYAML==6.0.3
402
402
  Provides-Extra: dev
403
- Requires-Dist: ruff==0.14.10; extra == "dev"
403
+ Requires-Dist: ruff==0.14.14; extra == "dev"
404
404
  Requires-Dist: mypy==1.19.1; extra == "dev"
405
405
  Requires-Dist: pytest==9.0.2; extra == "dev"
406
406
  Requires-Dist: pytest-asyncio==1.3.0; extra == "dev"
407
- Requires-Dist: coverage==7.13.1; extra == "dev"
407
+ Requires-Dist: coverage==7.13.2; extra == "dev"
408
408
  Requires-Dist: pytest-cov==7.0.0; extra == "dev"
409
- Requires-Dist: commitizen==4.11.0; extra == "dev"
410
- Requires-Dist: pre-commit==4.1.0; extra == "dev"
411
- Requires-Dist: types-setuptools==80.9.0.20251223; extra == "dev"
409
+ Requires-Dist: commitizen==4.12.1; extra == "dev"
410
+ Requires-Dist: pre-commit==4.5.1; extra == "dev"
411
+ Requires-Dist: types-setuptools==80.10.0.20260124; extra == "dev"
412
412
  Requires-Dist: types-PyYAML==6.0.12.20250915; extra == "dev"
413
413
  Dynamic: license-file
414
414
 
@@ -8,13 +8,13 @@ pydantic==2.12.5
8
8
  PyYAML==6.0.3
9
9
 
10
10
  [dev]
11
- ruff==0.14.10
11
+ ruff==0.14.14
12
12
  mypy==1.19.1
13
13
  pytest==9.0.2
14
14
  pytest-asyncio==1.3.0
15
- coverage==7.13.1
15
+ coverage==7.13.2
16
16
  pytest-cov==7.0.0
17
- commitizen==4.11.0
18
- pre-commit==4.1.0
19
- types-setuptools==80.9.0.20251223
17
+ commitizen==4.12.1
18
+ pre-commit==4.5.1
19
+ types-setuptools==80.10.0.20260124
20
20
  types-PyYAML==6.0.12.20250915
@@ -78,7 +78,7 @@ class TestRetagImage:
78
78
  "registry.azurecr.io/myapp:new-tag",
79
79
  )
80
80
 
81
- mock_pull.assert_called_once_with("registry.azurecr.io/myapp:old-tag")
81
+ mock_pull.assert_called_once_with("registry.azurecr.io/myapp:old-tag", None)
82
82
  mock_tag.assert_called_once_with(
83
83
  "registry.azurecr.io/myapp:old-tag", "registry.azurecr.io/myapp:new-tag"
84
84
  )
@@ -168,6 +168,7 @@ class TestDeployRevisionWithRetag:
168
168
  min_replicas=1,
169
169
  max_replicas=3,
170
170
  secret_key_vault_config=mock_secret_config,
171
+ ip_rules=[],
171
172
  )
172
173
 
173
174
  # Verify build_images was called with container_configs
@@ -227,6 +228,7 @@ class TestDeployRevisionWithRetag:
227
228
  min_replicas=1,
228
229
  max_replicas=3,
229
230
  secret_key_vault_config=mock_secret_config,
231
+ ip_rules=[],
230
232
  )
231
233
 
232
234
  @patch("azure_deploy_cli.aca.deploy_aca._wait_for_revision_activation")
@@ -291,6 +293,7 @@ class TestDeployRevisionWithRetag:
291
293
  min_replicas=1,
292
294
  max_replicas=3,
293
295
  secret_key_vault_config=mock_secret_config,
296
+ ip_rules=[],
294
297
  )
295
298
 
296
299
  # Verify build_images was called