Skip to content
This repository was archived by the owner on Nov 1, 2023. It is now read-only.

Commit 883c93a

Browse files
authored
ensure VM IDs are unique before calling Azure reimage/delete APIs (#1023)
1 parent 880039a commit 883c93a

File tree

2 files changed

+15
-13
lines changed

2 files changed

+15
-13
lines changed

src/api-service/__app__/onefuzzlib/azure/vmss.py

+11-9
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import logging
77
import os
8-
from typing import Any, Dict, List, Optional, Union, cast
8+
from typing import Any, Dict, List, Optional, Set, Union, cast
99
from uuid import UUID
1010

1111
from azure.core.exceptions import (
@@ -151,50 +151,52 @@ def check_can_update(name: UUID) -> Any:
151151
return vmss
152152

153153

154-
def reimage_vmss_nodes(name: UUID, vm_ids: List[UUID]) -> Optional[Error]:
154+
def reimage_vmss_nodes(name: UUID, vm_ids: Set[UUID]) -> Optional[Error]:
155155
check_can_update(name)
156156

157157
resource_group = get_base_resource_group()
158158
logging.info("reimaging scaleset VM - name: %s vm_ids:%s", name, vm_ids)
159159
compute_client = get_compute_client()
160160

161-
instance_ids = []
161+
instance_ids = set()
162162
machine_to_id = list_instance_ids(name)
163163
for vm_id in vm_ids:
164164
if vm_id in machine_to_id:
165-
instance_ids.append(machine_to_id[vm_id])
165+
instance_ids.add(machine_to_id[vm_id])
166166
else:
167167
logging.info("unable to find vm_id for %s:%s", name, vm_id)
168168

169169
if instance_ids:
170170
compute_client.virtual_machine_scale_sets.begin_reimage_all(
171171
resource_group,
172172
str(name),
173-
VirtualMachineScaleSetVMInstanceIDs(instance_ids=instance_ids),
173+
VirtualMachineScaleSetVMInstanceIDs(instance_ids=list(instance_ids)),
174174
)
175175
return None
176176

177177

178-
def delete_vmss_nodes(name: UUID, vm_ids: List[UUID]) -> Optional[Error]:
178+
def delete_vmss_nodes(name: UUID, vm_ids: Set[UUID]) -> Optional[Error]:
179179
check_can_update(name)
180180

181181
resource_group = get_base_resource_group()
182182
logging.info("deleting scaleset VM - name: %s vm_ids:%s", name, vm_ids)
183183
compute_client = get_compute_client()
184184

185-
instance_ids = []
185+
instance_ids = set()
186186
machine_to_id = list_instance_ids(name)
187187
for vm_id in vm_ids:
188188
if vm_id in machine_to_id:
189-
instance_ids.append(machine_to_id[vm_id])
189+
instance_ids.add(machine_to_id[vm_id])
190190
else:
191191
logging.info("unable to find vm_id for %s:%s", name, vm_id)
192192

193193
if instance_ids:
194194
compute_client.virtual_machine_scale_sets.begin_delete_instances(
195195
resource_group,
196196
str(name),
197-
VirtualMachineScaleSetVMInstanceRequiredIDs(instance_ids=instance_ids),
197+
VirtualMachineScaleSetVMInstanceRequiredIDs(
198+
instance_ids=list(instance_ids)
199+
),
198200
)
199201
return None
200202

src/api-service/__app__/onefuzzlib/workers/scalesets.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -537,7 +537,7 @@ def delete_nodes(self, nodes: List[Node]) -> None:
537537
)
538538
return
539539

540-
machine_ids = []
540+
machine_ids = set()
541541
for node in nodes:
542542
if node.debug_keep_node:
543543
logging.warning(
@@ -547,7 +547,7 @@ def delete_nodes(self, nodes: List[Node]) -> None:
547547
node.machine_id,
548548
)
549549
else:
550-
machine_ids.append(node.machine_id)
550+
machine_ids.add(node.machine_id)
551551

552552
logging.info(
553553
SCALESET_LOG_PREFIX + "deleting nodes scaleset_id:%s machine_id:%s",
@@ -585,7 +585,7 @@ def reimage_nodes(self, nodes: List[Node]) -> None:
585585
)
586586
return
587587

588-
machine_ids = []
588+
machine_ids = set()
589589
for node in nodes:
590590
if node.debug_keep_node:
591591
logging.warning(
@@ -595,7 +595,7 @@ def reimage_nodes(self, nodes: List[Node]) -> None:
595595
node.machine_id,
596596
)
597597
else:
598-
machine_ids.append(node.machine_id)
598+
machine_ids.add(node.machine_id)
599599

600600
if not machine_ids:
601601
logging.info(

0 commit comments

Comments
 (0)