def __init__(self, profile, **kwargs): """Constructor Args: profile (string): AWS profile **kwargs: Multiple arguments Raises: TypeError: Description """ self.log_level = kwargs.pop("log_level", logging.WARNING) self.boto_log_level = kwargs.pop("boto_log_level", logging.WARNING) # Setup logger self.logger = setup_logger(__name__, self.log_level, self.boto_log_level) # Get AWS Session self.session = boto3.Session(profile_name=profile) self.logger.info("AWS Session created") # Get AWS EC2 Resource self.ec2 = self.session.resource("ec2") self.logger.info("AWS EC2 resource created") # Get AWS EC2 Client self.ec2_client = self.ec2.meta.client self.logger.info("AWS EC2 client created") self.eni_mapping = kwargs.pop("eni_mappings", settings.ENI_MAPPING) self.cidr_suffix_ips_number_mapping = kwargs.pop( "cidr_suffix_ips_number_mapping", settings.CIDR_SUFFIX_IPS_NUMBER_MAPPING) self.tag_base_name = kwargs.pop("tag_base_name", settings.TAG_BASE_NAME) self.hvm_only_instance_types = kwargs.pop( "hvm_only_instance_types", settings.HVM_ONLY_INSTANCE_TYPES) if kwargs: raise TypeError("Unexpected **kwargs: %r" % kwargs) self.config = {"vpcs": {}, "instances_groups": []} resources_params = { "ec2": self.ec2, "ec2_client": self.ec2_client, "tag_base_name": self.tag_base_name, "log_level": self.log_level, "boto_log_level": self.boto_log_level } self.vpcs = Vpcs(**resources_params) self.internet_gateways = InternetGateways(**resources_params) self.subnets = Subnets(**resources_params) self.security_groups = SecurityGroups(**resources_params) self.route_tables = RouteTables(**resources_params) self.network_acls = NetworkAcls(**resources_params) self.network_interfaces = NetworkInterfaces(**resources_params) self.instances = Instances(**resources_params)