forked from p15670423/monkey
Island: improve and fix data directory exception handling/logging
This commit is contained in:
parent
cebd41b264
commit
9ef9ba0024
|
@ -70,7 +70,8 @@ def _setup_data_dir(island_args: IslandCmdArgs) -> Tuple[IslandConfigOptions, st
|
||||||
except json.JSONDecodeError as ex:
|
except json.JSONDecodeError as ex:
|
||||||
print(f"Error loading server config: {ex}")
|
print(f"Error loading server config: {ex}")
|
||||||
exit(1)
|
exit(1)
|
||||||
except IncompatibleDataDirectory:
|
except IncompatibleDataDirectory as ex:
|
||||||
|
print(f"Incompatible data directory: {ex}")
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -29,33 +29,44 @@ def _is_data_dir_old(data_dir_path: Path) -> bool:
|
||||||
dir_exists = data_dir_path.exists()
|
dir_exists = data_dir_path.exists()
|
||||||
|
|
||||||
if is_running_on_docker():
|
if is_running_on_docker():
|
||||||
if _data_dir_version_mismatch_exists(data_dir_path):
|
return _is_docker_data_dir_old(data_dir_path)
|
||||||
error_message = "Found an old volume. "
|
|
||||||
"You must create an empty volume for each docker container "
|
|
||||||
"as specified in setup documentation: "
|
|
||||||
"https://www.guardicore.com/infectionmonkey/docs/setup/docker/"
|
|
||||||
raise IncompatibleDataDirectory(error_message)
|
|
||||||
else:
|
|
||||||
return False
|
|
||||||
|
|
||||||
if not dir_exists or not os.listdir(data_dir_path):
|
if not dir_exists or _is_directory_empty(data_dir_path):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
return _data_dir_version_mismatch_exists(data_dir_path)
|
return _data_dir_version_mismatch_exists(data_dir_path)
|
||||||
|
|
||||||
|
|
||||||
|
def _is_docker_data_dir_old(data_dir_path: Path) -> bool:
|
||||||
|
if _data_dir_version_mismatch_exists(data_dir_path):
|
||||||
|
if _is_directory_empty(data_dir_path):
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
raise IncompatibleDataDirectory(
|
||||||
|
"Found an old volume. "
|
||||||
|
"You must create an empty volume for each docker container "
|
||||||
|
"as specified in setup documentation: "
|
||||||
|
"https://www.guardicore.com/infectionmonkey/docs/setup/docker/"
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def _is_directory_empty(path: Path) -> bool:
|
||||||
|
return not os.listdir(path)
|
||||||
|
|
||||||
|
|
||||||
def _handle_old_data_directory(data_dir_path: Path) -> None:
|
def _handle_old_data_directory(data_dir_path: Path) -> None:
|
||||||
should_delete_data_directory = _prompt_user_to_delete_data_directory(data_dir_path)
|
should_delete_data_directory = _prompt_user_to_delete_data_directory(data_dir_path)
|
||||||
if should_delete_data_directory:
|
if should_delete_data_directory:
|
||||||
shutil.rmtree(data_dir_path)
|
shutil.rmtree(data_dir_path)
|
||||||
logger.info(f"{data_dir_path} was deleted.")
|
logger.info(f"{data_dir_path} was deleted.")
|
||||||
else:
|
else:
|
||||||
logger.error(
|
raise IncompatibleDataDirectory(
|
||||||
"Unable to set up data directory. Please backup and delete the existing data directory"
|
"Unable to set up data directory. Please backup and delete the existing data directory"
|
||||||
f" ({data_dir_path}). Then, try again. To learn how to restore and use a backup, please"
|
f" ({data_dir_path}). Then, try again. To learn how to restore and use a backup, please"
|
||||||
" refer to the documentation."
|
" refer to the documentation."
|
||||||
)
|
)
|
||||||
raise IncompatibleDataDirectory()
|
|
||||||
|
|
||||||
|
|
||||||
def _prompt_user_to_delete_data_directory(data_dir_path: Path) -> bool:
|
def _prompt_user_to_delete_data_directory(data_dir_path: Path) -> bool:
|
||||||
|
|
Loading…
Reference in New Issue