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

Add Onefuzz.container.reset to the SDK #198

Merged
merged 6 commits into from
Oct 23, 2020
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 24 additions & 19 deletions src/cli/onefuzz/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,29 @@ def list(self) -> List[responses.ContainerInfoBase]:
self.logger.debug("list containers")
return self._req_model_list("GET", responses.ContainerInfoBase)

def reset(
anshuman-goel marked this conversation as resolved.
Show resolved Hide resolved
self, container_types: Optional[List[enums.ContainerType]] = None
) -> None:
"""Reset containers unless specified.
[Caution]: It can lead to unexpected results.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bmc-msft The cli is not able to read the lines after first one. Some bug exists over there.

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 """
Expand Down Expand Up @@ -1364,25 +1387,7 @@ def _delete_components(
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,
Expand Down
26 changes: 20 additions & 6 deletions src/pytypes/onefuzztypes/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -189,17 +189,31 @@ class Compare(Enum):


class ContainerType(Enum):
setup = "setup"
analysis = "analysis"
coverage = "coverage"
crashes = "crashes"
inputs = "inputs"
no_repro = "no_repro"
readonly_inputs = "readonly_inputs"
unique_inputs = "unique_inputs"
coverage = "coverage"
reports = "reports"
unique_reports = "unique_reports"
no_repro = "no_repro"
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):
Expand Down