Add Onefuzz.container.reset to the SDK (#198)

This commit is contained in:
Anshuman Goel 2020-10-23 14:31:12 -07:00 committed by GitHub
parent 6989cf9e34
commit 2fe56f94c1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 45 additions and 26 deletions

View File

@ -274,6 +274,29 @@ class Containers(Endpoint):
self.logger.debug("list containers")
return self._req_model_list("GET", responses.ContainerInfoBase)
def reset(
self, container_types: Optional[List[enums.ContainerType]] = None
) -> None:
"""Reset containers unless specified.
[Caution]: It can lead to unexpected results.
The default conatiners are listed ContainerType.reset_defaults
"""
if not container_types:
container_types = enums.ContainerType.reset_defaults()
if not container_types:
raise Exception("Container type is None")
for container in self.list():
if (
container.metadata
and "container_type" in container.metadata
and enums.ContainerType(container.metadata["container_type"])
in container_types
):
self.logger.info("removing container: %s", container.name)
self.delete(container.name)
class Repro(Endpoint):
""" Interact with Reproduction VMs """
@ -1364,25 +1387,7 @@ class Onefuzz:
self.scalesets.shutdown(scaleset.scaleset_id, now=True)
if containers:
for container in self.containers.list():
if (
container.metadata
and "container_type" in container.metadata
and container.metadata["container_type"]
in [
"analysis",
"coverage",
"crashes",
"inputs",
"no_repro",
"readonly_inputs",
"reports",
"setup",
"unique_reports",
]
):
self.logger.info("removing container: %s", container.name)
self.containers.delete(container.name)
self.containers.reset()
def reset(
self,

View File

@ -189,17 +189,31 @@ class Compare(Enum):
class ContainerType(Enum):
setup = "setup"
analysis = "analysis"
coverage = "coverage"
crashes = "crashes"
inputs = "inputs"
readonly_inputs = "readonly_inputs"
unique_inputs = "unique_inputs"
coverage = "coverage"
reports = "reports"
unique_reports = "unique_reports"
no_repro = "no_repro"
readonly_inputs = "readonly_inputs"
reports = "reports"
setup = "setup"
tools = "tools"
analysis = "analysis"
unique_inputs = "unique_inputs"
unique_reports = "unique_reports"
@classmethod
def reset_defaults(cls) -> List["ContainerType"]:
return [
cls.analysis,
cls.coverage,
cls.crashes,
cls.inputs,
cls.no_repro,
cls.readonly_inputs,
cls.reports,
cls.setup,
cls.unique_reports,
]
class StatsFormat(Enum):