Island: Add docstrings to AWSService

This commit is contained in:
Mike Salvatore 2022-05-09 12:45:40 -04:00
parent 2da6e023e1
commit cfbe1e5656
1 changed files with 32 additions and 4 deletions

View File

@ -1,5 +1,5 @@
import logging import logging
from typing import Any, Dict, Iterable, Sequence from typing import Any, Iterable, Mapping, Sequence
import boto3 import boto3
import botocore import botocore
@ -17,20 +17,37 @@ logger = logging.getLogger(__name__)
class AWSService: class AWSService:
def __init__(self, aws_instance: AWSInstance): def __init__(self, aws_instance: AWSInstance):
"""
:param aws_instance: An AWSInstance object representing the AWS instance that the Island is
running on
"""
self._aws_instance = aws_instance self._aws_instance = aws_instance
def island_is_running_on_aws(self) -> bool: def island_is_running_on_aws(self) -> bool:
"""
:return: True if the island is running on an AWS instance. False otherwise.
:rtype: bool
"""
return self._aws_instance.is_instance return self._aws_instance.is_instance
@property @property
def island_aws_instance(self) -> AWSInstance: def island_aws_instance(self) -> AWSInstance:
"""
:return: an AWSInstance object representing the AWS instance that the Island is running on.
:rtype: AWSInstance
"""
return self._aws_instance return self._aws_instance
def get_managed_instances(self) -> Sequence[Dict[str, str]]: def get_managed_instances(self) -> Sequence[Mapping[str, str]]:
"""
:return: A sequence of mappings, where each Mapping represents a managed AWS instance that
is accessible from the Island.
:rtype: Sequence[Mapping[str, str]]
"""
raw_managed_instances_info = self._get_raw_managed_instances() raw_managed_instances_info = self._get_raw_managed_instances()
return _filter_relevant_instance_info(raw_managed_instances_info) return _filter_relevant_instance_info(raw_managed_instances_info)
def _get_raw_managed_instances(self) -> Sequence[Dict[str, Any]]: def _get_raw_managed_instances(self) -> Sequence[Mapping[str, Any]]:
""" """
Get the information for all instances with the relevant roles. Get the information for all instances with the relevant roles.
@ -57,7 +74,18 @@ class AWSService:
pass pass
def _filter_relevant_instance_info(raw_managed_instances_info: Sequence[Dict[str, Any]]): def _filter_relevant_instance_info(raw_managed_instances_info: Sequence[Mapping[str, Any]]):
"""
Consume raw instance data from the AWS API and return only those fields that are relevant for
Infection Monkey.
:param raw_managed_instances_info: The output of
DescribeInstanceInformation["InstanceInformation"] from the
AWS API
:return: A sequence of mappings, where each Mapping represents a managed AWS instance that
is accessible from the Island.
:rtype: Sequence[Mapping[str, str]]
"""
return [ return [
{ {
"instance_id": managed_instance[INSTANCE_ID_KEY], "instance_id": managed_instance[INSTANCE_ID_KEY],