add user confirmation to container reset (#202)

This commit is contained in:
bmc-msft
2020-10-23 19:35:23 -04:00
committed by GitHub
parent 2fe56f94c1
commit 18cc45ac56

View File

@ -54,6 +54,16 @@ def wsl_path(path: str) -> str:
return path
def user_confirmation(message: str) -> bool:
answer: Optional[str] = None
while answer not in ["y", "n"]:
answer = input(message).strip()
if answer == "n":
return False
return True
class Endpoint:
endpoint: str
@ -275,17 +285,25 @@ class Containers(Endpoint):
return self._req_model_list("GET", responses.ContainerInfoBase)
def reset(
self, container_types: Optional[List[enums.ContainerType]] = None
self,
*,
container_types: Optional[
List[enums.ContainerType]
] = enums.ContainerType.reset_defaults(),
yes: bool = False,
) -> None:
"""Reset containers unless specified.
[Caution]: It can lead to unexpected results.
The default conatiners are listed ContainerType.reset_defaults
"""
Reset containers by container type (NOTE: This may cause unexpected issues with existing fuzzing jobs)
"""
if not container_types:
container_types = enums.ContainerType.reset_defaults()
return
if not container_types:
raise Exception("Container type is None")
message = "Confirm deleting container types: %s (specify y or n): " % (
",".join(x.name for x in container_types)
)
if not yes and not user_confirmation(message):
self.logger.warning("not deleting containers")
return
for container in self.list():
if (
@ -1335,16 +1353,6 @@ class Onefuzz:
return data
def _user_confirmation(self, message: str) -> bool:
answer: Optional[str] = None
while answer not in ["y", "n"]:
answer = input(message).strip()
if answer == "n":
self.logger.info("not stopping")
return False
return True
def _delete_components(
self,
containers: bool = False,
@ -1387,7 +1395,7 @@ class Onefuzz:
self.scalesets.shutdown(scaleset.scaleset_id, now=True)
if containers:
self.containers.reset()
self.containers.reset(yes=True)
def reset(
self,
@ -1451,7 +1459,8 @@ class Onefuzz:
message = "Confirm stopping %s (specify y or n): " % (
", ".join(sorted(to_delete))
)
if not yes and not self._user_confirmation(message):
if not yes and not user_confirmation(message):
self.logger.warning("not resetting")
return
self._delete_components(